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.155 by root, Fri Jan 26 22:06:30 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);
114}
115
116void
117attachable::sever_self ()
118{
119 if (HV *self = this->self)
120 {
121 // keep a refcount because sv_unmagic might call attachable_free,
122 // which might clear self, causing sv_unmagic to crash on a now
123 // invalid object.
124 SvREFCNT_inc (self);
125 hv_clear (self);
126 sv_unmagic ((SV *)self, PERL_MAGIC_ext);
127 SvREFCNT_dec (self);
128
129 // self *must* be null now because thats sv_unmagic's job.
130 assert (!this->self);
131 }
113} 132}
114 133
115void 134void
116attachable::optimise () 135attachable::optimise ()
117{ 136{
118 if (self 137 if (self
119 && SvREFCNT (self) == 1 138 && SvREFCNT (self) == 1
120 && !HvTOTALKEYS (self)) 139 && !HvTOTALKEYS (self))
140 sever_self ();
141}
142
143// check wether the object really is dead
144void
145attachable::do_check ()
146{
147 if (refcnt_cnt () > 0)
148 return;
149
150 destroy ();
151}
152
153void
154attachable::do_destroy ()
155{
156 invoke (EVENT_ATTACHABLE_DESTROY, DT_END);
157
158 if (cb)
121 { 159 {
122 flags &= ~F_BORROWED;
123 refcnt_inc ();
124 SvREFCNT_dec ((SV *)self); 160 SvREFCNT_dec (cb);
161 cb = 0;
125 } 162 }
126}
127
128// check wether the object really is dead
129void
130attachable::do_check ()
131{
132 if (refcnt > 0)
133 return;
134
135 optimise ();
136 163
137 if (self) 164 if (self)
138 { 165 sever_self ();
139 if (refcnt + SvREFCNT (self) > 0)
140 return;
141
142 assert (flags & F_BORROWED);
143
144 flags &= ~F_BORROWED;
145 refcnt_inc ();
146 SvREFCNT_dec (self);
147 self = 0;
148 }
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 166
164 mortals.push_back (this); 167 mortals.push_back (this);
165} 168}
166 169
167void 170void
175} 178}
176 179
177void 180void
178attachable::check_mortals () 181attachable::check_mortals ()
179{ 182{
180 for (int i = 0; i < mortals.size (); ) 183 static int i = 0;
184
185 for (;;)
181 { 186 {
187 if (i >= mortals.size ())
188 {
189 i = 0;
190
191 if (mortals.size () > 1000)
192 fprintf (stderr, "mortal queue size (%d) exceeds 1000.\n", (int)mortals.size ());
193
194 break;
195 }
196
182 attachable *obj = mortals [i]; 197 attachable *obj = mortals [i];
183 198
184 obj->refcnt_chk (); // unborrow from perl, if necessary 199 obj->refcnt_chk (); // unborrow from perl, if necessary
185 200
201 //if (obj->refcnt > 0 || obj->self)
186 if (obj->refcnt || obj->self) 202 if (obj->refcnt || obj->self)
187 { 203 {
188#if 0 204//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 205 ++i; // further delay freeing
206
207 if (!(i & 0x3ff))
208 break;
194 }//D 209 }
195 else 210 else
196 { 211 {
197 //Dfprintf (stderr, "deleteing %d:%p:%s\n", i, obj,typeid (*obj).name ());//D
198 mortals.erase (i); 212 mortals.erase (i);
199 delete obj; 213 delete obj;
200 } 214 }
201 } 215 }
202} 216}
227 241
228static int 242static int
229attachable_free (pTHX_ SV *sv, MAGIC *mg) 243attachable_free (pTHX_ SV *sv, MAGIC *mg)
230{ 244{
231 attachable *at = (attachable *)mg->mg_ptr; 245 attachable *at = (attachable *)mg->mg_ptr;
232 assert (!(at->flags & attachable::F_BORROWED)); 246
247 //TODO: check if transaction behaviour is really required here
248 if (SV *self = (SV *)at->self)
249 {
233 at->self = 0; 250 at->self = 0;
251 SvREFCNT_dec (self);
252 }
253
234 // next line makes sense, but most objects still have refcnt 0 by default 254 // next line makes sense, but most objects still have refcnt 0 by default
235 //at->refcnt_chk (); 255 //at->refcnt_chk ();
236 return 0; 256 return 0;
237} 257}
238 258
247 if (!obj->self) 267 if (!obj->self)
248 { 268 {
249 obj->self = newHV (); 269 obj->self = newHV ();
250 sv_magicext ((SV *)obj->self, 0, PERL_MAGIC_ext, &attachable::vtbl, (char *)obj, 0); 270 sv_magicext ((SV *)obj->self, 0, PERL_MAGIC_ext, &attachable::vtbl, (char *)obj, 0);
251 271
252 // borrow the refcnt from the object
253 obj->flags |= attachable::F_BORROWED;
254 obj->refcnt_dec ();
255
256 // now bless the object _once_ 272 // now bless the object _once_
257 return sv_bless (newRV_inc ((SV *)obj->self), stash); 273 return sv_bless (newRV_inc ((SV *)obj->self), stash);
258 } 274 }
259 else 275 else
276 {
260 return newRV_inc ((SV *)obj->self); 277 SV *sv = newRV_inc ((SV *)obj->self);
278
279 if (Gv_AMG (stash)) // handle overload correctly, as the perl core does not
280 SvAMAGIC_on (sv);
281
282 return sv;
283 }
261} 284}
262 285
263static void 286static void
264clearSVptr (SV *sv) 287clearSVptr (SV *sv)
265{ 288{
318inline SV *to_sv (living * v) { return newSVptr (v, stash_cf_living_wrap); } 341inline SV *to_sv (living * v) { return newSVptr (v, stash_cf_living_wrap); }
319 342
320inline SV *to_sv (object & v) { return to_sv (&v); } 343inline SV *to_sv (object & v) { return to_sv (&v); }
321inline SV *to_sv (living & v) { return to_sv (&v); } 344inline SV *to_sv (living & v) { return to_sv (&v); }
322 345
323//TODO:
324inline SV *to_sv (New_Face * v) { return to_sv (v->name); } 346inline SV *to_sv (facetile * v) { return to_sv (v->name); }
325inline SV *to_sv (treasurelist * v) { return to_sv (v->name); } 347inline SV *to_sv (treasurelist * v) { return to_sv (v->name); }
326 348
327inline SV *to_sv (UUID v) 349inline SV *to_sv (UUID v)
328{ 350{
329 char buf[128]; 351 char buf[128];
354inline void sv_to (SV *sv, attachable * &v) { v = (attachable *)SvPTR_ornull (sv, "cf::attachable"); } 376inline 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"); } 377inline 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"); } 378inline 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"); } 379inline void sv_to (SV *sv, living * &v) { v = (living *)SvPTR_ornull (sv, "cf::living"); }
358 380
359inline void sv_to (SV *sv, New_Face * &v) { v = &new_faces[FindFace (SvPV_nolen (sv), 0)]; } //TODO 381inline 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 382inline void sv_to (SV *sv, treasurelist * &v) { v = find_treasurelist (SvPV_nolen (sv)); }
361 383
362template<class T> 384template<class T>
363inline void sv_to (SV *sv, refptr<T> &v) { T *tmp; sv_to (sv, tmp); v = tmp; } 385inline void sv_to (SV *sv, refptr<T> &v) { T *tmp; sv_to (sv, tmp); v = tmp; }
364 386
365template<int N> 387template<int N>
501 if (!ext->cb) 523 if (!ext->cb)
502 ext->cb = newAV (); 524 ext->cb = newAV ();
503 525
504 return newRV_inc ((SV *)ext->cb); 526 return newRV_inc ((SV *)ext->cb);
505} 527}
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 528
532///////////////////////////////////////////////////////////////////////////// 529/////////////////////////////////////////////////////////////////////////////
533 530
534extern "C" int cfperl_initPlugin (const char *iversion, f_plug_api gethooksptr) 531extern "C" int cfperl_initPlugin (const char *iversion, f_plug_api gethooksptr)
535{ 532{
830} 827}
831 828
832///////////////////////////////////////////////////////////////////////////// 829/////////////////////////////////////////////////////////////////////////////
833 830
834void 831void
835maptile::emergency_save () 832cfperl_emergency_save ()
836{ 833{
837 CALL_BEGIN (0); 834 CALL_BEGIN (0);
838 CALL_CALL ("cf::map::emergency_save", G_VOID); 835 CALL_CALL ("cf::emergency_save", G_VOID);
839 CALL_END; 836 CALL_END;
840} 837}
841 838
842maptile * 839maptile *
843maptile::find_sync (const char *path, maptile *origin) 840maptile::find_sync (const char *path, maptile *origin)
844{ 841{
845 CALL_BEGIN (2); 842 CALL_BEGIN (2);
846 CALL_ARG (path); 843 CALL_ARG (path);
847 CALL_ARG (origin); 844 CALL_ARG (origin);
848 CALL_CALL ("cf::map::find_sync", G_SCALAR); 845 CALL_CALL ("cf::map::find_sync", G_SCALAR);
846
847 maptile *retval;
848
849 if (count)
850 sv_to (POPs, retval);
851 else
852 retval = 0;
853
854 CALL_END;
855
856 return retval;
857}
858
859maptile *
860maptile::find_async (const char *path, maptile *origin)
861{
862 CALL_BEGIN (2);
863 CALL_ARG (path);
864 CALL_ARG (origin);
865 CALL_CALL ("cf::map::find_async", G_SCALAR);
849 866
850 maptile *retval; 867 maptile *retval;
851 868
852 if (count) 869 if (count)
853 sv_to (POPs, retval); 870 sv_to (POPs, retval);
906void 923void
907iw::alloc () 924iw::alloc ()
908{ 925{
909 pe = GEventAPI->new_idle (0, 0); 926 pe = GEventAPI->new_idle (0, 0);
910 927
928 WaREENTRANT_off (pe);
911 pe->base.callback = (void *)iw_dispatch; 929 pe->base.callback = (void *)iw_dispatch;
912 pe->base.ext_data = (void *)this; 930 pe->base.ext_data = (void *)this;
913} 931}
914 932
915static void iow_dispatch (pe_event *ev) 933static void iow_dispatch (pe_event *ev)
921void 939void
922iow::alloc () 940iow::alloc ()
923{ 941{
924 pe = GEventAPI->new_io (0, 0); 942 pe = GEventAPI->new_io (0, 0);
925 943
944 WaREENTRANT_off (pe);
926 pe->base.callback = (void *)iow_dispatch; 945 pe->base.callback = (void *)iow_dispatch;
927 pe->base.ext_data = (void *)this; 946 pe->base.ext_data = (void *)this;
928 947
929 pe->fd = -1; 948 pe->fd = -1;
930 pe->poll = 0; 949 pe->poll = 0;
1258 const_iv (FLAG_ACTIVATE_ON_RELEASE) 1277 const_iv (FLAG_ACTIVATE_ON_RELEASE)
1259 const_iv (FLAG_IS_WATER) 1278 const_iv (FLAG_IS_WATER)
1260 const_iv (FLAG_CONTENT_ON_GEN) 1279 const_iv (FLAG_CONTENT_ON_GEN)
1261 const_iv (FLAG_IS_A_TEMPLATE) 1280 const_iv (FLAG_IS_A_TEMPLATE)
1262 const_iv (FLAG_IS_BUILDABLE) 1281 const_iv (FLAG_IS_BUILDABLE)
1282 const_iv (FLAG_DESTROY_ON_DEATH)
1283 const_iv (FLAG_NO_MAP_SAVE)
1263 1284
1264 const_iv (NDI_BLACK) 1285 const_iv (NDI_BLACK)
1265 const_iv (NDI_WHITE) 1286 const_iv (NDI_WHITE)
1266 const_iv (NDI_NAVY) 1287 const_iv (NDI_NAVY)
1267 const_iv (NDI_RED) 1288 const_iv (NDI_RED)
1452 const_iv (ATNR_BLIND) 1473 const_iv (ATNR_BLIND)
1453 const_iv (ATNR_INTERNAL) 1474 const_iv (ATNR_INTERNAL)
1454 const_iv (ATNR_LIFE_STEALING) 1475 const_iv (ATNR_LIFE_STEALING)
1455 const_iv (ATNR_DISEASE) 1476 const_iv (ATNR_DISEASE)
1456 1477
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) 1478 const_iv (MAP_IN_MEMORY)
1464 const_iv (MAP_SWAPPED) 1479 const_iv (MAP_SWAPPED)
1465 const_iv (MAP_LOADING) 1480 const_iv (MAP_LOADING)
1466 const_iv (MAP_SAVING) 1481 const_iv (MAP_SAVING)
1467 1482
1560} 1575}
1561 1576
1562NV floor (NV x) 1577NV floor (NV x)
1563 1578
1564NV ceil (NV x) 1579NV ceil (NV x)
1580
1581NV rndm (...)
1582 CODE:
1583 switch (items)
1584 {
1585 case 0: RETVAL = rndm (); break;
1586 case 1: RETVAL = rndm (SvUV (ST (0))); break;
1587 case 2: RETVAL = rndm (SvIV (ST (0)), SvIV (ST (1))); break;
1588 default: croak ("cf::rndm requires none, one or two parameters."); break;
1589 }
1590 OUTPUT:
1591 RETVAL
1565 1592
1566void server_tick () 1593void server_tick ()
1567 CODE: 1594 CODE:
1568 runtime = SvNVx (sv_runtime); 1595 runtime = SvNVx (sv_runtime);
1569 server_tick (); 1596 server_tick ();
1616 } 1643 }
1617 OUTPUT: RETVAL 1644 OUTPUT: RETVAL
1618 1645
1619void abort () 1646void abort ()
1620 1647
1648void fork_abort (char *cause = "cf::fork_abort")
1649
1650void cleanup (const char *cause, bool make_core = false)
1651
1621void emergency_save () 1652void emergency_save ()
1653
1654UV sv_2watcher (SV *w)
1655 CODE:
1656 RETVAL = (UV)GEventAPI->sv_2watcher (w);
1657 OUTPUT:
1658 RETVAL
1622 1659
1623void _exit (int status = 0) 1660void _exit (int status = 0)
1624 1661
1625#if _POSIX_MEMLOCK 1662#if _POSIX_MEMLOCK
1626 1663
1683 CODE: 1720 CODE:
1684 RETVAL = SvROK (obj) && mg_find (SvRV (obj), PERL_MAGIC_ext); 1721 RETVAL = SvROK (obj) && mg_find (SvRV (obj), PERL_MAGIC_ext);
1685 OUTPUT: 1722 OUTPUT:
1686 RETVAL 1723 RETVAL
1687 1724
1725int mortals_size ()
1726 CODE:
1727 RETVAL = attachable::mortals.size ();
1728 OUTPUT: RETVAL
1729
1730#object *mortals (U32 index)
1731# CODE:
1732# RETVAL = index < attachable::mortals.size () ? attachable::mortals [index] : 0;
1733# OUTPUT: RETVAL
1734
1688INCLUDE: $PERL genacc attachable ../include/cfperl.h | 1735INCLUDE: $PERL genacc attachable ../include/cfperl.h |
1689 1736
1690MODULE = cf PACKAGE = cf::global 1737MODULE = cf PACKAGE = cf::global
1691 1738
1692int invoke (SV *klass, int event, ...) 1739int invoke (SV *klass, int event, ...)
1709 RETVAL = op->invoke ((event_type)event, ARG_AV (av), DT_END); 1756 RETVAL = op->invoke ((event_type)event, ARG_AV (av), DT_END);
1710 OUTPUT: RETVAL 1757 OUTPUT: RETVAL
1711 1758
1712SV *registry (object *op) 1759SV *registry (object *op)
1713 1760
1714void mortals () 1761int objects_size ()
1715 PPCODE: 1762 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; 1763 RETVAL = objects.size ();
1764 OUTPUT: RETVAL
1765
1766object *objects (U32 index)
1767 CODE:
1768 RETVAL = index < objects.size () ? objects [index] : 0;
1769 OUTPUT: RETVAL
1770
1771int actives_size ()
1772 CODE:
1773 RETVAL = actives.size ();
1774 OUTPUT: RETVAL
1775
1776object *actives (U32 index)
1777 CODE:
1778 RETVAL = index < actives.size () ? actives [index] : 0;
1723 OUTPUT: RETVAL 1779 OUTPUT: RETVAL
1724 1780
1725# missing properties 1781# missing properties
1726 1782
1727object *head (object *op) 1783object *head (object *op)
1728 PROTOTYPE: $ 1784 PROTOTYPE: $
1729 CODE: 1785 CODE:
1730 RETVAL = op->head ? op->head : op; 1786 RETVAL = op->head_ ();
1731 OUTPUT: RETVAL 1787 OUTPUT: RETVAL
1732 1788
1733int is_head (object *op) 1789int is_head (object *op)
1734 PROTOTYPE: $ 1790 PROTOTYPE: $
1735 CODE: 1791 CODE:
1736 RETVAL = !op->head; 1792 RETVAL = op->head_ () == op;
1737 OUTPUT: RETVAL 1793 OUTPUT: RETVAL
1738 1794
1739void 1795void
1740inv (object *obj) 1796inv (object *obj)
1741 PROTOTYPE: $ 1797 PROTOTYPE: $
1832 1888
1833void drop (object *who, object *op) 1889void drop (object *who, object *op)
1834 1890
1835void pick_up (object *who, object *op) 1891void pick_up (object *who, object *op)
1836 1892
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) 1893int cf_object_teleport (object *op, maptile *map, int x, int y)
1842 1894
1843void update_object (object *op, int action) 1895void update_object (object *op, int action)
1844 1896
1845object *cf_create_object_by_name (const char *name) 1897object *cf_create_object_by_name (const char *name)
1963 2015
1964void esrv_update_item (object *op, int what, object *item) 2016void esrv_update_item (object *op, int what, object *item)
1965 C_ARGS: what, op, item 2017 C_ARGS: what, op, item
1966 2018
1967void clear_los (object *op) 2019void clear_los (object *op)
1968
1969int command_teleport (object *op, char *params)
1970 2020
1971int command_summon (object *op, char *params) 2021int command_summon (object *op, char *params)
1972 2022
1973int command_arrest (object *op, char *params) 2023int command_arrest (object *op, char *params)
1974 2024
2117 2167
2118object* cf_map_present_arch_by_name (maptile *map, const char* str, int nx, int ny) 2168object* cf_map_present_arch_by_name (maptile *map, const char* str, int nx, int ny)
2119 C_ARGS: str, map, nx, ny 2169 C_ARGS: str, map, nx, ny
2120 2170
2121void 2171void
2122cf_map_normalise (maptile *map, int x, int y) 2172get_map_flags (maptile *map, int x, int y)
2123 PPCODE: 2173 PPCODE:
2124{ 2174{
2125 maptile *nmap = 0; 2175 maptile *nmap = 0;
2126 I16 nx = 0, ny = 0; 2176 I16 nx = 0, ny = 0;
2127 int flags = get_map_flags (map, &nmap, x, y, &nx, &ny); 2177 int flags = get_map_flags (map, &nmap, x, y, &nx, &ny);
2189 CODE: 2239 CODE:
2190 RETVAL = get_name_of_region_for_map (m); 2240 RETVAL = get_name_of_region_for_map (m);
2191 OUTPUT: RETVAL 2241 OUTPUT: RETVAL
2192 2242
2193# worst xs function of my life 2243# worst xs function of my life
2194maptile * 2244bool
2195_create_random_map (\ 2245_create_random_map (\
2196 char *path,\ 2246 maptile *self,\
2197 char *wallstyle,\ 2247 char *wallstyle,\
2198 char *wall_name,\ 2248 char *wall_name,\
2199 char *floorstyle,\ 2249 char *floorstyle,\
2200 char *monsterstyle,\ 2250 char *monsterstyle,\
2201 char *treasurestyle,\ 2251 char *treasurestyle,\
2205 char *origin_map,\ 2255 char *origin_map,\
2206 char *final_map,\ 2256 char *final_map,\
2207 char *exitstyle,\ 2257 char *exitstyle,\
2208 char *this_map,\ 2258 char *this_map,\
2209 char *exit_on_final_map,\ 2259 char *exit_on_final_map,\
2210 int Xsize,\ 2260 int xsize,\
2211 int Ysize,\ 2261 int ysize,\
2212 int expand2x,\ 2262 int expand2x,\
2213 int layoutoptions1,\ 2263 int layoutoptions1,\
2214 int layoutoptions2,\ 2264 int layoutoptions2,\
2215 int layoutoptions3,\ 2265 int layoutoptions3,\
2216 int symmetry,\ 2266 int symmetry,\
2221 int dungeon_depth,\ 2271 int dungeon_depth,\
2222 int decoroptions,\ 2272 int decoroptions,\
2223 int orientation,\ 2273 int orientation,\
2224 int origin_y,\ 2274 int origin_y,\
2225 int origin_x,\ 2275 int origin_x,\
2226 int random_seed,\ 2276 U32 random_seed,\
2227 val64 total_map_hp,\ 2277 val64 total_map_hp,\
2228 int map_layout_style,\ 2278 int map_layout_style,\
2229 int treasureoptions,\ 2279 int treasureoptions,\
2230 int symmetry_used,\ 2280 int symmetry_used,\
2231 region *region\ 2281 region *region,\
2282 char *custom\
2232) 2283)
2233 CODE: 2284 CODE:
2234{ 2285{
2235 random_map_params rmp; 2286 random_map_params rmp;
2236 2287
2246 assign (rmp.exit_on_final_map, exit_on_final_map); 2297 assign (rmp.exit_on_final_map, exit_on_final_map);
2247 2298
2248 rmp.origin_map = origin_map; 2299 rmp.origin_map = origin_map;
2249 rmp.final_map = final_map; 2300 rmp.final_map = final_map;
2250 rmp.this_map = this_map; 2301 rmp.this_map = this_map;
2251 rmp.Xsize = Xsize; 2302 rmp.xsize = xsize;
2252 rmp.Ysize = Ysize; 2303 rmp.ysize = ysize;
2253 rmp.expand2x = expand2x; 2304 rmp.expand2x = expand2x;
2254 rmp.layoutoptions1 = layoutoptions1; 2305 rmp.layoutoptions1 = layoutoptions1;
2255 rmp.layoutoptions2 = layoutoptions2; 2306 rmp.layoutoptions2 = layoutoptions2;
2256 rmp.layoutoptions3 = layoutoptions3; 2307 rmp.layoutoptions3 = layoutoptions3;
2257 rmp.symmetry = symmetry; 2308 rmp.symmetry = symmetry;
2268 rmp.total_map_hp = total_map_hp; 2319 rmp.total_map_hp = total_map_hp;
2269 rmp.map_layout_style = map_layout_style; 2320 rmp.map_layout_style = map_layout_style;
2270 rmp.treasureoptions = treasureoptions; 2321 rmp.treasureoptions = treasureoptions;
2271 rmp.symmetry_used = symmetry_used; 2322 rmp.symmetry_used = symmetry_used;
2272 rmp.region = region; 2323 rmp.region = region;
2324 rmp.custom = custom;
2273 2325
2274 RETVAL = generate_random_map (path, &rmp); 2326 RETVAL = self->generate_random_map (&rmp);
2275} 2327}
2276 OUTPUT: 2328 OUTPUT:
2277 RETVAL 2329 RETVAL
2278 2330
2279MODULE = cf PACKAGE = cf::arch 2331MODULE = cf PACKAGE = cf::arch

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines