860 for (; _map_dim_y > 1; _map_dim_y >>= 1) ++bits_y; |
860 for (; _map_dim_y > 1; _map_dim_y >>= 1) ++bits_y; |
861 |
861 |
862 InitMap(bits_x, bits_y); |
862 InitMap(bits_x, bits_y); |
863 } |
863 } |
864 |
864 |
865 static void Load_MAPT(void) |
865 |
866 { |
866 static void SaveLoad_MapByte(byte *m) |
867 uint size = MapSize(); |
867 { |
868 uint i; |
868 uint size = MapSize(), i; |
869 |
869 byte buf[4096]; |
870 for (i = 0; i != size;) { |
870 if (_sl.save) { |
871 byte buf[4096]; |
871 SlSetLength(size); |
872 uint j; |
872 for(;size;size -= lengthof(buf)) { |
873 |
873 for (i = 0; i != lengthof(buf); i++) { buf[i] = *m; m += sizeof(Tile); } |
874 SlArray(buf, lengthof(buf), SLE_UINT8); |
874 SlArray(buf, lengthof(buf), SLE_UINT8); |
875 for (j = 0; j != lengthof(buf); j++) _m[i++].type_height = buf[j]; |
875 } |
876 } |
876 } else { |
877 } |
877 for(;size;size -= lengthof(buf)) { |
878 |
878 SlArray(buf, lengthof(buf), SLE_UINT8); |
879 static void Save_MAPT(void) |
879 for (i = 0; i != lengthof(buf); i++) { *m = buf[i]; m += sizeof(Tile); } |
880 { |
880 } |
881 uint size = MapSize(); |
881 } |
882 uint i; |
882 } |
883 |
883 |
884 SlSetLength(size); |
884 static void SaveLoad_MAPT(void) |
885 for (i = 0; i != size;) { |
885 { |
886 byte buf[4096]; |
886 SaveLoad_MapByte(&_m[0].type_height); |
887 uint j; |
887 } |
888 |
888 |
889 for (j = 0; j != lengthof(buf); j++) buf[j] = _m[i++].type_height; |
889 static void SaveLoad_MAPO(void) |
890 SlArray(buf, lengthof(buf), SLE_UINT8); |
890 { |
891 } |
891 SaveLoad_MapByte(&_m[0].owner); |
892 } |
|
893 |
|
894 static void Load_MAPO(void) |
|
895 { |
|
896 uint size = MapSize(); |
|
897 uint i; |
|
898 |
|
899 for (i = 0; i != size;) { |
|
900 byte buf[4096]; |
|
901 uint j; |
|
902 |
|
903 SlArray(buf, lengthof(buf), SLE_UINT8); |
|
904 for (j = 0; j != lengthof(buf); j++) _m[i++].owner = buf[j]; |
|
905 } |
|
906 } |
|
907 |
|
908 static void Save_MAPO(void) |
|
909 { |
|
910 uint size = MapSize(); |
|
911 uint i; |
|
912 |
|
913 SlSetLength(size); |
|
914 for (i = 0; i != size;) { |
|
915 byte buf[4096]; |
|
916 uint j; |
|
917 |
|
918 for (j = 0; j != lengthof(buf); j++) buf[j] = _m[i++].owner; |
|
919 SlArray(buf, lengthof(buf), SLE_UINT8); |
|
920 } |
|
921 } |
892 } |
922 |
893 |
923 static void Load_MAP2(void) |
894 static void Load_MAP2(void) |
924 { |
895 { |
925 uint size = MapSize(); |
896 uint size = MapSize(); |
950 for (j = 0; j != lengthof(buf); j++) buf[j] = _m[i++].m2; |
921 for (j = 0; j != lengthof(buf); j++) buf[j] = _m[i++].m2; |
951 SlArray(buf, lengthof(buf), SLE_UINT16); |
922 SlArray(buf, lengthof(buf), SLE_UINT16); |
952 } |
923 } |
953 } |
924 } |
954 |
925 |
955 static void Load_MAP3(void) |
926 static void SaveLoad_MAP3(void) |
956 { |
927 { |
957 uint size = MapSize(); |
928 SaveLoad_MapByte(&_m[0].m3); |
958 uint i; |
929 } |
959 |
930 |
960 for (i = 0; i != size;) { |
931 static void SaveLoad_MAP4(void) |
961 byte buf[4096]; |
932 { |
962 uint j; |
933 SaveLoad_MapByte(&_m[0].m4); |
963 |
934 } |
964 SlArray(buf, lengthof(buf), SLE_UINT8); |
935 |
965 for (j = 0; j != lengthof(buf); j++) _m[i++].m3 = buf[j]; |
936 static void SaveLoad_MAP5(void) |
966 } |
937 { |
967 } |
938 SaveLoad_MapByte(&_m[0].m5); |
968 |
|
969 static void Save_MAP3(void) |
|
970 { |
|
971 uint size = MapSize(); |
|
972 uint i; |
|
973 |
|
974 SlSetLength(size); |
|
975 for (i = 0; i != size;) { |
|
976 byte buf[4096]; |
|
977 uint j; |
|
978 |
|
979 for (j = 0; j != lengthof(buf); j++) buf[j] = _m[i++].m3; |
|
980 SlArray(buf, lengthof(buf), SLE_UINT8); |
|
981 } |
|
982 } |
|
983 |
|
984 static void Load_MAP4(void) |
|
985 { |
|
986 uint size = MapSize(); |
|
987 uint i; |
|
988 |
|
989 for (i = 0; i != size;) { |
|
990 byte buf[4096]; |
|
991 uint j; |
|
992 |
|
993 SlArray(buf, lengthof(buf), SLE_UINT8); |
|
994 for (j = 0; j != lengthof(buf); j++) _m[i++].m4 = buf[j]; |
|
995 } |
|
996 } |
|
997 |
|
998 static void Save_MAP4(void) |
|
999 { |
|
1000 uint size = MapSize(); |
|
1001 uint i; |
|
1002 |
|
1003 SlSetLength(size); |
|
1004 for (i = 0; i != size;) { |
|
1005 byte buf[4096]; |
|
1006 uint j; |
|
1007 |
|
1008 for (j = 0; j != lengthof(buf); j++) buf[j] = _m[i++].m4; |
|
1009 SlArray(buf, lengthof(buf), SLE_UINT8); |
|
1010 } |
|
1011 } |
|
1012 |
|
1013 static void Load_MAP5(void) |
|
1014 { |
|
1015 uint size = MapSize(); |
|
1016 uint i; |
|
1017 |
|
1018 for (i = 0; i != size;) { |
|
1019 byte buf[4096]; |
|
1020 uint j; |
|
1021 |
|
1022 SlArray(buf, lengthof(buf), SLE_UINT8); |
|
1023 for (j = 0; j != lengthof(buf); j++) _m[i++].m5 = buf[j]; |
|
1024 } |
|
1025 } |
|
1026 |
|
1027 static void Save_MAP5(void) |
|
1028 { |
|
1029 uint size = MapSize(); |
|
1030 uint i; |
|
1031 |
|
1032 SlSetLength(size); |
|
1033 for (i = 0; i != size;) { |
|
1034 byte buf[4096]; |
|
1035 uint j; |
|
1036 |
|
1037 for (j = 0; j != lengthof(buf); j++) buf[j] = _m[i++].m5; |
|
1038 SlArray(buf, lengthof(buf), SLE_UINT8); |
|
1039 } |
|
1040 } |
939 } |
1041 |
940 |
1042 static void Load_MAPE(void) |
941 static void Load_MAPE(void) |
1043 { |
942 { |
1044 uint size = MapSize(); |
943 uint size = MapSize(); |
1105 } |
1004 } |
1106 |
1005 |
1107 |
1006 |
1108 const ChunkHandler _misc_chunk_handlers[] = { |
1007 const ChunkHandler _misc_chunk_handlers[] = { |
1109 { 'MAPS', Save_MAPS, Load_MAPS, CH_RIFF }, |
1008 { 'MAPS', Save_MAPS, Load_MAPS, CH_RIFF }, |
1110 { 'MAPT', Save_MAPT, Load_MAPT, CH_RIFF }, |
1009 { 'MAPT', SaveLoad_MAPT, SaveLoad_MAPT, CH_RIFF }, |
1111 { 'MAPO', Save_MAPO, Load_MAPO, CH_RIFF }, |
1010 { 'MAPO', SaveLoad_MAPO, SaveLoad_MAPO, CH_RIFF }, |
1112 { 'MAP2', Save_MAP2, Load_MAP2, CH_RIFF }, |
1011 { 'MAP2', Save_MAP2, Load_MAP2, CH_RIFF }, |
1113 { 'M3LO', Save_MAP3, Load_MAP3, CH_RIFF }, |
1012 { 'M3LO', SaveLoad_MAP3, SaveLoad_MAP3, CH_RIFF }, |
1114 { 'M3HI', Save_MAP4, Load_MAP4, CH_RIFF }, |
1013 { 'M3HI', SaveLoad_MAP4, SaveLoad_MAP4, CH_RIFF }, |
1115 { 'MAP5', Save_MAP5, Load_MAP5, CH_RIFF }, |
1014 { 'MAP5', SaveLoad_MAP5, SaveLoad_MAP5, CH_RIFF }, |
1116 { 'MAPE', Save_MAPE, Load_MAPE, CH_RIFF }, |
1015 { 'MAPE', Save_MAPE, Load_MAPE, CH_RIFF }, |
1117 |
1016 |
1118 { 'NAME', Save_NAME, Load_NAME, CH_ARRAY}, |
1017 { 'NAME', Save_NAME, Load_NAME, CH_ARRAY}, |
1119 { 'DATE', SaveLoad_DATE, SaveLoad_DATE, CH_RIFF}, |
1018 { 'DATE', SaveLoad_DATE, SaveLoad_DATE, CH_RIFF}, |
1120 { 'VIEW', SaveLoad_VIEW, SaveLoad_VIEW, CH_RIFF}, |
1019 { 'VIEW', SaveLoad_VIEW, SaveLoad_VIEW, CH_RIFF}, |