/**************************************************************************\ * * * Форматы карт Doom'а 2D Версия 2 * * * * Prikol Software 10.VII.1996 * * * * Разрешается свободно распространять этот файл, при условии сохранения * * ссылки на Prikol Software, версии и даты выпуска файла. * * * * Этот include-файл расчитан на WATCOM C 10.0 и DOS4GW * * Вы можете переделать его на любой другой язык/компилятор, но сохраните * * этот файл (если собираетесь его распространять), а в своем укажите, * * что он изменен (переделан). * * * \**************************************************************************/ /* Copyright (C) Prikol Software 1996-1997 Copyright (C) Aleksey Volynskov 1996-1997 This file is part of the Doom2D:Rembo project. Doom2D:Rembo is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. Doom2D:Rembo is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see or write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef MAP_H_INCLUDED #define MAP_H_INCLUDED /* Старый формат - версия 1.04 alpha (и раньше) названия текстур (old_wall_t) кончается пустой строкой (old_wall_t.n[0]==0) фон - массив 100x100 байт - номера текстур тип стенок - массив 100x100 байт: 0 - пусто 1 - стена 2 - закрытая дверь 3 - открытая дверь 4 - ступенька передний план - массив 100x100 байт - номера текстур вещи, монстры и др. (old_thing_t) кончается нулевым типом (old_thing_t.t==0) переключатели (old_switch_t) кончается нулевым типом (old_switch_t.t==0) */ typedef struct{ char n[8]; // название текстуры char t; // тип: 0-сплошная 1-"решётка" }old_wall_t; typedef struct{ short x,y; // координаты short t; // тип unsigned short f; // флаги }old_thing_t; typedef struct{ unsigned char x,y; // координаты/8 unsigned char t; // тип unsigned char tm; // должно быть 0 unsigned char a,b; // обычно - координаты/8 двери unsigned short c; // не используется (вроде бы) }old_switch_t; /* Новый формат - начиная с версии 1.05 alpha заголовок карты (map_header_t) блоки (map_block_t) кончается блоком MB_END (map_block_t.t==MB_END) */ typedef struct{ char id[8]; // "подпись" - "Doom2D\x1A" short ver; // версия карты }map_header_t; typedef struct{ short t; // тип блока short st; // подтип (метод упаковки, например) // если не используется, то должен быть 0 // (для будущей совместимости) int sz; // размер (сколько байт после этой структуры) }map_block_t; enum{ MB_COMMENT=-1,MB_END=0, MB_WALLNAMES,MB_BACK,MB_WTYPE,MB_FRONT,MB_THING,MB_SWITCH, MB_MUSIC,MB_SKY, MB_SWITCH2, MB__UNKNOWN }; /* Версия 0 (Doom2D версии 1.05 alpha) MB_COMMENT - комментарий MB_WALLNAMES - названия текстур (см. старую версию) количество - по размеру блока MB_BACK,MB_WTYPE,MB_FRONT - фон,тип,передний план (см. старую версию) подтип 0 - без упаковки (как в старой версии) MB_THING - вещи,монстры и др. (см. старую версию) количество - по размеру блока MB_SWITCH - переключатели (см. старую версию) количество - по размеру блока */ /* Версия 1 (Doom2D версии 1.06 alpha) MB_WALLNAMES добавлены псевдо-текстуры _WATER_* где * это 0=вода,1=кислота,2=кровь MB_WTYPE добавлен новый тип 5 - вода MB_MUSIC - новый блок - название музыки (8 байт) MB_SKY - новый блок - тип неба (2 байта - short) 1 = облака 2 = город 3 = ад */ #define SW_PL_PRESS 1 #define SW_MN_PRESS 2 #define SW_PL_NEAR 4 #define SW_MN_NEAR 8 #define SW_KEY_R 16 #define SW_KEY_G 32 #define SW_KEY_B 64 typedef struct{ unsigned char x,y; // координаты/8 unsigned char t; // тип unsigned char tm; // должно быть 0 unsigned char a,b; // обычно - координаты/8 двери unsigned short c; // не используется (вроде бы) unsigned char f; // флаги }switch2_t; /* Версия 2 (Doom2D версии 1.17 alpha) блок MB_SWITCH заменен на MB_SWITCH2 (см. switch2_t) */ #define LAST_MAP_VER 2 // Самая последняя версия карты #endif /* MAP_H_INCLUDED */