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.133 by root, Mon Jan 8 23:36:16 2007 UTC vs.
Revision 1.154 by root, Fri Jan 26 21:44:11 2007 UTC

102unordered_vector<attachable *> attachable::mortals; 102unordered_vector<attachable *> attachable::mortals;
103 103
104attachable::~attachable () 104attachable::~attachable ()
105{ 105{
106 assert (!self); 106 assert (!self);
107 assert (!cb);
107} 108}
108 109
109int 110int
110attachable::refcnt_cnt () const 111attachable::refcnt_cnt () const
111{ 112{
112 return refcnt + (self ? SvREFCNT (self) : 0); 113 return refcnt + (self ? SvREFCNT (self) - 1 : 0);
113} 114}
114 115
115void 116void
116attachable::optimise () 117attachable::optimise ()
117{ 118{
118 if (self 119 if (self
119 && SvREFCNT (self) == 1 120 && SvREFCNT (self) == 1
120 && !HvTOTALKEYS (self)) 121 && !HvTOTALKEYS (self))
121 { 122 {
122 refcnt_inc (); 123 SV *self = (SV *)this->self;
124
125 SvREFCNT_inc (self);
126 sv_unmagic (self, PERL_MAGIC_ext);
123 SvREFCNT_dec ((SV *)self); 127 SvREFCNT_dec (self);
128 assert (!this->self);
124 } 129 }
125} 130}
126 131
127// check wether the object really is dead 132// check wether the object really is dead
128void 133void
129attachable::do_check () 134attachable::do_check ()
130{ 135{
131 if (refcnt > 0 || refcnt_cnt () > 0) 136 if (refcnt_cnt () > 0)
132 return; 137 return;
133 138
134 destroy (); 139 destroy ();
140}
141
142void
143attachable::do_destroy ()
144{
145 invoke (EVENT_ATTACHABLE_DESTROY, DT_END);
146
147 if (cb)
148 {
149 SvREFCNT_dec (cb);
150 cb = 0;
151 }
135 152
136 if (self) 153 if (self)
137 { 154 {
138 hv_clear (self); 155 hv_clear (self);
156
157 SV *self = (SV *)this->self;
158 SvREFCNT_inc (self);
139 sv_unmagic ((SV *)self, PERL_MAGIC_ext); 159 sv_unmagic (self, PERL_MAGIC_ext);
140 SvREFCNT_dec (self); 160 SvREFCNT_dec (self);
141 self = 0; 161 // self is now 0
162 assert (!this->self);//D//TODO remove soon
142 } 163 }
143}
144
145void
146attachable::do_destroy ()
147{
148 invoke (EVENT_ATTACHABLE_DESTROY, DT_END);
149
150 if (self)
151 hv_clear (self);
152 164
153 mortals.push_back (this); 165 mortals.push_back (this);
154} 166}
155 167
156void 168void
164} 176}
165 177
166void 178void
167attachable::check_mortals () 179attachable::check_mortals ()
168{ 180{
169 for (int i = 0; i < mortals.size (); ) 181 static int i = 0;
182
183 for (;;)
170 { 184 {
185 if (i >= mortals.size ())
186 {
187 i = 0;
188
189 if (mortals.size () > 1000)
190 fprintf (stderr, "mortal queue size (%d) exceeds 1000.\n", (int)mortals.size ());
191
192 break;
193 }
194
171 attachable *obj = mortals [i]; 195 attachable *obj = mortals [i];
172 196
173 obj->refcnt_chk (); // unborrow from perl, if necessary 197 obj->refcnt_chk (); // unborrow from perl, if necessary
174 198
199 //if (obj->refcnt > 0 || obj->self)
175 if (obj->refcnt || obj->self) 200 if (obj->refcnt || obj->self)
176 { 201 {
177#if 0 202//printf ("%p rc %d\n", obj, obj->refcnt_cnt ());//D
178 if (mortals.size() > 5)fprintf (stderr, "%d delaying %d:%p:%s %d (self %p:%d)\n", time(0),i, obj, typeid (*obj).name (),
179 obj->refcnt, obj->self, obj->self ? SvREFCNT(obj->self): - 1);//D
180#endif
181
182 ++i; // further delay freeing 203 ++i; // further delay freeing
204
205 if (!(i & 0x3ff))
206 break;
183 }//D 207 }
184 else 208 else
185 { 209 {
186 //Dfprintf (stderr, "deleteing %d:%p:%s\n", i, obj,typeid (*obj).name ());//D
187 mortals.erase (i); 210 mortals.erase (i);
188 delete obj; 211 delete obj;
189 } 212 }
190 } 213 }
191} 214}
216 239
217static int 240static int
218attachable_free (pTHX_ SV *sv, MAGIC *mg) 241attachable_free (pTHX_ SV *sv, MAGIC *mg)
219{ 242{
220 attachable *at = (attachable *)mg->mg_ptr; 243 attachable *at = (attachable *)mg->mg_ptr;
244
245 //TODO: check if transaction behaviour is really required here
246 if (SV *self = (SV *)at->self)
247 {
221 at->self = 0; 248 at->self = 0;
249 SvREFCNT_dec (self);
250 }
251
222 // next line makes sense, but most objects still have refcnt 0 by default 252 // next line makes sense, but most objects still have refcnt 0 by default
223 //at->refcnt_chk (); 253 //at->refcnt_chk ();
224 return 0; 254 return 0;
225} 255}
226 256
235 if (!obj->self) 265 if (!obj->self)
236 { 266 {
237 obj->self = newHV (); 267 obj->self = newHV ();
238 sv_magicext ((SV *)obj->self, 0, PERL_MAGIC_ext, &attachable::vtbl, (char *)obj, 0); 268 sv_magicext ((SV *)obj->self, 0, PERL_MAGIC_ext, &attachable::vtbl, (char *)obj, 0);
239 269
240 // borrow the refcnt from the object
241 // it is important thta no refcnt_chk is being executed here
242 obj->refcnt_dec ();
243
244 // now bless the object _once_ 270 // now bless the object _once_
245 return sv_bless (newRV_inc ((SV *)obj->self), stash); 271 return sv_bless (newRV_inc ((SV *)obj->self), stash);
246 } 272 }
247 else 273 else
274 {
248 return newRV_inc ((SV *)obj->self); 275 SV *sv = newRV_inc ((SV *)obj->self);
276
277 if (Gv_AMG (stash)) // handle overload correctly, as the perl core does not
278 SvAMAGIC_on (sv);
279
280 return sv;
281 }
249} 282}
250 283
251static void 284static void
252clearSVptr (SV *sv) 285clearSVptr (SV *sv)
253{ 286{
306inline SV *to_sv (living * v) { return newSVptr (v, stash_cf_living_wrap); } 339inline SV *to_sv (living * v) { return newSVptr (v, stash_cf_living_wrap); }
307 340
308inline SV *to_sv (object & v) { return to_sv (&v); } 341inline SV *to_sv (object & v) { return to_sv (&v); }
309inline SV *to_sv (living & v) { return to_sv (&v); } 342inline SV *to_sv (living & v) { return to_sv (&v); }
310 343
311//TODO:
312inline SV *to_sv (New_Face * v) { return to_sv (v->name); } 344inline SV *to_sv (facetile * v) { return to_sv (v->name); }
313inline SV *to_sv (treasurelist * v) { return to_sv (v->name); } 345inline SV *to_sv (treasurelist * v) { return to_sv (v->name); }
314 346
315inline SV *to_sv (UUID v) 347inline SV *to_sv (UUID v)
316{ 348{
317 char buf[128]; 349 char buf[128];
342inline void sv_to (SV *sv, attachable * &v) { v = (attachable *)SvPTR_ornull (sv, "cf::attachable"); } 374inline void sv_to (SV *sv, attachable * &v) { v = (attachable *)SvPTR_ornull (sv, "cf::attachable"); }
343inline void sv_to (SV *sv, partylist * &v) { v = (partylist *)SvPTR_ornull (sv, "cf::party"); } 375inline void sv_to (SV *sv, partylist * &v) { v = (partylist *)SvPTR_ornull (sv, "cf::party"); }
344inline void sv_to (SV *sv, region * &v) { v = (region *)SvPTR_ornull (sv, "cf::region"); } 376inline void sv_to (SV *sv, region * &v) { v = (region *)SvPTR_ornull (sv, "cf::region"); }
345inline void sv_to (SV *sv, living * &v) { v = (living *)SvPTR_ornull (sv, "cf::living"); } 377inline void sv_to (SV *sv, living * &v) { v = (living *)SvPTR_ornull (sv, "cf::living"); }
346 378
347inline void sv_to (SV *sv, New_Face * &v) { v = &new_faces[FindFace (SvPV_nolen (sv), 0)]; } //TODO 379inline void sv_to (SV *sv, facetile * &v) { v = &new_faces[FindFace (SvPV_nolen (sv), 0)]; }
348inline void sv_to (SV *sv, treasurelist * &v) { v = find_treasurelist (SvPV_nolen (sv)); } // TODO 380inline void sv_to (SV *sv, treasurelist * &v) { v = find_treasurelist (SvPV_nolen (sv)); }
349 381
350template<class T> 382template<class T>
351inline void sv_to (SV *sv, refptr<T> &v) { T *tmp; sv_to (sv, tmp); v = tmp; } 383inline void sv_to (SV *sv, refptr<T> &v) { T *tmp; sv_to (sv, tmp); v = tmp; }
352 384
353template<int N> 385template<int N>
489 if (!ext->cb) 521 if (!ext->cb)
490 ext->cb = newAV (); 522 ext->cb = newAV ();
491 523
492 return newRV_inc ((SV *)ext->cb); 524 return newRV_inc ((SV *)ext->cb);
493} 525}
494
495#if 0
496void attachable::clear ()
497{
498 if (self)
499 {
500 // disconnect Perl from C, to avoid crashes
501 sv_unmagic (SvRV ((SV *)self), PERL_MAGIC_ext);
502
503 // clear the perl hash, might or might not be a good idea
504 hv_clear ((HV *)SvRV ((SV *)self));
505
506 SvREFCNT_dec (self);
507 self = 0;
508 }
509
510 if (cb)
511 {
512 SvREFCNT_dec (cb);
513 cb = 0;
514 }
515
516 attach = 0;
517}
518#endif
519 526
520///////////////////////////////////////////////////////////////////////////// 527/////////////////////////////////////////////////////////////////////////////
521 528
522extern "C" int cfperl_initPlugin (const char *iversion, f_plug_api gethooksptr) 529extern "C" int cfperl_initPlugin (const char *iversion, f_plug_api gethooksptr)
523{ 530{
818} 825}
819 826
820///////////////////////////////////////////////////////////////////////////// 827/////////////////////////////////////////////////////////////////////////////
821 828
822void 829void
823maptile::emergency_save () 830cfperl_emergency_save ()
824{ 831{
825 CALL_BEGIN (0); 832 CALL_BEGIN (0);
826 CALL_CALL ("cf::map::emergency_save", G_VOID); 833 CALL_CALL ("cf::emergency_save", G_VOID);
827 CALL_END; 834 CALL_END;
828} 835}
829 836
830maptile * 837maptile *
831maptile::find_sync (const char *path, maptile *origin) 838maptile::find_sync (const char *path, maptile *origin)
832{ 839{
833 CALL_BEGIN (2); 840 CALL_BEGIN (2);
834 CALL_ARG (path); 841 CALL_ARG (path);
835 CALL_ARG (origin); 842 CALL_ARG (origin);
836 CALL_CALL ("cf::map::find_sync", G_SCALAR); 843 CALL_CALL ("cf::map::find_sync", G_SCALAR);
844
845 maptile *retval;
846
847 if (count)
848 sv_to (POPs, retval);
849 else
850 retval = 0;
851
852 CALL_END;
853
854 return retval;
855}
856
857maptile *
858maptile::find_async (const char *path, maptile *origin)
859{
860 CALL_BEGIN (2);
861 CALL_ARG (path);
862 CALL_ARG (origin);
863 CALL_CALL ("cf::map::find_async", G_SCALAR);
837 864
838 maptile *retval; 865 maptile *retval;
839 866
840 if (count) 867 if (count)
841 sv_to (POPs, retval); 868 sv_to (POPs, retval);
894void 921void
895iw::alloc () 922iw::alloc ()
896{ 923{
897 pe = GEventAPI->new_idle (0, 0); 924 pe = GEventAPI->new_idle (0, 0);
898 925
926 WaREENTRANT_off (pe);
899 pe->base.callback = (void *)iw_dispatch; 927 pe->base.callback = (void *)iw_dispatch;
900 pe->base.ext_data = (void *)this; 928 pe->base.ext_data = (void *)this;
901} 929}
902 930
903static void iow_dispatch (pe_event *ev) 931static void iow_dispatch (pe_event *ev)
909void 937void
910iow::alloc () 938iow::alloc ()
911{ 939{
912 pe = GEventAPI->new_io (0, 0); 940 pe = GEventAPI->new_io (0, 0);
913 941
942 WaREENTRANT_off (pe);
914 pe->base.callback = (void *)iow_dispatch; 943 pe->base.callback = (void *)iow_dispatch;
915 pe->base.ext_data = (void *)this; 944 pe->base.ext_data = (void *)this;
916 945
917 pe->fd = -1; 946 pe->fd = -1;
918 pe->poll = 0; 947 pe->poll = 0;
1246 const_iv (FLAG_ACTIVATE_ON_RELEASE) 1275 const_iv (FLAG_ACTIVATE_ON_RELEASE)
1247 const_iv (FLAG_IS_WATER) 1276 const_iv (FLAG_IS_WATER)
1248 const_iv (FLAG_CONTENT_ON_GEN) 1277 const_iv (FLAG_CONTENT_ON_GEN)
1249 const_iv (FLAG_IS_A_TEMPLATE) 1278 const_iv (FLAG_IS_A_TEMPLATE)
1250 const_iv (FLAG_IS_BUILDABLE) 1279 const_iv (FLAG_IS_BUILDABLE)
1280 const_iv (FLAG_DESTROY_ON_DEATH)
1281 const_iv (FLAG_NO_MAP_SAVE)
1251 1282
1252 const_iv (NDI_BLACK) 1283 const_iv (NDI_BLACK)
1253 const_iv (NDI_WHITE) 1284 const_iv (NDI_WHITE)
1254 const_iv (NDI_NAVY) 1285 const_iv (NDI_NAVY)
1255 const_iv (NDI_RED) 1286 const_iv (NDI_RED)
1440 const_iv (ATNR_BLIND) 1471 const_iv (ATNR_BLIND)
1441 const_iv (ATNR_INTERNAL) 1472 const_iv (ATNR_INTERNAL)
1442 const_iv (ATNR_LIFE_STEALING) 1473 const_iv (ATNR_LIFE_STEALING)
1443 const_iv (ATNR_DISEASE) 1474 const_iv (ATNR_DISEASE)
1444 1475
1445 const_iv (MAP_FLUSH)
1446 const_iv (MAP_PLAYER_UNIQUE)
1447 const_iv (MAP_BLOCK)
1448 const_iv (MAP_STYLE)
1449 const_iv (MAP_OVERLAY)
1450
1451 const_iv (MAP_IN_MEMORY) 1476 const_iv (MAP_IN_MEMORY)
1452 const_iv (MAP_SWAPPED) 1477 const_iv (MAP_SWAPPED)
1453 const_iv (MAP_LOADING) 1478 const_iv (MAP_LOADING)
1454 const_iv (MAP_SAVING) 1479 const_iv (MAP_SAVING)
1455 1480
1548} 1573}
1549 1574
1550NV floor (NV x) 1575NV floor (NV x)
1551 1576
1552NV ceil (NV x) 1577NV ceil (NV x)
1578
1579NV rndm (...)
1580 CODE:
1581 switch (items)
1582 {
1583 case 0: RETVAL = rndm (); break;
1584 case 1: RETVAL = rndm (SvUV (ST (0))); break;
1585 case 2: RETVAL = rndm (SvIV (ST (0)), SvIV (ST (1))); break;
1586 default: croak ("cf::rndm requires none, one or two parameters."); break;
1587 }
1588 OUTPUT:
1589 RETVAL
1553 1590
1554void server_tick () 1591void server_tick ()
1555 CODE: 1592 CODE:
1556 runtime = SvNVx (sv_runtime); 1593 runtime = SvNVx (sv_runtime);
1557 server_tick (); 1594 server_tick ();
1604 } 1641 }
1605 OUTPUT: RETVAL 1642 OUTPUT: RETVAL
1606 1643
1607void abort () 1644void abort ()
1608 1645
1646void fork_abort (char *cause = "cf::fork_abort")
1647
1648void cleanup (const char *cause, bool make_core = false)
1649
1609void emergency_save () 1650void emergency_save ()
1651
1652UV sv_2watcher (SV *w)
1653 CODE:
1654 RETVAL = (UV)GEventAPI->sv_2watcher (w);
1655 OUTPUT:
1656 RETVAL
1610 1657
1611void _exit (int status = 0) 1658void _exit (int status = 0)
1612 1659
1613#if _POSIX_MEMLOCK 1660#if _POSIX_MEMLOCK
1614 1661
1671 CODE: 1718 CODE:
1672 RETVAL = SvROK (obj) && mg_find (SvRV (obj), PERL_MAGIC_ext); 1719 RETVAL = SvROK (obj) && mg_find (SvRV (obj), PERL_MAGIC_ext);
1673 OUTPUT: 1720 OUTPUT:
1674 RETVAL 1721 RETVAL
1675 1722
1723int mortals_size ()
1724 CODE:
1725 RETVAL = attachable::mortals.size ();
1726 OUTPUT: RETVAL
1727
1728#object *mortals (U32 index)
1729# CODE:
1730# RETVAL = index < attachable::mortals.size () ? attachable::mortals [index] : 0;
1731# OUTPUT: RETVAL
1732
1676INCLUDE: $PERL genacc attachable ../include/cfperl.h | 1733INCLUDE: $PERL genacc attachable ../include/cfperl.h |
1677 1734
1678MODULE = cf PACKAGE = cf::global 1735MODULE = cf PACKAGE = cf::global
1679 1736
1680int invoke (SV *klass, int event, ...) 1737int invoke (SV *klass, int event, ...)
1697 RETVAL = op->invoke ((event_type)event, ARG_AV (av), DT_END); 1754 RETVAL = op->invoke ((event_type)event, ARG_AV (av), DT_END);
1698 OUTPUT: RETVAL 1755 OUTPUT: RETVAL
1699 1756
1700SV *registry (object *op) 1757SV *registry (object *op)
1701 1758
1702void mortals () 1759int objects_size ()
1703 PPCODE: 1760 CODE:
1704 EXTEND (SP, object::mortals.size ());
1705 for (AUTODECL (i, object::mortals.begin ()); i != object::mortals.end (); ++i)
1706 PUSHs (to_sv (*i));
1707
1708object *first ()
1709 CODE:
1710 RETVAL = object::first; 1761 RETVAL = objects.size ();
1762 OUTPUT: RETVAL
1763
1764object *objects (U32 index)
1765 CODE:
1766 RETVAL = index < objects.size () ? objects [index] : 0;
1767 OUTPUT: RETVAL
1768
1769int actives_size ()
1770 CODE:
1771 RETVAL = actives.size ();
1772 OUTPUT: RETVAL
1773
1774object *actives (U32 index)
1775 CODE:
1776 RETVAL = index < actives.size () ? actives [index] : 0;
1711 OUTPUT: RETVAL 1777 OUTPUT: RETVAL
1712 1778
1713# missing properties 1779# missing properties
1714 1780
1715object *head (object *op) 1781object *head (object *op)
1716 PROTOTYPE: $ 1782 PROTOTYPE: $
1717 CODE: 1783 CODE:
1718 RETVAL = op->head ? op->head : op; 1784 RETVAL = op->head_ ();
1719 OUTPUT: RETVAL 1785 OUTPUT: RETVAL
1720 1786
1721int is_head (object *op) 1787int is_head (object *op)
1722 PROTOTYPE: $ 1788 PROTOTYPE: $
1723 CODE: 1789 CODE:
1724 RETVAL = !op->head; 1790 RETVAL = op->head_ () == op;
1725 OUTPUT: RETVAL 1791 OUTPUT: RETVAL
1726 1792
1727void 1793void
1728inv (object *obj) 1794inv (object *obj)
1729 PROTOTYPE: $ 1795 PROTOTYPE: $
1820 1886
1821void drop (object *who, object *op) 1887void drop (object *who, object *op)
1822 1888
1823void pick_up (object *who, object *op) 1889void pick_up (object *who, object *op)
1824 1890
1825object *cf_object_insert_object (object *op, object *container)
1826
1827object *cf_object_insert_in_ob (object *ob, object *where)
1828
1829int cf_object_teleport (object *op, maptile *map, int x, int y) 1891int cf_object_teleport (object *op, maptile *map, int x, int y)
1830 1892
1831void update_object (object *op, int action) 1893void update_object (object *op, int action)
1832 1894
1833object *cf_create_object_by_name (const char *name) 1895object *cf_create_object_by_name (const char *name)
1951 2013
1952void esrv_update_item (object *op, int what, object *item) 2014void esrv_update_item (object *op, int what, object *item)
1953 C_ARGS: what, op, item 2015 C_ARGS: what, op, item
1954 2016
1955void clear_los (object *op) 2017void clear_los (object *op)
1956
1957int command_teleport (object *op, char *params)
1958 2018
1959int command_summon (object *op, char *params) 2019int command_summon (object *op, char *params)
1960 2020
1961int command_arrest (object *op, char *params) 2021int command_arrest (object *op, char *params)
1962 2022
2105 2165
2106object* cf_map_present_arch_by_name (maptile *map, const char* str, int nx, int ny) 2166object* cf_map_present_arch_by_name (maptile *map, const char* str, int nx, int ny)
2107 C_ARGS: str, map, nx, ny 2167 C_ARGS: str, map, nx, ny
2108 2168
2109void 2169void
2110cf_map_normalise (maptile *map, int x, int y) 2170get_map_flags (maptile *map, int x, int y)
2111 PPCODE: 2171 PPCODE:
2112{ 2172{
2113 maptile *nmap = 0; 2173 maptile *nmap = 0;
2114 I16 nx = 0, ny = 0; 2174 I16 nx = 0, ny = 0;
2115 int flags = get_map_flags (map, &nmap, x, y, &nx, &ny); 2175 int flags = get_map_flags (map, &nmap, x, y, &nx, &ny);
2177 CODE: 2237 CODE:
2178 RETVAL = get_name_of_region_for_map (m); 2238 RETVAL = get_name_of_region_for_map (m);
2179 OUTPUT: RETVAL 2239 OUTPUT: RETVAL
2180 2240
2181# worst xs function of my life 2241# worst xs function of my life
2182maptile * 2242bool
2183_create_random_map (\ 2243_create_random_map (\
2184 char *path,\ 2244 maptile *self,\
2185 char *wallstyle,\ 2245 char *wallstyle,\
2186 char *wall_name,\ 2246 char *wall_name,\
2187 char *floorstyle,\ 2247 char *floorstyle,\
2188 char *monsterstyle,\ 2248 char *monsterstyle,\
2189 char *treasurestyle,\ 2249 char *treasurestyle,\
2193 char *origin_map,\ 2253 char *origin_map,\
2194 char *final_map,\ 2254 char *final_map,\
2195 char *exitstyle,\ 2255 char *exitstyle,\
2196 char *this_map,\ 2256 char *this_map,\
2197 char *exit_on_final_map,\ 2257 char *exit_on_final_map,\
2198 int Xsize,\ 2258 int xsize,\
2199 int Ysize,\ 2259 int ysize,\
2200 int expand2x,\ 2260 int expand2x,\
2201 int layoutoptions1,\ 2261 int layoutoptions1,\
2202 int layoutoptions2,\ 2262 int layoutoptions2,\
2203 int layoutoptions3,\ 2263 int layoutoptions3,\
2204 int symmetry,\ 2264 int symmetry,\
2209 int dungeon_depth,\ 2269 int dungeon_depth,\
2210 int decoroptions,\ 2270 int decoroptions,\
2211 int orientation,\ 2271 int orientation,\
2212 int origin_y,\ 2272 int origin_y,\
2213 int origin_x,\ 2273 int origin_x,\
2214 int random_seed,\ 2274 U32 random_seed,\
2215 val64 total_map_hp,\ 2275 val64 total_map_hp,\
2216 int map_layout_style,\ 2276 int map_layout_style,\
2217 int treasureoptions,\ 2277 int treasureoptions,\
2218 int symmetry_used,\ 2278 int symmetry_used,\
2219 region *region\ 2279 region *region,\
2280 char *custom\
2220) 2281)
2221 CODE: 2282 CODE:
2222{ 2283{
2223 random_map_params rmp; 2284 random_map_params rmp;
2224 2285
2234 assign (rmp.exit_on_final_map, exit_on_final_map); 2295 assign (rmp.exit_on_final_map, exit_on_final_map);
2235 2296
2236 rmp.origin_map = origin_map; 2297 rmp.origin_map = origin_map;
2237 rmp.final_map = final_map; 2298 rmp.final_map = final_map;
2238 rmp.this_map = this_map; 2299 rmp.this_map = this_map;
2239 rmp.Xsize = Xsize; 2300 rmp.xsize = xsize;
2240 rmp.Ysize = Ysize; 2301 rmp.ysize = ysize;
2241 rmp.expand2x = expand2x; 2302 rmp.expand2x = expand2x;
2242 rmp.layoutoptions1 = layoutoptions1; 2303 rmp.layoutoptions1 = layoutoptions1;
2243 rmp.layoutoptions2 = layoutoptions2; 2304 rmp.layoutoptions2 = layoutoptions2;
2244 rmp.layoutoptions3 = layoutoptions3; 2305 rmp.layoutoptions3 = layoutoptions3;
2245 rmp.symmetry = symmetry; 2306 rmp.symmetry = symmetry;
2256 rmp.total_map_hp = total_map_hp; 2317 rmp.total_map_hp = total_map_hp;
2257 rmp.map_layout_style = map_layout_style; 2318 rmp.map_layout_style = map_layout_style;
2258 rmp.treasureoptions = treasureoptions; 2319 rmp.treasureoptions = treasureoptions;
2259 rmp.symmetry_used = symmetry_used; 2320 rmp.symmetry_used = symmetry_used;
2260 rmp.region = region; 2321 rmp.region = region;
2322 rmp.custom = custom;
2261 2323
2262 RETVAL = generate_random_map (path, &rmp); 2324 RETVAL = self->generate_random_map (&rmp);
2263} 2325}
2264 OUTPUT: 2326 OUTPUT:
2265 RETVAL 2327 RETVAL
2266 2328
2267MODULE = cf PACKAGE = cf::arch 2329MODULE = cf PACKAGE = cf::arch

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines