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.132 by root, Mon Jan 8 20:59:15 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 if (flags & F_BORROWED) 154 assert (!self);//D//TODO remove soon
143 {
144 flags &= ~F_BORROWED;
145 refcnt_inc ();
146 SvREFCNT_dec (self);
147 }
148
149 if (self)
150 if (refcnt + SvREFCNT (self) > 0)
151 return;
152 } 155 }
153
154 if (refcnt > 0)
155 return;
156
157 destroy ();
158}
159
160void
161attachable::do_destroy ()
162{
163 invoke (EVENT_ATTACHABLE_DESTROY, DT_END);
164
165 if (self)
166 hv_clear (self);
167 156
168 mortals.push_back (this); 157 mortals.push_back (this);
169} 158}
170 159
171void 160void
179} 168}
180 169
181void 170void
182attachable::check_mortals () 171attachable::check_mortals ()
183{ 172{
184 for (int i = 0; i < mortals.size (); ) 173 static int i = 0;
174
175 for (;;)
185 { 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
186 attachable *obj = mortals [i]; 187 attachable *obj = mortals [i];
187 188
188 obj->refcnt_chk (); // unborrow from perl, if necessary 189 obj->refcnt_chk (); // unborrow from perl, if necessary
189 190
191 //if (obj->refcnt > 0 || obj->self)
190 if (obj->refcnt || obj->self) 192 if (obj->refcnt || obj->self)
191 { 193 {
192#if 0 194//printf ("%p rc %d\n", obj, obj->refcnt_cnt ());//D
193 if (mortals.size() > 5)fprintf (stderr, "%d delaying %d:%p:%s %d (self %p:%d)\n", time(0),i, obj, typeid (*obj).name (),
194 obj->refcnt, obj->self, obj->self ? SvREFCNT(obj->self): - 1);//D
195#endif
196
197 ++i; // further delay freeing 195 ++i; // further delay freeing
196
197 if (!(i & 0x3ff))
198 break;
198 }//D 199 }
199 else 200 else
200 { 201 {
201 //Dfprintf (stderr, "deleteing %d:%p:%s\n", i, obj,typeid (*obj).name ());//D
202 mortals.erase (i); 202 mortals.erase (i);
203 delete obj; 203 delete obj;
204 } 204 }
205 } 205 }
206} 206}
231 231
232static int 232static int
233attachable_free (pTHX_ SV *sv, MAGIC *mg) 233attachable_free (pTHX_ SV *sv, MAGIC *mg)
234{ 234{
235 attachable *at = (attachable *)mg->mg_ptr; 235 attachable *at = (attachable *)mg->mg_ptr;
236 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 {
237 at->self = 0; 240 at->self = 0;
241 SvREFCNT_dec (self);
242 }
243
238 // 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
239 //at->refcnt_chk (); 245 //at->refcnt_chk ();
240 return 0; 246 return 0;
241} 247}
242 248
251 if (!obj->self) 257 if (!obj->self)
252 { 258 {
253 obj->self = newHV (); 259 obj->self = newHV ();
254 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);
255 261
256 // borrow the refcnt from the object
257 obj->flags |= attachable::F_BORROWED;
258 obj->refcnt_dec ();
259
260 // now bless the object _once_ 262 // now bless the object _once_
261 return sv_bless (newRV_inc ((SV *)obj->self), stash); 263 return sv_bless (newRV_inc ((SV *)obj->self), stash);
262 } 264 }
263 else 265 else
266 {
264 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 }
265} 274}
266 275
267static void 276static void
268clearSVptr (SV *sv) 277clearSVptr (SV *sv)
269{ 278{
322inline 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); }
323 332
324inline SV *to_sv (object & v) { return to_sv (&v); } 333inline SV *to_sv (object & v) { return to_sv (&v); }
325inline SV *to_sv (living & v) { return to_sv (&v); } 334inline SV *to_sv (living & v) { return to_sv (&v); }
326 335
327//TODO:
328inline SV *to_sv (New_Face * v) { return to_sv (v->name); } 336inline SV *to_sv (facetile * v) { return to_sv (v->name); }
329inline SV *to_sv (treasurelist * v) { return to_sv (v->name); } 337inline SV *to_sv (treasurelist * v) { return to_sv (v->name); }
330 338
331inline SV *to_sv (UUID v) 339inline SV *to_sv (UUID v)
332{ 340{
333 char buf[128]; 341 char buf[128];
358inline 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"); }
359inline 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"); }
360inline 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"); }
361inline 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"); }
362 370
363inline 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)]; }
364inline 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)); }
365 373
366template<class T> 374template<class T>
367inline 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; }
368 376
369template<int N> 377template<int N>
505 if (!ext->cb) 513 if (!ext->cb)
506 ext->cb = newAV (); 514 ext->cb = newAV ();
507 515
508 return newRV_inc ((SV *)ext->cb); 516 return newRV_inc ((SV *)ext->cb);
509} 517}
510
511#if 0
512void attachable::clear ()
513{
514 if (self)
515 {
516 // disconnect Perl from C, to avoid crashes
517 sv_unmagic (SvRV ((SV *)self), PERL_MAGIC_ext);
518
519 // clear the perl hash, might or might not be a good idea
520 hv_clear ((HV *)SvRV ((SV *)self));
521
522 SvREFCNT_dec (self);
523 self = 0;
524 }
525
526 if (cb)
527 {
528 SvREFCNT_dec (cb);
529 cb = 0;
530 }
531
532 attach = 0;
533}
534#endif
535 518
536///////////////////////////////////////////////////////////////////////////// 519/////////////////////////////////////////////////////////////////////////////
537 520
538extern "C" int cfperl_initPlugin (const char *iversion, f_plug_api gethooksptr) 521extern "C" int cfperl_initPlugin (const char *iversion, f_plug_api gethooksptr)
539{ 522{
834} 817}
835 818
836///////////////////////////////////////////////////////////////////////////// 819/////////////////////////////////////////////////////////////////////////////
837 820
838void 821void
839maptile::emergency_save () 822cfperl_emergency_save ()
840{ 823{
841 CALL_BEGIN (0); 824 CALL_BEGIN (0);
842 CALL_CALL ("cf::map::emergency_save", G_VOID); 825 CALL_CALL ("cf::emergency_save", G_VOID);
843 CALL_END; 826 CALL_END;
844} 827}
845 828
846maptile * 829maptile *
847maptile::find_sync (const char *path, maptile *origin) 830maptile::find_sync (const char *path, maptile *origin)
848{ 831{
849 CALL_BEGIN (2); 832 CALL_BEGIN (2);
850 CALL_ARG (path); 833 CALL_ARG (path);
851 CALL_ARG (origin); 834 CALL_ARG (origin);
852 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);
853 856
854 maptile *retval; 857 maptile *retval;
855 858
856 if (count) 859 if (count)
857 sv_to (POPs, retval); 860 sv_to (POPs, retval);
910void 913void
911iw::alloc () 914iw::alloc ()
912{ 915{
913 pe = GEventAPI->new_idle (0, 0); 916 pe = GEventAPI->new_idle (0, 0);
914 917
918 WaREENTRANT_off (pe);
915 pe->base.callback = (void *)iw_dispatch; 919 pe->base.callback = (void *)iw_dispatch;
916 pe->base.ext_data = (void *)this; 920 pe->base.ext_data = (void *)this;
917} 921}
918 922
919static void iow_dispatch (pe_event *ev) 923static void iow_dispatch (pe_event *ev)
925void 929void
926iow::alloc () 930iow::alloc ()
927{ 931{
928 pe = GEventAPI->new_io (0, 0); 932 pe = GEventAPI->new_io (0, 0);
929 933
934 WaREENTRANT_off (pe);
930 pe->base.callback = (void *)iow_dispatch; 935 pe->base.callback = (void *)iow_dispatch;
931 pe->base.ext_data = (void *)this; 936 pe->base.ext_data = (void *)this;
932 937
933 pe->fd = -1; 938 pe->fd = -1;
934 pe->poll = 0; 939 pe->poll = 0;
1262 const_iv (FLAG_ACTIVATE_ON_RELEASE) 1267 const_iv (FLAG_ACTIVATE_ON_RELEASE)
1263 const_iv (FLAG_IS_WATER) 1268 const_iv (FLAG_IS_WATER)
1264 const_iv (FLAG_CONTENT_ON_GEN) 1269 const_iv (FLAG_CONTENT_ON_GEN)
1265 const_iv (FLAG_IS_A_TEMPLATE) 1270 const_iv (FLAG_IS_A_TEMPLATE)
1266 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)
1267 1274
1268 const_iv (NDI_BLACK) 1275 const_iv (NDI_BLACK)
1269 const_iv (NDI_WHITE) 1276 const_iv (NDI_WHITE)
1270 const_iv (NDI_NAVY) 1277 const_iv (NDI_NAVY)
1271 const_iv (NDI_RED) 1278 const_iv (NDI_RED)
1456 const_iv (ATNR_BLIND) 1463 const_iv (ATNR_BLIND)
1457 const_iv (ATNR_INTERNAL) 1464 const_iv (ATNR_INTERNAL)
1458 const_iv (ATNR_LIFE_STEALING) 1465 const_iv (ATNR_LIFE_STEALING)
1459 const_iv (ATNR_DISEASE) 1466 const_iv (ATNR_DISEASE)
1460 1467
1461 const_iv (MAP_FLUSH)
1462 const_iv (MAP_PLAYER_UNIQUE)
1463 const_iv (MAP_BLOCK)
1464 const_iv (MAP_STYLE)
1465 const_iv (MAP_OVERLAY)
1466
1467 const_iv (MAP_IN_MEMORY) 1468 const_iv (MAP_IN_MEMORY)
1468 const_iv (MAP_SWAPPED) 1469 const_iv (MAP_SWAPPED)
1469 const_iv (MAP_LOADING) 1470 const_iv (MAP_LOADING)
1470 const_iv (MAP_SAVING) 1471 const_iv (MAP_SAVING)
1471 1472
1564} 1565}
1565 1566
1566NV floor (NV x) 1567NV floor (NV x)
1567 1568
1568NV 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
1569 1582
1570void server_tick () 1583void server_tick ()
1571 CODE: 1584 CODE:
1572 runtime = SvNVx (sv_runtime); 1585 runtime = SvNVx (sv_runtime);
1573 server_tick (); 1586 server_tick ();
1620 } 1633 }
1621 OUTPUT: RETVAL 1634 OUTPUT: RETVAL
1622 1635
1623void abort () 1636void abort ()
1624 1637
1638void fork_abort (char *cause = "cf::fork_abort")
1639
1640void cleanup (const char *cause, bool make_core = false)
1641
1625void emergency_save () 1642void emergency_save ()
1643
1644UV sv_2watcher (SV *w)
1645 CODE:
1646 RETVAL = (UV)GEventAPI->sv_2watcher (w);
1647 OUTPUT:
1648 RETVAL
1626 1649
1627void _exit (int status = 0) 1650void _exit (int status = 0)
1628 1651
1629#if _POSIX_MEMLOCK 1652#if _POSIX_MEMLOCK
1630 1653
1687 CODE: 1710 CODE:
1688 RETVAL = SvROK (obj) && mg_find (SvRV (obj), PERL_MAGIC_ext); 1711 RETVAL = SvROK (obj) && mg_find (SvRV (obj), PERL_MAGIC_ext);
1689 OUTPUT: 1712 OUTPUT:
1690 RETVAL 1713 RETVAL
1691 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
1692INCLUDE: $PERL genacc attachable ../include/cfperl.h | 1725INCLUDE: $PERL genacc attachable ../include/cfperl.h |
1693 1726
1694MODULE = cf PACKAGE = cf::global 1727MODULE = cf PACKAGE = cf::global
1695 1728
1696int invoke (SV *klass, int event, ...) 1729int invoke (SV *klass, int event, ...)
1713 RETVAL = op->invoke ((event_type)event, ARG_AV (av), DT_END); 1746 RETVAL = op->invoke ((event_type)event, ARG_AV (av), DT_END);
1714 OUTPUT: RETVAL 1747 OUTPUT: RETVAL
1715 1748
1716SV *registry (object *op) 1749SV *registry (object *op)
1717 1750
1718void mortals () 1751int objects_size ()
1719 PPCODE: 1752 CODE:
1720 EXTEND (SP, object::mortals.size ());
1721 for (AUTODECL (i, object::mortals.begin ()); i != object::mortals.end (); ++i)
1722 PUSHs (to_sv (*i));
1723
1724object *first ()
1725 CODE:
1726 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;
1727 OUTPUT: RETVAL 1769 OUTPUT: RETVAL
1728 1770
1729# missing properties 1771# missing properties
1730 1772
1731object *head (object *op) 1773object *head (object *op)
1732 PROTOTYPE: $ 1774 PROTOTYPE: $
1733 CODE: 1775 CODE:
1734 RETVAL = op->head ? op->head : op; 1776 RETVAL = op->head_ ();
1735 OUTPUT: RETVAL 1777 OUTPUT: RETVAL
1736 1778
1737int is_head (object *op) 1779int is_head (object *op)
1738 PROTOTYPE: $ 1780 PROTOTYPE: $
1739 CODE: 1781 CODE:
1740 RETVAL = !op->head; 1782 RETVAL = op->head_ () == op;
1741 OUTPUT: RETVAL 1783 OUTPUT: RETVAL
1742 1784
1743void 1785void
1744inv (object *obj) 1786inv (object *obj)
1745 PROTOTYPE: $ 1787 PROTOTYPE: $
1836 1878
1837void drop (object *who, object *op) 1879void drop (object *who, object *op)
1838 1880
1839void pick_up (object *who, object *op) 1881void pick_up (object *who, object *op)
1840 1882
1841object *cf_object_insert_object (object *op, object *container)
1842
1843object *cf_object_insert_in_ob (object *ob, object *where)
1844
1845int cf_object_teleport (object *op, maptile *map, int x, int y) 1883int cf_object_teleport (object *op, maptile *map, int x, int y)
1846 1884
1847void update_object (object *op, int action) 1885void update_object (object *op, int action)
1848 1886
1849object *cf_create_object_by_name (const char *name) 1887object *cf_create_object_by_name (const char *name)
1967 2005
1968void esrv_update_item (object *op, int what, object *item) 2006void esrv_update_item (object *op, int what, object *item)
1969 C_ARGS: what, op, item 2007 C_ARGS: what, op, item
1970 2008
1971void clear_los (object *op) 2009void clear_los (object *op)
1972
1973int command_teleport (object *op, char *params)
1974 2010
1975int command_summon (object *op, char *params) 2011int command_summon (object *op, char *params)
1976 2012
1977int command_arrest (object *op, char *params) 2013int command_arrest (object *op, char *params)
1978 2014
2121 2157
2122object* 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)
2123 C_ARGS: str, map, nx, ny 2159 C_ARGS: str, map, nx, ny
2124 2160
2125void 2161void
2126cf_map_normalise (maptile *map, int x, int y) 2162get_map_flags (maptile *map, int x, int y)
2127 PPCODE: 2163 PPCODE:
2128{ 2164{
2129 maptile *nmap = 0; 2165 maptile *nmap = 0;
2130 I16 nx = 0, ny = 0; 2166 I16 nx = 0, ny = 0;
2131 int flags = get_map_flags (map, &nmap, x, y, &nx, &ny); 2167 int flags = get_map_flags (map, &nmap, x, y, &nx, &ny);
2193 CODE: 2229 CODE:
2194 RETVAL = get_name_of_region_for_map (m); 2230 RETVAL = get_name_of_region_for_map (m);
2195 OUTPUT: RETVAL 2231 OUTPUT: RETVAL
2196 2232
2197# worst xs function of my life 2233# worst xs function of my life
2198maptile * 2234bool
2199_create_random_map (\ 2235_create_random_map (\
2200 char *path,\ 2236 maptile *self,\
2201 char *wallstyle,\ 2237 char *wallstyle,\
2202 char *wall_name,\ 2238 char *wall_name,\
2203 char *floorstyle,\ 2239 char *floorstyle,\
2204 char *monsterstyle,\ 2240 char *monsterstyle,\
2205 char *treasurestyle,\ 2241 char *treasurestyle,\
2209 char *origin_map,\ 2245 char *origin_map,\
2210 char *final_map,\ 2246 char *final_map,\
2211 char *exitstyle,\ 2247 char *exitstyle,\
2212 char *this_map,\ 2248 char *this_map,\
2213 char *exit_on_final_map,\ 2249 char *exit_on_final_map,\
2214 int Xsize,\ 2250 int xsize,\
2215 int Ysize,\ 2251 int ysize,\
2216 int expand2x,\ 2252 int expand2x,\
2217 int layoutoptions1,\ 2253 int layoutoptions1,\
2218 int layoutoptions2,\ 2254 int layoutoptions2,\
2219 int layoutoptions3,\ 2255 int layoutoptions3,\
2220 int symmetry,\ 2256 int symmetry,\
2225 int dungeon_depth,\ 2261 int dungeon_depth,\
2226 int decoroptions,\ 2262 int decoroptions,\
2227 int orientation,\ 2263 int orientation,\
2228 int origin_y,\ 2264 int origin_y,\
2229 int origin_x,\ 2265 int origin_x,\
2230 int random_seed,\ 2266 U32 random_seed,\
2231 val64 total_map_hp,\ 2267 val64 total_map_hp,\
2232 int map_layout_style,\ 2268 int map_layout_style,\
2233 int treasureoptions,\ 2269 int treasureoptions,\
2234 int symmetry_used,\ 2270 int symmetry_used,\
2235 region *region\ 2271 region *region,\
2272 char *custom\
2236) 2273)
2237 CODE: 2274 CODE:
2238{ 2275{
2239 random_map_params rmp; 2276 random_map_params rmp;
2240 2277
2250 assign (rmp.exit_on_final_map, exit_on_final_map); 2287 assign (rmp.exit_on_final_map, exit_on_final_map);
2251 2288
2252 rmp.origin_map = origin_map; 2289 rmp.origin_map = origin_map;
2253 rmp.final_map = final_map; 2290 rmp.final_map = final_map;
2254 rmp.this_map = this_map; 2291 rmp.this_map = this_map;
2255 rmp.Xsize = Xsize; 2292 rmp.xsize = xsize;
2256 rmp.Ysize = Ysize; 2293 rmp.ysize = ysize;
2257 rmp.expand2x = expand2x; 2294 rmp.expand2x = expand2x;
2258 rmp.layoutoptions1 = layoutoptions1; 2295 rmp.layoutoptions1 = layoutoptions1;
2259 rmp.layoutoptions2 = layoutoptions2; 2296 rmp.layoutoptions2 = layoutoptions2;
2260 rmp.layoutoptions3 = layoutoptions3; 2297 rmp.layoutoptions3 = layoutoptions3;
2261 rmp.symmetry = symmetry; 2298 rmp.symmetry = symmetry;
2272 rmp.total_map_hp = total_map_hp; 2309 rmp.total_map_hp = total_map_hp;
2273 rmp.map_layout_style = map_layout_style; 2310 rmp.map_layout_style = map_layout_style;
2274 rmp.treasureoptions = treasureoptions; 2311 rmp.treasureoptions = treasureoptions;
2275 rmp.symmetry_used = symmetry_used; 2312 rmp.symmetry_used = symmetry_used;
2276 rmp.region = region; 2313 rmp.region = region;
2314 rmp.custom = custom;
2277 2315
2278 RETVAL = generate_random_map (path, &rmp); 2316 RETVAL = self->generate_random_map (&rmp);
2279} 2317}
2280 OUTPUT: 2318 OUTPUT:
2281 RETVAL 2319 RETVAL
2282 2320
2283MODULE = cf PACKAGE = cf::arch 2321MODULE = cf PACKAGE = cf::arch

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines