… | |
… | |
1557 | |
1557 | |
1558 | for_all_objects (op) |
1558 | for_all_objects (op) |
1559 | op->reattach (); |
1559 | op->reattach (); |
1560 | } |
1560 | } |
1561 | |
1561 | |
1562 | # support function for map-world.ext |
|
|
1563 | void _quantise (SV *data_sv, SV *plt_sv) |
|
|
1564 | CODE: |
|
|
1565 | { |
|
|
1566 | if (!SvROK (plt_sv) || SvTYPE (SvRV (plt_sv)) != SVt_PVAV) |
|
|
1567 | croak ("_quantise called with invalid agruments"); |
|
|
1568 | |
|
|
1569 | plt_sv = SvRV (plt_sv); |
|
|
1570 | SV **plt = AvARRAY (plt_sv); |
|
|
1571 | int plt_count = AvFILL (plt_sv) + 1; |
|
|
1572 | |
|
|
1573 | STRLEN len; |
|
|
1574 | char *data = SvPVbyte (data_sv, len); |
|
|
1575 | char *dst = data; |
|
|
1576 | |
|
|
1577 | while (len >= 3) |
|
|
1578 | { |
|
|
1579 | for (SV **val_sv = plt + plt_count; val_sv-- > plt; ) |
|
|
1580 | { |
|
|
1581 | char *val = SvPVX (*val_sv); |
|
|
1582 | |
|
|
1583 | if (val [0] == data [0] |
|
|
1584 | && val [1] == data [1] |
|
|
1585 | && val [2] == data [2]) |
|
|
1586 | { |
|
|
1587 | *dst++ = val [3]; |
|
|
1588 | goto next; |
|
|
1589 | } |
|
|
1590 | } |
|
|
1591 | |
|
|
1592 | croak ("_quantise: color not found in palette: #%02x%02x%02x, at offset %d %d", |
|
|
1593 | (uint8_t)data [0], (uint8_t)data [1], (uint8_t)data [2], |
|
|
1594 | dst - SvPVX (data_sv), len); |
|
|
1595 | |
|
|
1596 | next: |
|
|
1597 | data += 3; |
|
|
1598 | len -= 3; |
|
|
1599 | } |
|
|
1600 | |
|
|
1601 | SvCUR_set (data_sv, dst - SvPVX (data_sv)); |
|
|
1602 | } |
|
|
1603 | |
|
|
1604 | void init_anim () |
1562 | void init_anim () |
1605 | |
1563 | |
1606 | void init_globals () |
1564 | void init_globals () |
1607 | |
1565 | |
1608 | void init_attackmess () |
1566 | void init_attackmess () |