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.128 by root, Sun Jan 7 02:39:14 2007 UTC vs.
Revision 1.153 by root, Fri Jan 26 20:59:57 2007 UTC

99 99
100////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 100//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
101 101
102unordered_vector<attachable *> attachable::mortals; 102unordered_vector<attachable *> attachable::mortals;
103 103
104#if 0
105attachable *attachable::rc_first;
106
107attachable::attachable ()
108{
109 refcnt = 0;
110 rc_next = rc_first;
111 rc_first = this;
112}
113#endif
114
115attachable::~attachable () 104attachable::~attachable ()
116{ 105{
117 assert (!(flags & F_BORROWED));//D//TODO//remove when stable
118#if 0
119 assert (!rc_next);
120 assert (!refcnt); 106 assert (!self);
121#endif 107 assert (!cb);
108}
109
110int
111attachable::refcnt_cnt () const
112{
113 return refcnt + (self ? SvREFCNT (self) - 1 : 0);
114}
115
116void
117attachable::optimise ()
118{
119 if (self
120 && SvREFCNT (self) == 1
121 && !HvTOTALKEYS (self))
122 {
123 sv_unmagic ((SV *)self, PERL_MAGIC_ext);
124 assert (!self);
125 }
122} 126}
123 127
124// check wether the object really is dead 128// check wether the object really is dead
125void 129void
126attachable::do_check () 130attachable::do_check ()
127{ 131{
128 if (refcnt > 0) 132 if (refcnt_cnt () > 0)
129 return; 133 return;
130 134
131 // try to unborrow the refcnt from perl 135 destroy ();
132 if (flags & F_BORROWED) 136}
137
138void
139attachable::do_destroy ()
140{
141 invoke (EVENT_ATTACHABLE_DESTROY, DT_END);
142
143 if (cb)
133 { 144 {
134 assert (self);//D//TODO//remove when stable
135 flags &= ~F_BORROWED;
136 refcnt_inc ();
137 SvREFCNT_dec (self); 145 SvREFCNT_dec (cb);
146 cb = 0;
138 } 147 }
139 148
140 if (refcnt > 0 || self)
141 return;
142
143 destroy ();
144}
145
146void
147attachable::do_destroy ()
148{
149 invoke (EVENT_ATTACHABLE_DESTROY, DT_END);
150
151 if (self) 149 if (self)
150 {
152 hv_clear (self); 151 hv_clear (self);
152 sv_unmagic ((SV *)self, PERL_MAGIC_ext);
153 // self is now 0
154 assert (!self);//D//TODO remove soon
155 }
153 156
154 //TODO: call generic destroy callback
155 mortals.push_back (this); 157 mortals.push_back (this);
156} 158}
157 159
158void 160void
159attachable::destroy () 161attachable::destroy ()
163 165
164 flags |= F_DESTROYED; 166 flags |= F_DESTROYED;
165 do_destroy (); 167 do_destroy ();
166} 168}
167 169
170void
168void attachable::check_mortals () 171attachable::check_mortals ()
169{ 172{
170 for (int i = 0; i < mortals.size (); ) 173 static int i = 0;
174
175 for (;;)
171 { 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
172 attachable *obj = mortals [i]; 187 attachable *obj = mortals [i];
173 188
174 obj->refcnt_chk (); // unborrow from perl, if necessary 189 obj->refcnt_chk (); // unborrow from perl, if necessary
175 190
191 //if (obj->refcnt > 0 || obj->self)
176 if (obj->refcnt || obj->self) 192 if (obj->refcnt || obj->self)
177 { 193 {
178#if 0 194//printf ("%p rc %d\n", obj, obj->refcnt_cnt ());//D
179 if (mortals.size() > 5)fprintf (stderr, "%d delaying %d:%p:%s %d (self %p:%d)\n", time(0),i, obj, typeid (*obj).name (),
180 obj->refcnt, obj->self, obj->self ? SvREFCNT(obj->self): - 1);//D
181#endif
182
183 ++i; // further delay freeing 195 ++i; // further delay freeing
196
197 if (!(i & 0x3ff))
198 break;
184 }//D 199 }
185 else 200 else
186 { 201 {
187 //Dfprintf (stderr, "deleteing %d:%p:%s\n", i, obj,typeid (*obj).name ());//D
188 mortals.erase (i); 202 mortals.erase (i);
189 delete obj; 203 delete obj;
190 } 204 }
191 } 205 }
192} 206}
217 231
218static int 232static int
219attachable_free (pTHX_ SV *sv, MAGIC *mg) 233attachable_free (pTHX_ SV *sv, MAGIC *mg)
220{ 234{
221 attachable *at = (attachable *)mg->mg_ptr; 235 attachable *at = (attachable *)mg->mg_ptr;
222 assert (!(at->flags & attachable::F_BORROWED));//D//TODO//remove when stable 236
237 //TODO: check if transaction behaviour is really required here
238 if (SV *self = (SV *)at->self)
239 {
223 at->self = 0; 240 at->self = 0;
241 SvREFCNT_dec (self);
242 }
243
224 // 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
225 //at->refcnt_chk (); 245 //at->refcnt_chk ();
226 return 0; 246 return 0;
227} 247}
228 248
237 if (!obj->self) 257 if (!obj->self)
238 { 258 {
239 obj->self = newHV (); 259 obj->self = newHV ();
240 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);
241 261
242 // borrow the refcnt from the object 262 // now bless the object _once_
243 obj->flags |= attachable::F_BORROWED; 263 return sv_bless (newRV_inc ((SV *)obj->self), stash);
244 obj->refcnt_dec ();
245 } 264 }
265 else
266 {
267 SV *sv = newRV_inc ((SV *)obj->self);
246 268
247 return sv_bless (newRV_inc ((SV *)obj->self), stash); 269 if (Gv_AMG (stash)) // handle overload correctly, as the perl core does not
270 SvAMAGIC_on (sv);
271
272 return sv;
273 }
248} 274}
249 275
250static void 276static void
251clearSVptr (SV *sv) 277clearSVptr (SV *sv)
252{ 278{
305inline 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); }
306 332
307inline SV *to_sv (object & v) { return to_sv (&v); } 333inline SV *to_sv (object & v) { return to_sv (&v); }
308inline SV *to_sv (living & v) { return to_sv (&v); } 334inline SV *to_sv (living & v) { return to_sv (&v); }
309 335
310//TODO:
311inline SV *to_sv (New_Face * v) { return to_sv (v->name); } 336inline SV *to_sv (facetile * v) { return to_sv (v->name); }
312inline SV *to_sv (treasurelist * v) { return to_sv (v->name); } 337inline SV *to_sv (treasurelist * v) { return to_sv (v->name); }
313 338
314inline SV *to_sv (UUID v) 339inline SV *to_sv (UUID v)
315{ 340{
316 char buf[128]; 341 char buf[128];
341inline 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"); }
342inline 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"); }
343inline 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"); }
344inline 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"); }
345 370
346inline 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)]; }
347inline 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)); }
348 373
349template<class T> 374template<class T>
350inline 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; }
351 376
352template<int N> 377template<int N>
487{ 512{
488 if (!ext->cb) 513 if (!ext->cb)
489 ext->cb = newAV (); 514 ext->cb = newAV ();
490 515
491 return newRV_inc ((SV *)ext->cb); 516 return newRV_inc ((SV *)ext->cb);
492}
493
494#if 0
495void attachable::clear ()
496{
497 if (self)
498 {
499 // disconnect Perl from C, to avoid crashes
500 sv_unmagic (SvRV ((SV *)self), PERL_MAGIC_ext);
501
502 // clear the perl hash, might or might not be a good idea
503 hv_clear ((HV *)SvRV ((SV *)self));
504
505 SvREFCNT_dec (self);
506 self = 0;
507 }
508
509 if (cb)
510 {
511 SvREFCNT_dec (cb);
512 cb = 0;
513 }
514
515 attach = 0;
516}
517#endif
518
519void attachable::optimise ()
520{
521 if (self
522 && SvREFCNT (self) == 1
523 && !HvTOTALKEYS (self))
524 {
525 flags &= ~F_BORROWED;
526 refcnt_inc ();
527 SvREFCNT_dec ((SV *)self);
528 }
529} 517}
530 518
531///////////////////////////////////////////////////////////////////////////// 519/////////////////////////////////////////////////////////////////////////////
532 520
533extern "C" int cfperl_initPlugin (const char *iversion, f_plug_api gethooksptr) 521extern "C" int cfperl_initPlugin (const char *iversion, f_plug_api gethooksptr)
829} 817}
830 818
831///////////////////////////////////////////////////////////////////////////// 819/////////////////////////////////////////////////////////////////////////////
832 820
833void 821void
834maptile::emergency_save () 822cfperl_emergency_save ()
835{ 823{
836 CALL_BEGIN (0); 824 CALL_BEGIN (0);
837 CALL_CALL ("cf::map::emergency_save", G_VOID); 825 CALL_CALL ("cf::emergency_save", G_VOID);
838 CALL_END; 826 CALL_END;
839} 827}
840 828
841maptile * 829maptile *
842maptile::find_sync (const char *path, maptile *origin) 830maptile::find_sync (const char *path, maptile *origin)
843{ 831{
844 CALL_BEGIN (2); 832 CALL_BEGIN (2);
845 CALL_ARG (path); 833 CALL_ARG (path);
846 CALL_ARG (origin); 834 CALL_ARG (origin);
847 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);
848 856
849 maptile *retval; 857 maptile *retval;
850 858
851 if (count) 859 if (count)
852 sv_to (POPs, retval); 860 sv_to (POPs, retval);
905void 913void
906iw::alloc () 914iw::alloc ()
907{ 915{
908 pe = GEventAPI->new_idle (0, 0); 916 pe = GEventAPI->new_idle (0, 0);
909 917
918 WaREENTRANT_off (pe);
910 pe->base.callback = (void *)iw_dispatch; 919 pe->base.callback = (void *)iw_dispatch;
911 pe->base.ext_data = (void *)this; 920 pe->base.ext_data = (void *)this;
912} 921}
913 922
914static void iow_dispatch (pe_event *ev) 923static void iow_dispatch (pe_event *ev)
920void 929void
921iow::alloc () 930iow::alloc ()
922{ 931{
923 pe = GEventAPI->new_io (0, 0); 932 pe = GEventAPI->new_io (0, 0);
924 933
934 WaREENTRANT_off (pe);
925 pe->base.callback = (void *)iow_dispatch; 935 pe->base.callback = (void *)iow_dispatch;
926 pe->base.ext_data = (void *)this; 936 pe->base.ext_data = (void *)this;
927 937
928 pe->fd = -1; 938 pe->fd = -1;
929 pe->poll = 0; 939 pe->poll = 0;
1257 const_iv (FLAG_ACTIVATE_ON_RELEASE) 1267 const_iv (FLAG_ACTIVATE_ON_RELEASE)
1258 const_iv (FLAG_IS_WATER) 1268 const_iv (FLAG_IS_WATER)
1259 const_iv (FLAG_CONTENT_ON_GEN) 1269 const_iv (FLAG_CONTENT_ON_GEN)
1260 const_iv (FLAG_IS_A_TEMPLATE) 1270 const_iv (FLAG_IS_A_TEMPLATE)
1261 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)
1262 1274
1263 const_iv (NDI_BLACK) 1275 const_iv (NDI_BLACK)
1264 const_iv (NDI_WHITE) 1276 const_iv (NDI_WHITE)
1265 const_iv (NDI_NAVY) 1277 const_iv (NDI_NAVY)
1266 const_iv (NDI_RED) 1278 const_iv (NDI_RED)
1451 const_iv (ATNR_BLIND) 1463 const_iv (ATNR_BLIND)
1452 const_iv (ATNR_INTERNAL) 1464 const_iv (ATNR_INTERNAL)
1453 const_iv (ATNR_LIFE_STEALING) 1465 const_iv (ATNR_LIFE_STEALING)
1454 const_iv (ATNR_DISEASE) 1466 const_iv (ATNR_DISEASE)
1455 1467
1456 const_iv (MAP_FLUSH)
1457 const_iv (MAP_PLAYER_UNIQUE)
1458 const_iv (MAP_BLOCK)
1459 const_iv (MAP_STYLE)
1460 const_iv (MAP_OVERLAY)
1461
1462 const_iv (MAP_IN_MEMORY) 1468 const_iv (MAP_IN_MEMORY)
1463 const_iv (MAP_SWAPPED) 1469 const_iv (MAP_SWAPPED)
1464 const_iv (MAP_LOADING) 1470 const_iv (MAP_LOADING)
1465 const_iv (MAP_SAVING) 1471 const_iv (MAP_SAVING)
1466 1472
1559} 1565}
1560 1566
1561NV floor (NV x) 1567NV floor (NV x)
1562 1568
1563NV 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
1564 1582
1565void server_tick () 1583void server_tick ()
1566 CODE: 1584 CODE:
1567 runtime = SvNVx (sv_runtime); 1585 runtime = SvNVx (sv_runtime);
1568 server_tick (); 1586 server_tick ();
1615 } 1633 }
1616 OUTPUT: RETVAL 1634 OUTPUT: RETVAL
1617 1635
1618void abort () 1636void abort ()
1619 1637
1638void fork_abort (char *cause = "cf::fork_abort")
1639
1640void cleanup (const char *cause, bool make_core = false)
1641
1620void emergency_save () 1642void emergency_save ()
1643
1644UV sv_2watcher (SV *w)
1645 CODE:
1646 RETVAL = (UV)GEventAPI->sv_2watcher (w);
1647 OUTPUT:
1648 RETVAL
1621 1649
1622void _exit (int status = 0) 1650void _exit (int status = 0)
1623 1651
1624#if _POSIX_MEMLOCK 1652#if _POSIX_MEMLOCK
1625 1653
1682 CODE: 1710 CODE:
1683 RETVAL = SvROK (obj) && mg_find (SvRV (obj), PERL_MAGIC_ext); 1711 RETVAL = SvROK (obj) && mg_find (SvRV (obj), PERL_MAGIC_ext);
1684 OUTPUT: 1712 OUTPUT:
1685 RETVAL 1713 RETVAL
1686 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
1687INCLUDE: $PERL genacc attachable ../include/cfperl.h | 1725INCLUDE: $PERL genacc attachable ../include/cfperl.h |
1688 1726
1689MODULE = cf PACKAGE = cf::global 1727MODULE = cf PACKAGE = cf::global
1690 1728
1691int invoke (SV *klass, int event, ...) 1729int invoke (SV *klass, int event, ...)
1708 RETVAL = op->invoke ((event_type)event, ARG_AV (av), DT_END); 1746 RETVAL = op->invoke ((event_type)event, ARG_AV (av), DT_END);
1709 OUTPUT: RETVAL 1747 OUTPUT: RETVAL
1710 1748
1711SV *registry (object *op) 1749SV *registry (object *op)
1712 1750
1713void mortals () 1751int objects_size ()
1714 PPCODE: 1752 CODE:
1715 EXTEND (SP, object::mortals.size ());
1716 for (AUTODECL (i, object::mortals.begin ()); i != object::mortals.end (); ++i)
1717 PUSHs (to_sv (*i));
1718
1719object *first ()
1720 CODE:
1721 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;
1722 OUTPUT: RETVAL 1769 OUTPUT: RETVAL
1723 1770
1724# missing properties 1771# missing properties
1725 1772
1726object *head (object *op) 1773object *head (object *op)
1727 PROTOTYPE: $ 1774 PROTOTYPE: $
1728 CODE: 1775 CODE:
1729 RETVAL = op->head ? op->head : op; 1776 RETVAL = op->head_ ();
1730 OUTPUT: RETVAL 1777 OUTPUT: RETVAL
1731 1778
1732int is_head (object *op) 1779int is_head (object *op)
1733 PROTOTYPE: $ 1780 PROTOTYPE: $
1734 CODE: 1781 CODE:
1735 RETVAL = !op->head; 1782 RETVAL = op->head_ () == op;
1736 OUTPUT: RETVAL 1783 OUTPUT: RETVAL
1737 1784
1738void 1785void
1739inv (object *obj) 1786inv (object *obj)
1740 PROTOTYPE: $ 1787 PROTOTYPE: $
1831 1878
1832void drop (object *who, object *op) 1879void drop (object *who, object *op)
1833 1880
1834void pick_up (object *who, object *op) 1881void pick_up (object *who, object *op)
1835 1882
1836object *cf_object_insert_object (object *op, object *container)
1837
1838object *cf_object_insert_in_ob (object *ob, object *where)
1839
1840int cf_object_teleport (object *op, maptile *map, int x, int y) 1883int cf_object_teleport (object *op, maptile *map, int x, int y)
1841 1884
1842void update_object (object *op, int action) 1885void update_object (object *op, int action)
1843 1886
1844object *cf_create_object_by_name (const char *name) 1887object *cf_create_object_by_name (const char *name)
1962 2005
1963void esrv_update_item (object *op, int what, object *item) 2006void esrv_update_item (object *op, int what, object *item)
1964 C_ARGS: what, op, item 2007 C_ARGS: what, op, item
1965 2008
1966void clear_los (object *op) 2009void clear_los (object *op)
1967
1968int command_teleport (object *op, char *params)
1969 2010
1970int command_summon (object *op, char *params) 2011int command_summon (object *op, char *params)
1971 2012
1972int command_arrest (object *op, char *params) 2013int command_arrest (object *op, char *params)
1973 2014
2053list () 2094list ()
2054 PPCODE: 2095 PPCODE:
2055 for_all_players (pl) 2096 for_all_players (pl)
2056 XPUSHs (sv_2mortal (to_sv (pl))); 2097 XPUSHs (sv_2mortal (to_sv (pl)));
2057 2098
2058bool
2059peaceful (player *pl, bool new_setting = 0)
2060 PROTOTYPE: $;$
2061 CODE:
2062 RETVAL = pl->peaceful;
2063 if (items > 1)
2064 pl->peaceful = new_setting;
2065 OUTPUT:
2066 RETVAL
2067
2068living *
2069orig_stats (player *pl)
2070 CODE:
2071 RETVAL = &pl->orig_stats;
2072 OUTPUT: RETVAL
2073
2074living *
2075last_stats (player *pl)
2076 CODE:
2077 RETVAL = &pl->last_stats;
2078 OUTPUT: RETVAL
2079
2080 2099
2081MODULE = cf PACKAGE = cf::map PREFIX = cf_map_ 2100MODULE = cf PACKAGE = cf::map PREFIX = cf_map_
2082 2101
2083int invoke (maptile *map, int event, ...) 2102int invoke (maptile *map, int event, ...)
2084 CODE: 2103 CODE:
2138 2157
2139object* 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)
2140 C_ARGS: str, map, nx, ny 2159 C_ARGS: str, map, nx, ny
2141 2160
2142void 2161void
2143cf_map_normalise (maptile *map, int x, int y) 2162get_map_flags (maptile *map, int x, int y)
2144 PPCODE: 2163 PPCODE:
2145{ 2164{
2146 maptile *nmap = 0; 2165 maptile *nmap = 0;
2147 I16 nx = 0, ny = 0; 2166 I16 nx = 0, ny = 0;
2148 int flags = get_map_flags (map, &nmap, x, y, &nx, &ny); 2167 int flags = get_map_flags (map, &nmap, x, y, &nx, &ny);
2210 CODE: 2229 CODE:
2211 RETVAL = get_name_of_region_for_map (m); 2230 RETVAL = get_name_of_region_for_map (m);
2212 OUTPUT: RETVAL 2231 OUTPUT: RETVAL
2213 2232
2214# worst xs function of my life 2233# worst xs function of my life
2215maptile * 2234bool
2216_create_random_map (\ 2235_create_random_map (\
2217 char *path,\ 2236 maptile *self,\
2218 char *wallstyle,\ 2237 char *wallstyle,\
2219 char *wall_name,\ 2238 char *wall_name,\
2220 char *floorstyle,\ 2239 char *floorstyle,\
2221 char *monsterstyle,\ 2240 char *monsterstyle,\
2222 char *treasurestyle,\ 2241 char *treasurestyle,\
2226 char *origin_map,\ 2245 char *origin_map,\
2227 char *final_map,\ 2246 char *final_map,\
2228 char *exitstyle,\ 2247 char *exitstyle,\
2229 char *this_map,\ 2248 char *this_map,\
2230 char *exit_on_final_map,\ 2249 char *exit_on_final_map,\
2231 int Xsize,\ 2250 int xsize,\
2232 int Ysize,\ 2251 int ysize,\
2233 int expand2x,\ 2252 int expand2x,\
2234 int layoutoptions1,\ 2253 int layoutoptions1,\
2235 int layoutoptions2,\ 2254 int layoutoptions2,\
2236 int layoutoptions3,\ 2255 int layoutoptions3,\
2237 int symmetry,\ 2256 int symmetry,\
2242 int dungeon_depth,\ 2261 int dungeon_depth,\
2243 int decoroptions,\ 2262 int decoroptions,\
2244 int orientation,\ 2263 int orientation,\
2245 int origin_y,\ 2264 int origin_y,\
2246 int origin_x,\ 2265 int origin_x,\
2247 int random_seed,\ 2266 U32 random_seed,\
2248 val64 total_map_hp,\ 2267 val64 total_map_hp,\
2249 int map_layout_style,\ 2268 int map_layout_style,\
2250 int treasureoptions,\ 2269 int treasureoptions,\
2251 int symmetry_used,\ 2270 int symmetry_used,\
2252 region *region\ 2271 region *region,\
2272 char *custom\
2253) 2273)
2254 CODE: 2274 CODE:
2255{ 2275{
2256 random_map_params rmp; 2276 random_map_params rmp;
2257 2277
2267 assign (rmp.exit_on_final_map, exit_on_final_map); 2287 assign (rmp.exit_on_final_map, exit_on_final_map);
2268 2288
2269 rmp.origin_map = origin_map; 2289 rmp.origin_map = origin_map;
2270 rmp.final_map = final_map; 2290 rmp.final_map = final_map;
2271 rmp.this_map = this_map; 2291 rmp.this_map = this_map;
2272 rmp.Xsize = Xsize; 2292 rmp.xsize = xsize;
2273 rmp.Ysize = Ysize; 2293 rmp.ysize = ysize;
2274 rmp.expand2x = expand2x; 2294 rmp.expand2x = expand2x;
2275 rmp.layoutoptions1 = layoutoptions1; 2295 rmp.layoutoptions1 = layoutoptions1;
2276 rmp.layoutoptions2 = layoutoptions2; 2296 rmp.layoutoptions2 = layoutoptions2;
2277 rmp.layoutoptions3 = layoutoptions3; 2297 rmp.layoutoptions3 = layoutoptions3;
2278 rmp.symmetry = symmetry; 2298 rmp.symmetry = symmetry;
2289 rmp.total_map_hp = total_map_hp; 2309 rmp.total_map_hp = total_map_hp;
2290 rmp.map_layout_style = map_layout_style; 2310 rmp.map_layout_style = map_layout_style;
2291 rmp.treasureoptions = treasureoptions; 2311 rmp.treasureoptions = treasureoptions;
2292 rmp.symmetry_used = symmetry_used; 2312 rmp.symmetry_used = symmetry_used;
2293 rmp.region = region; 2313 rmp.region = region;
2314 rmp.custom = custom;
2294 2315
2295 RETVAL = generate_random_map (path, &rmp); 2316 RETVAL = self->generate_random_map (&rmp);
2296} 2317}
2297 OUTPUT: 2318 OUTPUT:
2298 RETVAL 2319 RETVAL
2299 2320
2300MODULE = cf PACKAGE = cf::arch 2321MODULE = cf PACKAGE = cf::arch

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines