--- deliantra/server/random_maps/random_map.h 2010/03/28 22:29:50 1.24 +++ deliantra/server/random_maps/random_map.h 2010/06/30 01:32:57 1.28 @@ -27,24 +27,17 @@ #include "util.h" -struct random_map_params +struct random_map_params : zero_initialised { - char wallstyle[512]; char wall_name[512]; - char floorstyle[512]; char monsterstyle[512]; - char treasurestyle[512]; char layoutstyle[512]; char doorstyle[512]; - char decorstyle[512]; - char miningstyle[512]; shstr origin_map; shstr final_map; - char exitstyle[512]; shstr this_map; char exit_on_final_map[512]; - char *custom; - + int xsize, ysize; int expand2x; int layoutoptions1; @@ -58,21 +51,41 @@ int dungeon_level; int dungeon_depth; - int decoroptions; int orientation; - int origin_y; int origin_x; + int origin_y; uint32_t random_seed; uint64_t total_map_hp; int map_layout_style; - int treasureoptions; int symmetry_used; struct region *region; + HV *hv; + void hv_clone (); // replaces the hv by a clone'd copy (%new_hv = { %hv }) + + shstr_tmp as_shstr () const; + + // fetch something from the options hash + SV *get_sv (const char *option) const; + const_utf8_string get_str (const char *option, const_utf8_string fallback = "") const; + IV get_iv (const char *option, IV fallback = 0) const; + UV get_uv (const char *option, UV fallback = 0) const; + NV get_nv (const char *option, NV fallback = 0) const; + + void set (const char *option, SV *value) const; + void set (const char *option, const_utf8_string value) const; + void set (const char *option, IV value) const; + void set (const char *option, UV value) const; + void set (const char *option, NV value) const; + + void set (const char *option, int value) const { set (option, (IV)value); } + // "private", adjusted sizes int Xsize; int Ysize; + + ~random_map_params (); }; enum { @@ -195,7 +208,20 @@ ::swap (layout.ptr->w , ptr->w ); ::swap (layout.ptr->h , ptr->h ); } + + // for debugging, print layout to stdout + void print (); }; +// utility functions, to use rmg_rndm instead of rndm. +static inline int +rmg_find_free_spot (const object *ob, maptile *m, int x, int y, int start, int stop) +{ + swap (rmg_rndm, rndm); + int i = find_free_spot (ob, m, x, y, start, stop); + swap (rmg_rndm, rndm); + return i; +} + #endif