--- deliantra/server/random_maps/random_map.C 2010/07/03 01:12:45 1.62 +++ deliantra/server/random_maps/random_map.C 2010/07/03 01:49:18 1.63 @@ -31,6 +31,75 @@ #define CEDE coroapi::cede_to_tick () +random_map_params::random_map_params () +{ + hv = newHV (); +} + +random_map_params::random_map_params (HV *hv) +{ + this->hv = (HV *)SvREFCNT_inc_NN ((SV *)hv); + + assign (wall_name, get_str ("wall_name")); + + xsize = get_iv ("xsize"); + ysize = get_iv ("ysize"); + expand2x = get_iv ("expand2x"); + layoutoptions1 = get_iv ("layoutoptions1"); + layoutoptions2 = get_iv ("layoutoptions2"); + layoutoptions3 = get_iv ("layoutoptions3"); + symmetry = get_iv ("symmetry"); + difficulty = get_iv ("difficulty"); + difficulty_given = get_iv ("difficulty_given"); + difficulty_increase = get_nv ("difficulty_increase"); + dungeon_level = get_iv ("dungeon_level"); + dungeon_depth = get_iv ("dungeon_depth"); + orientation = get_iv ("orientation"); + random_seed = get_uv ("random_seed"); + total_map_hp = get_nv ("total_map_hp"); // actually val64, but I am too lazy + map_layout_style = get_iv ("map_layout_style"); + symmetry_used = get_iv ("symmetry_used"); +} + +random_map_params::~random_map_params () +{ + SvREFCNT_dec (hv); +} + +shstr_tmp +random_map_params::as_shstr () const +{ + set ("xsize" , xsize); + set ("ysize" , ysize); + set ("layoutoptions1" , layoutoptions1); + set ("layoutoptions2" , layoutoptions2); + set ("layoutoptions3" , layoutoptions3); + set ("symmetry" , symmetry); + set ("dungeon_depth" , dungeon_depth); + set ("orientation" , orientation); + set ("random_seed" , (UV)random_seed); + set ("difficulty" , difficulty && difficulty_given ? difficulty : 0); + set ("difficulty_increase", difficulty_increase); + set ("dungeon_level" , dungeon_level); + + dynbuf_text buf; + hv_iterinit (hv); + + // does not work for utf-8 keys + while (HE *he = hv_iternext (hv)) + { + STRLEN klen; const char *key = HePV (he, klen); + STRLEN vlen; const char *value = SvPVutf8 (HeVAL (he), vlen); + + buf.fadd (key, klen); + buf << ' '; + buf.fadd (value, vlen); + buf << '\n'; + } + + return shstr (buf); +} + noinline SV * random_map_params::get_sv (const char *option) const { @@ -120,45 +189,6 @@ hv = copy; } -shstr_tmp -random_map_params::as_shstr () const -{ - set ("xsize" , xsize); - set ("ysize" , ysize); - set ("layoutoptions1" , layoutoptions1); - set ("layoutoptions2" , layoutoptions2); - set ("layoutoptions3" , layoutoptions3); - set ("symmetry" , symmetry); - set ("dungeon_depth" , dungeon_depth); - set ("orientation" , orientation); - set ("random_seed" , (UV)random_seed); - set ("difficulty" , difficulty && difficulty_given ? difficulty : 0); - set ("difficulty_increase", difficulty_increase); - set ("dungeon_level" , dungeon_level); - - dynbuf_text buf; - hv_iterinit (hv); - - // does not work for utf-8 keys - while (HE *he = hv_iternext (hv)) - { - STRLEN klen; const char *key = HePV (he, klen); - STRLEN vlen; const char *value = SvPVutf8 (HeVAL (he), vlen); - - buf.fadd (key, klen); - buf << ' '; - buf.fadd (value, vlen); - buf << '\n'; - } - - return shstr (buf); -} - -random_map_params::~random_map_params () -{ - SvREFCNT_dec (hv); -} - bool maptile::generate_random_map (random_map_params *RP) { @@ -247,7 +277,7 @@ make_map_floor (maze, RP->get_str ("floorstyle", ""), RP); /* set region */ - default_region = RP->region; + default_region = region::find (RP->get_str ("region", 0)); CEDE;