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;doresolve_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);elsemprf(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 thendgn._map_envs = { }endlocal name = dgn.name(map)local meta = dgn._map_envs[name]if not meta thenmeta = { }local meta_meta = { __index = _G }setmetatable(meta, meta_meta)dgn._map_envs[name] = metaend-- 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 );