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.131 by root, Mon Jan 8 18:18:35 2007 UTC vs.
Revision 1.153 by root, Fri Jan 26 20:59:57 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 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 flags &= ~F_BORROWED; 123 sv_unmagic ((SV *)self, PERL_MAGIC_ext);
123 refcnt_inc (); 124 assert (!self);
124 SvREFCNT_dec ((SV *)self);
125 } 125 }
126} 126}
127 127
128// check wether the object really is dead 128// check wether the object really is dead
129void 129void
130attachable::do_check () 130attachable::do_check ()
131{ 131{
132 if (refcnt > 0) 132 if (refcnt_cnt () > 0)
133 return; 133 return;
134 134
135 optimise (); 135 destroy ();
136}
137
138void
139attachable::do_destroy ()
140{
141 invoke (EVENT_ATTACHABLE_DESTROY, DT_END);
142
143 if (cb)
144 {
145 SvREFCNT_dec (cb);
146 cb = 0;
147 }
136 148
137 if (self) 149 if (self)
138 { 150 {
139 if (refcnt + SvREFCNT (self) > 0) 151 hv_clear (self);
140 return; 152 sv_unmagic ((SV *)self, PERL_MAGIC_ext);
141 153 // self is now 0
142 assert (flags & F_BORROWED); 154 assert (!self);//D//TODO remove soon
143
144 flags &= ~F_BORROWED;
145 refcnt_inc ();
146 SvREFCNT_dec (self);
147 self = 0;
148 } 155 }
149
150 if (refcnt > 0)
151 return;
152
153 destroy ();
154}
155
156void
157attachable::do_destroy ()
158{
159 invoke (EVENT_ATTACHABLE_DESTROY, DT_END);
160
161 if (self)
162 hv_clear (self);
163 156
164 mortals.push_back (this); 157 mortals.push_back (this);
165} 158}
166 159
167void 160void
175} 168}
176 169
177void 170void
178attachable::check_mortals () 171attachable::check_mortals ()
179{ 172{
180 for (int i = 0; i < mortals.size (); ) 173 static int i = 0;
174
175 for (;;)
181 { 176 {
177 if (i >= mortals.size ())
178 {
179 i = 0;
180
181 if (mortals.size () > 1000)
182 fprintf (stderr, "mortal queue size (%d) exceeds 1000.\n", (int)mortals.size ());
183
184 break;
185 }
186
182 attachable *obj = mortals [i]; 187 attachable *obj = mortals [i];
183 188
184 obj->refcnt_chk (); // unborrow from perl, if necessary 189 obj->refcnt_chk (); // unborrow from perl, if necessary
185 190
191 //if (obj->refcnt > 0 || obj->self)
186 if (obj->refcnt || obj->self) 192 if (obj->refcnt || obj->self)
187 { 193 {
188#if 0 194//printf ("%p rc %d\n", obj, obj->refcnt_cnt ());//D
189 if (mortals.size() > 5)fprintf (stderr, "%d delaying %d:%p:%s %d (self %p:%d)\n", time(0),i, obj, typeid (*obj).name (),
190 obj->refcnt, obj->self, obj->self ? SvREFCNT(obj->self): - 1);//D
191#endif
192
193 ++i; // further delay freeing 195 ++i; // further delay freeing
196
197 if (!(i & 0x3ff))
198 break;
194 }//D 199 }
195 else 200 else
196 { 201 {
197 //Dfprintf (stderr, "deleteing %d:%p:%s\n", i, obj,typeid (*obj).name ());//D
198 mortals.erase (i); 202 mortals.erase (i);
199 delete obj; 203 delete obj;
200 } 204 }
201 } 205 }
202} 206}
227 231
228static int 232static int
229attachable_free (pTHX_ SV *sv, MAGIC *mg) 233attachable_free (pTHX_ SV *sv, MAGIC *mg)
230{ 234{
231 attachable *at = (attachable *)mg->mg_ptr; 235 attachable *at = (attachable *)mg->mg_ptr;
232 assert (!(at->flags & attachable::F_BORROWED)); 236
237 //TODO: check if transaction behaviour is really required here
238 if (SV *self = (SV *)at->self)
239 {
233 at->self = 0; 240 at->self = 0;
241 SvREFCNT_dec (self);
242 }
243
234 // next line makes sense, but most objects still have refcnt 0 by default 244 // next line makes sense, but most objects still have refcnt 0 by default
235 //at->refcnt_chk (); 245 //at->refcnt_chk ();
236 return 0; 246 return 0;
237} 247}
238 248
247 if (!obj->self) 257 if (!obj->self)
248 { 258 {
249 obj->self = newHV (); 259 obj->self = newHV ();
250 sv_magicext ((SV *)obj->self, 0, PERL_MAGIC_ext, &attachable::vtbl, (char *)obj, 0); 260 sv_magicext ((SV *)obj->self, 0, PERL_MAGIC_ext, &attachable::vtbl, (char *)obj, 0);
251 261
252 // borrow the refcnt from the object
253 obj->flags |= attachable::F_BORROWED;
254 obj->refcnt_dec ();
255
256 // now bless the object _once_ 262 // now bless the object _once_
257 return sv_bless (newRV_inc ((SV *)obj->self), stash); 263 return sv_bless (newRV_inc ((SV *)obj->self), stash);
258 } 264 }
259 else 265 else
266 {
260 return newRV_inc ((SV *)obj->self); 267 SV *sv = newRV_inc ((SV *)obj->self);
268
269 if (Gv_AMG (stash)) // handle overload correctly, as the perl core does not
270 SvAMAGIC_on (sv);
271
272 return sv;
273 }
261} 274}
262 275
263static void 276static void
264clearSVptr (SV *sv) 277clearSVptr (SV *sv)
265{ 278{
318inline SV *to_sv (living * v) { return newSVptr (v, stash_cf_living_wrap); } 331inline SV *to_sv (living * v) { return newSVptr (v, stash_cf_living_wrap); }
319 332
320inline SV *to_sv (object & v) { return to_sv (&v); } 333inline SV *to_sv (object & v) { return to_sv (&v); }
321inline SV *to_sv (living & v) { return to_sv (&v); } 334inline SV *to_sv (living & v) { return to_sv (&v); }
322 335
323//TODO:
324inline SV *to_sv (New_Face * v) { return to_sv (v->name); } 336inline SV *to_sv (facetile * v) { return to_sv (v->name); }
325inline SV *to_sv (treasurelist * v) { return to_sv (v->name); } 337inline SV *to_sv (treasurelist * v) { return to_sv (v->name); }
326 338
327inline SV *to_sv (UUID v) 339inline SV *to_sv (UUID v)
328{ 340{
329 char buf[128]; 341 char buf[128];
354inline void sv_to (SV *sv, attachable * &v) { v = (attachable *)SvPTR_ornull (sv, "cf::attachable"); } 366inline void sv_to (SV *sv, attachable * &v) { v = (attachable *)SvPTR_ornull (sv, "cf::attachable"); }
355inline void sv_to (SV *sv, partylist * &v) { v = (partylist *)SvPTR_ornull (sv, "cf::party"); } 367inline void sv_to (SV *sv, partylist * &v) { v = (partylist *)SvPTR_ornull (sv, "cf::party"); }
356inline void sv_to (SV *sv, region * &v) { v = (region *)SvPTR_ornull (sv, "cf::region"); } 368inline void sv_to (SV *sv, region * &v) { v = (region *)SvPTR_ornull (sv, "cf::region"); }
357inline void sv_to (SV *sv, living * &v) { v = (living *)SvPTR_ornull (sv, "cf::living"); } 369inline void sv_to (SV *sv, living * &v) { v = (living *)SvPTR_ornull (sv, "cf::living"); }
358 370
359inline void sv_to (SV *sv, New_Face * &v) { v = &new_faces[FindFace (SvPV_nolen (sv), 0)]; } //TODO 371inline void sv_to (SV *sv, facetile * &v) { v = &new_faces[FindFace (SvPV_nolen (sv), 0)]; }
360inline void sv_to (SV *sv, treasurelist * &v) { v = find_treasurelist (SvPV_nolen (sv)); } // TODO 372inline void sv_to (SV *sv, treasurelist * &v) { v = find_treasurelist (SvPV_nolen (sv)); }
361 373
362template<class T> 374template<class T>
363inline void sv_to (SV *sv, refptr<T> &v) { T *tmp; sv_to (sv, tmp); v = tmp; } 375inline void sv_to (SV *sv, refptr<T> &v) { T *tmp; sv_to (sv, tmp); v = tmp; }
364 376
365template<int N> 377template<int N>
501 if (!ext->cb) 513 if (!ext->cb)
502 ext->cb = newAV (); 514 ext->cb = newAV ();
503 515
504 return newRV_inc ((SV *)ext->cb); 516 return newRV_inc ((SV *)ext->cb);
505} 517}
506
507#if 0
508void attachable::clear ()
509{
510 if (self)
511 {
512 // disconnect Perl from C, to avoid crashes
513 sv_unmagic (SvRV ((SV *)self), PERL_MAGIC_ext);
514
515 // clear the perl hash, might or might not be a good idea
516 hv_clear ((HV *)SvRV ((SV *)self));
517
518 SvREFCNT_dec (self);
519 self = 0;
520 }
521
522 if (cb)
523 {
524 SvREFCNT_dec (cb);
525 cb = 0;
526 }
527
528 attach = 0;
529}
530#endif
531 518
532///////////////////////////////////////////////////////////////////////////// 519/////////////////////////////////////////////////////////////////////////////
533 520
534extern "C" int cfperl_initPlugin (const char *iversion, f_plug_api gethooksptr) 521extern "C" int cfperl_initPlugin (const char *iversion, f_plug_api gethooksptr)
535{ 522{
830} 817}
831 818
832///////////////////////////////////////////////////////////////////////////// 819/////////////////////////////////////////////////////////////////////////////
833 820
834void 821void
835maptile::emergency_save () 822cfperl_emergency_save ()
836{ 823{
837 CALL_BEGIN (0); 824 CALL_BEGIN (0);
838 CALL_CALL ("cf::map::emergency_save", G_VOID); 825 CALL_CALL ("cf::emergency_save", G_VOID);
839 CALL_END; 826 CALL_END;
840} 827}
841 828
842maptile * 829maptile *
843maptile::find_sync (const char *path, maptile *origin) 830maptile::find_sync (const char *path, maptile *origin)
844{ 831{
845 CALL_BEGIN (2); 832 CALL_BEGIN (2);
846 CALL_ARG (path); 833 CALL_ARG (path);
847 CALL_ARG (origin); 834 CALL_ARG (origin);
848 CALL_CALL ("cf::map::find_sync", G_SCALAR); 835 CALL_CALL ("cf::map::find_sync", G_SCALAR);
836
837 maptile *retval;
838
839 if (count)
840 sv_to (POPs, retval);
841 else
842 retval = 0;
843
844 CALL_END;
845
846 return retval;
847}
848
849maptile *
850maptile::find_async (const char *path, maptile *origin)
851{
852 CALL_BEGIN (2);
853 CALL_ARG (path);
854 CALL_ARG (origin);
855 CALL_CALL ("cf::map::find_async", G_SCALAR);
849 856
850 maptile *retval; 857 maptile *retval;
851 858
852 if (count) 859 if (count)
853 sv_to (POPs, retval); 860 sv_to (POPs, retval);
906void 913void
907iw::alloc () 914iw::alloc ()
908{ 915{
909 pe = GEventAPI->new_idle (0, 0); 916 pe = GEventAPI->new_idle (0, 0);
910 917
918 WaREENTRANT_off (pe);
911 pe->base.callback = (void *)iw_dispatch; 919 pe->base.callback = (void *)iw_dispatch;
912 pe->base.ext_data = (void *)this; 920 pe->base.ext_data = (void *)this;
913} 921}
914 922
915static void iow_dispatch (pe_event *ev) 923static void iow_dispatch (pe_event *ev)
921void 929void
922iow::alloc () 930iow::alloc ()
923{ 931{
924 pe = GEventAPI->new_io (0, 0); 932 pe = GEventAPI->new_io (0, 0);
925 933
934 WaREENTRANT_off (pe);
926 pe->base.callback = (void *)iow_dispatch; 935 pe->base.callback = (void *)iow_dispatch;
927 pe->base.ext_data = (void *)this; 936 pe->base.ext_data = (void *)this;
928 937
929 pe->fd = -1; 938 pe->fd = -1;
930 pe->poll = 0; 939 pe->poll = 0;
1258 const_iv (FLAG_ACTIVATE_ON_RELEASE) 1267 const_iv (FLAG_ACTIVATE_ON_RELEASE)
1259 const_iv (FLAG_IS_WATER) 1268 const_iv (FLAG_IS_WATER)
1260 const_iv (FLAG_CONTENT_ON_GEN) 1269 const_iv (FLAG_CONTENT_ON_GEN)
1261 const_iv (FLAG_IS_A_TEMPLATE) 1270 const_iv (FLAG_IS_A_TEMPLATE)
1262 const_iv (FLAG_IS_BUILDABLE) 1271 const_iv (FLAG_IS_BUILDABLE)
1272 const_iv (FLAG_DESTROY_ON_DEATH)
1273 const_iv (FLAG_NO_MAP_SAVE)
1263 1274
1264 const_iv (NDI_BLACK) 1275 const_iv (NDI_BLACK)
1265 const_iv (NDI_WHITE) 1276 const_iv (NDI_WHITE)
1266 const_iv (NDI_NAVY) 1277 const_iv (NDI_NAVY)
1267 const_iv (NDI_RED) 1278 const_iv (NDI_RED)
1452 const_iv (ATNR_BLIND) 1463 const_iv (ATNR_BLIND)
1453 const_iv (ATNR_INTERNAL) 1464 const_iv (ATNR_INTERNAL)
1454 const_iv (ATNR_LIFE_STEALING) 1465 const_iv (ATNR_LIFE_STEALING)
1455 const_iv (ATNR_DISEASE) 1466 const_iv (ATNR_DISEASE)
1456 1467
1457 const_iv (MAP_FLUSH)
1458 const_iv (MAP_PLAYER_UNIQUE)
1459 const_iv (MAP_BLOCK)
1460 const_iv (MAP_STYLE)
1461 const_iv (MAP_OVERLAY)
1462
1463 const_iv (MAP_IN_MEMORY) 1468 const_iv (MAP_IN_MEMORY)
1464 const_iv (MAP_SWAPPED) 1469 const_iv (MAP_SWAPPED)
1465 const_iv (MAP_LOADING) 1470 const_iv (MAP_LOADING)
1466 const_iv (MAP_SAVING) 1471 const_iv (MAP_SAVING)
1467 1472
1560} 1565}
1561 1566
1562NV floor (NV x) 1567NV floor (NV x)
1563 1568
1564NV ceil (NV x) 1569NV ceil (NV x)
1570
1571NV rndm (...)
1572 CODE:
1573 switch (items)
1574 {
1575 case 0: RETVAL = rndm (); break;
1576 case 1: RETVAL = rndm (SvUV (ST (0))); break;
1577 case 2: RETVAL = rndm (SvIV (ST (0)), SvIV (ST (1))); break;
1578 default: croak ("cf::rndm requires none, one or two parameters."); break;
1579 }
1580 OUTPUT:
1581 RETVAL
1565 1582
1566void server_tick () 1583void server_tick ()
1567 CODE: 1584 CODE:
1568 runtime = SvNVx (sv_runtime); 1585 runtime = SvNVx (sv_runtime);
1569 server_tick (); 1586 server_tick ();
1616 } 1633 }
1617 OUTPUT: RETVAL 1634 OUTPUT: RETVAL
1618 1635
1619void abort () 1636void abort ()
1620 1637
1638void fork_abort (char *cause = "cf::fork_abort")
1639
1640void cleanup (const char *cause, bool make_core = false)
1641
1621void emergency_save () 1642void emergency_save ()
1643
1644UV sv_2watcher (SV *w)
1645 CODE:
1646 RETVAL = (UV)GEventAPI->sv_2watcher (w);
1647 OUTPUT:
1648 RETVAL
1622 1649
1623void _exit (int status = 0) 1650void _exit (int status = 0)
1624 1651
1625#if _POSIX_MEMLOCK 1652#if _POSIX_MEMLOCK
1626 1653
1683 CODE: 1710 CODE:
1684 RETVAL = SvROK (obj) && mg_find (SvRV (obj), PERL_MAGIC_ext); 1711 RETVAL = SvROK (obj) && mg_find (SvRV (obj), PERL_MAGIC_ext);
1685 OUTPUT: 1712 OUTPUT:
1686 RETVAL 1713 RETVAL
1687 1714
1715int mortals_size ()
1716 CODE:
1717 RETVAL = attachable::mortals.size ();
1718 OUTPUT: RETVAL
1719
1720#object *mortals (U32 index)
1721# CODE:
1722# RETVAL = index < attachable::mortals.size () ? attachable::mortals [index] : 0;
1723# OUTPUT: RETVAL
1724
1688INCLUDE: $PERL genacc attachable ../include/cfperl.h | 1725INCLUDE: $PERL genacc attachable ../include/cfperl.h |
1689 1726
1690MODULE = cf PACKAGE = cf::global 1727MODULE = cf PACKAGE = cf::global
1691 1728
1692int invoke (SV *klass, int event, ...) 1729int invoke (SV *klass, int event, ...)
1709 RETVAL = op->invoke ((event_type)event, ARG_AV (av), DT_END); 1746 RETVAL = op->invoke ((event_type)event, ARG_AV (av), DT_END);
1710 OUTPUT: RETVAL 1747 OUTPUT: RETVAL
1711 1748
1712SV *registry (object *op) 1749SV *registry (object *op)
1713 1750
1714void mortals () 1751int objects_size ()
1715 PPCODE: 1752 CODE:
1716 EXTEND (SP, object::mortals.size ());
1717 for (AUTODECL (i, object::mortals.begin ()); i != object::mortals.end (); ++i)
1718 PUSHs (to_sv (*i));
1719
1720object *first ()
1721 CODE:
1722 RETVAL = object::first; 1753 RETVAL = objects.size ();
1754 OUTPUT: RETVAL
1755
1756object *objects (U32 index)
1757 CODE:
1758 RETVAL = index < objects.size () ? objects [index] : 0;
1759 OUTPUT: RETVAL
1760
1761int actives_size ()
1762 CODE:
1763 RETVAL = actives.size ();
1764 OUTPUT: RETVAL
1765
1766object *actives (U32 index)
1767 CODE:
1768 RETVAL = index < actives.size () ? actives [index] : 0;
1723 OUTPUT: RETVAL 1769 OUTPUT: RETVAL
1724 1770
1725# missing properties 1771# missing properties
1726 1772
1727object *head (object *op) 1773object *head (object *op)
1728 PROTOTYPE: $ 1774 PROTOTYPE: $
1729 CODE: 1775 CODE:
1730 RETVAL = op->head ? op->head : op; 1776 RETVAL = op->head_ ();
1731 OUTPUT: RETVAL 1777 OUTPUT: RETVAL
1732 1778
1733int is_head (object *op) 1779int is_head (object *op)
1734 PROTOTYPE: $ 1780 PROTOTYPE: $
1735 CODE: 1781 CODE:
1736 RETVAL = !op->head; 1782 RETVAL = op->head_ () == op;
1737 OUTPUT: RETVAL 1783 OUTPUT: RETVAL
1738 1784
1739void 1785void
1740inv (object *obj) 1786inv (object *obj)
1741 PROTOTYPE: $ 1787 PROTOTYPE: $
1832 1878
1833void drop (object *who, object *op) 1879void drop (object *who, object *op)
1834 1880
1835void pick_up (object *who, object *op) 1881void pick_up (object *who, object *op)
1836 1882
1837object *cf_object_insert_object (object *op, object *container)
1838
1839object *cf_object_insert_in_ob (object *ob, object *where)
1840
1841int cf_object_teleport (object *op, maptile *map, int x, int y) 1883int cf_object_teleport (object *op, maptile *map, int x, int y)
1842 1884
1843void update_object (object *op, int action) 1885void update_object (object *op, int action)
1844 1886
1845object *cf_create_object_by_name (const char *name) 1887object *cf_create_object_by_name (const char *name)
1963 2005
1964void esrv_update_item (object *op, int what, object *item) 2006void esrv_update_item (object *op, int what, object *item)
1965 C_ARGS: what, op, item 2007 C_ARGS: what, op, item
1966 2008
1967void clear_los (object *op) 2009void clear_los (object *op)
1968
1969int command_teleport (object *op, char *params)
1970 2010
1971int command_summon (object *op, char *params) 2011int command_summon (object *op, char *params)
1972 2012
1973int command_arrest (object *op, char *params) 2013int command_arrest (object *op, char *params)
1974 2014
2117 2157
2118object* cf_map_present_arch_by_name (maptile *map, const char* str, int nx, int ny) 2158object* cf_map_present_arch_by_name (maptile *map, const char* str, int nx, int ny)
2119 C_ARGS: str, map, nx, ny 2159 C_ARGS: str, map, nx, ny
2120 2160
2121void 2161void
2122cf_map_normalise (maptile *map, int x, int y) 2162get_map_flags (maptile *map, int x, int y)
2123 PPCODE: 2163 PPCODE:
2124{ 2164{
2125 maptile *nmap = 0; 2165 maptile *nmap = 0;
2126 I16 nx = 0, ny = 0; 2166 I16 nx = 0, ny = 0;
2127 int flags = get_map_flags (map, &nmap, x, y, &nx, &ny); 2167 int flags = get_map_flags (map, &nmap, x, y, &nx, &ny);
2189 CODE: 2229 CODE:
2190 RETVAL = get_name_of_region_for_map (m); 2230 RETVAL = get_name_of_region_for_map (m);
2191 OUTPUT: RETVAL 2231 OUTPUT: RETVAL
2192 2232
2193# worst xs function of my life 2233# worst xs function of my life
2194maptile * 2234bool
2195_create_random_map (\ 2235_create_random_map (\
2196 char *path,\ 2236 maptile *self,\
2197 char *wallstyle,\ 2237 char *wallstyle,\
2198 char *wall_name,\ 2238 char *wall_name,\
2199 char *floorstyle,\ 2239 char *floorstyle,\
2200 char *monsterstyle,\ 2240 char *monsterstyle,\
2201 char *treasurestyle,\ 2241 char *treasurestyle,\
2205 char *origin_map,\ 2245 char *origin_map,\
2206 char *final_map,\ 2246 char *final_map,\
2207 char *exitstyle,\ 2247 char *exitstyle,\
2208 char *this_map,\ 2248 char *this_map,\
2209 char *exit_on_final_map,\ 2249 char *exit_on_final_map,\
2210 int Xsize,\ 2250 int xsize,\
2211 int Ysize,\ 2251 int ysize,\
2212 int expand2x,\ 2252 int expand2x,\
2213 int layoutoptions1,\ 2253 int layoutoptions1,\
2214 int layoutoptions2,\ 2254 int layoutoptions2,\
2215 int layoutoptions3,\ 2255 int layoutoptions3,\
2216 int symmetry,\ 2256 int symmetry,\
2221 int dungeon_depth,\ 2261 int dungeon_depth,\
2222 int decoroptions,\ 2262 int decoroptions,\
2223 int orientation,\ 2263 int orientation,\
2224 int origin_y,\ 2264 int origin_y,\
2225 int origin_x,\ 2265 int origin_x,\
2226 int random_seed,\ 2266 U32 random_seed,\
2227 val64 total_map_hp,\ 2267 val64 total_map_hp,\
2228 int map_layout_style,\ 2268 int map_layout_style,\
2229 int treasureoptions,\ 2269 int treasureoptions,\
2230 int symmetry_used,\ 2270 int symmetry_used,\
2231 region *region\ 2271 region *region,\
2272 char *custom\
2232) 2273)
2233 CODE: 2274 CODE:
2234{ 2275{
2235 random_map_params rmp; 2276 random_map_params rmp;
2236 2277
2246 assign (rmp.exit_on_final_map, exit_on_final_map); 2287 assign (rmp.exit_on_final_map, exit_on_final_map);
2247 2288
2248 rmp.origin_map = origin_map; 2289 rmp.origin_map = origin_map;
2249 rmp.final_map = final_map; 2290 rmp.final_map = final_map;
2250 rmp.this_map = this_map; 2291 rmp.this_map = this_map;
2251 rmp.Xsize = Xsize; 2292 rmp.xsize = xsize;
2252 rmp.Ysize = Ysize; 2293 rmp.ysize = ysize;
2253 rmp.expand2x = expand2x; 2294 rmp.expand2x = expand2x;
2254 rmp.layoutoptions1 = layoutoptions1; 2295 rmp.layoutoptions1 = layoutoptions1;
2255 rmp.layoutoptions2 = layoutoptions2; 2296 rmp.layoutoptions2 = layoutoptions2;
2256 rmp.layoutoptions3 = layoutoptions3; 2297 rmp.layoutoptions3 = layoutoptions3;
2257 rmp.symmetry = symmetry; 2298 rmp.symmetry = symmetry;
2268 rmp.total_map_hp = total_map_hp; 2309 rmp.total_map_hp = total_map_hp;
2269 rmp.map_layout_style = map_layout_style; 2310 rmp.map_layout_style = map_layout_style;
2270 rmp.treasureoptions = treasureoptions; 2311 rmp.treasureoptions = treasureoptions;
2271 rmp.symmetry_used = symmetry_used; 2312 rmp.symmetry_used = symmetry_used;
2272 rmp.region = region; 2313 rmp.region = region;
2314 rmp.custom = custom;
2273 2315
2274 RETVAL = generate_random_map (path, &rmp); 2316 RETVAL = self->generate_random_map (&rmp);
2275} 2317}
2276 OUTPUT: 2318 OUTPUT:
2277 RETVAL 2319 RETVAL
2278 2320
2279MODULE = cf PACKAGE = cf::arch 2321MODULE = cf PACKAGE = cf::arch

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines