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.119 by root, Sun Dec 31 10:28:36 2006 UTC vs.
Revision 1.137 by root, Thu Jan 11 00:41:08 2007 UTC

32#include <sproto.h> 32#include <sproto.h>
33 33
34#include "cfperl.h" 34#include "cfperl.h"
35#include "shstr.h" 35#include "shstr.h"
36 36
37#include <unistd.h>
38#if _POSIX_MEMLOCK
39# include <sys/mman.h>
40#endif
41
37#include <EXTERN.h> 42#include <EXTERN.h>
38#include <perl.h> 43#include <perl.h>
39#include <XSUB.h> 44#include <XSUB.h>
40 45
41#include "CoroAPI.h" 46#include "CoroAPI.h"
94 99
95////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 100//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
96 101
97unordered_vector<attachable *> attachable::mortals; 102unordered_vector<attachable *> attachable::mortals;
98 103
99#if 0
100attachable *attachable::rc_first;
101
102attachable::attachable ()
103{
104 refcnt = 0;
105 rc_next = rc_first;
106 rc_first = this;
107}
108#endif
109
110attachable::~attachable () 104attachable::~attachable ()
111{ 105{
112 assert (!(flags & F_BORROWED));//D//TODO//remove when stable
113#if 0
114 assert (!rc_next);
115 assert (!refcnt); 106 assert (!self);
116#endif 107}
108
109int
110attachable::refcnt_cnt () const
111{
112 return refcnt + (self ? SvREFCNT (self) : 0);
113}
114
115void
116attachable::optimise ()
117{
118 if (self
119 && SvREFCNT (self) == 1
120 && !HvTOTALKEYS (self))
121 {
122 refcnt_inc ();
123 SvREFCNT_dec ((SV *)self);
124 }
117} 125}
118 126
119// check wether the object really is dead 127// check wether the object really is dead
120void 128void
121attachable::do_check () 129attachable::do_check ()
122{ 130{
123 if (refcnt > 0) 131 if (refcnt > 0 || refcnt_cnt () > 0)
124 return; 132 return;
125 133
126 // try to unborrow the refcnt from perl 134 destroy ();
127 if (flags & F_BORROWED) 135
136 if (self)
128 { 137 {
129 assert (self);//D//TODO//remove when stable 138 hv_clear (self);
130 flags &= ~F_BORROWED; 139 sv_unmagic ((SV *)self, PERL_MAGIC_ext);
131 refcnt_inc ();
132 SvREFCNT_dec (self); 140 SvREFCNT_dec (self);
141 self = 0;
133 } 142 }
134
135 if (refcnt > 0 || self)
136 return;
137
138 destroy ();
139} 143}
140 144
141void 145void
142attachable::do_destroy () 146attachable::do_destroy ()
143{ 147{
144 invoke (EVENT_ATTACHABLE_DESTROY, DT_END); 148 invoke (EVENT_ATTACHABLE_DESTROY, DT_END);
145 149
146 //TODO: call generic destroy callback 150 if (self)
151 hv_clear (self);
152
147 mortals.push_back (this); 153 mortals.push_back (this);
148} 154}
149 155
150void 156void
151attachable::destroy () 157attachable::destroy ()
155 161
156 flags |= F_DESTROYED; 162 flags |= F_DESTROYED;
157 do_destroy (); 163 do_destroy ();
158} 164}
159 165
166void
160void attachable::check_mortals () 167attachable::check_mortals ()
161{ 168{
162 for (int i = 0; i < mortals.size (); ) 169 for (int i = 0; i < mortals.size (); )
163 { 170 {
164 attachable *obj = mortals [i]; 171 attachable *obj = mortals [i];
165 172
209 216
210static int 217static int
211attachable_free (pTHX_ SV *sv, MAGIC *mg) 218attachable_free (pTHX_ SV *sv, MAGIC *mg)
212{ 219{
213 attachable *at = (attachable *)mg->mg_ptr; 220 attachable *at = (attachable *)mg->mg_ptr;
214 assert (!(at->flags & attachable::F_BORROWED));//D//TODO//remove when stable
215 at->self = 0; 221 at->self = 0;
216 // next line makes sense, but most objects still have refcnt 0 by default 222 // next line makes sense, but most objects still have refcnt 0 by default
217 //at->refcnt_chk (); 223 //at->refcnt_chk ();
218 return 0; 224 return 0;
219} 225}
230 { 236 {
231 obj->self = newHV (); 237 obj->self = newHV ();
232 sv_magicext ((SV *)obj->self, 0, PERL_MAGIC_ext, &attachable::vtbl, (char *)obj, 0); 238 sv_magicext ((SV *)obj->self, 0, PERL_MAGIC_ext, &attachable::vtbl, (char *)obj, 0);
233 239
234 // borrow the refcnt from the object 240 // borrow the refcnt from the object
235 obj->flags |= attachable::F_BORROWED; 241 // it is important thta no refcnt_chk is being executed here
236 obj->refcnt_dec (); 242 obj->refcnt_dec ();
243
244 // now bless the object _once_
245 return sv_bless (newRV_inc ((SV *)obj->self), stash);
237 } 246 }
238 247 else
239 return sv_bless (newRV_inc ((SV *)obj->self), stash); 248 return newRV_inc ((SV *)obj->self);
240} 249}
241 250
242static void 251static void
243clearSVptr (SV *sv) 252clearSVptr (SV *sv)
244{ 253{
297inline SV *to_sv (living * v) { return newSVptr (v, stash_cf_living_wrap); } 306inline SV *to_sv (living * v) { return newSVptr (v, stash_cf_living_wrap); }
298 307
299inline SV *to_sv (object & v) { return to_sv (&v); } 308inline SV *to_sv (object & v) { return to_sv (&v); }
300inline SV *to_sv (living & v) { return to_sv (&v); } 309inline SV *to_sv (living & v) { return to_sv (&v); }
301 310
302//TODO:
303inline SV *to_sv (New_Face * v) { return to_sv (v->name); } 311inline SV *to_sv (New_Face * v) { return to_sv (v->name); }
304inline SV *to_sv (treasurelist * v) { return to_sv (v->name); } 312inline SV *to_sv (treasurelist * v) { return to_sv (v->name); }
305 313
306inline SV *to_sv (UUID v) 314inline SV *to_sv (UUID v)
307{ 315{
328inline void sv_to (SV *sv, client * &v) { v = (client *)(attachable *)SvPTR_ornull (sv, "cf::client"); } 336inline void sv_to (SV *sv, client * &v) { v = (client *)(attachable *)SvPTR_ornull (sv, "cf::client"); }
329inline void sv_to (SV *sv, player * &v) { v = (player *)(attachable *)SvPTR_ornull (sv, "cf::player"); } 337inline void sv_to (SV *sv, player * &v) { v = (player *)(attachable *)SvPTR_ornull (sv, "cf::player"); }
330inline void sv_to (SV *sv, object * &v) { v = (object *)(attachable *)SvPTR_ornull (sv, "cf::object"); } 338inline void sv_to (SV *sv, object * &v) { v = (object *)(attachable *)SvPTR_ornull (sv, "cf::object"); }
331inline void sv_to (SV *sv, archetype * &v) { v = (archetype *)(attachable *)SvPTR_ornull (sv, "cf::arch"); } 339inline void sv_to (SV *sv, archetype * &v) { v = (archetype *)(attachable *)SvPTR_ornull (sv, "cf::arch"); }
332inline void sv_to (SV *sv, maptile * &v) { v = (maptile *)(attachable *)SvPTR_ornull (sv, "cf::map"); } 340inline void sv_to (SV *sv, maptile * &v) { v = (maptile *)(attachable *)SvPTR_ornull (sv, "cf::map"); }
341inline void sv_to (SV *sv, attachable * &v) { v = (attachable *)SvPTR_ornull (sv, "cf::attachable"); }
333inline void sv_to (SV *sv, partylist * &v) { v = (partylist *)SvPTR_ornull (sv, "cf::party"); } 342inline void sv_to (SV *sv, partylist * &v) { v = (partylist *)SvPTR_ornull (sv, "cf::party"); }
334inline void sv_to (SV *sv, region * &v) { v = (region *)SvPTR_ornull (sv, "cf::region"); } 343inline void sv_to (SV *sv, region * &v) { v = (region *)SvPTR_ornull (sv, "cf::region"); }
335inline void sv_to (SV *sv, living * &v) { v = (living *)SvPTR_ornull (sv, "cf::living"); } 344inline void sv_to (SV *sv, living * &v) { v = (living *)SvPTR_ornull (sv, "cf::living"); }
336 345
337inline void sv_to (SV *sv, New_Face * &v) { v = &new_faces[FindFace (SvPV_nolen (sv), 0)]; } //TODO 346inline void sv_to (SV *sv, New_Face * &v) { v = &new_faces[FindFace (SvPV_nolen (sv), 0)]; }
338inline void sv_to (SV *sv, treasurelist * &v) { v = find_treasurelist (SvPV_nolen (sv)); } // TODO 347inline void sv_to (SV *sv, treasurelist * &v) { v = find_treasurelist (SvPV_nolen (sv)); }
339 348
340template<class T> 349template<class T>
341inline void sv_to (SV *sv, refptr<T> &v) { T *tmp; sv_to (sv, tmp); v = tmp; } 350inline void sv_to (SV *sv, refptr<T> &v) { T *tmp; sv_to (sv, tmp); v = tmp; }
342 351
343template<int N> 352template<int N>
504 } 513 }
505 514
506 attach = 0; 515 attach = 0;
507} 516}
508#endif 517#endif
509
510void attachable::optimise ()
511{
512 if (self
513 && SvREFCNT (self) == 1
514 && !HvTOTALKEYS (self))
515 {
516 flags &= ~F_BORROWED;
517 refcnt_inc ();
518 SvREFCNT_dec ((SV *)self);
519 }
520}
521 518
522///////////////////////////////////////////////////////////////////////////// 519/////////////////////////////////////////////////////////////////////////////
523 520
524extern "C" int cfperl_initPlugin (const char *iversion, f_plug_api gethooksptr) 521extern "C" int cfperl_initPlugin (const char *iversion, f_plug_api gethooksptr)
525{ 522{
820} 817}
821 818
822///////////////////////////////////////////////////////////////////////////// 819/////////////////////////////////////////////////////////////////////////////
823 820
824void 821void
825maptile::emergency_save () 822cfperl_emergency_save ()
826{ 823{
827 CALL_BEGIN (0); 824 CALL_BEGIN (0);
828 CALL_CALL ("cf::map::emergency_save", G_VOID); 825 CALL_CALL ("cf::emergency_save", G_VOID);
829 CALL_END; 826 CALL_END;
830} 827}
831 828
832maptile * 829maptile *
833maptile::load_map_sync (const char *path, maptile *origin) 830maptile::find_sync (const char *path, maptile *origin)
834{ 831{
835 CALL_BEGIN (2); 832 CALL_BEGIN (2);
836 CALL_ARG (path); 833 CALL_ARG (path);
837 CALL_ARG (origin); 834 CALL_ARG (origin);
838 CALL_CALL ("cf::map::load_map_sync", G_SCALAR); 835 CALL_CALL ("cf::map::find_sync", G_SCALAR);
839 836
840 maptile *retval; 837 maptile *retval;
841 838
842 if (count) 839 if (count)
843 sv_to (POPs, retval); 840 sv_to (POPs, retval);
845 retval = 0; 842 retval = 0;
846 843
847 CALL_END; 844 CALL_END;
848 845
849 return retval; 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);
856
857 maptile *retval;
858
859 if (count)
860 sv_to (POPs, retval);
861 else
862 retval = 0;
863
864 CALL_END;
865
866 return retval;
867}
868
869void
870maptile::do_load_sync ()
871{
872 CALL_BEGIN (1);
873 CALL_ARG (this);
874 CALL_CALL ("cf::map::do_load_sync", G_SCALAR);
875 CALL_END;
850} 876}
851 877
852void 878void
853maptile::change_all_map_light (int change) 879maptile::change_all_map_light (int change)
854{ 880{
873 899
874///////////////////////////////////////////////////////////////////////////// 900/////////////////////////////////////////////////////////////////////////////
875 901
876struct EventAPI *watcher_base::GEventAPI; 902struct EventAPI *watcher_base::GEventAPI;
877struct CoroAPI *coroapi::GCoroAPI; 903struct CoroAPI *coroapi::GCoroAPI;
904
905int coroapi::cede_counter;
878 906
879static void iw_dispatch (pe_event *ev) 907static void iw_dispatch (pe_event *ev)
880{ 908{
881 iw *w = (iw *)ev->ext_data; 909 iw *w = (iw *)ev->ext_data;
882 w->call (*w); 910 w->call (*w);
1288 const_iv (P_BLOCKSVIEW) 1316 const_iv (P_BLOCKSVIEW)
1289 const_iv (P_PLAYER) 1317 const_iv (P_PLAYER)
1290 const_iv (P_NO_MAGIC) 1318 const_iv (P_NO_MAGIC)
1291 const_iv (P_IS_ALIVE) 1319 const_iv (P_IS_ALIVE)
1292 const_iv (P_NO_CLERIC) 1320 const_iv (P_NO_CLERIC)
1293 const_iv (P_NEED_UPDATE)
1294 const_iv (P_OUT_OF_MAP) 1321 const_iv (P_OUT_OF_MAP)
1295 const_iv (P_NEW_MAP) 1322 const_iv (P_NEW_MAP)
1323 const_iv (P_UPTODATE)
1296 1324
1297 const_iv (UP_OBJ_INSERT) 1325 const_iv (UP_OBJ_INSERT)
1298 const_iv (UP_OBJ_REMOVE) 1326 const_iv (UP_OBJ_REMOVE)
1299 const_iv (UP_OBJ_CHANGE) 1327 const_iv (UP_OBJ_CHANGE)
1300 const_iv (UP_OBJ_FACE) 1328 const_iv (UP_OBJ_FACE)
1459 const_iv (ST_SETUP) 1487 const_iv (ST_SETUP)
1460 const_iv (ST_PLAYING) 1488 const_iv (ST_PLAYING)
1461 const_iv (ST_CUSTOM) 1489 const_iv (ST_CUSTOM)
1462 1490
1463 const_iv (ST_CHANGE_CLASS) 1491 const_iv (ST_CHANGE_CLASS)
1464 const_iv (ST_CONFIRM_QUIT)
1465 const_iv (ST_GET_PARTY_PASSWORD)
1466 1492
1467 const_iv (IO_HEADER) 1493 const_iv (IO_HEADER)
1468 const_iv (IO_OBJECTS) 1494 const_iv (IO_OBJECTS)
1469 const_iv (IO_UNIQUES) 1495 const_iv (IO_UNIQUES)
1470 1496
1524 1550
1525void _global_reattach () 1551void _global_reattach ()
1526 CODE: 1552 CODE:
1527{ 1553{
1528 // reattach to all attachable objects in the game. 1554 // reattach to all attachable objects in the game.
1529 for (sockvec::iterator i = clients.begin (); i != clients.end (); ++i) 1555 for_all_clients (ns)
1530 (*i)->reattach (); 1556 ns->reattach ();
1531 1557
1532 for_all_players (pl) 1558 for_all_players (pl)
1533 pl->reattach (); 1559 pl->reattach ();
1534 1560
1535 //TODO 1561 //TODO
1536 //for (map_container::iterator i = maps.begin (); i != maps.end (); ++i) 1562 //for (map_container::iterator i = maps.begin (); i != maps.end (); ++i)
1537 // i->second->reattach (); 1563 // i->second->reattach ();
1538 1564
1539 for (object *op = object::first; op; op = op->next) 1565 for_all_objects (op)
1540 op->reattach (); 1566 op->reattach ();
1541} 1567}
1542 1568
1543NV floor (NV x) 1569NV floor (NV x)
1544 1570
1595 case 5: RETVAL = settings.playerdir; break; 1621 case 5: RETVAL = settings.playerdir; break;
1596 case 6: RETVAL = settings.datadir ; break; 1622 case 6: RETVAL = settings.datadir ; break;
1597 } 1623 }
1598 OUTPUT: RETVAL 1624 OUTPUT: RETVAL
1599 1625
1626void abort ()
1627
1628void cleanup (const char *cause, bool make_core = false)
1629
1600void emergency_save () 1630void emergency_save ()
1601 1631
1602void _exit (int status = 0) 1632void _exit (int status = 0)
1633
1634#if _POSIX_MEMLOCK
1635
1636int mlockall (int flags = MCL_CURRENT | MCL_FUTURE)
1637
1638int munlockall ()
1639
1640#endif
1603 1641
1604int find_animation (char *text) 1642int find_animation (char *text)
1605 PROTOTYPE: $ 1643 PROTOTYPE: $
1606 1644
1607int random_roll (int min, int max, object *op, int goodbad); 1645int random_roll (int min, int max, object *op, int goodbad);
1654 CODE: 1692 CODE:
1655 RETVAL = SvROK (obj) && mg_find (SvRV (obj), PERL_MAGIC_ext); 1693 RETVAL = SvROK (obj) && mg_find (SvRV (obj), PERL_MAGIC_ext);
1656 OUTPUT: 1694 OUTPUT:
1657 RETVAL 1695 RETVAL
1658 1696
1659#bool 1697INCLUDE: $PERL genacc attachable ../include/cfperl.h |
1660#destroyed (attachable *at)
1661#
1662#void
1663#destroy (attachable *at)
1664 1698
1665MODULE = cf PACKAGE = cf::global 1699MODULE = cf PACKAGE = cf::global
1666 1700
1667int invoke (SV *klass, int event, ...) 1701int invoke (SV *klass, int event, ...)
1668 CODE: 1702 CODE:
1690 PPCODE: 1724 PPCODE:
1691 EXTEND (SP, object::mortals.size ()); 1725 EXTEND (SP, object::mortals.size ());
1692 for (AUTODECL (i, object::mortals.begin ()); i != object::mortals.end (); ++i) 1726 for (AUTODECL (i, object::mortals.begin ()); i != object::mortals.end (); ++i)
1693 PUSHs (to_sv (*i)); 1727 PUSHs (to_sv (*i));
1694 1728
1695object *first () 1729int objects_size ()
1696 CODE: 1730 CODE:
1697 RETVAL = object::first; 1731 RETVAL = objects.size ();
1732 OUTPUT: RETVAL
1733
1734object *objects (U32 index)
1735 CODE:
1736 RETVAL = index < objects.size () ? objects [index] : 0;
1737 OUTPUT: RETVAL
1738
1739int actives_size ()
1740 CODE:
1741 RETVAL = actives.size ();
1742 OUTPUT: RETVAL
1743
1744object *actives (U32 index)
1745 CODE:
1746 RETVAL = index < actives.size () ? actives [index] : 0;
1698 OUTPUT: RETVAL 1747 OUTPUT: RETVAL
1699 1748
1700# missing properties 1749# missing properties
1701 1750
1702object *head (object *op) 1751object *head (object *op)
1703 PROTOTYPE: $ 1752 PROTOTYPE: $
1704 CODE: 1753 CODE:
1705 RETVAL = op->head ? op->head : op; 1754 RETVAL = op->head_ ();
1706 OUTPUT: RETVAL 1755 OUTPUT: RETVAL
1707 1756
1708int is_head (object *op) 1757int is_head (object *op)
1709 PROTOTYPE: $ 1758 PROTOTYPE: $
1710 CODE: 1759 CODE:
1711 RETVAL = !op->head; 1760 RETVAL = op->head_ () == op;
1712 OUTPUT: RETVAL 1761 OUTPUT: RETVAL
1713 1762
1714void 1763void
1715inv (object *obj) 1764inv (object *obj)
1716 PROTOTYPE: $ 1765 PROTOTYPE: $
1913 RETVAL = op->contr; 1962 RETVAL = op->contr;
1914 OUTPUT: RETVAL 1963 OUTPUT: RETVAL
1915 1964
1916void check_score (object *op) 1965void check_score (object *op)
1917 1966
1918void cf_player_message (object *obj, char *txt, int flags = NDI_ORANGE | NDI_UNIQUE) 1967void message (object *op, char *txt, int flags = NDI_ORANGE | NDI_UNIQUE)
1968 CODE:
1969 new_draw_info (flags, 0, op, txt);
1919 1970
1920object *cf_player_send_inventory (object *op) 1971object *cf_player_send_inventory (object *op)
1921 1972
1922char *cf_player_get_ip (object *op) 1973char *cf_player_get_ip (object *op)
1923 ALIAS: ip = 0 1974 ALIAS: ip = 0
1969 CODE: 2020 CODE:
1970 pl->ob->stats.hp = pl->ob->stats.maxhp; 2021 pl->ob->stats.hp = pl->ob->stats.maxhp;
1971 pl->ob->stats.sp = pl->ob->stats.maxsp; 2022 pl->ob->stats.sp = pl->ob->stats.maxsp;
1972 pl->ob->stats.grace = pl->ob->stats.maxgrace; 2023 pl->ob->stats.grace = pl->ob->stats.maxgrace;
1973 pl->orig_stats = pl->ob->stats; 2024 pl->orig_stats = pl->ob->stats;
1974
1975player *cf_player_find (char *name)
1976 PROTOTYPE: $
1977 2025
1978void cf_player_move (player *pl, int dir) 2026void cf_player_move (player *pl, int dir)
1979 2027
1980void play_sound_player_only (player *pl, int soundnum, int x = 0, int y = 0); 2028void play_sound_player_only (player *pl, int soundnum, int x = 0, int y = 0);
1981 2029
2027 if (y) sv_to (y, pl->bed_y); 2075 if (y) sv_to (y, pl->bed_y);
2028 2076
2029void 2077void
2030list () 2078list ()
2031 PPCODE: 2079 PPCODE:
2032 for (player *pl = first_player; pl; pl = pl->next) 2080 for_all_players (pl)
2033 XPUSHs (sv_2mortal (to_sv (pl))); 2081 XPUSHs (sv_2mortal (to_sv (pl)));
2034
2035bool
2036peaceful (player *pl, bool new_setting = 0)
2037 PROTOTYPE: $;$
2038 CODE:
2039 RETVAL = pl->peaceful;
2040 if (items > 1)
2041 pl->peaceful = new_setting;
2042 OUTPUT:
2043 RETVAL
2044
2045living *
2046orig_stats (player *pl)
2047 CODE:
2048 RETVAL = &pl->orig_stats;
2049 OUTPUT: RETVAL
2050
2051living *
2052last_stats (player *pl)
2053 CODE:
2054 RETVAL = &pl->last_stats;
2055 OUTPUT: RETVAL
2056 2082
2057 2083
2058MODULE = cf PACKAGE = cf::map PREFIX = cf_map_ 2084MODULE = cf PACKAGE = cf::map PREFIX = cf_map_
2059 2085
2060int invoke (maptile *map, int event, ...) 2086int invoke (maptile *map, int event, ...)
2076 PROTOTYPE: 2102 PROTOTYPE:
2077 CODE: 2103 CODE:
2078 RETVAL = new maptile; 2104 RETVAL = new maptile;
2079 OUTPUT: 2105 OUTPUT:
2080 RETVAL 2106 RETVAL
2081
2082void
2083maptile::destroy ()
2084 2107
2085void 2108void
2086maptile::players () 2109maptile::players ()
2087 PPCODE: 2110 PPCODE:
2088 if (GIMME_V == G_SCALAR) 2111 if (GIMME_V == G_SCALAR)
2177 case 4: RETVAL = newSVuv ( GET_MAP_MOVE_BLOCK (obj, x, y)); break; 2200 case 4: RETVAL = newSVuv ( GET_MAP_MOVE_BLOCK (obj, x, y)); break;
2178 case 5: RETVAL = newSVuv ( GET_MAP_MOVE_SLOW (obj, x, y)); break; 2201 case 5: RETVAL = newSVuv ( GET_MAP_MOVE_SLOW (obj, x, y)); break;
2179 case 6: RETVAL = newSVuv ( GET_MAP_MOVE_ON (obj, x, y)); break; 2202 case 6: RETVAL = newSVuv ( GET_MAP_MOVE_ON (obj, x, y)); break;
2180 case 7: RETVAL = newSVuv ( GET_MAP_MOVE_OFF (obj, x, y)); break; 2203 case 7: RETVAL = newSVuv ( GET_MAP_MOVE_OFF (obj, x, y)); break;
2181 } 2204 }
2182 OUTPUT: 2205 OUTPUT: RETVAL
2183 RETVAL
2184 2206
2185void fix_walls (maptile *map, int x, int y) 2207void fix_walls (maptile *map, int x, int y)
2186 2208
2187void fix_walls_around (maptile *map, int x, int y) 2209void fix_walls_around (maptile *map, int x, int y)
2210
2211const char *
2212region_name (maptile *m)
2213 CODE:
2214 RETVAL = get_name_of_region_for_map (m);
2215 OUTPUT: RETVAL
2188 2216
2189# worst xs function of my life 2217# worst xs function of my life
2190maptile * 2218maptile *
2191_create_random_map (\ 2219_create_random_map (\
2192 char *path,\ 2220 char *path,\
2222 int random_seed,\ 2250 int random_seed,\
2223 val64 total_map_hp,\ 2251 val64 total_map_hp,\
2224 int map_layout_style,\ 2252 int map_layout_style,\
2225 int treasureoptions,\ 2253 int treasureoptions,\
2226 int symmetry_used,\ 2254 int symmetry_used,\
2227 region *region\ 2255 region *region,\
2256 char *custom\
2228) 2257)
2229 CODE: 2258 CODE:
2230{ 2259{
2231 random_map_params rmp; 2260 random_map_params rmp;
2232 2261
2236 assign (rmp.monsterstyle , monsterstyle); 2265 assign (rmp.monsterstyle , monsterstyle);
2237 assign (rmp.treasurestyle , treasurestyle); 2266 assign (rmp.treasurestyle , treasurestyle);
2238 assign (rmp.layoutstyle , layoutstyle); 2267 assign (rmp.layoutstyle , layoutstyle);
2239 assign (rmp.doorstyle , doorstyle); 2268 assign (rmp.doorstyle , doorstyle);
2240 assign (rmp.decorstyle , decorstyle); 2269 assign (rmp.decorstyle , decorstyle);
2241 assign (rmp.origin_map , origin_map);
2242 assign (rmp.final_map , final_map);
2243 assign (rmp.exitstyle , exitstyle); 2270 assign (rmp.exitstyle , exitstyle);
2244 assign (rmp.this_map , this_map);
2245 assign (rmp.exit_on_final_map, exit_on_final_map); 2271 assign (rmp.exit_on_final_map, exit_on_final_map);
2246 2272
2273 rmp.origin_map = origin_map;
2274 rmp.final_map = final_map;
2275 rmp.this_map = this_map;
2247 rmp.Xsize = Xsize; 2276 rmp.Xsize = Xsize;
2248 rmp.Ysize = Ysize; 2277 rmp.Ysize = Ysize;
2249 rmp.expand2x = expand2x; 2278 rmp.expand2x = expand2x;
2250 rmp.layoutoptions1 = layoutoptions1; 2279 rmp.layoutoptions1 = layoutoptions1;
2251 rmp.layoutoptions2 = layoutoptions2; 2280 rmp.layoutoptions2 = layoutoptions2;
2264 rmp.total_map_hp = total_map_hp; 2293 rmp.total_map_hp = total_map_hp;
2265 rmp.map_layout_style = map_layout_style; 2294 rmp.map_layout_style = map_layout_style;
2266 rmp.treasureoptions = treasureoptions; 2295 rmp.treasureoptions = treasureoptions;
2267 rmp.symmetry_used = symmetry_used; 2296 rmp.symmetry_used = symmetry_used;
2268 rmp.region = region; 2297 rmp.region = region;
2298 rmp.custom = custom;
2269 2299
2270 RETVAL = generate_random_map (path, &rmp); 2300 RETVAL = generate_random_map (path, &rmp);
2271} 2301}
2272 OUTPUT: 2302 OUTPUT:
2273 RETVAL 2303 RETVAL
2298 2328
2299INCLUDE: $PERL genacc partylist ../include/player.h | 2329INCLUDE: $PERL genacc partylist ../include/player.h |
2300 2330
2301MODULE = cf PACKAGE = cf::region 2331MODULE = cf PACKAGE = cf::region
2302 2332
2303region *first () 2333region *first ()
2304 PROTOTYPE: 2334 PROTOTYPE:
2305 CODE: 2335 CODE:
2306 RETVAL = first_region; 2336 RETVAL = first_region;
2337 OUTPUT: RETVAL
2338
2339region *find (char *name)
2340 PROTOTYPE: $
2341 CODE:
2342 RETVAL = get_region_by_name (name);
2307 OUTPUT: RETVAL 2343 OUTPUT: RETVAL
2308 2344
2309INCLUDE: $PERL genacc region ../include/map.h | 2345INCLUDE: $PERL genacc region ../include/map.h |
2310 2346
2311MODULE = cf PACKAGE = cf::living 2347MODULE = cf PACKAGE = cf::living
2345 char *buf = SvPVbyte (packet, len); 2381 char *buf = SvPVbyte (packet, len);
2346 2382
2347 THIS->send_packet (buf, len); 2383 THIS->send_packet (buf, len);
2348} 2384}
2349 2385
2350void
2351client::destroy ()
2352

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines