ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/server/cfperl.xs
(Generate patch)

Comparing deliantra/server/server/cfperl.xs (file contents):
Revision 1.129 by root, Sun Jan 7 21:54:59 2007 UTC vs.
Revision 1.150 by root, Tue Jan 23 01:05:18 2007 UTC

101 101
102unordered_vector<attachable *> attachable::mortals; 102unordered_vector<attachable *> attachable::mortals;
103 103
104attachable::~attachable () 104attachable::~attachable ()
105{ 105{
106 assert (!(flags & F_BORROWED)); 106 assert (!self);
107} 107}
108 108
109int
110attachable::refcnt_cnt () const
111{
112 return refcnt + (self ? SvREFCNT (self) : 0);
113}
114
115void
109void attachable::optimise () 116attachable::optimise ()
110{ 117{
111 if (self 118 if (self
112 && SvREFCNT (self) == 1 119 && SvREFCNT (self) == 1
113 && !HvTOTALKEYS (self)) 120 && !HvTOTALKEYS (self))
114 { 121 {
115 flags &= ~F_BORROWED;
116 refcnt_inc (); 122 refcnt_inc ();
117 SvREFCNT_dec ((SV *)self); 123 SvREFCNT_dec ((SV *)self);
118 } 124 }
119} 125}
120 126
121// check wether the object really is dead 127// check wether the object really is dead
122void 128void
123attachable::do_check () 129attachable::do_check ()
124{ 130{
125 if (refcnt > 0) 131 if (refcnt > 0 || refcnt_cnt () > 0)
126 return; 132 return;
127 133
128 optimise (); 134 destroy ();
129 135
130 if (self) 136 if (self)
131 { 137 {
132 if (refcnt + SvREFCNT (self) > 0) 138 hv_clear (self);
133 return; 139 sv_unmagic ((SV *)self, PERL_MAGIC_ext);
134
135 assert (flags & F_BORROWED);
136
137 flags &= ~F_BORROWED;
138 refcnt_inc ();
139 SvREFCNT_dec (self); 140 SvREFCNT_dec (self);
140 self = 0; 141 self = 0;
141 } 142 }
142
143 if (refcnt > 0)
144 return;
145
146 destroy ();
147} 143}
148 144
149void 145void
150attachable::do_destroy () 146attachable::do_destroy ()
151{ 147{
165 161
166 flags |= F_DESTROYED; 162 flags |= F_DESTROYED;
167 do_destroy (); 163 do_destroy ();
168} 164}
169 165
166void
170void attachable::check_mortals () 167attachable::check_mortals ()
171{ 168{
172 for (int i = 0; i < mortals.size (); ) 169 static int i = 0;
170
171 for (;;)
173 { 172 {
173 if (i >= mortals.size ())
174 {
175 i = 0;
176
177 if (mortals.size () > 1000)
178 fprintf (stderr, "mortal queue size (%d) exceeds 1000.\n", mortals.size ());
179
180 break;
181 }
182
174 attachable *obj = mortals [i]; 183 attachable *obj = mortals [i];
175 184
176 obj->refcnt_chk (); // unborrow from perl, if necessary 185 obj->refcnt_chk (); // unborrow from perl, if necessary
177 186
178 if (obj->refcnt || obj->self) 187 if (obj->refcnt > 0 || obj->self)
179 { 188 {
180#if 0 189//printf ("%p rc %d\n", obj, obj->refcnt_cnt ());//D
181 if (mortals.size() > 5)fprintf (stderr, "%d delaying %d:%p:%s %d (self %p:%d)\n", time(0),i, obj, typeid (*obj).name (),
182 obj->refcnt, obj->self, obj->self ? SvREFCNT(obj->self): - 1);//D
183#endif
184
185 ++i; // further delay freeing 190 ++i; // further delay freeing
191
192 if (!(i & 0x3ff))
193 break;
186 }//D 194 }
187 else 195 else
188 { 196 {
189 //Dfprintf (stderr, "deleteing %d:%p:%s\n", i, obj,typeid (*obj).name ());//D
190 mortals.erase (i); 197 mortals.erase (i);
191 delete obj; 198 delete obj;
192 } 199 }
193 } 200 }
194} 201}
219 226
220static int 227static int
221attachable_free (pTHX_ SV *sv, MAGIC *mg) 228attachable_free (pTHX_ SV *sv, MAGIC *mg)
222{ 229{
223 attachable *at = (attachable *)mg->mg_ptr; 230 attachable *at = (attachable *)mg->mg_ptr;
224 assert (!(at->flags & attachable::F_BORROWED));
225 at->self = 0; 231 at->self = 0;
226 // next line makes sense, but most objects still have refcnt 0 by default 232 // next line makes sense, but most objects still have refcnt 0 by default
227 //at->refcnt_chk (); 233 //at->refcnt_chk ();
228 return 0; 234 return 0;
229} 235}
240 { 246 {
241 obj->self = newHV (); 247 obj->self = newHV ();
242 sv_magicext ((SV *)obj->self, 0, PERL_MAGIC_ext, &attachable::vtbl, (char *)obj, 0); 248 sv_magicext ((SV *)obj->self, 0, PERL_MAGIC_ext, &attachable::vtbl, (char *)obj, 0);
243 249
244 // borrow the refcnt from the object 250 // borrow the refcnt from the object
245 obj->flags |= attachable::F_BORROWED; 251 // it is important thta no refcnt_chk is being executed here
246 obj->refcnt_dec (); 252 obj->refcnt_dec ();
247 253
248 // now bless the object _once_ 254 // now bless the object _once_
249 return sv_bless (newRV_inc ((SV *)obj->self), stash); 255 return sv_bless (newRV_inc ((SV *)obj->self), stash);
250 } 256 }
251 else 257 else
258 {
252 return newRV_inc ((SV *)obj->self); 259 SV *sv = newRV_inc ((SV *)obj->self);
260
261 if (Gv_AMG (stash)) // handle overload correctly, as the perl core does not
262 SvAMAGIC_on (sv);
263
264 return sv;
265 }
253} 266}
254 267
255static void 268static void
256clearSVptr (SV *sv) 269clearSVptr (SV *sv)
257{ 270{
310inline SV *to_sv (living * v) { return newSVptr (v, stash_cf_living_wrap); } 323inline SV *to_sv (living * v) { return newSVptr (v, stash_cf_living_wrap); }
311 324
312inline SV *to_sv (object & v) { return to_sv (&v); } 325inline SV *to_sv (object & v) { return to_sv (&v); }
313inline SV *to_sv (living & v) { return to_sv (&v); } 326inline SV *to_sv (living & v) { return to_sv (&v); }
314 327
315//TODO:
316inline SV *to_sv (New_Face * v) { return to_sv (v->name); } 328inline SV *to_sv (facetile * v) { return to_sv (v->name); }
317inline SV *to_sv (treasurelist * v) { return to_sv (v->name); } 329inline SV *to_sv (treasurelist * v) { return to_sv (v->name); }
318 330
319inline SV *to_sv (UUID v) 331inline SV *to_sv (UUID v)
320{ 332{
321 char buf[128]; 333 char buf[128];
346inline void sv_to (SV *sv, attachable * &v) { v = (attachable *)SvPTR_ornull (sv, "cf::attachable"); } 358inline void sv_to (SV *sv, attachable * &v) { v = (attachable *)SvPTR_ornull (sv, "cf::attachable"); }
347inline void sv_to (SV *sv, partylist * &v) { v = (partylist *)SvPTR_ornull (sv, "cf::party"); } 359inline void sv_to (SV *sv, partylist * &v) { v = (partylist *)SvPTR_ornull (sv, "cf::party"); }
348inline void sv_to (SV *sv, region * &v) { v = (region *)SvPTR_ornull (sv, "cf::region"); } 360inline void sv_to (SV *sv, region * &v) { v = (region *)SvPTR_ornull (sv, "cf::region"); }
349inline void sv_to (SV *sv, living * &v) { v = (living *)SvPTR_ornull (sv, "cf::living"); } 361inline void sv_to (SV *sv, living * &v) { v = (living *)SvPTR_ornull (sv, "cf::living"); }
350 362
351inline void sv_to (SV *sv, New_Face * &v) { v = &new_faces[FindFace (SvPV_nolen (sv), 0)]; } //TODO 363inline void sv_to (SV *sv, facetile * &v) { v = &new_faces[FindFace (SvPV_nolen (sv), 0)]; }
352inline void sv_to (SV *sv, treasurelist * &v) { v = find_treasurelist (SvPV_nolen (sv)); } // TODO 364inline void sv_to (SV *sv, treasurelist * &v) { v = find_treasurelist (SvPV_nolen (sv)); }
353 365
354template<class T> 366template<class T>
355inline void sv_to (SV *sv, refptr<T> &v) { T *tmp; sv_to (sv, tmp); v = tmp; } 367inline void sv_to (SV *sv, refptr<T> &v) { T *tmp; sv_to (sv, tmp); v = tmp; }
356 368
357template<int N> 369template<int N>
493 if (!ext->cb) 505 if (!ext->cb)
494 ext->cb = newAV (); 506 ext->cb = newAV ();
495 507
496 return newRV_inc ((SV *)ext->cb); 508 return newRV_inc ((SV *)ext->cb);
497} 509}
498
499#if 0
500void attachable::clear ()
501{
502 if (self)
503 {
504 // disconnect Perl from C, to avoid crashes
505 sv_unmagic (SvRV ((SV *)self), PERL_MAGIC_ext);
506
507 // clear the perl hash, might or might not be a good idea
508 hv_clear ((HV *)SvRV ((SV *)self));
509
510 SvREFCNT_dec (self);
511 self = 0;
512 }
513
514 if (cb)
515 {
516 SvREFCNT_dec (cb);
517 cb = 0;
518 }
519
520 attach = 0;
521}
522#endif
523 510
524///////////////////////////////////////////////////////////////////////////// 511/////////////////////////////////////////////////////////////////////////////
525 512
526extern "C" int cfperl_initPlugin (const char *iversion, f_plug_api gethooksptr) 513extern "C" int cfperl_initPlugin (const char *iversion, f_plug_api gethooksptr)
527{ 514{
822} 809}
823 810
824///////////////////////////////////////////////////////////////////////////// 811/////////////////////////////////////////////////////////////////////////////
825 812
826void 813void
827maptile::emergency_save () 814cfperl_emergency_save ()
828{ 815{
829 CALL_BEGIN (0); 816 CALL_BEGIN (0);
830 CALL_CALL ("cf::map::emergency_save", G_VOID); 817 CALL_CALL ("cf::emergency_save", G_VOID);
831 CALL_END; 818 CALL_END;
832} 819}
833 820
834maptile * 821maptile *
835maptile::find_sync (const char *path, maptile *origin) 822maptile::find_sync (const char *path, maptile *origin)
836{ 823{
837 CALL_BEGIN (2); 824 CALL_BEGIN (2);
838 CALL_ARG (path); 825 CALL_ARG (path);
839 CALL_ARG (origin); 826 CALL_ARG (origin);
840 CALL_CALL ("cf::map::find_sync", G_SCALAR); 827 CALL_CALL ("cf::map::find_sync", G_SCALAR);
828
829 maptile *retval;
830
831 if (count)
832 sv_to (POPs, retval);
833 else
834 retval = 0;
835
836 CALL_END;
837
838 return retval;
839}
840
841maptile *
842maptile::find_async (const char *path, maptile *origin)
843{
844 CALL_BEGIN (2);
845 CALL_ARG (path);
846 CALL_ARG (origin);
847 CALL_CALL ("cf::map::find_async", G_SCALAR);
841 848
842 maptile *retval; 849 maptile *retval;
843 850
844 if (count) 851 if (count)
845 sv_to (POPs, retval); 852 sv_to (POPs, retval);
898void 905void
899iw::alloc () 906iw::alloc ()
900{ 907{
901 pe = GEventAPI->new_idle (0, 0); 908 pe = GEventAPI->new_idle (0, 0);
902 909
910 WaREENTRANT_off (pe);
903 pe->base.callback = (void *)iw_dispatch; 911 pe->base.callback = (void *)iw_dispatch;
904 pe->base.ext_data = (void *)this; 912 pe->base.ext_data = (void *)this;
905} 913}
906 914
907static void iow_dispatch (pe_event *ev) 915static void iow_dispatch (pe_event *ev)
913void 921void
914iow::alloc () 922iow::alloc ()
915{ 923{
916 pe = GEventAPI->new_io (0, 0); 924 pe = GEventAPI->new_io (0, 0);
917 925
926 WaREENTRANT_off (pe);
918 pe->base.callback = (void *)iow_dispatch; 927 pe->base.callback = (void *)iow_dispatch;
919 pe->base.ext_data = (void *)this; 928 pe->base.ext_data = (void *)this;
920 929
921 pe->fd = -1; 930 pe->fd = -1;
922 pe->poll = 0; 931 pe->poll = 0;
1250 const_iv (FLAG_ACTIVATE_ON_RELEASE) 1259 const_iv (FLAG_ACTIVATE_ON_RELEASE)
1251 const_iv (FLAG_IS_WATER) 1260 const_iv (FLAG_IS_WATER)
1252 const_iv (FLAG_CONTENT_ON_GEN) 1261 const_iv (FLAG_CONTENT_ON_GEN)
1253 const_iv (FLAG_IS_A_TEMPLATE) 1262 const_iv (FLAG_IS_A_TEMPLATE)
1254 const_iv (FLAG_IS_BUILDABLE) 1263 const_iv (FLAG_IS_BUILDABLE)
1264 const_iv (FLAG_DESTROY_ON_DEATH)
1265 const_iv (FLAG_NO_MAP_SAVE)
1255 1266
1256 const_iv (NDI_BLACK) 1267 const_iv (NDI_BLACK)
1257 const_iv (NDI_WHITE) 1268 const_iv (NDI_WHITE)
1258 const_iv (NDI_NAVY) 1269 const_iv (NDI_NAVY)
1259 const_iv (NDI_RED) 1270 const_iv (NDI_RED)
1444 const_iv (ATNR_BLIND) 1455 const_iv (ATNR_BLIND)
1445 const_iv (ATNR_INTERNAL) 1456 const_iv (ATNR_INTERNAL)
1446 const_iv (ATNR_LIFE_STEALING) 1457 const_iv (ATNR_LIFE_STEALING)
1447 const_iv (ATNR_DISEASE) 1458 const_iv (ATNR_DISEASE)
1448 1459
1449 const_iv (MAP_FLUSH)
1450 const_iv (MAP_PLAYER_UNIQUE)
1451 const_iv (MAP_BLOCK)
1452 const_iv (MAP_STYLE)
1453 const_iv (MAP_OVERLAY)
1454
1455 const_iv (MAP_IN_MEMORY) 1460 const_iv (MAP_IN_MEMORY)
1456 const_iv (MAP_SWAPPED) 1461 const_iv (MAP_SWAPPED)
1457 const_iv (MAP_LOADING) 1462 const_iv (MAP_LOADING)
1458 const_iv (MAP_SAVING) 1463 const_iv (MAP_SAVING)
1459 1464
1552} 1557}
1553 1558
1554NV floor (NV x) 1559NV floor (NV x)
1555 1560
1556NV ceil (NV x) 1561NV ceil (NV x)
1562
1563NV rndm (...)
1564 CODE:
1565 switch (items)
1566 {
1567 case 0: RETVAL = rndm (); break;
1568 case 1: RETVAL = rndm (SvUV (ST (0))); break;
1569 case 2: RETVAL = rndm (SvIV (ST (0)), SvIV (ST (1))); break;
1570 default: croak ("cf::rndm requires none, one or two parameters."); break;
1571 }
1572 OUTPUT:
1573 RETVAL
1557 1574
1558void server_tick () 1575void server_tick ()
1559 CODE: 1576 CODE:
1560 runtime = SvNVx (sv_runtime); 1577 runtime = SvNVx (sv_runtime);
1561 server_tick (); 1578 server_tick ();
1608 } 1625 }
1609 OUTPUT: RETVAL 1626 OUTPUT: RETVAL
1610 1627
1611void abort () 1628void abort ()
1612 1629
1630void fork_abort (char *cause = "cf::fork_abort")
1631
1632void cleanup (const char *cause, bool make_core = false)
1633
1613void emergency_save () 1634void emergency_save ()
1635
1636UV sv_2watcher (SV *w)
1637 CODE:
1638 RETVAL = (UV)GEventAPI->sv_2watcher (w);
1639 OUTPUT:
1640 RETVAL
1614 1641
1615void _exit (int status = 0) 1642void _exit (int status = 0)
1616 1643
1617#if _POSIX_MEMLOCK 1644#if _POSIX_MEMLOCK
1618 1645
1707 PPCODE: 1734 PPCODE:
1708 EXTEND (SP, object::mortals.size ()); 1735 EXTEND (SP, object::mortals.size ());
1709 for (AUTODECL (i, object::mortals.begin ()); i != object::mortals.end (); ++i) 1736 for (AUTODECL (i, object::mortals.begin ()); i != object::mortals.end (); ++i)
1710 PUSHs (to_sv (*i)); 1737 PUSHs (to_sv (*i));
1711 1738
1712object *first () 1739int objects_size ()
1713 CODE: 1740 CODE:
1714 RETVAL = object::first; 1741 RETVAL = objects.size ();
1742 OUTPUT: RETVAL
1743
1744object *objects (U32 index)
1745 CODE:
1746 RETVAL = index < objects.size () ? objects [index] : 0;
1747 OUTPUT: RETVAL
1748
1749int actives_size ()
1750 CODE:
1751 RETVAL = actives.size ();
1752 OUTPUT: RETVAL
1753
1754object *actives (U32 index)
1755 CODE:
1756 RETVAL = index < actives.size () ? actives [index] : 0;
1715 OUTPUT: RETVAL 1757 OUTPUT: RETVAL
1716 1758
1717# missing properties 1759# missing properties
1718 1760
1719object *head (object *op) 1761object *head (object *op)
1720 PROTOTYPE: $ 1762 PROTOTYPE: $
1721 CODE: 1763 CODE:
1722 RETVAL = op->head ? op->head : op; 1764 RETVAL = op->head_ ();
1723 OUTPUT: RETVAL 1765 OUTPUT: RETVAL
1724 1766
1725int is_head (object *op) 1767int is_head (object *op)
1726 PROTOTYPE: $ 1768 PROTOTYPE: $
1727 CODE: 1769 CODE:
1728 RETVAL = !op->head; 1770 RETVAL = op->head_ () == op;
1729 OUTPUT: RETVAL 1771 OUTPUT: RETVAL
1730 1772
1731void 1773void
1732inv (object *obj) 1774inv (object *obj)
1733 PROTOTYPE: $ 1775 PROTOTYPE: $
1824 1866
1825void drop (object *who, object *op) 1867void drop (object *who, object *op)
1826 1868
1827void pick_up (object *who, object *op) 1869void pick_up (object *who, object *op)
1828 1870
1829object *cf_object_insert_object (object *op, object *container)
1830
1831object *cf_object_insert_in_ob (object *ob, object *where)
1832
1833int cf_object_teleport (object *op, maptile *map, int x, int y) 1871int cf_object_teleport (object *op, maptile *map, int x, int y)
1834 1872
1835void update_object (object *op, int action) 1873void update_object (object *op, int action)
1836 1874
1837object *cf_create_object_by_name (const char *name) 1875object *cf_create_object_by_name (const char *name)
1955 1993
1956void esrv_update_item (object *op, int what, object *item) 1994void esrv_update_item (object *op, int what, object *item)
1957 C_ARGS: what, op, item 1995 C_ARGS: what, op, item
1958 1996
1959void clear_los (object *op) 1997void clear_los (object *op)
1960
1961int command_teleport (object *op, char *params)
1962 1998
1963int command_summon (object *op, char *params) 1999int command_summon (object *op, char *params)
1964 2000
1965int command_arrest (object *op, char *params) 2001int command_arrest (object *op, char *params)
1966 2002
2046list () 2082list ()
2047 PPCODE: 2083 PPCODE:
2048 for_all_players (pl) 2084 for_all_players (pl)
2049 XPUSHs (sv_2mortal (to_sv (pl))); 2085 XPUSHs (sv_2mortal (to_sv (pl)));
2050 2086
2051bool
2052peaceful (player *pl, bool new_setting = 0)
2053 PROTOTYPE: $;$
2054 CODE:
2055 RETVAL = pl->peaceful;
2056 if (items > 1)
2057 pl->peaceful = new_setting;
2058 OUTPUT:
2059 RETVAL
2060
2061living *
2062orig_stats (player *pl)
2063 CODE:
2064 RETVAL = &pl->orig_stats;
2065 OUTPUT: RETVAL
2066
2067living *
2068last_stats (player *pl)
2069 CODE:
2070 RETVAL = &pl->last_stats;
2071 OUTPUT: RETVAL
2072
2073 2087
2074MODULE = cf PACKAGE = cf::map PREFIX = cf_map_ 2088MODULE = cf PACKAGE = cf::map PREFIX = cf_map_
2075 2089
2076int invoke (maptile *map, int event, ...) 2090int invoke (maptile *map, int event, ...)
2077 CODE: 2091 CODE:
2131 2145
2132object* cf_map_present_arch_by_name (maptile *map, const char* str, int nx, int ny) 2146object* cf_map_present_arch_by_name (maptile *map, const char* str, int nx, int ny)
2133 C_ARGS: str, map, nx, ny 2147 C_ARGS: str, map, nx, ny
2134 2148
2135void 2149void
2136cf_map_normalise (maptile *map, int x, int y) 2150get_map_flags (maptile *map, int x, int y)
2137 PPCODE: 2151 PPCODE:
2138{ 2152{
2139 maptile *nmap = 0; 2153 maptile *nmap = 0;
2140 I16 nx = 0, ny = 0; 2154 I16 nx = 0, ny = 0;
2141 int flags = get_map_flags (map, &nmap, x, y, &nx, &ny); 2155 int flags = get_map_flags (map, &nmap, x, y, &nx, &ny);
2203 CODE: 2217 CODE:
2204 RETVAL = get_name_of_region_for_map (m); 2218 RETVAL = get_name_of_region_for_map (m);
2205 OUTPUT: RETVAL 2219 OUTPUT: RETVAL
2206 2220
2207# worst xs function of my life 2221# worst xs function of my life
2208maptile * 2222bool
2209_create_random_map (\ 2223_create_random_map (\
2210 char *path,\ 2224 maptile *self,\
2211 char *wallstyle,\ 2225 char *wallstyle,\
2212 char *wall_name,\ 2226 char *wall_name,\
2213 char *floorstyle,\ 2227 char *floorstyle,\
2214 char *monsterstyle,\ 2228 char *monsterstyle,\
2215 char *treasurestyle,\ 2229 char *treasurestyle,\
2219 char *origin_map,\ 2233 char *origin_map,\
2220 char *final_map,\ 2234 char *final_map,\
2221 char *exitstyle,\ 2235 char *exitstyle,\
2222 char *this_map,\ 2236 char *this_map,\
2223 char *exit_on_final_map,\ 2237 char *exit_on_final_map,\
2224 int Xsize,\ 2238 int xsize,\
2225 int Ysize,\ 2239 int ysize,\
2226 int expand2x,\ 2240 int expand2x,\
2227 int layoutoptions1,\ 2241 int layoutoptions1,\
2228 int layoutoptions2,\ 2242 int layoutoptions2,\
2229 int layoutoptions3,\ 2243 int layoutoptions3,\
2230 int symmetry,\ 2244 int symmetry,\
2235 int dungeon_depth,\ 2249 int dungeon_depth,\
2236 int decoroptions,\ 2250 int decoroptions,\
2237 int orientation,\ 2251 int orientation,\
2238 int origin_y,\ 2252 int origin_y,\
2239 int origin_x,\ 2253 int origin_x,\
2240 int random_seed,\ 2254 U32 random_seed,\
2241 val64 total_map_hp,\ 2255 val64 total_map_hp,\
2242 int map_layout_style,\ 2256 int map_layout_style,\
2243 int treasureoptions,\ 2257 int treasureoptions,\
2244 int symmetry_used,\ 2258 int symmetry_used,\
2245 region *region\ 2259 region *region,\
2260 char *custom\
2246) 2261)
2247 CODE: 2262 CODE:
2248{ 2263{
2249 random_map_params rmp; 2264 random_map_params rmp;
2250 2265
2260 assign (rmp.exit_on_final_map, exit_on_final_map); 2275 assign (rmp.exit_on_final_map, exit_on_final_map);
2261 2276
2262 rmp.origin_map = origin_map; 2277 rmp.origin_map = origin_map;
2263 rmp.final_map = final_map; 2278 rmp.final_map = final_map;
2264 rmp.this_map = this_map; 2279 rmp.this_map = this_map;
2265 rmp.Xsize = Xsize; 2280 rmp.xsize = xsize;
2266 rmp.Ysize = Ysize; 2281 rmp.ysize = ysize;
2267 rmp.expand2x = expand2x; 2282 rmp.expand2x = expand2x;
2268 rmp.layoutoptions1 = layoutoptions1; 2283 rmp.layoutoptions1 = layoutoptions1;
2269 rmp.layoutoptions2 = layoutoptions2; 2284 rmp.layoutoptions2 = layoutoptions2;
2270 rmp.layoutoptions3 = layoutoptions3; 2285 rmp.layoutoptions3 = layoutoptions3;
2271 rmp.symmetry = symmetry; 2286 rmp.symmetry = symmetry;
2282 rmp.total_map_hp = total_map_hp; 2297 rmp.total_map_hp = total_map_hp;
2283 rmp.map_layout_style = map_layout_style; 2298 rmp.map_layout_style = map_layout_style;
2284 rmp.treasureoptions = treasureoptions; 2299 rmp.treasureoptions = treasureoptions;
2285 rmp.symmetry_used = symmetry_used; 2300 rmp.symmetry_used = symmetry_used;
2286 rmp.region = region; 2301 rmp.region = region;
2302 rmp.custom = custom;
2287 2303
2288 RETVAL = generate_random_map (path, &rmp); 2304 RETVAL = self->generate_random_map (&rmp);
2289} 2305}
2290 OUTPUT: 2306 OUTPUT:
2291 RETVAL 2307 RETVAL
2292 2308
2293MODULE = cf PACKAGE = cf::arch 2309MODULE = cf PACKAGE = cf::arch

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines