231 |
"it-seed", // 0x24 |
"it-seed", // 0x24 |
232 |
"it-spring2", // 0x25 |
"it-spring2", // 0x25 |
233 |
"it-spring1", // 0x26 |
"it-spring1", // 0x26 |
234 |
0, // 0x27 |
"it-spring2", // 0x27 |
235 |
"it-magnet", // 0x28 |
"it-magnet", // 0x28 |
236 |
0, // 0x29 |
0, // 0x29 |
237 |
0, // 0x2a |
0, // 0x2a |
238 |
"it-shogun-s", // 0x2b |
0, // 0x2b |
239 |
"it-shogun-l", // 0x2c |
0, // 0x2c |
240 |
0, // 0x2d |
0, // 0x2d |
241 |
0, // 0x2e |
0, // 0x2e |
242 |
"it-wormhole", // 0x2f |
"it-wormhole", // 0x2f |
332 |
0, // 0x24 |
0, // 0x24 |
333 |
0, // 0x25 |
0, // 0x25 |
334 |
0, // 0x26 |
0, // 0x26 |
335 |
0, // 0x27 |
0, // 0x27 |
336 |
"st-switch", // 0x28 |
0, // 0x28 |
337 |
0, // 0x29 |
0, // 0x29 |
338 |
0, // 0x2a |
0, // 0x2a |
339 |
0, // 0x2b |
0, // 0x2b |
340 |
0, // 0x2c |
0, // 0x2c |
341 |
"st-floppy", // 0x2d |
0, // 0x2d |
342 |
0, // 0x2e |
0, // 0x2e |
343 |
"st-death", // 0x2f |
"st-death", // 0x2f |
344 |
"st-death_invisible", // 0x30 |
0, // 0x30 |
345 |
"st-oneway_black-w", // 0x31 |
"st-oneway_black-w", // 0x31 |
346 |
"st-oneway_black-e", // 0x32 |
"st-oneway_black-e", // 0x32 |
347 |
"st-oneway_black-n", // 0x33 |
"st-oneway_black-n", // 0x33 |
489 |
stone_map[0x26] = "st-glass3"; |
stone_map[0x26] = "st-glass3"; |
490 |
stone_map[0x29] = "st-rock3_hole"; // see 0x12 |
stone_map[0x29] = "st-rock3_hole"; // see 0x12 |
491 |
stone_map[0x2b] = "st-wood"; |
stone_map[0x2b] = "st-wood"; |
|
stone_map[0x2c] = "st-switch"; |
|
492 |
stone_map[0x34] = "st-death"; |
stone_map[0x34] = "st-death"; |
493 |
stone_map[0x35] = "st-death_invisible"; |
stone_map[0x35] = "st-death_invisible"; |
494 |
stone_map[0x42] = "st-stoneimpulse"; |
stone_map[0x42] = "st-stoneimpulse"; |
495 |
stone_map[0x68] = "st-bombs"; |
stone_map[0x68] = "st-bombs"; |
|
stone_map[0x6c] = "st-shogun-s"; |
|
496 |
stone_map[0x75] = "st-rock2"; |
stone_map[0x75] = "st-rock2"; |
497 |
stone_map[0x76] = "st-invisible"; |
stone_map[0x76] = "st-invisible"; |
498 |
stone_map[0x8a] = "st-stone1"; |
stone_map[0x8a] = "st-stone1"; |
518 |
|
|
519 |
item_map[0x25] = "it-seed"; |
item_map[0x25] = "it-seed"; |
520 |
item_map[0x36] = "it-springboard"; |
item_map[0x36] = "it-springboard"; |
521 |
|
item_map[0x4c] = "it-springboard"; |
522 |
|
|
523 |
stone_map[0x1a] = "st-grate1"; |
stone_map[0x1a] = "st-grate1"; |
524 |
stone_map[0x1f] = "st-brick"; |
stone_map[0x1f] = "st-brick"; |
525 |
|
stone_map[0x20] = "st-rock1"; |
526 |
stone_map[0x23] = "st-woven"; |
stone_map[0x23] = "st-woven"; |
527 |
stone_map[0x24] = "st-marble"; |
stone_map[0x24] = "st-marble"; |
528 |
stone_map[0x25] = "st-glass1"; |
stone_map[0x25] = "st-glass1"; |
529 |
stone_map[0x26] = "st-glass3"; |
stone_map[0x26] = "st-glass3"; |
530 |
stone_map[0x27] = "st-glass1"; |
stone_map[0x27] = "st-glass1"; |
531 |
stone_map[0x2b] = "st-wood"; |
stone_map[0x2b] = "st-wood"; |
532 |
|
stone_map[0x34] = "st-death"; |
533 |
stone_map[0x35] = "st-death_invisible"; |
stone_map[0x35] = "st-death_invisible"; |
534 |
|
stone_map[0x43] = "st-actorimpulse_invisible"; |
535 |
stone_map[0x68] = "st-bombs"; |
stone_map[0x68] = "st-bombs"; |
|
stone_map[0x6c] = "st-shogun-s"; |
|
536 |
stone_map[0x6d] = "st-stoneimpulse"; |
stone_map[0x6d] = "st-stoneimpulse"; |
537 |
stone_map[0x8a] = "st-stone1"; |
stone_map[0x8a] = "st-stone1"; |
538 |
stone_map[0x8c] = "st-white1"; |
stone_map[0x8c] = "st-white1"; |
629 |
it->set_attrib("type", 3); |
it->set_attrib("type", 3); |
630 |
break; |
break; |
631 |
|
|
632 |
|
case 0x2b: it = MakeItem("it-trigger"); |
633 |
|
snprintf( buf, sizeof(buf), "o_%d_%d", x, y); |
634 |
|
it->set_attrib("invisible", 1); |
635 |
|
NameObject(it, buf); |
636 |
|
break; |
637 |
case 0x2c: it = MakeItem("it-shogun-s"); |
case 0x2c: it = MakeItem("it-shogun-s"); |
638 |
snprintf( buf, sizeof(buf), "O_%d_%d", x, y); |
snprintf( buf, sizeof(buf), "O_%d_%d", x, y); |
639 |
NameObject(it, buf); |
NameObject(it, buf); |
640 |
break; |
break; |
641 |
|
|
642 |
case 0x40: it = MakeItem("st-trigger"); |
case 0x63: it = MakeItem("it-trigger"); |
643 |
snprintf( buf, sizeof(buf), "O_%d_%d", x, y); |
snprintf( buf, sizeof(buf), "O_%d_%d", x, y); |
644 |
NameObject(it, buf); |
NameObject(it, buf); |
645 |
break; |
break; |
676 |
char buf[20] = ""; |
char buf[20] = ""; |
677 |
|
|
678 |
switch( type) { |
switch( type) { |
679 |
case 0x00: break; // ignore |
case 0x00: return; // ignore no real stones |
680 |
|
break; |
681 |
|
|
682 |
case 0x01: // Oxyd stones of different colors |
case 0x01: // Oxyd stones of different colors |
683 |
case 0x02: |
case 0x02: |
699 |
st->set_attrib("flavor", "a"); |
st->set_attrib("flavor", "a"); |
700 |
break; |
break; |
701 |
|
|
|
case 0x28: st = MakeStone("st-switch"); |
|
|
snprintf( buf, sizeof(buf), "O_%d_%d", x, y); |
|
|
NameObject(st, buf); |
|
|
break; |
|
|
|
|
|
case 0x2b: st = MakeStone("st-fourswitch"); |
|
|
snprintf( buf, sizeof(buf), "O_%d_%d", x, y); |
|
|
NameObject(st, buf); |
|
|
break; |
|
|
|
|
|
case 0x2c: st = MakeStone("st-switch"); |
|
|
snprintf( buf, sizeof(buf), "O_%d_%d", x, y); |
|
|
NameObject(st, buf); |
|
|
break; |
|
|
|
|
|
case 0x2d: st = MakeStone("st-floppy"); |
|
|
snprintf( buf, sizeof(buf), "O_%d_%d", x, y); |
|
|
NameObject(st, buf); |
|
|
break; |
|
|
|
|
|
case 0x3e: st = MakeStone("st-laser"); |
|
|
snprintf( buf, sizeof(buf), "O_%d_%d", x, y); |
|
|
NameObject(st, buf); |
|
|
st->set_attrib("direction", NORTH); |
|
|
break; |
|
|
case 0x3f: st = MakeStone("st-laser"); |
|
|
snprintf( buf, sizeof(buf), "O_%d_%d", x, y); |
|
|
NameObject(st, buf); |
|
|
st->set_attrib("direction", SOUTH); |
|
|
break; |
|
|
case 0x40: st = MakeStone("st-laser"); |
|
|
snprintf( buf, sizeof(buf), "O_%d_%d", x, y); |
|
|
NameObject(st, buf); |
|
|
st->set_attrib("direction", EAST); |
|
|
break; |
|
|
|
|
|
case 0x46: |
|
|
st = MakeStone("st-laser"); |
|
|
snprintf( buf, sizeof(buf), "O_%d_%d", x, y); |
|
|
NameObject(st, buf); |
|
|
st->set_attrib("direction", EAST); |
|
|
break; |
|
|
|
|
|
case 0x51: st = MakeStone("st-puzzle"); |
|
|
st->set_attrib("connections", 7); |
|
|
break; |
|
|
case 0x52: st = MakeStone("st-puzzle"); |
|
|
st->set_attrib("connections", 4); |
|
|
break; |
|
|
case 0x53: st = MakeStone("st-puzzle"); |
|
|
st->set_attrib("connections", 10); |
|
|
break; |
|
|
case 0x54: st = MakeStone("st-puzzle"); |
|
|
st->set_attrib("connections",13); |
|
|
break; |
|
|
case 0x55: st = MakeStone("st-puzzle"); |
|
|
st->set_attrib("connections", 6); |
|
|
break; |
|
|
case 0x56: st = MakeStone("st-puzzle"); |
|
|
st->set_attrib("connections",11); |
|
|
break; |
|
|
case 0x57: st = MakeStone("st-puzzle"); |
|
|
st->set_attrib("connections", 9); |
|
|
break; |
|
|
case 0x58: st = MakeStone("st-puzzle"); |
|
|
st->set_attrib("connections", 3); |
|
|
break; |
|
|
case 0x59: st = MakeStone("st-puzzle"); |
|
|
st->set_attrib("connections", 2); |
|
|
break; |
|
|
case 0x5a: st = MakeStone("st-puzzle"); |
|
|
st->set_attrib("connections", 5); |
|
|
break; |
|
|
case 0x5b: st = MakeStone("st-puzzle"); |
|
|
st->set_attrib("connections", 16); |
|
|
break; |
|
|
case 0x5c: st = MakeStone("st-puzzle"); |
|
|
st->set_attrib("connections", 1); |
|
|
break; |
|
|
|
|
702 |
case 0x73: |
case 0x73: |
703 |
st = MakeStone("st-door-h"); |
st = MakeStone("st-door-h"); |
704 |
snprintf( buf, sizeof(buf), "D_%d_%d", x, y); |
snprintf( buf, sizeof(buf), "D_%d_%d", x, y); |
710 |
NameObject(st, buf); |
NameObject(st, buf); |
711 |
break; |
break; |
712 |
|
|
713 |
default: |
default: ; |
714 |
{ |
} |
715 |
const char *name = stone_map[type]; |
if (st == 0) { // handle stones that are different between the oxyd versions |
716 |
if( name == 0) |
switch (m_version) { |
717 |
fprintf(stderr, "Unknown stone %X\n",type); |
case OxydVersion_Oxyd1: |
718 |
st = MakeStone (name ? name : "st-dummy"); |
switch( type) { |
719 |
|
case 0x2c: st = MakeStone("st-switch"); |
720 |
|
snprintf( buf, sizeof(buf), "O_%d_%d", x, y); |
721 |
|
NameObject(st, buf); |
722 |
|
break; |
723 |
|
case 0x44: st = MakeStone("st-laser-n"); |
724 |
|
snprintf( buf, sizeof(buf), "O_%d_%d", x, y); |
725 |
|
NameObject(st, buf); |
726 |
|
break; |
727 |
|
case 0x45: st = MakeStone("st-laser-s"); |
728 |
|
snprintf( buf, sizeof(buf), "O_%d_%d", x, y); |
729 |
|
NameObject(st, buf); |
730 |
|
break; |
731 |
|
case 0x46: |
732 |
|
st = MakeStone("st-laser-e"); |
733 |
|
snprintf( buf, sizeof(buf), "O_%d_%d", x, y); |
734 |
|
NameObject(st, buf); |
735 |
|
break; |
736 |
|
case 0x49: st = MakeStone("st-pmirror"); |
737 |
|
st->set_attrib("movable", "0"); |
738 |
|
st->set_attrib("transparent", "0"); |
739 |
|
st->set_attrib("orientation", 1); |
740 |
|
break; |
741 |
|
case 0x50: st = MakeStone("st-pmirror"); |
742 |
|
st->set_attrib("movable", "0"); |
743 |
|
st->set_attrib("transparent", "0"); |
744 |
|
st->set_attrib("orientation", 4); |
745 |
|
break; |
746 |
|
case 0x53: st = MakeStone("st-3mirror"); |
747 |
|
st->set_attrib("movable", "0"); |
748 |
|
st->set_attrib("transparent", "0"); |
749 |
|
st->set_attrib("orientation", 4); |
750 |
|
break; |
751 |
|
case 0x54: st = MakeStone("st-3mirror"); |
752 |
|
st->set_attrib("movable", "0"); |
753 |
|
st->set_attrib("transparent", "0"); |
754 |
|
st->set_attrib("orientation", 3); |
755 |
|
break; |
756 |
|
case 0x56: st = MakeStone("st-3mirror"); |
757 |
|
st->set_attrib("movable", "0"); |
758 |
|
st->set_attrib("transparent", "0"); |
759 |
|
st->set_attrib("orientation", 1); |
760 |
|
break; |
761 |
|
case 0x55: st = MakeStone("st-3mirror"); |
762 |
|
st->set_attrib("movable", "0"); |
763 |
|
st->set_attrib("transparent", "0"); |
764 |
|
st->set_attrib("orientation", 2); |
765 |
|
break; |
766 |
|
case 0x6e: st = MakeStone("st-laserswitch"); |
767 |
|
snprintf( buf, sizeof(buf), "O_%d_%d", x, y); |
768 |
|
NameObject(st, buf); |
769 |
|
break; |
770 |
|
default: ; |
771 |
|
} |
772 |
|
break; |
773 |
|
case OxydVersion_PerOxyd: |
774 |
|
switch( type) { |
775 |
|
case 0x2b: st = MakeStone("st-fourswitch"); |
776 |
|
snprintf( buf, sizeof(buf), "O_%d_%d", x, y); |
777 |
|
NameObject(st, buf); |
778 |
|
break; |
779 |
|
case 0x51: st = MakeStone("st-puzzle"); |
780 |
|
st->set_attrib("connections", 7); |
781 |
|
break; |
782 |
|
case 0x52: st = MakeStone("st-puzzle"); |
783 |
|
st->set_attrib("connections", 4); |
784 |
|
break; |
785 |
|
case 0x53: st = MakeStone("st-puzzle"); |
786 |
|
st->set_attrib("connections", 10); |
787 |
|
break; |
788 |
|
case 0x54: st = MakeStone("st-puzzle"); |
789 |
|
st->set_attrib("connections",13); |
790 |
|
break; |
791 |
|
case 0x55: st = MakeStone("st-puzzle"); |
792 |
|
st->set_attrib("connections", 6); |
793 |
|
break; |
794 |
|
case 0x56: st = MakeStone("st-puzzle"); |
795 |
|
st->set_attrib("connections",11); |
796 |
|
break; |
797 |
|
case 0x57: st = MakeStone("st-puzzle"); |
798 |
|
st->set_attrib("connections", 9); |
799 |
|
break; |
800 |
|
case 0x58: st = MakeStone("st-puzzle"); |
801 |
|
st->set_attrib("connections", 3); |
802 |
|
break; |
803 |
|
case 0x59: st = MakeStone("st-puzzle"); |
804 |
|
st->set_attrib("connections", 2); |
805 |
|
break; |
806 |
|
case 0x5a: st = MakeStone("st-puzzle"); |
807 |
|
st->set_attrib("connections", 5); |
808 |
|
break; |
809 |
|
case 0x5b: st = MakeStone("st-puzzle"); |
810 |
|
st->set_attrib("connections", 16); |
811 |
|
break; |
812 |
|
case 0x5c: st = MakeStone("st-puzzle"); |
813 |
|
st->set_attrib("connections", 1); |
814 |
|
break; |
815 |
|
default: ; |
816 |
|
} |
817 |
|
break; |
818 |
|
case OxydVersion_OxydExtra: |
819 |
|
switch( type) { |
820 |
|
default: ; |
821 |
|
} |
822 |
|
break; |
823 |
|
case OxydVersion_OxydMagnum: |
824 |
|
case OxydVersion_OxydMagnumGold: |
825 |
|
switch( type) { |
826 |
|
case 0x2c: st = MakeStone("st-switch"); |
827 |
|
snprintf( buf, sizeof(buf), "O_%d_%d", x, y); |
828 |
|
NameObject(st, buf); |
829 |
|
break; |
830 |
|
case 0x2d: st = MakeStone("st-floppy"); |
831 |
|
snprintf( buf, sizeof(buf), "O_%d_%d", x, y); |
832 |
|
NameObject(st, buf); |
833 |
|
break; |
834 |
|
case 0x30: st = MakeStone("st-key_a"); |
835 |
|
snprintf( buf, sizeof(buf), "O_%d_%d", x, y); |
836 |
|
NameObject(st, buf); |
837 |
|
break; |
838 |
|
case 0x46: |
839 |
|
st = MakeStone("st-laser-e"); |
840 |
|
snprintf( buf, sizeof(buf), "O_%d_%d", x, y); |
841 |
|
NameObject(st, buf); |
842 |
|
break; |
843 |
|
case 0x47: st = MakeStone("st-pmirror"); |
844 |
|
st->set_attrib("movable", "0"); |
845 |
|
st->set_attrib("transparent", "0"); |
846 |
|
st->set_attrib("orientation", 3); |
847 |
|
break; |
848 |
|
case 0x49: st = MakeStone("st-pmirror"); |
849 |
|
st->set_attrib("movable", "0"); |
850 |
|
st->set_attrib("transparent", "0"); |
851 |
|
st->set_attrib("orientation", 1); |
852 |
|
break; |
853 |
|
case 0x4c: st = MakeStone("st-pmirror"); |
854 |
|
st->set_attrib("movable", "1"); |
855 |
|
st->set_attrib("transparent", "1"); |
856 |
|
st->set_attrib("orientation", 4); |
857 |
|
break; |
858 |
|
case 0x4f: st = MakeStone("st-pmirror"); |
859 |
|
st->set_attrib("movable", "0"); |
860 |
|
st->set_attrib("transparent", "1"); |
861 |
|
st->set_attrib("orientation", 3); |
862 |
|
break; |
863 |
|
case 0x51: st = MakeStone("st-pmirror"); |
864 |
|
st->set_attrib("movable", "0"); |
865 |
|
st->set_attrib("transparent", "1"); |
866 |
|
st->set_attrib("orientation", 1); |
867 |
|
break; |
868 |
|
case 0x52: st = MakeStone("st-pmirror"); |
869 |
|
st->set_attrib("movable", "0"); |
870 |
|
st->set_attrib("transparent", "1"); |
871 |
|
st->set_attrib("orientation", 2); |
872 |
|
break; |
873 |
|
case 0x54: st = MakeStone("st-3mirror"); |
874 |
|
st->set_attrib("movable", "0"); |
875 |
|
st->set_attrib("transparent", "0"); |
876 |
|
st->set_attrib("orientation", 3); |
877 |
|
break; |
878 |
|
case 0x56: st = MakeStone("st-3mirror"); |
879 |
|
st->set_attrib("movable", "0"); |
880 |
|
st->set_attrib("transparent", "0"); |
881 |
|
st->set_attrib("orientation", 1); |
882 |
|
break; |
883 |
|
case 0x5d: st = MakeStone("st-puzzle"); |
884 |
|
st->set_attrib("connections", 9); |
885 |
|
break; |
886 |
|
case 0x5e: st = MakeStone("st-puzzle"); |
887 |
|
st->set_attrib("connections", 3); |
888 |
|
break; |
889 |
|
case 0x44: st = MakeStone("st-laser-n"); |
890 |
|
snprintf( buf, sizeof(buf), "O_%d_%d", x, y); |
891 |
|
NameObject(st, buf); |
892 |
|
break; |
893 |
|
default: ; |
894 |
|
} |
895 |
|
break; |
896 |
} |
} |
897 |
} |
} |
898 |
|
|
899 |
|
if (st == 0) { // No special programming -> get Stone from map |
900 |
|
const char *name = stone_map[type]; |
901 |
|
if( name == 0) |
902 |
|
fprintf(stderr, "Unknown stone %X\n",type); |
903 |
|
st = MakeStone (name ? name : "st-dummy"); |
904 |
|
} |
905 |
|
|
906 |
if (st) |
if (st) |
907 |
SetStone (GridPos(x, y), st); |
SetStone (GridPos(x, y), st); |
908 |
} |
} |
981 |
const SignalLocation &recipient = |
const SignalLocation &recipient = |
982 |
level.getRecipient(sender, 0); |
level.getRecipient(sender, 0); |
983 |
|
|
984 |
Object *s_o = GetNamedObject( sender_name); |
GridPos p = GridPos(sender.getX(), sender.getY()); |
985 |
|
Object *s_o = GetStone(p);//GetNamedObject( sender_name); |
986 |
|
|
987 |
char recipient_name[9]; |
char recipient_name[9]; |
988 |
char *signalname = "trigger"; |
char *signalname = "trigger"; |