… | |
… | |
92 | |
92 | |
93 | static SV |
93 | static SV |
94 | *cv_cf_do_invoke, |
94 | *cv_cf_do_invoke, |
95 | *cv_cf__can_merge, |
95 | *cv_cf__can_merge, |
96 | *cv_cf_client_send_msg, |
96 | *cv_cf_client_send_msg, |
|
|
97 | *cv_cf_ix, |
97 | *cv_cf_tick, |
98 | *cv_cf_tick, |
98 | *cv_cf_match_match; |
99 | *cv_cf_match_match; |
99 | |
100 | |
100 | #ifndef newSVpv_utf8 |
101 | #ifndef newSVpv_utf8 |
101 | static SV * |
102 | static SV * |
… | |
… | |
1157 | CALL_ARG (originator); |
1158 | CALL_ARG (originator); |
1158 | CALL_CALL ("cf::mapscript::activate", G_VOID); |
1159 | CALL_CALL ("cf::mapscript::activate", G_VOID); |
1159 | CALL_END; |
1160 | CALL_END; |
1160 | } |
1161 | } |
1161 | |
1162 | |
|
|
1163 | void cfperl_ix (client *ns, faceidx idx, int pri, uint32 size, uint32 fofs) |
|
|
1164 | { |
|
|
1165 | CALL_BEGIN (5); |
|
|
1166 | CALL_ARG (ns); |
|
|
1167 | CALL_ARG (idx); |
|
|
1168 | CALL_ARG (pri); |
|
|
1169 | CALL_ARG (size); |
|
|
1170 | CALL_ARG (fofs); |
|
|
1171 | CALL_CALL (cv_cf_ix, G_VOID); |
|
|
1172 | CALL_END; |
|
|
1173 | } |
|
|
1174 | |
1162 | player * |
1175 | player * |
1163 | player::find (const_utf8_string name) |
1176 | player::find (const_utf8_string name) |
1164 | { |
1177 | { |
1165 | CALL_BEGIN (1); |
1178 | CALL_BEGIN (1); |
1166 | CALL_ARG (name); |
1179 | CALL_ARG (name); |
… | |
… | |
1436 | _connect_to_perl_2 () |
1449 | _connect_to_perl_2 () |
1437 | { |
1450 | { |
1438 | cv_cf_do_invoke = (SV *)get_cv ("cf::do_invoke" , 0); assert (cv_cf_do_invoke); |
1451 | cv_cf_do_invoke = (SV *)get_cv ("cf::do_invoke" , 0); assert (cv_cf_do_invoke); |
1439 | cv_cf__can_merge = (SV *)get_cv ("cf::_can_merge" , 0); assert (cv_cf__can_merge); |
1452 | cv_cf__can_merge = (SV *)get_cv ("cf::_can_merge" , 0); assert (cv_cf__can_merge); |
1440 | cv_cf_client_send_msg = (SV *)get_cv ("cf::client::send_msg", 0); assert (cv_cf_client_send_msg); |
1453 | cv_cf_client_send_msg = (SV *)get_cv ("cf::client::send_msg", 0); assert (cv_cf_client_send_msg); |
|
|
1454 | cv_cf_ix = (SV *)get_cv ("cf::face::ix" , 0); assert (cv_cf_ix); |
1441 | cv_cf_tick = (SV *)get_cv ("cf::tick" , 0); assert (cv_cf_tick); |
1455 | cv_cf_tick = (SV *)get_cv ("cf::tick" , 0); assert (cv_cf_tick); |
1442 | cv_cf_match_match = (SV *)get_cv ("cf::match::match" , 0); assert (cv_cf_match_match); |
1456 | cv_cf_match_match = (SV *)get_cv ("cf::match::match" , 0); assert (cv_cf_match_match); |
1443 | } |
1457 | } |
1444 | |
1458 | |
1445 | MODULE = cf PACKAGE = cf PREFIX = cf_ |
1459 | MODULE = cf PACKAGE = cf PREFIX = cf_ |
… | |
… | |
2388 | croak ("maptile::add_underlay: palette must be arrayref"); |
2402 | croak ("maptile::add_underlay: palette must be arrayref"); |
2389 | |
2403 | |
2390 | palette = SvRV (palette); |
2404 | palette = SvRV (palette); |
2391 | |
2405 | |
2392 | STRLEN idxlen; |
2406 | STRLEN idxlen; |
2393 | const uint8_t *idx = (const uint8_t *)SvPVbyte (data, idxlen); |
2407 | const uint8 *idx = (const uint8 *)SvPVbyte (data, idxlen); |
2394 | |
2408 | |
2395 | for (int x = 0; x < THIS->width; ++x) |
2409 | for (int x = 0; x < THIS->width; ++x) |
2396 | for (int y = 0; y < THIS->height; ++y) |
2410 | for (int y = 0; y < THIS->height; ++y) |
2397 | { |
2411 | { |
2398 | for (object *op = THIS->at (x, y).bot; op; op = op->above) |
2412 | for (object *op = THIS->at (x, y).bot; op; op = op->above) |
… | |
… | |
2438 | croak ("maptile::set_regiondata: palette must be arrayref"); |
2452 | croak ("maptile::set_regiondata: palette must be arrayref"); |
2439 | |
2453 | |
2440 | palette = SvRV (palette); |
2454 | palette = SvRV (palette); |
2441 | |
2455 | |
2442 | STRLEN idxlen; |
2456 | STRLEN idxlen; |
2443 | const uint8_t *idx = (const uint8_t *)SvPVbyte (data, idxlen); |
2457 | const uint8 *idx = (const uint8 *)SvPVbyte (data, idxlen); |
2444 | |
2458 | |
2445 | region_ptr *regionmap = new region_ptr [av_len ((AV *)palette) + 1]; |
2459 | region_ptr *regionmap = new region_ptr [av_len ((AV *)palette) + 1]; |
2446 | uint8_t *regions = salloc<uint8_t> (THIS->size ()); |
2460 | uint8 *regions = salloc<uint8_t> (THIS->size ()); |
2447 | |
2461 | |
2448 | for (int i = av_len ((AV *)palette) + 1; i--; ) |
2462 | for (int i = av_len ((AV *)palette) + 1; i--; ) |
2449 | regionmap [i] = region::find (cfSvPVutf8_nolen (*av_fetch ((AV *)palette, i, 1))); |
2463 | regionmap [i] = region::find (cfSvPVutf8_nolen (*av_fetch ((AV *)palette, i, 1))); |
2450 | |
2464 | |
2451 | for (int y = 0; y < THIS->height; ++y) |
2465 | for (int y = 0; y < THIS->height; ++y) |
… | |
… | |
2760 | case 2: f->magicmap = value; break; |
2774 | case 2: f->magicmap = value; break; |
2761 | case 3: f->smooth = value; break; |
2775 | case 3: f->smooth = value; break; |
2762 | case 4: f->smoothlevel = value; break; |
2776 | case 4: f->smoothlevel = value; break; |
2763 | } |
2777 | } |
2764 | |
2778 | |
2765 | void set_data (faceidx idx, int faceset, SV *data, SV *chksum) |
2779 | void set_data (faceidx idx, int faceset, uint32 size, uint32 fofs, SV *chksum) |
2766 | CODE: |
2780 | CODE: |
2767 | { |
2781 | { |
2768 | faceinfo *f = face_info (idx); assert (f); |
2782 | faceinfo *f = face_info (idx); assert (f); |
2769 | facedata *d = f->face + faceset; |
2783 | facedata *d = f->face + faceset; |
2770 | sv_to (data, d->data); |
|
|
2771 | STRLEN clen; |
2784 | STRLEN clen; |
2772 | char *cdata = SvPVbyte (chksum, clen); |
2785 | char *cdata = SvPVbyte (chksum, clen); |
2773 | |
2786 | |
2774 | assert (("cf::face::set_data called with too long checksum", clen <= CHKSUM_MAXLEN)); |
2787 | assert (("cf::face::set_data called with too long checksum", clen <= CHKSUM_MAXLEN)); |
2775 | assert (("cf::face::set_data must be called with a non-empty checksum", clen)); |
2788 | assert (("cf::face::set_data must be called with a non-empty checksum", clen)); |
|
|
2789 | |
|
|
2790 | d->size = size; |
|
|
2791 | d->fofs = fofs; |
2776 | |
2792 | |
2777 | if (clen != d->chksum_len || memcmp (d->chksum, cdata, clen)) |
2793 | if (clen != d->chksum_len || memcmp (d->chksum, cdata, clen)) |
2778 | { |
2794 | { |
2779 | d->chksum_len = clen; |
2795 | d->chksum_len = clen; |
2780 | memcpy (d->chksum, cdata, clen); |
2796 | memcpy (d->chksum, cdata, clen); |
… | |
… | |
2782 | // invalidate existing client face info |
2798 | // invalidate existing client face info |
2783 | for_all_clients (ns) |
2799 | for_all_clients (ns) |
2784 | ns->invalidate_face (idx); |
2800 | ns->invalidate_face (idx); |
2785 | } |
2801 | } |
2786 | } |
2802 | } |
2787 | |
|
|
2788 | int get_data_size (faceidx idx, int faceset = 0) |
|
|
2789 | CODE: |
|
|
2790 | facedata *d = face_data (idx, faceset); |
|
|
2791 | if (!d) XSRETURN_UNDEF; |
|
|
2792 | RETVAL = d->data.size (); |
|
|
2793 | OUTPUT: |
|
|
2794 | RETVAL |
|
|
2795 | |
2803 | |
2796 | void set_meta (faceidx idx, SV *sv) |
2804 | void set_meta (faceidx idx, SV *sv) |
2797 | CODE: |
2805 | CODE: |
2798 | { |
2806 | { |
2799 | faceinfo *f = face_info (idx); assert (f); |
2807 | faceinfo *f = face_info (idx); assert (f); |
… | |
… | |
2831 | if (!f) XSRETURN_UNDEF; |
2839 | if (!f) XSRETURN_UNDEF; |
2832 | RETVAL = to_sv (f->name); |
2840 | RETVAL = to_sv (f->name); |
2833 | OUTPUT: |
2841 | OUTPUT: |
2834 | RETVAL |
2842 | RETVAL |
2835 | |
2843 | |
2836 | SV *get_data (faceidx idx, int faceset = 0) |
2844 | uint32 get_size (faceidx idx, int faceset = 0) |
2837 | CODE: |
2845 | CODE: |
2838 | facedata *d = face_data (idx, faceset); |
2846 | facedata *d = face_data (idx, faceset); |
2839 | if (!d) XSRETURN_UNDEF; |
2847 | if (!d) XSRETURN_UNDEF; |
2840 | RETVAL = newSVpvn (d->data, d->data.size ()); |
2848 | RETVAL = d->size; |
|
|
2849 | OUTPUT: |
|
|
2850 | RETVAL |
|
|
2851 | |
|
|
2852 | uint32 get_fofs (faceidx idx, int faceset = 0) |
|
|
2853 | CODE: |
|
|
2854 | facedata *d = face_data (idx, faceset); |
|
|
2855 | if (!d) XSRETURN_UNDEF; |
|
|
2856 | RETVAL = d->fofs; |
2841 | OUTPUT: |
2857 | OUTPUT: |
2842 | RETVAL |
2858 | RETVAL |
2843 | |
2859 | |
2844 | SV *get_meta (faceidx idx) |
2860 | SV *get_meta (faceidx idx) |
2845 | CODE: |
2861 | CODE: |