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.130 by root, Mon Jan 8 01:19:03 2007 UTC vs.
Revision 1.154 by root, Fri Jan 26 21:44:11 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 *self = (SV *)this->self;
123 refcnt_inc (); 124
125 SvREFCNT_inc (self);
126 sv_unmagic (self, PERL_MAGIC_ext);
124 SvREFCNT_dec ((SV *)self); 127 SvREFCNT_dec (self);
128 assert (!this->self);
125 } 129 }
126} 130}
127 131
128// check wether the object really is dead 132// check wether the object really is dead
129void 133void
130attachable::do_check () 134attachable::do_check ()
131{ 135{
132 if (refcnt > 0) 136 if (refcnt_cnt () > 0)
133 return; 137 return;
134 138
135 optimise (); 139 destroy ();
140}
141
142void
143attachable::do_destroy ()
144{
145 invoke (EVENT_ATTACHABLE_DESTROY, DT_END);
146
147 if (cb)
148 {
149 SvREFCNT_dec (cb);
150 cb = 0;
151 }
136 152
137 if (self) 153 if (self)
138 { 154 {
139 if (refcnt + SvREFCNT (self) > 0) 155 hv_clear (self);
140 return;
141 156
142 assert (flags & F_BORROWED); 157 SV *self = (SV *)this->self;
143 158 SvREFCNT_inc (self);
144 flags &= ~F_BORROWED; 159 sv_unmagic (self, PERL_MAGIC_ext);
145 refcnt_inc ();
146 SvREFCNT_dec (self); 160 SvREFCNT_dec (self);
147 self = 0; 161 // self is now 0
162 assert (!this->self);//D//TODO remove soon
148 } 163 }
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 164
164 mortals.push_back (this); 165 mortals.push_back (this);
165} 166}
166 167
167void 168void
175} 176}
176 177
177void 178void
178attachable::check_mortals () 179attachable::check_mortals ()
179{ 180{
180 for (int i = 0; i < mortals.size (); ) 181 static int i = 0;
182
183 for (;;)
181 { 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
182 attachable *obj = mortals [i]; 195 attachable *obj = mortals [i];
183 196
184 obj->refcnt_chk (); // unborrow from perl, if necessary 197 obj->refcnt_chk (); // unborrow from perl, if necessary
185 198
199 //if (obj->refcnt > 0 || obj->self)
186 if (obj->refcnt || obj->self) 200 if (obj->refcnt || obj->self)
187 { 201 {
188#if 0 202//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 203 ++i; // further delay freeing
204
205 if (!(i & 0x3ff))
206 break;
194 }//D 207 }
195 else 208 else
196 { 209 {
197 //Dfprintf (stderr, "deleteing %d:%p:%s\n", i, obj,typeid (*obj).name ());//D
198 mortals.erase (i); 210 mortals.erase (i);
199 delete obj; 211 delete obj;
200 } 212 }
201 } 213 }
202} 214}
227 239
228static int 240static int
229attachable_free (pTHX_ SV *sv, MAGIC *mg) 241attachable_free (pTHX_ SV *sv, MAGIC *mg)
230{ 242{
231 attachable *at = (attachable *)mg->mg_ptr; 243 attachable *at = (attachable *)mg->mg_ptr;
232 assert (!(at->flags & attachable::F_BORROWED)); 244
245 //TODO: check if transaction behaviour is really required here
246 if (SV *self = (SV *)at->self)
247 {
233 at->self = 0; 248 at->self = 0;
249 SvREFCNT_dec (self);
250 }
251
234 // 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
235 //at->refcnt_chk (); 253 //at->refcnt_chk ();
236 return 0; 254 return 0;
237} 255}
238 256
247 if (!obj->self) 265 if (!obj->self)
248 { 266 {
249 obj->self = newHV (); 267 obj->self = newHV ();
250 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);
251 269
252 // borrow the refcnt from the object
253 obj->flags |= attachable::F_BORROWED;
254 obj->refcnt_dec ();
255
256 // now bless the object _once_ 270 // now bless the object _once_
257 return sv_bless (newRV_inc ((SV *)obj->self), stash); 271 return sv_bless (newRV_inc ((SV *)obj->self), stash);
258 } 272 }
259 else 273 else
274 {
260 return newRV_inc ((SV *)obj->self); 275 SV *sv = newRV_inc ((SV *)obj->self);
276
277 if (Gv_AMG (stash)) // handle overload correctly, as the perl core does not
278 SvAMAGIC_on (sv);
279
280 return sv;
281 }
261} 282}
262 283
263static void 284static void
264clearSVptr (SV *sv) 285clearSVptr (SV *sv)
265{ 286{
318inline 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); }
319 340
320inline SV *to_sv (object & v) { return to_sv (&v); } 341inline SV *to_sv (object & v) { return to_sv (&v); }
321inline SV *to_sv (living & v) { return to_sv (&v); } 342inline SV *to_sv (living & v) { return to_sv (&v); }
322 343
323//TODO:
324inline SV *to_sv (New_Face * v) { return to_sv (v->name); } 344inline SV *to_sv (facetile * v) { return to_sv (v->name); }
325inline SV *to_sv (treasurelist * v) { return to_sv (v->name); } 345inline SV *to_sv (treasurelist * v) { return to_sv (v->name); }
326 346
327inline SV *to_sv (UUID v) 347inline SV *to_sv (UUID v)
328{ 348{
329 char buf[128]; 349 char buf[128];
354inline 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"); }
355inline 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"); }
356inline 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"); }
357inline 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"); }
358 378
359inline 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)]; }
360inline 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)); }
361 381
362template<class T> 382template<class T>
363inline 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; }
364 384
365template<int N> 385template<int N>
501 if (!ext->cb) 521 if (!ext->cb)
502 ext->cb = newAV (); 522 ext->cb = newAV ();
503 523
504 return newRV_inc ((SV *)ext->cb); 524 return newRV_inc ((SV *)ext->cb);
505} 525}
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 526
532///////////////////////////////////////////////////////////////////////////// 527/////////////////////////////////////////////////////////////////////////////
533 528
534extern "C" int cfperl_initPlugin (const char *iversion, f_plug_api gethooksptr) 529extern "C" int cfperl_initPlugin (const char *iversion, f_plug_api gethooksptr)
535{ 530{
830} 825}
831 826
832///////////////////////////////////////////////////////////////////////////// 827/////////////////////////////////////////////////////////////////////////////
833 828
834void 829void
835maptile::emergency_save () 830cfperl_emergency_save ()
836{ 831{
837 CALL_BEGIN (0); 832 CALL_BEGIN (0);
838 CALL_CALL ("cf::map::emergency_save", G_VOID); 833 CALL_CALL ("cf::emergency_save", G_VOID);
839 CALL_END; 834 CALL_END;
840} 835}
841 836
842maptile * 837maptile *
843maptile::find_sync (const char *path, maptile *origin) 838maptile::find_sync (const char *path, maptile *origin)
844{ 839{
845 CALL_BEGIN (2); 840 CALL_BEGIN (2);
846 CALL_ARG (path); 841 CALL_ARG (path);
847 CALL_ARG (origin); 842 CALL_ARG (origin);
848 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);
849 864
850 maptile *retval; 865 maptile *retval;
851 866
852 if (count) 867 if (count)
853 sv_to (POPs, retval); 868 sv_to (POPs, retval);
906void 921void
907iw::alloc () 922iw::alloc ()
908{ 923{
909 pe = GEventAPI->new_idle (0, 0); 924 pe = GEventAPI->new_idle (0, 0);
910 925
926 WaREENTRANT_off (pe);
911 pe->base.callback = (void *)iw_dispatch; 927 pe->base.callback = (void *)iw_dispatch;
912 pe->base.ext_data = (void *)this; 928 pe->base.ext_data = (void *)this;
913} 929}
914 930
915static void iow_dispatch (pe_event *ev) 931static void iow_dispatch (pe_event *ev)
921void 937void
922iow::alloc () 938iow::alloc ()
923{ 939{
924 pe = GEventAPI->new_io (0, 0); 940 pe = GEventAPI->new_io (0, 0);
925 941
942 WaREENTRANT_off (pe);
926 pe->base.callback = (void *)iow_dispatch; 943 pe->base.callback = (void *)iow_dispatch;
927 pe->base.ext_data = (void *)this; 944 pe->base.ext_data = (void *)this;
928 945
929 pe->fd = -1; 946 pe->fd = -1;
930 pe->poll = 0; 947 pe->poll = 0;
1258 const_iv (FLAG_ACTIVATE_ON_RELEASE) 1275 const_iv (FLAG_ACTIVATE_ON_RELEASE)
1259 const_iv (FLAG_IS_WATER) 1276 const_iv (FLAG_IS_WATER)
1260 const_iv (FLAG_CONTENT_ON_GEN) 1277 const_iv (FLAG_CONTENT_ON_GEN)
1261 const_iv (FLAG_IS_A_TEMPLATE) 1278 const_iv (FLAG_IS_A_TEMPLATE)
1262 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)
1263 1282
1264 const_iv (NDI_BLACK) 1283 const_iv (NDI_BLACK)
1265 const_iv (NDI_WHITE) 1284 const_iv (NDI_WHITE)
1266 const_iv (NDI_NAVY) 1285 const_iv (NDI_NAVY)
1267 const_iv (NDI_RED) 1286 const_iv (NDI_RED)
1452 const_iv (ATNR_BLIND) 1471 const_iv (ATNR_BLIND)
1453 const_iv (ATNR_INTERNAL) 1472 const_iv (ATNR_INTERNAL)
1454 const_iv (ATNR_LIFE_STEALING) 1473 const_iv (ATNR_LIFE_STEALING)
1455 const_iv (ATNR_DISEASE) 1474 const_iv (ATNR_DISEASE)
1456 1475
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) 1476 const_iv (MAP_IN_MEMORY)
1464 const_iv (MAP_SWAPPED) 1477 const_iv (MAP_SWAPPED)
1465 const_iv (MAP_LOADING) 1478 const_iv (MAP_LOADING)
1466 const_iv (MAP_SAVING) 1479 const_iv (MAP_SAVING)
1467 1480
1560} 1573}
1561 1574
1562NV floor (NV x) 1575NV floor (NV x)
1563 1576
1564NV 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
1565 1590
1566void server_tick () 1591void server_tick ()
1567 CODE: 1592 CODE:
1568 runtime = SvNVx (sv_runtime); 1593 runtime = SvNVx (sv_runtime);
1569 server_tick (); 1594 server_tick ();
1616 } 1641 }
1617 OUTPUT: RETVAL 1642 OUTPUT: RETVAL
1618 1643
1619void abort () 1644void abort ()
1620 1645
1646void fork_abort (char *cause = "cf::fork_abort")
1647
1648void cleanup (const char *cause, bool make_core = false)
1649
1621void emergency_save () 1650void emergency_save ()
1651
1652UV sv_2watcher (SV *w)
1653 CODE:
1654 RETVAL = (UV)GEventAPI->sv_2watcher (w);
1655 OUTPUT:
1656 RETVAL
1622 1657
1623void _exit (int status = 0) 1658void _exit (int status = 0)
1624 1659
1625#if _POSIX_MEMLOCK 1660#if _POSIX_MEMLOCK
1626 1661
1683 CODE: 1718 CODE:
1684 RETVAL = SvROK (obj) && mg_find (SvRV (obj), PERL_MAGIC_ext); 1719 RETVAL = SvROK (obj) && mg_find (SvRV (obj), PERL_MAGIC_ext);
1685 OUTPUT: 1720 OUTPUT:
1686 RETVAL 1721 RETVAL
1687 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
1688INCLUDE: $PERL genacc attachable ../include/cfperl.h | 1733INCLUDE: $PERL genacc attachable ../include/cfperl.h |
1689 1734
1690MODULE = cf PACKAGE = cf::global 1735MODULE = cf PACKAGE = cf::global
1691 1736
1692int invoke (SV *klass, int event, ...) 1737int invoke (SV *klass, int event, ...)
1709 RETVAL = op->invoke ((event_type)event, ARG_AV (av), DT_END); 1754 RETVAL = op->invoke ((event_type)event, ARG_AV (av), DT_END);
1710 OUTPUT: RETVAL 1755 OUTPUT: RETVAL
1711 1756
1712SV *registry (object *op) 1757SV *registry (object *op)
1713 1758
1714void mortals () 1759int objects_size ()
1715 PPCODE: 1760 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; 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;
1723 OUTPUT: RETVAL 1777 OUTPUT: RETVAL
1724 1778
1725# missing properties 1779# missing properties
1726 1780
1727object *head (object *op) 1781object *head (object *op)
1728 PROTOTYPE: $ 1782 PROTOTYPE: $
1729 CODE: 1783 CODE:
1730 RETVAL = op->head ? op->head : op; 1784 RETVAL = op->head_ ();
1731 OUTPUT: RETVAL 1785 OUTPUT: RETVAL
1732 1786
1733int is_head (object *op) 1787int is_head (object *op)
1734 PROTOTYPE: $ 1788 PROTOTYPE: $
1735 CODE: 1789 CODE:
1736 RETVAL = !op->head; 1790 RETVAL = op->head_ () == op;
1737 OUTPUT: RETVAL 1791 OUTPUT: RETVAL
1738 1792
1739void 1793void
1740inv (object *obj) 1794inv (object *obj)
1741 PROTOTYPE: $ 1795 PROTOTYPE: $
1832 1886
1833void drop (object *who, object *op) 1887void drop (object *who, object *op)
1834 1888
1835void pick_up (object *who, object *op) 1889void pick_up (object *who, object *op)
1836 1890
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) 1891int cf_object_teleport (object *op, maptile *map, int x, int y)
1842 1892
1843void update_object (object *op, int action) 1893void update_object (object *op, int action)
1844 1894
1845object *cf_create_object_by_name (const char *name) 1895object *cf_create_object_by_name (const char *name)
1963 2013
1964void esrv_update_item (object *op, int what, object *item) 2014void esrv_update_item (object *op, int what, object *item)
1965 C_ARGS: what, op, item 2015 C_ARGS: what, op, item
1966 2016
1967void clear_los (object *op) 2017void clear_los (object *op)
1968
1969int command_teleport (object *op, char *params)
1970 2018
1971int command_summon (object *op, char *params) 2019int command_summon (object *op, char *params)
1972 2020
1973int command_arrest (object *op, char *params) 2021int command_arrest (object *op, char *params)
1974 2022
2054list () 2102list ()
2055 PPCODE: 2103 PPCODE:
2056 for_all_players (pl) 2104 for_all_players (pl)
2057 XPUSHs (sv_2mortal (to_sv (pl))); 2105 XPUSHs (sv_2mortal (to_sv (pl)));
2058 2106
2059bool
2060peaceful (player *pl, bool new_setting = 0)
2061 PROTOTYPE: $;$
2062 CODE:
2063 RETVAL = pl->peaceful;
2064 if (items > 1)
2065 pl->peaceful = new_setting;
2066 OUTPUT:
2067 RETVAL
2068
2069living *
2070orig_stats (player *pl)
2071 CODE:
2072 RETVAL = &pl->orig_stats;
2073 OUTPUT: RETVAL
2074
2075living *
2076last_stats (player *pl)
2077 CODE:
2078 RETVAL = &pl->last_stats;
2079 OUTPUT: RETVAL
2080
2081 2107
2082MODULE = cf PACKAGE = cf::map PREFIX = cf_map_ 2108MODULE = cf PACKAGE = cf::map PREFIX = cf_map_
2083 2109
2084int invoke (maptile *map, int event, ...) 2110int invoke (maptile *map, int event, ...)
2085 CODE: 2111 CODE:
2139 2165
2140object* 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)
2141 C_ARGS: str, map, nx, ny 2167 C_ARGS: str, map, nx, ny
2142 2168
2143void 2169void
2144cf_map_normalise (maptile *map, int x, int y) 2170get_map_flags (maptile *map, int x, int y)
2145 PPCODE: 2171 PPCODE:
2146{ 2172{
2147 maptile *nmap = 0; 2173 maptile *nmap = 0;
2148 I16 nx = 0, ny = 0; 2174 I16 nx = 0, ny = 0;
2149 int flags = get_map_flags (map, &nmap, x, y, &nx, &ny); 2175 int flags = get_map_flags (map, &nmap, x, y, &nx, &ny);
2211 CODE: 2237 CODE:
2212 RETVAL = get_name_of_region_for_map (m); 2238 RETVAL = get_name_of_region_for_map (m);
2213 OUTPUT: RETVAL 2239 OUTPUT: RETVAL
2214 2240
2215# worst xs function of my life 2241# worst xs function of my life
2216maptile * 2242bool
2217_create_random_map (\ 2243_create_random_map (\
2218 char *path,\ 2244 maptile *self,\
2219 char *wallstyle,\ 2245 char *wallstyle,\
2220 char *wall_name,\ 2246 char *wall_name,\
2221 char *floorstyle,\ 2247 char *floorstyle,\
2222 char *monsterstyle,\ 2248 char *monsterstyle,\
2223 char *treasurestyle,\ 2249 char *treasurestyle,\
2227 char *origin_map,\ 2253 char *origin_map,\
2228 char *final_map,\ 2254 char *final_map,\
2229 char *exitstyle,\ 2255 char *exitstyle,\
2230 char *this_map,\ 2256 char *this_map,\
2231 char *exit_on_final_map,\ 2257 char *exit_on_final_map,\
2232 int Xsize,\ 2258 int xsize,\
2233 int Ysize,\ 2259 int ysize,\
2234 int expand2x,\ 2260 int expand2x,\
2235 int layoutoptions1,\ 2261 int layoutoptions1,\
2236 int layoutoptions2,\ 2262 int layoutoptions2,\
2237 int layoutoptions3,\ 2263 int layoutoptions3,\
2238 int symmetry,\ 2264 int symmetry,\
2243 int dungeon_depth,\ 2269 int dungeon_depth,\
2244 int decoroptions,\ 2270 int decoroptions,\
2245 int orientation,\ 2271 int orientation,\
2246 int origin_y,\ 2272 int origin_y,\
2247 int origin_x,\ 2273 int origin_x,\
2248 int random_seed,\ 2274 U32 random_seed,\
2249 val64 total_map_hp,\ 2275 val64 total_map_hp,\
2250 int map_layout_style,\ 2276 int map_layout_style,\
2251 int treasureoptions,\ 2277 int treasureoptions,\
2252 int symmetry_used,\ 2278 int symmetry_used,\
2253 region *region\ 2279 region *region,\
2280 char *custom\
2254) 2281)
2255 CODE: 2282 CODE:
2256{ 2283{
2257 random_map_params rmp; 2284 random_map_params rmp;
2258 2285
2268 assign (rmp.exit_on_final_map, exit_on_final_map); 2295 assign (rmp.exit_on_final_map, exit_on_final_map);
2269 2296
2270 rmp.origin_map = origin_map; 2297 rmp.origin_map = origin_map;
2271 rmp.final_map = final_map; 2298 rmp.final_map = final_map;
2272 rmp.this_map = this_map; 2299 rmp.this_map = this_map;
2273 rmp.Xsize = Xsize; 2300 rmp.xsize = xsize;
2274 rmp.Ysize = Ysize; 2301 rmp.ysize = ysize;
2275 rmp.expand2x = expand2x; 2302 rmp.expand2x = expand2x;
2276 rmp.layoutoptions1 = layoutoptions1; 2303 rmp.layoutoptions1 = layoutoptions1;
2277 rmp.layoutoptions2 = layoutoptions2; 2304 rmp.layoutoptions2 = layoutoptions2;
2278 rmp.layoutoptions3 = layoutoptions3; 2305 rmp.layoutoptions3 = layoutoptions3;
2279 rmp.symmetry = symmetry; 2306 rmp.symmetry = symmetry;
2290 rmp.total_map_hp = total_map_hp; 2317 rmp.total_map_hp = total_map_hp;
2291 rmp.map_layout_style = map_layout_style; 2318 rmp.map_layout_style = map_layout_style;
2292 rmp.treasureoptions = treasureoptions; 2319 rmp.treasureoptions = treasureoptions;
2293 rmp.symmetry_used = symmetry_used; 2320 rmp.symmetry_used = symmetry_used;
2294 rmp.region = region; 2321 rmp.region = region;
2322 rmp.custom = custom;
2295 2323
2296 RETVAL = generate_random_map (path, &rmp); 2324 RETVAL = self->generate_random_map (&rmp);
2297} 2325}
2298 OUTPUT: 2326 OUTPUT:
2299 RETVAL 2327 RETVAL
2300 2328
2301MODULE = cf PACKAGE = cf::arch 2329MODULE = cf PACKAGE = cf::arch

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines