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.154 by root, Fri Jan 26 21:44:11 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 *self = (SV *)this->self;
124
125 SvREFCNT_inc (self);
126 sv_unmagic (self, PERL_MAGIC_ext);
127 SvREFCNT_dec (self);
128 assert (!this->self);
129 }
122} 130}
123 131
124// check wether the object really is dead 132// check wether the object really is dead
125void 133void
126attachable::do_check () 134attachable::do_check ()
127{ 135{
128 if (refcnt > 0) 136 if (refcnt_cnt () > 0)
129 return; 137 return;
130 138
131 // try to unborrow the refcnt from perl 139 destroy ();
132 if (flags & F_BORROWED) 140}
141
142void
143attachable::do_destroy ()
144{
145 invoke (EVENT_ATTACHABLE_DESTROY, DT_END);
146
147 if (cb)
133 { 148 {
134 assert (self);//D//TODO//remove when stable 149 SvREFCNT_dec (cb);
135 flags &= ~F_BORROWED; 150 cb = 0;
136 refcnt_inc (); 151 }
152
153 if (self)
154 {
155 hv_clear (self);
156
157 SV *self = (SV *)this->self;
158 SvREFCNT_inc (self);
159 sv_unmagic (self, PERL_MAGIC_ext);
137 SvREFCNT_dec (self); 160 SvREFCNT_dec (self);
161 // self is now 0
162 assert (!this->self);//D//TODO remove soon
138 } 163 }
139 164
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)
152 hv_clear (self);
153
154 //TODO: call generic destroy callback
155 mortals.push_back (this); 165 mortals.push_back (this);
156} 166}
157 167
158void 168void
159attachable::destroy () 169attachable::destroy ()
163 173
164 flags |= F_DESTROYED; 174 flags |= F_DESTROYED;
165 do_destroy (); 175 do_destroy ();
166} 176}
167 177
178void
168void attachable::check_mortals () 179attachable::check_mortals ()
169{ 180{
170 for (int i = 0; i < mortals.size (); ) 181 static int i = 0;
182
183 for (;;)
171 { 184 {
185 if (i >= mortals.size ())
186 {
187 i = 0;
188
189 if (mortals.size () > 1000)
190 fprintf (stderr, "mortal queue size (%d) exceeds 1000.\n", (int)mortals.size ());
191
192 break;
193 }
194
172 attachable *obj = mortals [i]; 195 attachable *obj = mortals [i];
173 196
174 obj->refcnt_chk (); // unborrow from perl, if necessary 197 obj->refcnt_chk (); // unborrow from perl, if necessary
175 198
199 //if (obj->refcnt > 0 || obj->self)
176 if (obj->refcnt || obj->self) 200 if (obj->refcnt || obj->self)
177 { 201 {
178#if 0 202//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 203 ++i; // further delay freeing
204
205 if (!(i & 0x3ff))
206 break;
184 }//D 207 }
185 else 208 else
186 { 209 {
187 //Dfprintf (stderr, "deleteing %d:%p:%s\n", i, obj,typeid (*obj).name ());//D
188 mortals.erase (i); 210 mortals.erase (i);
189 delete obj; 211 delete obj;
190 } 212 }
191 } 213 }
192} 214}
217 239
218static int 240static int
219attachable_free (pTHX_ SV *sv, MAGIC *mg) 241attachable_free (pTHX_ SV *sv, MAGIC *mg)
220{ 242{
221 attachable *at = (attachable *)mg->mg_ptr; 243 attachable *at = (attachable *)mg->mg_ptr;
222 assert (!(at->flags & attachable::F_BORROWED));//D//TODO//remove when stable 244
245 //TODO: check if transaction behaviour is really required here
246 if (SV *self = (SV *)at->self)
247 {
223 at->self = 0; 248 at->self = 0;
249 SvREFCNT_dec (self);
250 }
251
224 // next line makes sense, but most objects still have refcnt 0 by default 252 // next line makes sense, but most objects still have refcnt 0 by default
225 //at->refcnt_chk (); 253 //at->refcnt_chk ();
226 return 0; 254 return 0;
227} 255}
228 256
237 if (!obj->self) 265 if (!obj->self)
238 { 266 {
239 obj->self = newHV (); 267 obj->self = newHV ();
240 sv_magicext ((SV *)obj->self, 0, PERL_MAGIC_ext, &attachable::vtbl, (char *)obj, 0); 268 sv_magicext ((SV *)obj->self, 0, PERL_MAGIC_ext, &attachable::vtbl, (char *)obj, 0);
241 269
242 // borrow the refcnt from the object 270 // now bless the object _once_
243 obj->flags |= attachable::F_BORROWED; 271 return sv_bless (newRV_inc ((SV *)obj->self), stash);
244 obj->refcnt_dec ();
245 } 272 }
273 else
274 {
275 SV *sv = newRV_inc ((SV *)obj->self);
246 276
247 return sv_bless (newRV_inc ((SV *)obj->self), stash); 277 if (Gv_AMG (stash)) // handle overload correctly, as the perl core does not
278 SvAMAGIC_on (sv);
279
280 return sv;
281 }
248} 282}
249 283
250static void 284static void
251clearSVptr (SV *sv) 285clearSVptr (SV *sv)
252{ 286{
305inline SV *to_sv (living * v) { return newSVptr (v, stash_cf_living_wrap); } 339inline SV *to_sv (living * v) { return newSVptr (v, stash_cf_living_wrap); }
306 340
307inline SV *to_sv (object & v) { return to_sv (&v); } 341inline SV *to_sv (object & v) { return to_sv (&v); }
308inline SV *to_sv (living & v) { return to_sv (&v); } 342inline SV *to_sv (living & v) { return to_sv (&v); }
309 343
310//TODO:
311inline SV *to_sv (New_Face * v) { return to_sv (v->name); } 344inline SV *to_sv (facetile * v) { return to_sv (v->name); }
312inline SV *to_sv (treasurelist * v) { return to_sv (v->name); } 345inline SV *to_sv (treasurelist * v) { return to_sv (v->name); }
313 346
314inline SV *to_sv (UUID v) 347inline SV *to_sv (UUID v)
315{ 348{
316 char buf[128]; 349 char buf[128];
341inline void sv_to (SV *sv, attachable * &v) { v = (attachable *)SvPTR_ornull (sv, "cf::attachable"); } 374inline 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"); } 375inline 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"); } 376inline 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"); } 377inline void sv_to (SV *sv, living * &v) { v = (living *)SvPTR_ornull (sv, "cf::living"); }
345 378
346inline void sv_to (SV *sv, New_Face * &v) { v = &new_faces[FindFace (SvPV_nolen (sv), 0)]; } //TODO 379inline 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 380inline void sv_to (SV *sv, treasurelist * &v) { v = find_treasurelist (SvPV_nolen (sv)); }
348 381
349template<class T> 382template<class T>
350inline void sv_to (SV *sv, refptr<T> &v) { T *tmp; sv_to (sv, tmp); v = tmp; } 383inline void sv_to (SV *sv, refptr<T> &v) { T *tmp; sv_to (sv, tmp); v = tmp; }
351 384
352template<int N> 385template<int N>
487{ 520{
488 if (!ext->cb) 521 if (!ext->cb)
489 ext->cb = newAV (); 522 ext->cb = newAV ();
490 523
491 return newRV_inc ((SV *)ext->cb); 524 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} 525}
530 526
531///////////////////////////////////////////////////////////////////////////// 527/////////////////////////////////////////////////////////////////////////////
532 528
533extern "C" int cfperl_initPlugin (const char *iversion, f_plug_api gethooksptr) 529extern "C" int cfperl_initPlugin (const char *iversion, f_plug_api gethooksptr)
829} 825}
830 826
831///////////////////////////////////////////////////////////////////////////// 827/////////////////////////////////////////////////////////////////////////////
832 828
833void 829void
834maptile::emergency_save () 830cfperl_emergency_save ()
835{ 831{
836 CALL_BEGIN (0); 832 CALL_BEGIN (0);
837 CALL_CALL ("cf::map::emergency_save", G_VOID); 833 CALL_CALL ("cf::emergency_save", G_VOID);
838 CALL_END; 834 CALL_END;
839} 835}
840 836
841maptile * 837maptile *
842maptile::find_sync (const char *path, maptile *origin) 838maptile::find_sync (const char *path, maptile *origin)
843{ 839{
844 CALL_BEGIN (2); 840 CALL_BEGIN (2);
845 CALL_ARG (path); 841 CALL_ARG (path);
846 CALL_ARG (origin); 842 CALL_ARG (origin);
847 CALL_CALL ("cf::map::find_sync", G_SCALAR); 843 CALL_CALL ("cf::map::find_sync", G_SCALAR);
844
845 maptile *retval;
846
847 if (count)
848 sv_to (POPs, retval);
849 else
850 retval = 0;
851
852 CALL_END;
853
854 return retval;
855}
856
857maptile *
858maptile::find_async (const char *path, maptile *origin)
859{
860 CALL_BEGIN (2);
861 CALL_ARG (path);
862 CALL_ARG (origin);
863 CALL_CALL ("cf::map::find_async", G_SCALAR);
848 864
849 maptile *retval; 865 maptile *retval;
850 866
851 if (count) 867 if (count)
852 sv_to (POPs, retval); 868 sv_to (POPs, retval);
905void 921void
906iw::alloc () 922iw::alloc ()
907{ 923{
908 pe = GEventAPI->new_idle (0, 0); 924 pe = GEventAPI->new_idle (0, 0);
909 925
926 WaREENTRANT_off (pe);
910 pe->base.callback = (void *)iw_dispatch; 927 pe->base.callback = (void *)iw_dispatch;
911 pe->base.ext_data = (void *)this; 928 pe->base.ext_data = (void *)this;
912} 929}
913 930
914static void iow_dispatch (pe_event *ev) 931static void iow_dispatch (pe_event *ev)
920void 937void
921iow::alloc () 938iow::alloc ()
922{ 939{
923 pe = GEventAPI->new_io (0, 0); 940 pe = GEventAPI->new_io (0, 0);
924 941
942 WaREENTRANT_off (pe);
925 pe->base.callback = (void *)iow_dispatch; 943 pe->base.callback = (void *)iow_dispatch;
926 pe->base.ext_data = (void *)this; 944 pe->base.ext_data = (void *)this;
927 945
928 pe->fd = -1; 946 pe->fd = -1;
929 pe->poll = 0; 947 pe->poll = 0;
1257 const_iv (FLAG_ACTIVATE_ON_RELEASE) 1275 const_iv (FLAG_ACTIVATE_ON_RELEASE)
1258 const_iv (FLAG_IS_WATER) 1276 const_iv (FLAG_IS_WATER)
1259 const_iv (FLAG_CONTENT_ON_GEN) 1277 const_iv (FLAG_CONTENT_ON_GEN)
1260 const_iv (FLAG_IS_A_TEMPLATE) 1278 const_iv (FLAG_IS_A_TEMPLATE)
1261 const_iv (FLAG_IS_BUILDABLE) 1279 const_iv (FLAG_IS_BUILDABLE)
1280 const_iv (FLAG_DESTROY_ON_DEATH)
1281 const_iv (FLAG_NO_MAP_SAVE)
1262 1282
1263 const_iv (NDI_BLACK) 1283 const_iv (NDI_BLACK)
1264 const_iv (NDI_WHITE) 1284 const_iv (NDI_WHITE)
1265 const_iv (NDI_NAVY) 1285 const_iv (NDI_NAVY)
1266 const_iv (NDI_RED) 1286 const_iv (NDI_RED)
1451 const_iv (ATNR_BLIND) 1471 const_iv (ATNR_BLIND)
1452 const_iv (ATNR_INTERNAL) 1472 const_iv (ATNR_INTERNAL)
1453 const_iv (ATNR_LIFE_STEALING) 1473 const_iv (ATNR_LIFE_STEALING)
1454 const_iv (ATNR_DISEASE) 1474 const_iv (ATNR_DISEASE)
1455 1475
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) 1476 const_iv (MAP_IN_MEMORY)
1463 const_iv (MAP_SWAPPED) 1477 const_iv (MAP_SWAPPED)
1464 const_iv (MAP_LOADING) 1478 const_iv (MAP_LOADING)
1465 const_iv (MAP_SAVING) 1479 const_iv (MAP_SAVING)
1466 1480
1559} 1573}
1560 1574
1561NV floor (NV x) 1575NV floor (NV x)
1562 1576
1563NV ceil (NV x) 1577NV ceil (NV x)
1578
1579NV rndm (...)
1580 CODE:
1581 switch (items)
1582 {
1583 case 0: RETVAL = rndm (); break;
1584 case 1: RETVAL = rndm (SvUV (ST (0))); break;
1585 case 2: RETVAL = rndm (SvIV (ST (0)), SvIV (ST (1))); break;
1586 default: croak ("cf::rndm requires none, one or two parameters."); break;
1587 }
1588 OUTPUT:
1589 RETVAL
1564 1590
1565void server_tick () 1591void server_tick ()
1566 CODE: 1592 CODE:
1567 runtime = SvNVx (sv_runtime); 1593 runtime = SvNVx (sv_runtime);
1568 server_tick (); 1594 server_tick ();
1615 } 1641 }
1616 OUTPUT: RETVAL 1642 OUTPUT: RETVAL
1617 1643
1618void abort () 1644void abort ()
1619 1645
1646void fork_abort (char *cause = "cf::fork_abort")
1647
1648void cleanup (const char *cause, bool make_core = false)
1649
1620void emergency_save () 1650void emergency_save ()
1651
1652UV sv_2watcher (SV *w)
1653 CODE:
1654 RETVAL = (UV)GEventAPI->sv_2watcher (w);
1655 OUTPUT:
1656 RETVAL
1621 1657
1622void _exit (int status = 0) 1658void _exit (int status = 0)
1623 1659
1624#if _POSIX_MEMLOCK 1660#if _POSIX_MEMLOCK
1625 1661
1682 CODE: 1718 CODE:
1683 RETVAL = SvROK (obj) && mg_find (SvRV (obj), PERL_MAGIC_ext); 1719 RETVAL = SvROK (obj) && mg_find (SvRV (obj), PERL_MAGIC_ext);
1684 OUTPUT: 1720 OUTPUT:
1685 RETVAL 1721 RETVAL
1686 1722
1723int mortals_size ()
1724 CODE:
1725 RETVAL = attachable::mortals.size ();
1726 OUTPUT: RETVAL
1727
1728#object *mortals (U32 index)
1729# CODE:
1730# RETVAL = index < attachable::mortals.size () ? attachable::mortals [index] : 0;
1731# OUTPUT: RETVAL
1732
1687INCLUDE: $PERL genacc attachable ../include/cfperl.h | 1733INCLUDE: $PERL genacc attachable ../include/cfperl.h |
1688 1734
1689MODULE = cf PACKAGE = cf::global 1735MODULE = cf PACKAGE = cf::global
1690 1736
1691int invoke (SV *klass, int event, ...) 1737int invoke (SV *klass, int event, ...)
1708 RETVAL = op->invoke ((event_type)event, ARG_AV (av), DT_END); 1754 RETVAL = op->invoke ((event_type)event, ARG_AV (av), DT_END);
1709 OUTPUT: RETVAL 1755 OUTPUT: RETVAL
1710 1756
1711SV *registry (object *op) 1757SV *registry (object *op)
1712 1758
1713void mortals () 1759int objects_size ()
1714 PPCODE: 1760 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; 1761 RETVAL = objects.size ();
1762 OUTPUT: RETVAL
1763
1764object *objects (U32 index)
1765 CODE:
1766 RETVAL = index < objects.size () ? objects [index] : 0;
1767 OUTPUT: RETVAL
1768
1769int actives_size ()
1770 CODE:
1771 RETVAL = actives.size ();
1772 OUTPUT: RETVAL
1773
1774object *actives (U32 index)
1775 CODE:
1776 RETVAL = index < actives.size () ? actives [index] : 0;
1722 OUTPUT: RETVAL 1777 OUTPUT: RETVAL
1723 1778
1724# missing properties 1779# missing properties
1725 1780
1726object *head (object *op) 1781object *head (object *op)
1727 PROTOTYPE: $ 1782 PROTOTYPE: $
1728 CODE: 1783 CODE:
1729 RETVAL = op->head ? op->head : op; 1784 RETVAL = op->head_ ();
1730 OUTPUT: RETVAL 1785 OUTPUT: RETVAL
1731 1786
1732int is_head (object *op) 1787int is_head (object *op)
1733 PROTOTYPE: $ 1788 PROTOTYPE: $
1734 CODE: 1789 CODE:
1735 RETVAL = !op->head; 1790 RETVAL = op->head_ () == op;
1736 OUTPUT: RETVAL 1791 OUTPUT: RETVAL
1737 1792
1738void 1793void
1739inv (object *obj) 1794inv (object *obj)
1740 PROTOTYPE: $ 1795 PROTOTYPE: $
1831 1886
1832void drop (object *who, object *op) 1887void drop (object *who, object *op)
1833 1888
1834void pick_up (object *who, object *op) 1889void pick_up (object *who, object *op)
1835 1890
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) 1891int cf_object_teleport (object *op, maptile *map, int x, int y)
1841 1892
1842void update_object (object *op, int action) 1893void update_object (object *op, int action)
1843 1894
1844object *cf_create_object_by_name (const char *name) 1895object *cf_create_object_by_name (const char *name)
1962 2013
1963void esrv_update_item (object *op, int what, object *item) 2014void esrv_update_item (object *op, int what, object *item)
1964 C_ARGS: what, op, item 2015 C_ARGS: what, op, item
1965 2016
1966void clear_los (object *op) 2017void clear_los (object *op)
1967
1968int command_teleport (object *op, char *params)
1969 2018
1970int command_summon (object *op, char *params) 2019int command_summon (object *op, char *params)
1971 2020
1972int command_arrest (object *op, char *params) 2021int command_arrest (object *op, char *params)
1973 2022
2053list () 2102list ()
2054 PPCODE: 2103 PPCODE:
2055 for_all_players (pl) 2104 for_all_players (pl)
2056 XPUSHs (sv_2mortal (to_sv (pl))); 2105 XPUSHs (sv_2mortal (to_sv (pl)));
2057 2106
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 2107
2081MODULE = cf PACKAGE = cf::map PREFIX = cf_map_ 2108MODULE = cf PACKAGE = cf::map PREFIX = cf_map_
2082 2109
2083int invoke (maptile *map, int event, ...) 2110int invoke (maptile *map, int event, ...)
2084 CODE: 2111 CODE:
2138 2165
2139object* cf_map_present_arch_by_name (maptile *map, const char* str, int nx, int ny) 2166object* cf_map_present_arch_by_name (maptile *map, const char* str, int nx, int ny)
2140 C_ARGS: str, map, nx, ny 2167 C_ARGS: str, map, nx, ny
2141 2168
2142void 2169void
2143cf_map_normalise (maptile *map, int x, int y) 2170get_map_flags (maptile *map, int x, int y)
2144 PPCODE: 2171 PPCODE:
2145{ 2172{
2146 maptile *nmap = 0; 2173 maptile *nmap = 0;
2147 I16 nx = 0, ny = 0; 2174 I16 nx = 0, ny = 0;
2148 int flags = get_map_flags (map, &nmap, x, y, &nx, &ny); 2175 int flags = get_map_flags (map, &nmap, x, y, &nx, &ny);
2210 CODE: 2237 CODE:
2211 RETVAL = get_name_of_region_for_map (m); 2238 RETVAL = get_name_of_region_for_map (m);
2212 OUTPUT: RETVAL 2239 OUTPUT: RETVAL
2213 2240
2214# worst xs function of my life 2241# worst xs function of my life
2215maptile * 2242bool
2216_create_random_map (\ 2243_create_random_map (\
2217 char *path,\ 2244 maptile *self,\
2218 char *wallstyle,\ 2245 char *wallstyle,\
2219 char *wall_name,\ 2246 char *wall_name,\
2220 char *floorstyle,\ 2247 char *floorstyle,\
2221 char *monsterstyle,\ 2248 char *monsterstyle,\
2222 char *treasurestyle,\ 2249 char *treasurestyle,\
2226 char *origin_map,\ 2253 char *origin_map,\
2227 char *final_map,\ 2254 char *final_map,\
2228 char *exitstyle,\ 2255 char *exitstyle,\
2229 char *this_map,\ 2256 char *this_map,\
2230 char *exit_on_final_map,\ 2257 char *exit_on_final_map,\
2231 int Xsize,\ 2258 int xsize,\
2232 int Ysize,\ 2259 int ysize,\
2233 int expand2x,\ 2260 int expand2x,\
2234 int layoutoptions1,\ 2261 int layoutoptions1,\
2235 int layoutoptions2,\ 2262 int layoutoptions2,\
2236 int layoutoptions3,\ 2263 int layoutoptions3,\
2237 int symmetry,\ 2264 int symmetry,\
2242 int dungeon_depth,\ 2269 int dungeon_depth,\
2243 int decoroptions,\ 2270 int decoroptions,\
2244 int orientation,\ 2271 int orientation,\
2245 int origin_y,\ 2272 int origin_y,\
2246 int origin_x,\ 2273 int origin_x,\
2247 int random_seed,\ 2274 U32 random_seed,\
2248 val64 total_map_hp,\ 2275 val64 total_map_hp,\
2249 int map_layout_style,\ 2276 int map_layout_style,\
2250 int treasureoptions,\ 2277 int treasureoptions,\
2251 int symmetry_used,\ 2278 int symmetry_used,\
2252 region *region\ 2279 region *region,\
2280 char *custom\
2253) 2281)
2254 CODE: 2282 CODE:
2255{ 2283{
2256 random_map_params rmp; 2284 random_map_params rmp;
2257 2285
2267 assign (rmp.exit_on_final_map, exit_on_final_map); 2295 assign (rmp.exit_on_final_map, exit_on_final_map);
2268 2296
2269 rmp.origin_map = origin_map; 2297 rmp.origin_map = origin_map;
2270 rmp.final_map = final_map; 2298 rmp.final_map = final_map;
2271 rmp.this_map = this_map; 2299 rmp.this_map = this_map;
2272 rmp.Xsize = Xsize; 2300 rmp.xsize = xsize;
2273 rmp.Ysize = Ysize; 2301 rmp.ysize = ysize;
2274 rmp.expand2x = expand2x; 2302 rmp.expand2x = expand2x;
2275 rmp.layoutoptions1 = layoutoptions1; 2303 rmp.layoutoptions1 = layoutoptions1;
2276 rmp.layoutoptions2 = layoutoptions2; 2304 rmp.layoutoptions2 = layoutoptions2;
2277 rmp.layoutoptions3 = layoutoptions3; 2305 rmp.layoutoptions3 = layoutoptions3;
2278 rmp.symmetry = symmetry; 2306 rmp.symmetry = symmetry;
2289 rmp.total_map_hp = total_map_hp; 2317 rmp.total_map_hp = total_map_hp;
2290 rmp.map_layout_style = map_layout_style; 2318 rmp.map_layout_style = map_layout_style;
2291 rmp.treasureoptions = treasureoptions; 2319 rmp.treasureoptions = treasureoptions;
2292 rmp.symmetry_used = symmetry_used; 2320 rmp.symmetry_used = symmetry_used;
2293 rmp.region = region; 2321 rmp.region = region;
2322 rmp.custom = custom;
2294 2323
2295 RETVAL = generate_random_map (path, &rmp); 2324 RETVAL = self->generate_random_map (&rmp);
2296} 2325}
2297 OUTPUT: 2326 OUTPUT:
2298 RETVAL 2327 RETVAL
2299 2328
2300MODULE = cf PACKAGE = cf::arch 2329MODULE = cf PACKAGE = cf::arch

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines