… | |
… | |
349 | inline SV *to_sv (living * v) { return newSVptr (v, stash_cf_living_wrap); } |
349 | inline SV *to_sv (living * v) { return newSVptr (v, stash_cf_living_wrap); } |
350 | |
350 | |
351 | inline SV *to_sv (object & v) { return to_sv (&v); } |
351 | inline SV *to_sv (object & v) { return to_sv (&v); } |
352 | inline SV *to_sv (living & v) { return to_sv (&v); } |
352 | inline SV *to_sv (living & v) { return to_sv (&v); } |
353 | |
353 | |
354 | inline SV *to_sv (facetile * v) { return to_sv (v->name); } |
354 | //inline SV *to_sv (faceinfo * v) { return to_sv (v->name); } |
355 | inline SV *to_sv (treasurelist * v) { return to_sv (v->name); } |
355 | inline SV *to_sv (treasurelist * v) { return to_sv (v->name); } |
|
|
356 | inline SV *to_sv (std::string & v) { return newSVpvn (v.data (), v.size ()); } |
356 | |
357 | |
357 | inline SV *to_sv (UUID v) |
358 | inline SV *to_sv (UUID v) |
358 | { |
359 | { |
359 | char buf[128]; |
360 | char buf[128]; |
360 | snprintf (buf, 128, "<1.%" PRIx64 ">", v.seq); |
361 | snprintf (buf, 128, "<1.%" PRIx64 ">", v.seq); |
… | |
… | |
384 | inline void sv_to (SV *sv, attachable * &v) { v = (attachable *)SvPTR_ornull (sv, "cf::attachable"); } |
385 | inline void sv_to (SV *sv, attachable * &v) { v = (attachable *)SvPTR_ornull (sv, "cf::attachable"); } |
385 | inline void sv_to (SV *sv, partylist * &v) { v = (partylist *)SvPTR_ornull (sv, "cf::party"); } |
386 | inline void sv_to (SV *sv, partylist * &v) { v = (partylist *)SvPTR_ornull (sv, "cf::party"); } |
386 | inline void sv_to (SV *sv, region * &v) { v = (region *)SvPTR_ornull (sv, "cf::region"); } |
387 | inline void sv_to (SV *sv, region * &v) { v = (region *)SvPTR_ornull (sv, "cf::region"); } |
387 | inline void sv_to (SV *sv, living * &v) { v = (living *)SvPTR_ornull (sv, "cf::living"); } |
388 | inline void sv_to (SV *sv, living * &v) { v = (living *)SvPTR_ornull (sv, "cf::living"); } |
388 | |
389 | |
389 | inline void sv_to (SV *sv, facetile * &v) { v = &new_faces[FindFace (SvPV_nolen (sv), 0)]; } |
390 | //inline void sv_to (SV *sv, faceinfo * &v) { v = &faces [face_find (SvPV_nolen (sv), 0)]; } |
390 | inline void sv_to (SV *sv, treasurelist * &v) { v = find_treasurelist (SvPV_nolen (sv)); } |
391 | inline void sv_to (SV *sv, treasurelist * &v) { v = find_treasurelist (SvPV_nolen (sv)); } |
391 | |
392 | |
392 | template<class T> |
393 | template<class T> |
393 | inline void sv_to (SV *sv, refptr<T> &v) { T *tmp; sv_to (sv, tmp); v = tmp; } |
394 | inline void sv_to (SV *sv, refptr<T> &v) { T *tmp; sv_to (sv, tmp); v = tmp; } |
394 | |
395 | |
… | |
… | |
398 | inline void sv_to (SV *sv, rangetype &v) { v = (rangetype) SvIV (sv); } |
399 | inline void sv_to (SV *sv, rangetype &v) { v = (rangetype) SvIV (sv); } |
399 | inline void sv_to (SV *sv, bowtype_t &v) { v = (bowtype_t) SvIV (sv); } |
400 | inline void sv_to (SV *sv, bowtype_t &v) { v = (bowtype_t) SvIV (sv); } |
400 | inline void sv_to (SV *sv, petmode_t &v) { v = (petmode_t) SvIV (sv); } |
401 | inline void sv_to (SV *sv, petmode_t &v) { v = (petmode_t) SvIV (sv); } |
401 | inline void sv_to (SV *sv, usekeytype &v) { v = (usekeytype) SvIV (sv); } |
402 | inline void sv_to (SV *sv, usekeytype &v) { v = (usekeytype) SvIV (sv); } |
402 | inline void sv_to (SV *sv, unapplymode &v) { v = (unapplymode) SvIV (sv); } |
403 | inline void sv_to (SV *sv, unapplymode &v) { v = (unapplymode) SvIV (sv); } |
|
|
404 | |
|
|
405 | inline void sv_to (SV *sv, std::string &v) |
|
|
406 | { |
|
|
407 | STRLEN len; |
|
|
408 | char *data = SvPVbyte (sv, len); |
|
|
409 | v.assign (data, len); |
|
|
410 | } |
403 | |
411 | |
404 | inline void sv_to (SV *sv, UUID &v) |
412 | inline void sv_to (SV *sv, UUID &v) |
405 | { |
413 | { |
406 | unsigned int version; |
414 | unsigned int version; |
407 | |
415 | |
… | |
… | |
598 | perl = perl_alloc (); |
606 | perl = perl_alloc (); |
599 | perl_construct (perl); |
607 | perl_construct (perl); |
600 | |
608 | |
601 | PL_exit_flags |= PERL_EXIT_DESTRUCT_END; |
609 | PL_exit_flags |= PERL_EXIT_DESTRUCT_END; |
602 | |
610 | |
603 | char *argv[] = { |
611 | const char *argv[] = { |
604 | "", |
612 | "", |
605 | "-e" |
613 | "-e" |
606 | "use Event; use Coro;" // required for bootstrap |
614 | "use Event; use Coro;" // required for bootstrap |
607 | "cf->bootstrap;" // required for datadir :*> |
615 | "cf->bootstrap;" // required for datadir :*> |
608 | "unshift @INC, cf::datadir ();" |
616 | "unshift @INC, cf::datadir ();" |
609 | "require cf;" |
617 | "require cf;" |
610 | }; |
618 | }; |
611 | |
619 | |
612 | if (perl_parse (perl, xs_init, 2, argv, (char **)NULL) || perl_run (perl)) |
620 | if (perl_parse (perl, xs_init, 2, (char **)argv, (char **)NULL) |
|
|
621 | || perl_run (perl)) |
613 | { |
622 | { |
614 | printf ("unable to initialize perl-interpreter, aborting.\n"); |
623 | printf ("unable to initialize perl-interpreter, aborting.\n"); |
615 | exit (EXIT_FAILURE); |
624 | exit (EXIT_FAILURE); |
616 | } |
625 | } |
617 | |
626 | |
… | |
… | |
1042 | # define const_iv(name) { # name, (IV)name }, |
1051 | # define const_iv(name) { # name, (IV)name }, |
1043 | const_iv (llevError) |
1052 | const_iv (llevError) |
1044 | const_iv (llevInfo) |
1053 | const_iv (llevInfo) |
1045 | const_iv (llevDebug) |
1054 | const_iv (llevDebug) |
1046 | const_iv (llevMonster) |
1055 | const_iv (llevMonster) |
|
|
1056 | |
|
|
1057 | const_iv (Map0Cmd) |
|
|
1058 | const_iv (Map1Cmd) |
|
|
1059 | const_iv (Map1aCmd) |
|
|
1060 | |
|
|
1061 | const_iv (MAP_CLIENT_X) |
|
|
1062 | const_iv (MAP_CLIENT_Y) |
1047 | |
1063 | |
1048 | const_iv (MAX_TIME) |
1064 | const_iv (MAX_TIME) |
1049 | const_iv (PLAYER) |
1065 | const_iv (PLAYER) |
1050 | const_iv (TRANSPORT) |
1066 | const_iv (TRANSPORT) |
1051 | const_iv (ROD) |
1067 | const_iv (ROD) |
… | |
… | |
1586 | { |
1602 | { |
1587 | // reattach to all attachable objects in the game. |
1603 | // reattach to all attachable objects in the game. |
1588 | for_all_clients (ns) |
1604 | for_all_clients (ns) |
1589 | ns->reattach (); |
1605 | ns->reattach (); |
1590 | |
1606 | |
1591 | for_all_players (pl) |
|
|
1592 | pl->reattach (); |
|
|
1593 | |
|
|
1594 | //TODO |
|
|
1595 | //for (map_container::iterator i = maps.begin (); i != maps.end (); ++i) |
|
|
1596 | // i->second->reattach (); |
|
|
1597 | |
|
|
1598 | for_all_objects (op) |
1607 | for_all_objects (op) |
1599 | op->reattach (); |
1608 | op->reattach (); |
1600 | } |
1609 | } |
1601 | |
1610 | |
1602 | NV floor (NV x) |
1611 | NV floor (NV x) |
… | |
… | |
1642 | void |
1651 | void |
1643 | sub_generation_inc () |
1652 | sub_generation_inc () |
1644 | CODE: |
1653 | CODE: |
1645 | PL_sub_generation++; |
1654 | PL_sub_generation++; |
1646 | |
1655 | |
1647 | char * |
1656 | const char * |
1648 | mapdir () |
1657 | mapdir () |
1649 | PROTOTYPE: |
1658 | PROTOTYPE: |
1650 | ALIAS: |
1659 | ALIAS: |
1651 | mapdir = 0 |
1660 | mapdir = 0 |
1652 | uniquedir = 1 |
1661 | uniquedir = 1 |
… | |
… | |
1765 | #object *mortals (U32 index) |
1774 | #object *mortals (U32 index) |
1766 | # CODE: |
1775 | # CODE: |
1767 | # RETVAL = index < attachable::mortals.size () ? attachable::mortals [index] : 0; |
1776 | # RETVAL = index < attachable::mortals.size () ? attachable::mortals [index] : 0; |
1768 | # OUTPUT: RETVAL |
1777 | # OUTPUT: RETVAL |
1769 | |
1778 | |
1770 | INCLUDE: $PERL genacc attachable ../include/cfperl.h | |
1779 | INCLUDE: $PERL $srcdir/genacc attachable ../include/cfperl.h | |
1771 | |
1780 | |
1772 | MODULE = cf PACKAGE = cf::global |
1781 | MODULE = cf PACKAGE = cf::global |
1773 | |
1782 | |
1774 | int invoke (SV *klass, int event, ...) |
1783 | int invoke (SV *klass, int event, ...) |
1775 | CODE: |
1784 | CODE: |
… | |
… | |
1779 | RETVAL = gbl_ev.invoke ((event_type)event, ARG_AV (av), DT_END); |
1788 | RETVAL = gbl_ev.invoke ((event_type)event, ARG_AV (av), DT_END); |
1780 | OUTPUT: RETVAL |
1789 | OUTPUT: RETVAL |
1781 | |
1790 | |
1782 | MODULE = cf PACKAGE = cf::object PREFIX = cf_object_ |
1791 | MODULE = cf PACKAGE = cf::object PREFIX = cf_object_ |
1783 | |
1792 | |
1784 | INCLUDE: $PERL genacc object ../include/object.h | |
1793 | INCLUDE: $PERL $srcdir/genacc object ../include/object.h | |
1785 | |
1794 | |
1786 | int invoke (object *op, int event, ...) |
1795 | int invoke (object *op, int event, ...) |
1787 | CODE: |
1796 | CODE: |
1788 | if (KLASS_OF (event) != KLASS_OBJECT) croak ("event class must be OBJECT"); |
1797 | if (KLASS_OF (event) != KLASS_OBJECT) croak ("event class must be OBJECT"); |
1789 | AV *av = (AV *)sv_2mortal ((SV *)newAV ()); |
1798 | AV *av = (AV *)sv_2mortal ((SV *)newAV ()); |
… | |
… | |
1853 | object *find_marked_object (object *op) |
1862 | object *find_marked_object (object *op) |
1854 | |
1863 | |
1855 | int need_identify (object *obj); |
1864 | int need_identify (object *obj); |
1856 | |
1865 | |
1857 | int apply_shop_mat (object *shop_mat, object *op); |
1866 | int apply_shop_mat (object *shop_mat, object *op); |
|
|
1867 | |
|
|
1868 | int move_player (object *op, int dir) |
|
|
1869 | CODE: |
|
|
1870 | RETVAL = move_player (op, dir); |
|
|
1871 | OUTPUT: |
|
|
1872 | RETVAL |
1858 | |
1873 | |
1859 | int move (object *op, int dir, object *originator = op) |
1874 | int move (object *op, int dir, object *originator = op) |
1860 | CODE: |
1875 | CODE: |
1861 | RETVAL = move_ob (op, dir, originator); |
1876 | RETVAL = move_ob (op, dir, originator); |
1862 | OUTPUT: |
1877 | OUTPUT: |
… | |
… | |
2063 | |
2078 | |
2064 | int command_summon (object *op, char *params) |
2079 | int command_summon (object *op, char *params) |
2065 | |
2080 | |
2066 | int command_arrest (object *op, char *params) |
2081 | int command_arrest (object *op, char *params) |
2067 | |
2082 | |
2068 | int command_banish (object *op, char *params) |
|
|
2069 | |
|
|
2070 | |
2083 | |
2071 | MODULE = cf PACKAGE = cf::player PREFIX = cf_player_ |
2084 | MODULE = cf PACKAGE = cf::player PREFIX = cf_player_ |
2072 | |
2085 | |
2073 | INCLUDE: $PERL genacc player ../include/player.h | |
2086 | INCLUDE: $PERL $srcdir/genacc player ../include/player.h | |
2074 | |
2087 | |
2075 | int invoke (player *pl, int event, ...) |
2088 | int invoke (player *pl, int event, ...) |
2076 | CODE: |
2089 | CODE: |
2077 | if (KLASS_OF (event) != KLASS_PLAYER) croak ("event class must be PLAYER"); |
2090 | if (KLASS_OF (event) != KLASS_PLAYER) croak ("event class must be PLAYER"); |
2078 | AV *av = (AV *)sv_2mortal ((SV *)newAV ()); |
2091 | AV *av = (AV *)sv_2mortal ((SV *)newAV ()); |
… | |
… | |
2153 | RETVAL = map->invoke ((event_type)event, ARG_AV (av), DT_END); |
2166 | RETVAL = map->invoke ((event_type)event, ARG_AV (av), DT_END); |
2154 | OUTPUT: RETVAL |
2167 | OUTPUT: RETVAL |
2155 | |
2168 | |
2156 | SV *registry (maptile *map) |
2169 | SV *registry (maptile *map) |
2157 | |
2170 | |
2158 | INCLUDE: $PERL genacc maptile ../include/map.h | |
2171 | INCLUDE: $PERL $srcdir/genacc maptile ../include/map.h | |
2159 | |
2172 | |
2160 | void |
2173 | void |
2161 | maptile::instantiate () |
2174 | maptile::instantiate () |
2162 | |
2175 | |
2163 | maptile *new () |
2176 | maptile *new () |
… | |
… | |
2436 | PROTOTYPE: |
2449 | PROTOTYPE: |
2437 | CODE: |
2450 | CODE: |
2438 | RETVAL = first_archetype; |
2451 | RETVAL = first_archetype; |
2439 | OUTPUT: RETVAL |
2452 | OUTPUT: RETVAL |
2440 | |
2453 | |
2441 | INCLUDE: $PERL genacc archetype ../include/object.h | |
2454 | INCLUDE: $PERL $srcdir/genacc archetype ../include/object.h | |
2442 | |
2455 | |
2443 | MODULE = cf PACKAGE = cf::party |
2456 | MODULE = cf PACKAGE = cf::party |
2444 | |
2457 | |
2445 | partylist *first () |
2458 | partylist *first () |
2446 | PROTOTYPE: |
2459 | PROTOTYPE: |
2447 | CODE: |
2460 | CODE: |
2448 | RETVAL = get_firstparty (); |
2461 | RETVAL = get_firstparty (); |
2449 | OUTPUT: RETVAL |
2462 | OUTPUT: RETVAL |
2450 | |
2463 | |
2451 | INCLUDE: $PERL genacc partylist ../include/player.h | |
2464 | INCLUDE: $PERL $srcdir/genacc partylist ../include/player.h | |
2452 | |
2465 | |
2453 | MODULE = cf PACKAGE = cf::region |
2466 | MODULE = cf PACKAGE = cf::region |
2454 | |
2467 | |
2455 | void |
2468 | void |
2456 | list () |
2469 | list () |
… | |
… | |
2468 | PROTOTYPE: $ |
2481 | PROTOTYPE: $ |
2469 | CODE: |
2482 | CODE: |
2470 | RETVAL = region::find_fuzzy (name); |
2483 | RETVAL = region::find_fuzzy (name); |
2471 | OUTPUT: RETVAL |
2484 | OUTPUT: RETVAL |
2472 | |
2485 | |
2473 | INCLUDE: $PERL genacc region ../include/map.h | |
2486 | INCLUDE: $PERL $srcdir/genacc region ../include/map.h | |
2474 | |
2487 | |
2475 | MODULE = cf PACKAGE = cf::living |
2488 | MODULE = cf PACKAGE = cf::living |
2476 | |
2489 | |
2477 | INCLUDE: $PERL genacc living ../include/living.h | |
2490 | INCLUDE: $PERL $srcdir/genacc living ../include/living.h | |
2478 | |
2491 | |
2479 | MODULE = cf PACKAGE = cf::settings |
2492 | MODULE = cf PACKAGE = cf::settings |
2480 | |
2493 | |
2481 | INCLUDE: $PERL genacc Settings ../include/global.h | |
2494 | INCLUDE: $PERL $srcdir/genacc Settings ../include/global.h | |
2482 | |
2495 | |
2483 | MODULE = cf PACKAGE = cf::client |
2496 | MODULE = cf PACKAGE = cf::client |
2484 | |
2497 | |
2485 | INCLUDE: $PERL genacc client ../include/client.h | |
2498 | INCLUDE: $PERL $srcdir/genacc client ../include/client.h | |
2486 | |
2499 | |
2487 | int invoke (client *ns, int event, ...) |
2500 | int invoke (client *ns, int event, ...) |
2488 | CODE: |
2501 | CODE: |
2489 | if (KLASS_OF (event) != KLASS_CLIENT) croak ("event class must be CLIENT"); |
2502 | if (KLASS_OF (event) != KLASS_CLIENT) croak ("event class must be CLIENT"); |
2490 | AV *av = (AV *)sv_2mortal ((SV *)newAV ()); |
2503 | AV *av = (AV *)sv_2mortal ((SV *)newAV ()); |
… | |
… | |
2509 | char *buf = SvPVbyte (packet, len); |
2522 | char *buf = SvPVbyte (packet, len); |
2510 | |
2523 | |
2511 | THIS->send_packet (buf, len); |
2524 | THIS->send_packet (buf, len); |
2512 | } |
2525 | } |
2513 | |
2526 | |
|
|
2527 | MODULE = cf PACKAGE = cf::face PREFIX = face_ |
|
|
2528 | |
|
|
2529 | INCLUDE: $PERL $srcdir/genacc faceset ../include/face.h | |
|
|
2530 | |
|
|
2531 | faceidx face_find (const char *name, faceidx defidx = 0) |
|
|
2532 | |
|
|
2533 | faceidx alloc (const char *name) |
|
|
2534 | CODE: |
|
|
2535 | { |
|
|
2536 | do |
|
|
2537 | { |
|
|
2538 | RETVAL = faces.size (); |
|
|
2539 | faces.resize (RETVAL + 1); |
|
|
2540 | } |
|
|
2541 | while (!RETVAL); // crude way to leave index 0 |
|
|
2542 | |
|
|
2543 | faces [RETVAL].name = name; |
|
|
2544 | facehash.insert (std::make_pair (faces [RETVAL].name, RETVAL)); |
|
|
2545 | |
|
|
2546 | if (!strcmp (name, BLANK_FACE_NAME)) blank_face = RETVAL; |
|
|
2547 | if (!strcmp (name, EMPTY_FACE_NAME)) empty_face = RETVAL; |
|
|
2548 | } |
|
|
2549 | OUTPUT: RETVAL |
|
|
2550 | |
|
|
2551 | void set (faceidx idx, int visibility, int magicmap) |
|
|
2552 | CODE: |
|
|
2553 | faceinfo *f = face_info (idx); |
|
|
2554 | assert (f); |
|
|
2555 | f->visibility = visibility; |
|
|
2556 | f->magicmap = magicmap; |
|
|
2557 | |
|
|
2558 | void set_smooth (faceidx idx, faceidx smooth) |
|
|
2559 | CODE: |
|
|
2560 | faceinfo *f = face_info (idx); |
|
|
2561 | assert (f); |
|
|
2562 | f->smooth = smooth; |
|
|
2563 | |
|
|
2564 | void set_data (faceidx idx, int faceset, SV *data, SV *chksum) |
|
|
2565 | CODE: |
|
|
2566 | facedata *d = face_data (idx, faceset); |
|
|
2567 | assert (d); |
|
|
2568 | sv_to (data, d->data); |
|
|
2569 | STRLEN clen; |
|
|
2570 | char *cdata = SvPVbyte (chksum, clen); |
|
|
2571 | memcpy (d->chksum, cdata, min (CHKSUM_SIZE, clen)); |
|
|
2572 | |
|
|
2573 | void invalidate (faceidx idx) |
|
|
2574 | CODE: |
|
|
2575 | for_all_clients (ns) |
|
|
2576 | ns->faces_sent [idx] = false; |
|
|
2577 | |
|
|
2578 | void invalidate_all () |
|
|
2579 | CODE: |
|
|
2580 | for_all_clients (ns) |
|
|
2581 | ns->faces_sent.reset (); |
|
|
2582 | |