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.116 by root, Sat Dec 30 10:16:11 2006 UTC vs.
Revision 1.134 by root, Tue Jan 9 21:32:42 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{
328inline void sv_to (SV *sv, client * &v) { v = (client *)(attachable *)SvPTR_ornull (sv, "cf::client"); } 337inline 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"); } 338inline 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"); } 339inline 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"); } 340inline 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"); } 341inline void sv_to (SV *sv, maptile * &v) { v = (maptile *)(attachable *)SvPTR_ornull (sv, "cf::map"); }
342inline 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"); } 343inline 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"); } 344inline 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"); } 345inline void sv_to (SV *sv, living * &v) { v = (living *)SvPTR_ornull (sv, "cf::living"); }
336 346
337inline void sv_to (SV *sv, New_Face * &v) { v = &new_faces[FindFace (SvPV_nolen (sv), 0)]; } //TODO 347inline void sv_to (SV *sv, New_Face * &v) { v = &new_faces[FindFace (SvPV_nolen (sv), 0)]; } //TODO
504 } 514 }
505 515
506 attach = 0; 516 attach = 0;
507} 517}
508#endif 518#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 519
522///////////////////////////////////////////////////////////////////////////// 520/////////////////////////////////////////////////////////////////////////////
523 521
524extern "C" int cfperl_initPlugin (const char *iversion, f_plug_api gethooksptr) 522extern "C" int cfperl_initPlugin (const char *iversion, f_plug_api gethooksptr)
525{ 523{
820} 818}
821 819
822///////////////////////////////////////////////////////////////////////////// 820/////////////////////////////////////////////////////////////////////////////
823 821
824void 822void
825maptile::emergency_save () 823cfperl_emergency_save ()
826{ 824{
827 CALL_BEGIN (0); 825 CALL_BEGIN (0);
828 CALL_CALL ("cf::map::emergency_save", G_VOID); 826 CALL_CALL ("cf::emergency_save", G_VOID);
829 CALL_END; 827 CALL_END;
830} 828}
831 829
832maptile * 830maptile *
833maptile::find_map (const char *path, maptile *origin) 831maptile::find_sync (const char *path, maptile *origin)
834{ 832{
835 CALL_BEGIN (2); 833 CALL_BEGIN (2);
836 CALL_ARG (path); 834 CALL_ARG (path);
837 CALL_ARG (origin); 835 CALL_ARG (origin);
838 CALL_CALL ("cf::map::find_map", G_SCALAR); 836 CALL_CALL ("cf::map::find_sync", G_SCALAR);
839 837
840 maptile *retval; 838 maptile *retval;
841 839
842 if (count) 840 if (count)
843 sv_to (POPs, retval); 841 sv_to (POPs, retval);
848 846
849 return retval; 847 return retval;
850} 848}
851 849
852void 850void
853maptile::do_load () 851maptile::do_load_sync ()
854{ 852{
855 CALL_BEGIN (1); 853 CALL_BEGIN (1);
856 CALL_ARG (this); 854 CALL_ARG (this);
857 CALL_CALL ("cf::map::do_load", G_VOID); 855 CALL_CALL ("cf::map::do_load_sync", G_SCALAR);
858 CALL_END; 856 CALL_END;
859}
860
861maptile *
862maptile::customise_for (object *op)
863{
864 CALL_BEGIN (2);
865 CALL_ARG (this);
866 CALL_ARG (op);
867 CALL_CALL ("cf::map::customise_for", G_SCALAR);
868
869 maptile *retval;
870
871 if (count)
872 sv_to (POPs, retval);
873 else
874 retval = 0;
875
876 CALL_END;
877
878 return retval ? retval : this;
879} 857}
880 858
881void 859void
882maptile::change_all_map_light (int change) 860maptile::change_all_map_light (int change)
883{ 861{
902 880
903///////////////////////////////////////////////////////////////////////////// 881/////////////////////////////////////////////////////////////////////////////
904 882
905struct EventAPI *watcher_base::GEventAPI; 883struct EventAPI *watcher_base::GEventAPI;
906struct CoroAPI *coroapi::GCoroAPI; 884struct CoroAPI *coroapi::GCoroAPI;
885
886int coroapi::cede_counter;
907 887
908static void iw_dispatch (pe_event *ev) 888static void iw_dispatch (pe_event *ev)
909{ 889{
910 iw *w = (iw *)ev->ext_data; 890 iw *w = (iw *)ev->ext_data;
911 w->call (*w); 891 w->call (*w);
1317 const_iv (P_BLOCKSVIEW) 1297 const_iv (P_BLOCKSVIEW)
1318 const_iv (P_PLAYER) 1298 const_iv (P_PLAYER)
1319 const_iv (P_NO_MAGIC) 1299 const_iv (P_NO_MAGIC)
1320 const_iv (P_IS_ALIVE) 1300 const_iv (P_IS_ALIVE)
1321 const_iv (P_NO_CLERIC) 1301 const_iv (P_NO_CLERIC)
1322 const_iv (P_NEED_UPDATE)
1323 const_iv (P_OUT_OF_MAP) 1302 const_iv (P_OUT_OF_MAP)
1324 const_iv (P_NEW_MAP) 1303 const_iv (P_NEW_MAP)
1304 const_iv (P_UPTODATE)
1325 1305
1326 const_iv (UP_OBJ_INSERT) 1306 const_iv (UP_OBJ_INSERT)
1327 const_iv (UP_OBJ_REMOVE) 1307 const_iv (UP_OBJ_REMOVE)
1328 const_iv (UP_OBJ_CHANGE) 1308 const_iv (UP_OBJ_CHANGE)
1329 const_iv (UP_OBJ_FACE) 1309 const_iv (UP_OBJ_FACE)
1488 const_iv (ST_SETUP) 1468 const_iv (ST_SETUP)
1489 const_iv (ST_PLAYING) 1469 const_iv (ST_PLAYING)
1490 const_iv (ST_CUSTOM) 1470 const_iv (ST_CUSTOM)
1491 1471
1492 const_iv (ST_CHANGE_CLASS) 1472 const_iv (ST_CHANGE_CLASS)
1493 const_iv (ST_CONFIRM_QUIT)
1494 const_iv (ST_GET_PARTY_PASSWORD)
1495 1473
1496 const_iv (IO_HEADER) 1474 const_iv (IO_HEADER)
1497 const_iv (IO_OBJECTS) 1475 const_iv (IO_OBJECTS)
1498 const_iv (IO_UNIQUES) 1476 const_iv (IO_UNIQUES)
1477
1478 // random map generator
1479 const_iv (LAYOUT_NONE)
1480 const_iv (LAYOUT_ONION)
1481 const_iv (LAYOUT_MAZE)
1482 const_iv (LAYOUT_SPIRAL)
1483 const_iv (LAYOUT_ROGUELIKE)
1484 const_iv (LAYOUT_SNAKE)
1485 const_iv (LAYOUT_SQUARE_SPIRAL)
1486
1487 const_iv (RMOPT_RANDOM)
1488 const_iv (RMOPT_CENTERED)
1489 const_iv (RMOPT_LINEAR)
1490 const_iv (RMOPT_BOTTOM_C)
1491 const_iv (RMOPT_BOTTOM_R)
1492 const_iv (RMOPT_IRR_SPACE)
1493 const_iv (RMOPT_WALL_OFF)
1494 const_iv (RMOPT_WALLS_ONLY)
1495 const_iv (RMOPT_NO_DOORS)
1496
1497 const_iv (SYMMETRY_RANDOM)
1498 const_iv (SYMMETRY_NONE)
1499 const_iv (SYMMETRY_X)
1500 const_iv (SYMMETRY_Y)
1501 const_iv (SYMMETRY_XY)
1499 }; 1502 };
1500 1503
1501 for (civ = const_iv + sizeof (const_iv) / sizeof (const_iv [0]); civ-- > const_iv; ) 1504 for (civ = const_iv + sizeof (const_iv) / sizeof (const_iv [0]); civ-- > const_iv; )
1502 newCONSTSUB (stash_cf, (char *)civ->name, newSViv (civ->iv)); 1505 newCONSTSUB (stash_cf, (char *)civ->name, newSViv (civ->iv));
1503 1506
1528 1531
1529void _global_reattach () 1532void _global_reattach ()
1530 CODE: 1533 CODE:
1531{ 1534{
1532 // reattach to all attachable objects in the game. 1535 // reattach to all attachable objects in the game.
1533 for (sockvec::iterator i = clients.begin (); i != clients.end (); ++i) 1536 for_all_clients (ns)
1534 (*i)->reattach (); 1537 ns->reattach ();
1535 1538
1536 for_all_players (pl) 1539 for_all_players (pl)
1537 pl->reattach (); 1540 pl->reattach ();
1538 1541
1539 //TODO 1542 //TODO
1540 //for (map_container::iterator i = maps.begin (); i != maps.end (); ++i) 1543 //for (map_container::iterator i = maps.begin (); i != maps.end (); ++i)
1541 // i->second->reattach (); 1544 // i->second->reattach ();
1542 1545
1543 for (object *op = object::first; op; op = op->next) 1546 for_all_objects (op)
1544 op->reattach (); 1547 op->reattach ();
1545} 1548}
1546 1549
1547NV floor (NV x) 1550NV floor (NV x)
1548 1551
1599 case 5: RETVAL = settings.playerdir; break; 1602 case 5: RETVAL = settings.playerdir; break;
1600 case 6: RETVAL = settings.datadir ; break; 1603 case 6: RETVAL = settings.datadir ; break;
1601 } 1604 }
1602 OUTPUT: RETVAL 1605 OUTPUT: RETVAL
1603 1606
1607void abort ()
1608
1609void cleanup (const char *cause, bool make_core = false)
1610
1604void emergency_save () 1611void emergency_save ()
1605 1612
1606void _exit (int status = 0) 1613void _exit (int status = 0)
1614
1615#if _POSIX_MEMLOCK
1616
1617int mlockall (int flags = MCL_CURRENT | MCL_FUTURE)
1618
1619int munlockall ()
1620
1621#endif
1607 1622
1608int find_animation (char *text) 1623int find_animation (char *text)
1609 PROTOTYPE: $ 1624 PROTOTYPE: $
1610 1625
1611int random_roll (int min, int max, object *op, int goodbad); 1626int random_roll (int min, int max, object *op, int goodbad);
1658 CODE: 1673 CODE:
1659 RETVAL = SvROK (obj) && mg_find (SvRV (obj), PERL_MAGIC_ext); 1674 RETVAL = SvROK (obj) && mg_find (SvRV (obj), PERL_MAGIC_ext);
1660 OUTPUT: 1675 OUTPUT:
1661 RETVAL 1676 RETVAL
1662 1677
1663#bool 1678INCLUDE: $PERL genacc attachable ../include/cfperl.h |
1664#destroyed (attachable *at)
1665#
1666#void
1667#destroy (attachable *at)
1668 1679
1669MODULE = cf PACKAGE = cf::global 1680MODULE = cf PACKAGE = cf::global
1670 1681
1671int invoke (SV *klass, int event, ...) 1682int invoke (SV *klass, int event, ...)
1672 CODE: 1683 CODE:
1694 PPCODE: 1705 PPCODE:
1695 EXTEND (SP, object::mortals.size ()); 1706 EXTEND (SP, object::mortals.size ());
1696 for (AUTODECL (i, object::mortals.begin ()); i != object::mortals.end (); ++i) 1707 for (AUTODECL (i, object::mortals.begin ()); i != object::mortals.end (); ++i)
1697 PUSHs (to_sv (*i)); 1708 PUSHs (to_sv (*i));
1698 1709
1699object *first () 1710int objects_size ()
1700 CODE: 1711 CODE:
1701 RETVAL = object::first; 1712 RETVAL = objects.size ();
1713 OUTPUT: RETVAL
1714
1715object *objects (U32 index)
1716 CODE:
1717 RETVAL = index < objects.size () ? objects [index] : 0;
1718 OUTPUT: RETVAL
1719
1720int actives_size ()
1721 CODE:
1722 RETVAL = actives.size ();
1723 OUTPUT: RETVAL
1724
1725object *actives (U32 index)
1726 CODE:
1727 RETVAL = index < actives.size () ? actives [index] : 0;
1702 OUTPUT: RETVAL 1728 OUTPUT: RETVAL
1703 1729
1704# missing properties 1730# missing properties
1705 1731
1706object *head (object *op) 1732object *head (object *op)
1707 PROTOTYPE: $ 1733 PROTOTYPE: $
1708 CODE: 1734 CODE:
1709 RETVAL = op->head ? op->head : op; 1735 RETVAL = op->head_ ();
1710 OUTPUT: RETVAL 1736 OUTPUT: RETVAL
1711 1737
1712int is_head (object *op) 1738int is_head (object *op)
1713 PROTOTYPE: $ 1739 PROTOTYPE: $
1714 CODE: 1740 CODE:
1715 RETVAL = !op->head; 1741 RETVAL = op->head_ () == op;
1716 OUTPUT: RETVAL 1742 OUTPUT: RETVAL
1717 1743
1718void 1744void
1719inv (object *obj) 1745inv (object *obj)
1720 PROTOTYPE: $ 1746 PROTOTYPE: $
1917 RETVAL = op->contr; 1943 RETVAL = op->contr;
1918 OUTPUT: RETVAL 1944 OUTPUT: RETVAL
1919 1945
1920void check_score (object *op) 1946void check_score (object *op)
1921 1947
1922void cf_player_message (object *obj, char *txt, int flags = NDI_ORANGE | NDI_UNIQUE) 1948void message (object *op, char *txt, int flags = NDI_ORANGE | NDI_UNIQUE)
1949 CODE:
1950 new_draw_info (flags, 0, op, txt);
1923 1951
1924object *cf_player_send_inventory (object *op) 1952object *cf_player_send_inventory (object *op)
1925 1953
1926char *cf_player_get_ip (object *op) 1954char *cf_player_get_ip (object *op)
1927 ALIAS: ip = 0 1955 ALIAS: ip = 0
1973 CODE: 2001 CODE:
1974 pl->ob->stats.hp = pl->ob->stats.maxhp; 2002 pl->ob->stats.hp = pl->ob->stats.maxhp;
1975 pl->ob->stats.sp = pl->ob->stats.maxsp; 2003 pl->ob->stats.sp = pl->ob->stats.maxsp;
1976 pl->ob->stats.grace = pl->ob->stats.maxgrace; 2004 pl->ob->stats.grace = pl->ob->stats.maxgrace;
1977 pl->orig_stats = pl->ob->stats; 2005 pl->orig_stats = pl->ob->stats;
1978
1979player *cf_player_find (char *name)
1980 PROTOTYPE: $
1981 2006
1982void cf_player_move (player *pl, int dir) 2007void cf_player_move (player *pl, int dir)
1983 2008
1984void play_sound_player_only (player *pl, int soundnum, int x = 0, int y = 0); 2009void play_sound_player_only (player *pl, int soundnum, int x = 0, int y = 0);
1985 2010
2031 if (y) sv_to (y, pl->bed_y); 2056 if (y) sv_to (y, pl->bed_y);
2032 2057
2033void 2058void
2034list () 2059list ()
2035 PPCODE: 2060 PPCODE:
2036 for (player *pl = first_player; pl; pl = pl->next) 2061 for_all_players (pl)
2037 XPUSHs (sv_2mortal (to_sv (pl))); 2062 XPUSHs (sv_2mortal (to_sv (pl)));
2038
2039bool
2040peaceful (player *pl, bool new_setting = 0)
2041 PROTOTYPE: $;$
2042 CODE:
2043 RETVAL = pl->peaceful;
2044 if (items > 1)
2045 pl->peaceful = new_setting;
2046 OUTPUT:
2047 RETVAL
2048
2049living *
2050orig_stats (player *pl)
2051 CODE:
2052 RETVAL = &pl->orig_stats;
2053 OUTPUT: RETVAL
2054
2055living *
2056last_stats (player *pl)
2057 CODE:
2058 RETVAL = &pl->last_stats;
2059 OUTPUT: RETVAL
2060 2063
2061 2064
2062MODULE = cf PACKAGE = cf::map PREFIX = cf_map_ 2065MODULE = cf PACKAGE = cf::map PREFIX = cf_map_
2063 2066
2064int invoke (maptile *map, int event, ...) 2067int invoke (maptile *map, int event, ...)
2082 RETVAL = new maptile; 2085 RETVAL = new maptile;
2083 OUTPUT: 2086 OUTPUT:
2084 RETVAL 2087 RETVAL
2085 2088
2086void 2089void
2087maptile::destroy () 2090maptile::players ()
2091 PPCODE:
2092 if (GIMME_V == G_SCALAR)
2093 XPUSHs (sv_2mortal (to_sv (THIS->players)));
2094 else if (GIMME_V == G_ARRAY)
2095 {
2096 EXTEND (SP, THIS->players);
2097 for_all_players (pl)
2098 if (pl->ob && pl->ob->map == THIS)
2099 PUSHs (sv_2mortal (to_sv (pl->ob)));
2100 }
2088 2101
2089void play_sound_map (maptile *map, int x, int y, int sound_num) 2102void play_sound_map (maptile *map, int x, int y, int sound_num)
2090 2103
2091int out_of_map (maptile *map, int x, int y) 2104int out_of_map (maptile *map, int x, int y)
2092 2105
2168 case 4: RETVAL = newSVuv ( GET_MAP_MOVE_BLOCK (obj, x, y)); break; 2181 case 4: RETVAL = newSVuv ( GET_MAP_MOVE_BLOCK (obj, x, y)); break;
2169 case 5: RETVAL = newSVuv ( GET_MAP_MOVE_SLOW (obj, x, y)); break; 2182 case 5: RETVAL = newSVuv ( GET_MAP_MOVE_SLOW (obj, x, y)); break;
2170 case 6: RETVAL = newSVuv ( GET_MAP_MOVE_ON (obj, x, y)); break; 2183 case 6: RETVAL = newSVuv ( GET_MAP_MOVE_ON (obj, x, y)); break;
2171 case 7: RETVAL = newSVuv ( GET_MAP_MOVE_OFF (obj, x, y)); break; 2184 case 7: RETVAL = newSVuv ( GET_MAP_MOVE_OFF (obj, x, y)); break;
2172 } 2185 }
2173 OUTPUT: 2186 OUTPUT: RETVAL
2187
2188void fix_walls (maptile *map, int x, int y)
2189
2190void fix_walls_around (maptile *map, int x, int y)
2191
2192const char *
2193region_name (maptile *m)
2194 CODE:
2195 RETVAL = get_name_of_region_for_map (m);
2196 OUTPUT: RETVAL
2197
2198# worst xs function of my life
2199maptile *
2200_create_random_map (\
2201 char *path,\
2202 char *wallstyle,\
2203 char *wall_name,\
2204 char *floorstyle,\
2205 char *monsterstyle,\
2206 char *treasurestyle,\
2207 char *layoutstyle,\
2208 char *doorstyle,\
2209 char *decorstyle,\
2210 char *origin_map,\
2211 char *final_map,\
2212 char *exitstyle,\
2213 char *this_map,\
2214 char *exit_on_final_map,\
2215 int Xsize,\
2216 int Ysize,\
2217 int expand2x,\
2218 int layoutoptions1,\
2219 int layoutoptions2,\
2220 int layoutoptions3,\
2221 int symmetry,\
2222 int difficulty,\
2223 int difficulty_given,\
2224 float difficulty_increase,\
2225 int dungeon_level,\
2226 int dungeon_depth,\
2227 int decoroptions,\
2228 int orientation,\
2229 int origin_y,\
2230 int origin_x,\
2231 int random_seed,\
2232 val64 total_map_hp,\
2233 int map_layout_style,\
2234 int treasureoptions,\
2235 int symmetry_used,\
2236 region *region\
2237)
2238 CODE:
2239{
2240 random_map_params rmp;
2241
2242 assign (rmp.wallstyle , wallstyle);
2243 assign (rmp.wall_name , wall_name);
2244 assign (rmp.floorstyle , floorstyle);
2245 assign (rmp.monsterstyle , monsterstyle);
2246 assign (rmp.treasurestyle , treasurestyle);
2247 assign (rmp.layoutstyle , layoutstyle);
2248 assign (rmp.doorstyle , doorstyle);
2249 assign (rmp.decorstyle , decorstyle);
2250 assign (rmp.exitstyle , exitstyle);
2251 assign (rmp.exit_on_final_map, exit_on_final_map);
2252
2253 rmp.origin_map = origin_map;
2254 rmp.final_map = final_map;
2255 rmp.this_map = this_map;
2256 rmp.Xsize = Xsize;
2257 rmp.Ysize = Ysize;
2258 rmp.expand2x = expand2x;
2259 rmp.layoutoptions1 = layoutoptions1;
2260 rmp.layoutoptions2 = layoutoptions2;
2261 rmp.layoutoptions3 = layoutoptions3;
2262 rmp.symmetry = symmetry;
2263 rmp.difficulty = difficulty;
2264 rmp.difficulty_given = difficulty_given;
2265 rmp.difficulty_increase = difficulty_increase;
2266 rmp.dungeon_level = dungeon_level;
2267 rmp.dungeon_depth = dungeon_depth;
2268 rmp.decoroptions = decoroptions;
2269 rmp.orientation = orientation;
2270 rmp.origin_y = origin_y;
2271 rmp.origin_x = origin_x;
2272 rmp.random_seed = random_seed;
2273 rmp.total_map_hp = total_map_hp;
2274 rmp.map_layout_style = map_layout_style;
2275 rmp.treasureoptions = treasureoptions;
2276 rmp.symmetry_used = symmetry_used;
2277 rmp.region = region;
2278
2279 RETVAL = generate_random_map (path, &rmp);
2280}
2281 OUTPUT:
2174 RETVAL 2282 RETVAL
2175
2176void fix_walls (maptile *map, int x, int y)
2177
2178void fix_walls_around (maptile *map, int x, int y)
2179 2283
2180MODULE = cf PACKAGE = cf::arch 2284MODULE = cf PACKAGE = cf::arch
2181 2285
2182archetype *find (const char *name) 2286archetype *find (const char *name)
2183 CODE: 2287 CODE:
2199 PROTOTYPE: 2303 PROTOTYPE:
2200 CODE: 2304 CODE:
2201 RETVAL = get_firstparty (); 2305 RETVAL = get_firstparty ();
2202 OUTPUT: RETVAL 2306 OUTPUT: RETVAL
2203 2307
2204partylist *next (partylist *party) 2308INCLUDE: $PERL genacc partylist ../include/player.h |
2205 CODE:
2206 RETVAL = party->next;
2207 OUTPUT: RETVAL
2208
2209const char *name (partylist *party)
2210 CODE:
2211 RETVAL = party->partyname;
2212 OUTPUT: RETVAL
2213
2214const char *password (partylist *party)
2215 CODE:
2216 RETVAL = party->passwd;
2217 OUTPUT: RETVAL
2218 2309
2219MODULE = cf PACKAGE = cf::region 2310MODULE = cf PACKAGE = cf::region
2220 2311
2221region *first () 2312region *first ()
2222 PROTOTYPE: 2313 PROTOTYPE:
2223 CODE: 2314 CODE:
2224 RETVAL = first_region; 2315 RETVAL = first_region;
2225 OUTPUT: RETVAL 2316 OUTPUT: RETVAL
2226 2317
2227region *next (region *reg) 2318region *find (char *name)
2319 PROTOTYPE: $
2228 CODE: 2320 CODE:
2229 RETVAL = reg->next; 2321 RETVAL = get_region_by_name (name);
2230 OUTPUT: RETVAL 2322 OUTPUT: RETVAL
2231 2323
2232const char *name (region *reg) 2324INCLUDE: $PERL genacc region ../include/map.h |
2233 CODE:
2234 RETVAL = reg->name;
2235 OUTPUT: RETVAL
2236
2237region *parent (region *reg)
2238 CODE:
2239 RETVAL = reg->parent;
2240 OUTPUT: RETVAL
2241
2242const char *longname (region *reg)
2243 CODE:
2244 RETVAL = reg->longname;
2245 OUTPUT: RETVAL
2246
2247const char *msg (region *reg)
2248 CODE:
2249 RETVAL = reg->msg;
2250 OUTPUT: RETVAL
2251 2325
2252MODULE = cf PACKAGE = cf::living 2326MODULE = cf PACKAGE = cf::living
2253 2327
2254INCLUDE: $PERL genacc living ../include/living.h | 2328INCLUDE: $PERL genacc living ../include/living.h |
2255 2329
2286 char *buf = SvPVbyte (packet, len); 2360 char *buf = SvPVbyte (packet, len);
2287 2361
2288 THIS->send_packet (buf, len); 2362 THIS->send_packet (buf, len);
2289} 2363}
2290 2364
2291void
2292client::destroy ()
2293

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines