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.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
110int
111attachable::refcnt_cnt () const
112{
113 return refcnt + (self ? SvREFCNT (self) - 1 : 0);
114}
115
116void
109void attachable::optimise () 117attachable::optimise ()
110{ 118{
111 if (self 119 if (self
112 && SvREFCNT (self) == 1 120 && SvREFCNT (self) == 1
113 && !HvTOTALKEYS (self)) 121 && !HvTOTALKEYS (self))
114 { 122 {
115 flags &= ~F_BORROWED; 123 sv_unmagic ((SV *)self, PERL_MAGIC_ext);
116 refcnt_inc (); 124 assert (!self);
117 SvREFCNT_dec ((SV *)self);
118 } 125 }
119} 126}
120 127
121// check wether the object really is dead 128// check wether the object really is dead
122void 129void
123attachable::do_check () 130attachable::do_check ()
124{ 131{
125 if (refcnt > 0) 132 if (refcnt_cnt () > 0)
126 return; 133 return;
127 134
128 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 }
129 148
130 if (self) 149 if (self)
131 { 150 {
132 if (refcnt + SvREFCNT (self) > 0) 151 hv_clear (self);
133 return; 152 sv_unmagic ((SV *)self, PERL_MAGIC_ext);
134 153 // self is now 0
135 assert (flags & F_BORROWED); 154 assert (!self);//D//TODO remove soon
136
137 flags &= ~F_BORROWED;
138 refcnt_inc ();
139 SvREFCNT_dec (self);
140 self = 0;
141 } 155 }
142
143 if (refcnt > 0)
144 return;
145
146 destroy ();
147}
148
149void
150attachable::do_destroy ()
151{
152 invoke (EVENT_ATTACHABLE_DESTROY, DT_END);
153
154 if (self)
155 hv_clear (self);
156 156
157 mortals.push_back (this); 157 mortals.push_back (this);
158} 158}
159 159
160void 160void
165 165
166 flags |= F_DESTROYED; 166 flags |= F_DESTROYED;
167 do_destroy (); 167 do_destroy ();
168} 168}
169 169
170void
170void attachable::check_mortals () 171attachable::check_mortals ()
171{ 172{
172 for (int i = 0; i < mortals.size (); ) 173 static int i = 0;
174
175 for (;;)
173 { 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
174 attachable *obj = mortals [i]; 187 attachable *obj = mortals [i];
175 188
176 obj->refcnt_chk (); // unborrow from perl, if necessary 189 obj->refcnt_chk (); // unborrow from perl, if necessary
177 190
191 //if (obj->refcnt > 0 || obj->self)
178 if (obj->refcnt || obj->self) 192 if (obj->refcnt || obj->self)
179 { 193 {
180#if 0 194//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 195 ++i; // further delay freeing
196
197 if (!(i & 0x3ff))
198 break;
186 }//D 199 }
187 else 200 else
188 { 201 {
189 //Dfprintf (stderr, "deleteing %d:%p:%s\n", i, obj,typeid (*obj).name ());//D
190 mortals.erase (i); 202 mortals.erase (i);
191 delete obj; 203 delete obj;
192 } 204 }
193 } 205 }
194} 206}
219 231
220static int 232static int
221attachable_free (pTHX_ SV *sv, MAGIC *mg) 233attachable_free (pTHX_ SV *sv, MAGIC *mg)
222{ 234{
223 attachable *at = (attachable *)mg->mg_ptr; 235 attachable *at = (attachable *)mg->mg_ptr;
224 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 {
225 at->self = 0; 240 at->self = 0;
241 SvREFCNT_dec (self);
242 }
243
226 // 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
227 //at->refcnt_chk (); 245 //at->refcnt_chk ();
228 return 0; 246 return 0;
229} 247}
230 248
239 if (!obj->self) 257 if (!obj->self)
240 { 258 {
241 obj->self = newHV (); 259 obj->self = newHV ();
242 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);
243 261
244 // borrow the refcnt from the object
245 obj->flags |= attachable::F_BORROWED;
246 obj->refcnt_dec ();
247
248 // now bless the object _once_ 262 // now bless the object _once_
249 return sv_bless (newRV_inc ((SV *)obj->self), stash); 263 return sv_bless (newRV_inc ((SV *)obj->self), stash);
250 } 264 }
251 else 265 else
266 {
252 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 }
253} 274}
254 275
255static void 276static void
256clearSVptr (SV *sv) 277clearSVptr (SV *sv)
257{ 278{
310inline 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); }
311 332
312inline SV *to_sv (object & v) { return to_sv (&v); } 333inline SV *to_sv (object & v) { return to_sv (&v); }
313inline SV *to_sv (living & v) { return to_sv (&v); } 334inline SV *to_sv (living & v) { return to_sv (&v); }
314 335
315//TODO:
316inline SV *to_sv (New_Face * v) { return to_sv (v->name); } 336inline SV *to_sv (facetile * v) { return to_sv (v->name); }
317inline SV *to_sv (treasurelist * v) { return to_sv (v->name); } 337inline SV *to_sv (treasurelist * v) { return to_sv (v->name); }
318 338
319inline SV *to_sv (UUID v) 339inline SV *to_sv (UUID v)
320{ 340{
321 char buf[128]; 341 char buf[128];
346inline 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"); }
347inline 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"); }
348inline 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"); }
349inline 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"); }
350 370
351inline 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)]; }
352inline 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)); }
353 373
354template<class T> 374template<class T>
355inline 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; }
356 376
357template<int N> 377template<int N>
493 if (!ext->cb) 513 if (!ext->cb)
494 ext->cb = newAV (); 514 ext->cb = newAV ();
495 515
496 return newRV_inc ((SV *)ext->cb); 516 return newRV_inc ((SV *)ext->cb);
497} 517}
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 518
524///////////////////////////////////////////////////////////////////////////// 519/////////////////////////////////////////////////////////////////////////////
525 520
526extern "C" int cfperl_initPlugin (const char *iversion, f_plug_api gethooksptr) 521extern "C" int cfperl_initPlugin (const char *iversion, f_plug_api gethooksptr)
527{ 522{
822} 817}
823 818
824///////////////////////////////////////////////////////////////////////////// 819/////////////////////////////////////////////////////////////////////////////
825 820
826void 821void
827maptile::emergency_save () 822cfperl_emergency_save ()
828{ 823{
829 CALL_BEGIN (0); 824 CALL_BEGIN (0);
830 CALL_CALL ("cf::map::emergency_save", G_VOID); 825 CALL_CALL ("cf::emergency_save", G_VOID);
831 CALL_END; 826 CALL_END;
832} 827}
833 828
834maptile * 829maptile *
835maptile::find_sync (const char *path, maptile *origin) 830maptile::find_sync (const char *path, maptile *origin)
836{ 831{
837 CALL_BEGIN (2); 832 CALL_BEGIN (2);
838 CALL_ARG (path); 833 CALL_ARG (path);
839 CALL_ARG (origin); 834 CALL_ARG (origin);
840 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);
841 856
842 maptile *retval; 857 maptile *retval;
843 858
844 if (count) 859 if (count)
845 sv_to (POPs, retval); 860 sv_to (POPs, retval);
898void 913void
899iw::alloc () 914iw::alloc ()
900{ 915{
901 pe = GEventAPI->new_idle (0, 0); 916 pe = GEventAPI->new_idle (0, 0);
902 917
918 WaREENTRANT_off (pe);
903 pe->base.callback = (void *)iw_dispatch; 919 pe->base.callback = (void *)iw_dispatch;
904 pe->base.ext_data = (void *)this; 920 pe->base.ext_data = (void *)this;
905} 921}
906 922
907static void iow_dispatch (pe_event *ev) 923static void iow_dispatch (pe_event *ev)
913void 929void
914iow::alloc () 930iow::alloc ()
915{ 931{
916 pe = GEventAPI->new_io (0, 0); 932 pe = GEventAPI->new_io (0, 0);
917 933
934 WaREENTRANT_off (pe);
918 pe->base.callback = (void *)iow_dispatch; 935 pe->base.callback = (void *)iow_dispatch;
919 pe->base.ext_data = (void *)this; 936 pe->base.ext_data = (void *)this;
920 937
921 pe->fd = -1; 938 pe->fd = -1;
922 pe->poll = 0; 939 pe->poll = 0;
1250 const_iv (FLAG_ACTIVATE_ON_RELEASE) 1267 const_iv (FLAG_ACTIVATE_ON_RELEASE)
1251 const_iv (FLAG_IS_WATER) 1268 const_iv (FLAG_IS_WATER)
1252 const_iv (FLAG_CONTENT_ON_GEN) 1269 const_iv (FLAG_CONTENT_ON_GEN)
1253 const_iv (FLAG_IS_A_TEMPLATE) 1270 const_iv (FLAG_IS_A_TEMPLATE)
1254 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)
1255 1274
1256 const_iv (NDI_BLACK) 1275 const_iv (NDI_BLACK)
1257 const_iv (NDI_WHITE) 1276 const_iv (NDI_WHITE)
1258 const_iv (NDI_NAVY) 1277 const_iv (NDI_NAVY)
1259 const_iv (NDI_RED) 1278 const_iv (NDI_RED)
1444 const_iv (ATNR_BLIND) 1463 const_iv (ATNR_BLIND)
1445 const_iv (ATNR_INTERNAL) 1464 const_iv (ATNR_INTERNAL)
1446 const_iv (ATNR_LIFE_STEALING) 1465 const_iv (ATNR_LIFE_STEALING)
1447 const_iv (ATNR_DISEASE) 1466 const_iv (ATNR_DISEASE)
1448 1467
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) 1468 const_iv (MAP_IN_MEMORY)
1456 const_iv (MAP_SWAPPED) 1469 const_iv (MAP_SWAPPED)
1457 const_iv (MAP_LOADING) 1470 const_iv (MAP_LOADING)
1458 const_iv (MAP_SAVING) 1471 const_iv (MAP_SAVING)
1459 1472
1552} 1565}
1553 1566
1554NV floor (NV x) 1567NV floor (NV x)
1555 1568
1556NV 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
1557 1582
1558void server_tick () 1583void server_tick ()
1559 CODE: 1584 CODE:
1560 runtime = SvNVx (sv_runtime); 1585 runtime = SvNVx (sv_runtime);
1561 server_tick (); 1586 server_tick ();
1608 } 1633 }
1609 OUTPUT: RETVAL 1634 OUTPUT: RETVAL
1610 1635
1611void abort () 1636void abort ()
1612 1637
1638void fork_abort (char *cause = "cf::fork_abort")
1639
1640void cleanup (const char *cause, bool make_core = false)
1641
1613void emergency_save () 1642void emergency_save ()
1643
1644UV sv_2watcher (SV *w)
1645 CODE:
1646 RETVAL = (UV)GEventAPI->sv_2watcher (w);
1647 OUTPUT:
1648 RETVAL
1614 1649
1615void _exit (int status = 0) 1650void _exit (int status = 0)
1616 1651
1617#if _POSIX_MEMLOCK 1652#if _POSIX_MEMLOCK
1618 1653
1675 CODE: 1710 CODE:
1676 RETVAL = SvROK (obj) && mg_find (SvRV (obj), PERL_MAGIC_ext); 1711 RETVAL = SvROK (obj) && mg_find (SvRV (obj), PERL_MAGIC_ext);
1677 OUTPUT: 1712 OUTPUT:
1678 RETVAL 1713 RETVAL
1679 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
1680INCLUDE: $PERL genacc attachable ../include/cfperl.h | 1725INCLUDE: $PERL genacc attachable ../include/cfperl.h |
1681 1726
1682MODULE = cf PACKAGE = cf::global 1727MODULE = cf PACKAGE = cf::global
1683 1728
1684int invoke (SV *klass, int event, ...) 1729int invoke (SV *klass, int event, ...)
1701 RETVAL = op->invoke ((event_type)event, ARG_AV (av), DT_END); 1746 RETVAL = op->invoke ((event_type)event, ARG_AV (av), DT_END);
1702 OUTPUT: RETVAL 1747 OUTPUT: RETVAL
1703 1748
1704SV *registry (object *op) 1749SV *registry (object *op)
1705 1750
1706void mortals () 1751int objects_size ()
1707 PPCODE: 1752 CODE:
1708 EXTEND (SP, object::mortals.size ());
1709 for (AUTODECL (i, object::mortals.begin ()); i != object::mortals.end (); ++i)
1710 PUSHs (to_sv (*i));
1711
1712object *first ()
1713 CODE:
1714 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;
1715 OUTPUT: RETVAL 1769 OUTPUT: RETVAL
1716 1770
1717# missing properties 1771# missing properties
1718 1772
1719object *head (object *op) 1773object *head (object *op)
1720 PROTOTYPE: $ 1774 PROTOTYPE: $
1721 CODE: 1775 CODE:
1722 RETVAL = op->head ? op->head : op; 1776 RETVAL = op->head_ ();
1723 OUTPUT: RETVAL 1777 OUTPUT: RETVAL
1724 1778
1725int is_head (object *op) 1779int is_head (object *op)
1726 PROTOTYPE: $ 1780 PROTOTYPE: $
1727 CODE: 1781 CODE:
1728 RETVAL = !op->head; 1782 RETVAL = op->head_ () == op;
1729 OUTPUT: RETVAL 1783 OUTPUT: RETVAL
1730 1784
1731void 1785void
1732inv (object *obj) 1786inv (object *obj)
1733 PROTOTYPE: $ 1787 PROTOTYPE: $
1824 1878
1825void drop (object *who, object *op) 1879void drop (object *who, object *op)
1826 1880
1827void pick_up (object *who, object *op) 1881void pick_up (object *who, object *op)
1828 1882
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) 1883int cf_object_teleport (object *op, maptile *map, int x, int y)
1834 1884
1835void update_object (object *op, int action) 1885void update_object (object *op, int action)
1836 1886
1837object *cf_create_object_by_name (const char *name) 1887object *cf_create_object_by_name (const char *name)
1955 2005
1956void esrv_update_item (object *op, int what, object *item) 2006void esrv_update_item (object *op, int what, object *item)
1957 C_ARGS: what, op, item 2007 C_ARGS: what, op, item
1958 2008
1959void clear_los (object *op) 2009void clear_los (object *op)
1960
1961int command_teleport (object *op, char *params)
1962 2010
1963int command_summon (object *op, char *params) 2011int command_summon (object *op, char *params)
1964 2012
1965int command_arrest (object *op, char *params) 2013int command_arrest (object *op, char *params)
1966 2014
2046list () 2094list ()
2047 PPCODE: 2095 PPCODE:
2048 for_all_players (pl) 2096 for_all_players (pl)
2049 XPUSHs (sv_2mortal (to_sv (pl))); 2097 XPUSHs (sv_2mortal (to_sv (pl)));
2050 2098
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 2099
2074MODULE = cf PACKAGE = cf::map PREFIX = cf_map_ 2100MODULE = cf PACKAGE = cf::map PREFIX = cf_map_
2075 2101
2076int invoke (maptile *map, int event, ...) 2102int invoke (maptile *map, int event, ...)
2077 CODE: 2103 CODE:
2131 2157
2132object* 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)
2133 C_ARGS: str, map, nx, ny 2159 C_ARGS: str, map, nx, ny
2134 2160
2135void 2161void
2136cf_map_normalise (maptile *map, int x, int y) 2162get_map_flags (maptile *map, int x, int y)
2137 PPCODE: 2163 PPCODE:
2138{ 2164{
2139 maptile *nmap = 0; 2165 maptile *nmap = 0;
2140 I16 nx = 0, ny = 0; 2166 I16 nx = 0, ny = 0;
2141 int flags = get_map_flags (map, &nmap, x, y, &nx, &ny); 2167 int flags = get_map_flags (map, &nmap, x, y, &nx, &ny);
2203 CODE: 2229 CODE:
2204 RETVAL = get_name_of_region_for_map (m); 2230 RETVAL = get_name_of_region_for_map (m);
2205 OUTPUT: RETVAL 2231 OUTPUT: RETVAL
2206 2232
2207# worst xs function of my life 2233# worst xs function of my life
2208maptile * 2234bool
2209_create_random_map (\ 2235_create_random_map (\
2210 char *path,\ 2236 maptile *self,\
2211 char *wallstyle,\ 2237 char *wallstyle,\
2212 char *wall_name,\ 2238 char *wall_name,\
2213 char *floorstyle,\ 2239 char *floorstyle,\
2214 char *monsterstyle,\ 2240 char *monsterstyle,\
2215 char *treasurestyle,\ 2241 char *treasurestyle,\
2219 char *origin_map,\ 2245 char *origin_map,\
2220 char *final_map,\ 2246 char *final_map,\
2221 char *exitstyle,\ 2247 char *exitstyle,\
2222 char *this_map,\ 2248 char *this_map,\
2223 char *exit_on_final_map,\ 2249 char *exit_on_final_map,\
2224 int Xsize,\ 2250 int xsize,\
2225 int Ysize,\ 2251 int ysize,\
2226 int expand2x,\ 2252 int expand2x,\
2227 int layoutoptions1,\ 2253 int layoutoptions1,\
2228 int layoutoptions2,\ 2254 int layoutoptions2,\
2229 int layoutoptions3,\ 2255 int layoutoptions3,\
2230 int symmetry,\ 2256 int symmetry,\
2235 int dungeon_depth,\ 2261 int dungeon_depth,\
2236 int decoroptions,\ 2262 int decoroptions,\
2237 int orientation,\ 2263 int orientation,\
2238 int origin_y,\ 2264 int origin_y,\
2239 int origin_x,\ 2265 int origin_x,\
2240 int random_seed,\ 2266 U32 random_seed,\
2241 val64 total_map_hp,\ 2267 val64 total_map_hp,\
2242 int map_layout_style,\ 2268 int map_layout_style,\
2243 int treasureoptions,\ 2269 int treasureoptions,\
2244 int symmetry_used,\ 2270 int symmetry_used,\
2245 region *region\ 2271 region *region,\
2272 char *custom\
2246) 2273)
2247 CODE: 2274 CODE:
2248{ 2275{
2249 random_map_params rmp; 2276 random_map_params rmp;
2250 2277
2260 assign (rmp.exit_on_final_map, exit_on_final_map); 2287 assign (rmp.exit_on_final_map, exit_on_final_map);
2261 2288
2262 rmp.origin_map = origin_map; 2289 rmp.origin_map = origin_map;
2263 rmp.final_map = final_map; 2290 rmp.final_map = final_map;
2264 rmp.this_map = this_map; 2291 rmp.this_map = this_map;
2265 rmp.Xsize = Xsize; 2292 rmp.xsize = xsize;
2266 rmp.Ysize = Ysize; 2293 rmp.ysize = ysize;
2267 rmp.expand2x = expand2x; 2294 rmp.expand2x = expand2x;
2268 rmp.layoutoptions1 = layoutoptions1; 2295 rmp.layoutoptions1 = layoutoptions1;
2269 rmp.layoutoptions2 = layoutoptions2; 2296 rmp.layoutoptions2 = layoutoptions2;
2270 rmp.layoutoptions3 = layoutoptions3; 2297 rmp.layoutoptions3 = layoutoptions3;
2271 rmp.symmetry = symmetry; 2298 rmp.symmetry = symmetry;
2282 rmp.total_map_hp = total_map_hp; 2309 rmp.total_map_hp = total_map_hp;
2283 rmp.map_layout_style = map_layout_style; 2310 rmp.map_layout_style = map_layout_style;
2284 rmp.treasureoptions = treasureoptions; 2311 rmp.treasureoptions = treasureoptions;
2285 rmp.symmetry_used = symmetry_used; 2312 rmp.symmetry_used = symmetry_used;
2286 rmp.region = region; 2313 rmp.region = region;
2314 rmp.custom = custom;
2287 2315
2288 RETVAL = generate_random_map (path, &rmp); 2316 RETVAL = self->generate_random_map (&rmp);
2289} 2317}
2290 OUTPUT: 2318 OUTPUT:
2291 RETVAL 2319 RETVAL
2292 2320
2293MODULE = cf PACKAGE = cf::arch 2321MODULE = cf PACKAGE = cf::arch

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines