called portal vault. The dungeon builder bases its behaviour on the level_type_name, which must be set as the "dst" property on the portal leading to the bazaar/portal vault.
Added WELCOME: directive to .des files to allow maps to specify a welcome message when the player enters the level (only relevant to encompass maps).
Readjusted kenku flight speed.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@1941 c06c8d41-db1a-0410-9941-cceddc491573
TLO257LZSB6ZO36STDUEWJBO2LETXFKTFGXELA6Y4BZBVAEIIINAC
6RJVKSL7RVZIZIZIC4TWIYJQ24RUSB346ODS3NYGDHUIRTC4Z5FQC
7Y5HSDFKA5TPLS2TWTRFMQVX6UXUDHXU5MUMXQSDFAIY4THQ3BIQC
SDLKLUNFGVKDS55DDJZCBAVIB7NL3RRYPTACAY65SCUQKV6APFSAC
GQL5SIGBHLU3FMCE54XVGLRY5AZHRM6DUEB722REA2DPLGJSN6EQC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
IVVTHLTTLOP5TSULXJWUSSXHOKYWVU3OWKYVK45A7RIB6V34MYQAC
2ZZD6EYMSPVCXZTICL4VGYGGQRRWDLZ24KBCDBVIYC54OZ4C6GGAC
RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC
W52PCSHX72WAMWKG6L4BPUBVMO6E72KYYBNKAA7554KNOTY6V7WQC
WWR4IDWLXP4XLBWDZBA5GFG7CRKUJQNRK7FFUFOISK6OJTMYQPFQC
ANBVGN4RZOMY5LI4QSHOV2477FN55H353ZYLSVCPTXC7AWWSQZBAC
W5VEC2PBIM5DMU5233HOWAZUEPTGWJRZZIA3H35YYQQW6BTP6XUAC
T4IH76FA5TWHFOZUJFHLQXQJENJHWTUZZP4EGNA7D4GTZY7D4ZKAC
QDTVLBRGHDTRUVT7I3O72K6TMOYAUSAJBZUHGOEFU2RKJNUPWZSQC
JM6GKZ6VMX6FNVOZIDXIV22HGX7YESMIFZFE6EEQVCMFJIEA3FNAC
JDM27QE4HR52AYFSQE763BFF57ANOTF5MXKMO377PP5EXMN7SAOAC
AUXHSGS4EFOPZ6TVZYWNVOUDO7NYKUKE3HBKGQQWTALSVFOE3HAAC
RGHXFBNIULRVRYLBGG5JZDMYVM2E2JJ2Y5KQPMU6PUS3V26G6ZXQC
AFE345BJ7IX2YYYX3I5I6RYLXNWJCFE4WMH6F5JMIR6X7WUP75CAC
RISMOCQM6BKK4XSIRKYLOBB2UPDYJNDAL6OGIIR5GGNZQAK5YSZAC
SW3RLYFNRT3IJBK6LYKHKP2J2YDU7SXQWAJZX7U6S7ICYW43OMNQC
WLX2RQMMOMP2PYPAGJRM4VFD2WTLJTOAZZPPY3MV76FU2EGEJ54QC
XY77S75KH5KV54MZVAPMUC64TVRE2QM2KVJAAGJGCIBGQEC5GUTQC
C22455VGUQOSUX2OORA32LROFQ7NNYDMD2ZDTTUZSAQLXK4AD6QAC
CUNNC574MESEMTTONZ6YB6CJ2S5P6VA3V7Z3OODESWAK37GYOBPAC
ZVK4J5HTKFNOOIVCI62ZWEYGXEE5TYJ65DLYYZAZWTADFSXE62ZAC
3PY3L3A4QRW3Z5Y7SHO4TMVOOP2VNCO27X2MX4DTOP2SADLBQUOAC
3XZOL3FFQZITUJIGDD6B6V6ZYMBN524JKNN6ZPJAXEC7RY433I3QC
NDTQUANX3GZ6HZP5FONYNJUYPD3R2P6SGRC3ICKJ7ZWF3KO23LTAC
ILOED4VB4I6VPAUTR75ZWX6MXDYXB5DO2EDK2UH67O3HNKWV23RQC
HNXKX6ZDQJV33E7UKZOLBYWJMRZ4QLEMXVXJZNRCTOIG2KVRTIEAC
CI5VTLSMB2L5W5ZVKDZEJFUARGSZP2FUSTRFV3MG6U44TDDUYH5AC
const int top = lua_gettop(dlua);
push_fn_args(fn);
const bool res =
dlua.callfn("dlua_marker_method", lua_gettop(dlua) - top, 1);
if (args == -1)
{
const int top = lua_gettop(dlua);
push_fn_args(fn);
args = lua_gettop(dlua) - top;
}
const bool res = dlua.callfn("dlua_marker_method", args, 1);
if (!callfn("describe"))
return make_stringf("error: %s", dlua.error.c_str());
if (!callfn(fn))
return make_stringf("error (%s): %s", fn, dlua.error.c_str());
std::string result;
if (lua_isstring(dlua, -1))
result = lua_tostring(dlua, -1);
return (result);
}
std::string map_lua_marker::debug_describe() const
{
return (call_str_fn("describe"));
}
std::string map_lua_marker::feature_description() const
{
return (call_str_fn("feature_description"));
}
std::string desc;
std::string map_lua_marker::property(const std::string &pname) const
{
lua_stack_cleaner cln(dlua);
push_fn_args("property");
lua_pushstring(dlua, pname.c_str());
if (!callfn("property", false, 4))
return make_stringf("error (prop:%s): %s",
pname.c_str(), dlua.error.c_str());
std::string result;
std::string env_property_at(const coord_def &c, map_marker_type type,
const std::string &key)
{
std::pair<dgn_marker_map::const_iterator, dgn_marker_map::const_iterator>
els = env.markers.equal_range(c);
for (dgn_marker_map::const_iterator i = els.first; i != els.second; ++i)
{
const std::string prop = i->second->property(key);
if (!prop.empty())
return (prop);
}
return ("");
}
map(), mons(), items(), keyspecs(), prelude("dlprelude"),
main("dlmain"), validate("dlvalidate"), veto("dlveto"),
index_only(false), cache_offset(0L)
welcome_messages(), map(), mons(), items(), keyspecs(),
prelude("dlprelude"), main("dlmain"), validate("dlvalidate"),
veto("dlveto"), index_only(false), cache_offset(0L)
feature_description(feat, NUM_TRAPS, false, dtype, need_stop);
feature_description(feat, NUM_TRAPS, dtype, need_stop);
lua_pushstring(ls, s.c_str());
return (1);
}
static int dgn_feature_desc_at(lua_State *ls)
{
const description_level_type dtype =
lua_isnumber(ls, 3)?
static_cast<description_level_type>(luaL_checkint(ls, 3)) :
description_type_by_name(lua_tostring(ls, 3));
const bool need_stop = lua_isboolean(ls, 4)? lua_toboolean(ls, 4) : false;
const std::string s =
feature_description(luaL_checkint(ls, 1), luaL_checkint(ls, 2),
dtype, need_stop);
std::string feature_description(dungeon_feature_type grid,
trap_type trap,
bool temporary,
description_level_type dtype,
bool add_stop)
static std::string feature_do_grammar(description_level_type dtype,
bool add_stop,
bool force_article,
std::string desc)
}
}
}
std::string feature_description(dungeon_feature_type grid,
trap_type trap,
description_level_type dtype,
bool add_stop)
{
std::string desc = raw_feature_description(grid, trap);
return feature_do_grammar(dtype, add_stop, grid_is_trap(grid), desc);
if (temporary)
return ("slowly fading labyrinth entrance");
else
return ("labyrinth entrance");
case DNGN_ENTER_BAZAAR:
if (temporary)
return ("gently fading gateway to a bazaar");
else
return ("gateway to a bazaar");
case DNGN_EXIT_BAZAAR:
return ("exit from the bazaar");
return ("labyrinth entrance");
local tmarker = TimedMarker._new()
tmarker.dur = dur * 10
tmarker.fnum = fnum
tmarker.feat = feat
tmarker.msg = pars.msg
local tmarker = self:_new()
tmarker.dur = dur * 10
tmarker.fnum = fnum
tmarker.feat = feat
tmarker.msg = pars.msg
tmarker.disappear = pars.disappear
if pars.props then
tmarker.props = pars.props
end
function TimedMarker.read(marker, th)
local marker = TimedMarker._new()
marker.dur = file.unmarshall_number(th)
marker.fnum = file.unmarshall_number(th)
marker.feat = file.unmarshall_string(th)
marker.msg = file.unmarshall_fn(th)(th)
return marker
function TimedMarker:read(marker, th)
PortalDescriptor.read(self, marker, th)
self.dur = file.unmarshall_number(th)
self.fnum = file.unmarshall_number(th)
self.feat = file.unmarshall_string(th)
self.disappear = file.unmarshall_meta(th)
self.msg = file.unmarshall_fn(th)(th)
setmetatable(self, TimedMarker)
return self
------------------------------------------------------------------------------
-- lm_desc.lua:
-- Portal descriptor markers.
------------------------------------------------------------------------------
PortalDescriptor = { }
PortalDescriptor.__index = PortalDescriptor
function PortalDescriptor:new(properties)
local pd = { }
setmetatable(pd, self)
pd.props = properties
return pd
end
function PortalDescriptor:write(marker, th)
file.marshall(th, self.desc or '')
lmark.marshall_table(th, self.props)
end
function PortalDescriptor:read(marker, th)
self.desc = file.unmarshall_string(th)
self.props = lmark.unmarshall_table(th)
setmetatable(self, PortalDescriptor)
return self
end
function PortalDescriptor:feature_description(marker)
return self.props.desc
end
function PortalDescriptor:property(marker, pname)
return self.props and self.props[pname] or ''
end
function portal_desc(desc, props)
return PortalDescriptor:new(desc, props)
end
function check_expire_marker(e)
e.messager =
bell_clock_msg { initmsg="You hear coins being counted." }
if not crawl.one_chance_in(3) then
e.marker( [[ O = lua: timed_marker {
low=1000, high=1500, msg=messager }
]] )
else
e.marker("O = lua: one_way_stair()")
end
end
function bazaar_portal()
local messager = bell_clock_msg { initmsg="You hear coins being counted." }
if not crawl.one_chance_in(3) then
local pdesc = 'flickering gateway to a bazaar'
return timed_marker {
low=1000, high=1500, msg=messager,
disappear='The gate to the bazaar disappears!',
props = { desc=pdesc, dst='bazaar' }
}
else
return one_way_stair { desc = 'gateway to a bazaar',
dst = 'bazaar' }
end
end
function bazaar_message(e)
e.welcome("You enter an inter-dimensional bazaar!")
end