map_lua_marker::parse_marker() by prefixing the Lua string with "lua_mapless:" rather than "lua:".
Fog machines can be created and placed from within C code via place_fog_machine().
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@2843 c06c8d41-db1a-0410-9941-cceddc491573
Y5GWVQ5SM7DJEAPFOBPMMJH4D3NXBB2MPONSJUMG3KIQMBVGEE6AC ZLQAAP55CJ77XIJN3DZVPT4GTTVLIBFJLIJJKI6L5UBSHX7VUK6AC WBAFNYODKTL3YSG3UOJITBJSTFYGJLIWKRNK6NMGIIP5TPC2BDGQC 7Y5HSDFKA5TPLS2TWTRFMQVX6UXUDHXU5MUMXQSDFAIY4THQ3BIQC GQL5SIGBHLU3FMCE54XVGLRY5AZHRM6DUEB722REA2DPLGJSN6EQC TLO257LZSB6ZO36STDUEWJBO2LETXFKTFGXELA6Y4BZBVAEIIINAC QKGDOYIYKE6B36ION5O2DRW65DWWPZMYNWJVH7LJJ7FPGGM2MYAQC K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC ZP2KE7A2LE7Z2S7AC45WE4CXDSEVDTWIMV2EM4IBUKXYJIDU6R7QC if (dlua.loadstring(("return " + s).c_str(), "lua_marker"))mprf(MSGCH_WARN, "lua_marker load error: %s", dlua.error.c_str());if (!dlua.callfn("dgn_run_map", 1, 1))mprf(MSGCH_WARN, "lua_marker exec error: %s", dlua.error.c_str());
if (mapdef_marker){if (dlua.loadstring(("return " + s).c_str(), "lua_marker"))mprf(MSGCH_WARN, "lua_marker load error: %s", dlua.error.c_str());if (!dlua.callfn("dgn_run_map", 1, 1))mprf(MSGCH_WARN, "lua_marker exec error: %s", dlua.error.c_str());}else{if (dlua.execstring(("return " + s).c_str(), "lua_marker_mapless", 1))mprf(MSGCH_WARN, "lua_marker_mapless exec error: %s",dlua.error.c_str());}
std::string raw = s;strip_tag(raw, "lua:", true);map_lua_marker *mark = new map_lua_marker(raw, ctx);
map_lua_marker *mark = new map_lua_marker(raw, ctx, mapdef_marker);
function fog_machine_geyser(cloud_type, size, power)return FogMachine:new {cloud_type = cloud_type, pow_max = power, size = size,delay_min = power , delay_max = power * 2}endfunction fog_machine_spread(cloud_type, size, power)return FogMachine:new {cloud_type = cloud_type, pow_max = power, spread_rate = size,size = 1, delay_min = 5, delay_max = 15}endfunction fog_machine_brownian(cloud_type, size, power)return FogMachine:new {cloud_type = cloud_type, size = 1, pow_max = power,walk_dist = size, delay_min = 1, delay_max = power / size}end
}void place_fog_machine(fog_machine_type fm_type, cloud_type cl_type,int x, int y, int size, int power){const char* fog_types[] = {"geyser","spread","brownian"};try{char buf [160];sprintf(buf, "lua_mapless:fog_machine_%s(\"%s\", %d, %d)",fog_types[fm_type], cloud_name(cl_type).c_str(),size, power);map_marker *mark = map_lua_marker::parse_marker(buf, "");if (mark == NULL){mprf(MSGCH_DIAGNOSTICS, "Unable to parse fog machine from '%s'",buf);return;}mark->pos = coord_def(x, y);env.markers.add(mark);}catch (const std::string &err){mprf(MSGCH_DIAGNOSTICS, "Error while making fog machine: %s",err.c_str());}