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
}
end
function 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
}
end
function 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());
}