Tweaked savefile format (breaks saves) to allow the game to perform emergency saves if level-generation fails (followers are lost, needs to be fixed).
[1743698] Re-refixed SP_ELF stub (Eino).
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@1659 c06c8d41-db1a-0410-9941-cceddc491573
ZJLJGSB2XSBQU42OFQMXL3EG4CXAQGOYAU6YTV2SAWZEJIPFH2CAC
NOB3FIJ2IOGBSK3EKCRS2WORSMTFPFKOQL4V7BTBLENYYTBUPHQQC
YN7KNAJU72XINIQ3GP7RJLKW3STMN5VWJV2K66ICPZXR2VMYLZPAC
JTTHP2BEYEPBQMSDM7IKANTMKRPY6ACGL2JN4D3OBZ7HFXKAYEGQC
W52PCSHX72WAMWKG6L4BPUBVMO6E72KYYBNKAA7554KNOTY6V7WQC
RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC
B3SRWSFITQMJRVEBHGQQJARETYPSSDV6XKMQSSUTXEHTXRZKIQJQC
SDLKLUNFGVKDS55DDJZCBAVIB7NL3RRYPTACAY65SCUQKV6APFSAC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
5ASC3STDYCNLZFEBN6UTMUCGDETHBR2OCBZCF5VIAZ5RRWLOTDYQC
TV3ZC6WOZKSQQJQN26JIVKCHK6UK7WMDBYZDUYRWEAZ4JB4YVNAAC
W5VEC2PBIM5DMU5233HOWAZUEPTGWJRZZIA3H35YYQQW6BTP6XUAC
5UVDIVD4NSXA52U4QMQIVST3GSZJ2A2YZK3RUEXKPM43YVQ7LI5AC
GBUB77EAYHOFY6GQ5IY3ZSBC7FSQFZZKYNBD5QMCQFIKFLYLWHOQC
KCHX2F3JFEWOZT3WMJVZAAQUU2QSZ5Q7RDCD7WUJ7VE65J52JFUQC
A3CO4KBFTFU3ZSHWRY2OPPX3MMTFV7OUCZGL7Q4Y2FU7JO4AP7MAC
WKTZHLOJ65WSK6FR5MF7RWGSMZ22T2D6LHB66FV3IPGXIBLYHHNAC
NCDWWDJQLAU5ORSAQGZKJJ5E22VTDGGPJMVVBWQFHQ2B3U3UFHDQC
SIKFXNXSAMU6IYRGDG6SWP3LOX6SEE7PDFA7RVQAGG2SLWQ72D2QC
KXUQB3WNWC5IFL6VFWADEPQMMU3VV3NDI5FLA666PGOEWFYUHCLQC
YRY2TC3VHOYE47M23UJGUWDGF7H7WGU7WLWI4SUNM4EDNTGUPHGAC
KFULGQQOHWUTXOM3BXCCYPGGVGGY4Z6265XUFRCBPNLTZAEHJZSQC
SW3RLYFNRT3IJBK6LYKHKP2J2YDU7SXQWAJZX7U6S7ICYW43OMNQC
EOMCPVNQLX3IMLC46EAO67DPBH5KEG2FQTPBLGU62HIRWA3UQ7XQC
RM4LRL6W56XHFWFZIA6LQLR6TPAHVSSXBVCNYZJIZSBPKFWDAJJQC
77H4BWWPPGLM3PLZH4QTAJRXIZTSDVNCOKZE223I437FN2UJ34RQC
QUYSD2DWCIKAAQJGI43EENAWWPA5W33UT3I5WFRSHU6FPSSXTX2AC
XAFFD52IHN6FWFR2TT5F2KCUS7HAVCBI5CWTFMKPQG77GGTGAHLAC
L6O4LGZRKBURVWEY7XRVCSQLJ5RULNBEWMQJ6I2UYVWWB66FM3MQC
SCWXQW5H65OXUP2MEJ2MEEAVPSRJDT3RQGKYCMKVTORS2334PQSQC
3XZOL3FFQZITUJIGDD6B6V6ZYMBN524JKNN6ZPJAXEC7RY433I3QC
ZHFUXYUHS6V47WK2NRH7OU6RX77NRKTXOZC3MND2GG7PEEWSGFTAC
// Try so many times to place the map. This will always succeed
// unless there are conflicting map placements in 'avoid'.
int tries = 10;
do
resolve_map(place.map);
while ((place.orient =
apply_vault_definition(place.map, map, place, avoid)) == MAP_NONE
&& tries-- > 0);
while (tries-- > 0)
{
if (!resolve_map(place.map, mdef))
continue;
place.orient = apply_vault_definition(place.map, map,
place, avoid);
}
bool map_def::test_lua_boolchunk(dlua_chunk &chunk)
{
bool result = true;
dlua_set_map mset(this);
int err = chunk.load(dlua);
if (err == -1000)
return (true);
else if (err)
{
mprf(MSGCH_WARN, "Lua error: %s", validate.orig_error().c_str());
return (true);
}
if (dlua.callfn("dgn_run_map", 1, 1))
dlua.fnreturns("b", &result);
else
mprf(MSGCH_WARN, "Lua error: %s",
rewrite_chunk_errors(dlua.error).c_str());
return (result);
bool load( int stair_taken, load_mode_type load_mode, bool was_a_labyrinth,
int old_level, branch_type where_were_you2 );
bool load( dungeon_feature_type stair_taken, load_mode_type load_mode,
bool was_a_labyrinth, int old_level, branch_type where_were_you2 );
bool load( int stair_taken, load_mode_type load_mode, bool was_a_labyrinth,
int old_level, branch_type old_branch )
bool load( dungeon_feature_type stair_taken, load_mode_type load_mode,
bool was_a_labyrinth, int old_level, branch_type old_branch )
while (!valid_dungeon_level(level_number, level_type));
if (!dgn_level_vetoed && valid_dungeon_level(level_number, level_type))
return;
}
save_game(true,
make_stringf("Unable to generate level for '%s'!",
level_id::current().describe().c_str()).c_str());
}
static bool ensure_vault_placed(bool vault_success)
{
if (!vault_success)
dgn_level_vetoed = true;
return (vault_success);
-- Given an object and a table (dgn), returns a table with functions
-- that translate into method calls on the object. This table is
-- suitable for setfenv() on a function that expects to directly
-- address a map object.
function dgn_map_meta_wrap(obj, tab)
local meta = { }
-- Wraps a map_def into a Lua environment (a table) such that
-- functions run in the environment (with setfenv) can directly
-- address the map with function calls such as name(), tags(), etc.
--
-- This function caches the environments it creates, so that successive runs
-- of Lua chunks from the same map will use the same environment.
function dgn_map_meta_wrap(map, tab)
if not dgn._map_envs then
dgn._map_envs = { }
end
local name = dgn.name(map)
local meta = dgn._map_envs[name]
if not meta then
meta = { }
local meta_meta = { __index = _G }
setmetatable(meta, meta_meta)
dgn._map_envs[name] = meta
end
-- We must set this each time - the map may have the same name, but
-- be a different C++ object.
load( 82, (newc ? LOAD_START_GAME : LOAD_RESTART_GAME), false, 0,
you.where_are_you );
load( you.entering_level? you.transit_stair : DNGN_STONE_STAIRS_DOWN_I,
you.entering_level? LOAD_ENTER_LEVEL :
newc ? LOAD_START_GAME : LOAD_RESTART_GAME,
true, -1, you.where_are_you );