From 85c61f84bf1bc916712dd679f293bda330021e20 Mon Sep 17 00:00:00 2001 From: Andriy Shinkarchuck Date: Sun, 24 Jul 2011 19:30:51 +0300 Subject: [PATCH] map.h memory.c memory.h moved to repo. Added license notification --- map.h | 177 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ memory.c | 94 +++++++++++++++++++++++++++++ memory.h | 28 +++++++++ 3 files changed, 299 insertions(+) create mode 100755 map.h create mode 100755 memory.c create mode 100755 memory.h diff --git a/map.h b/map.h new file mode 100755 index 0000000..05d1816 --- /dev/null +++ b/map.h @@ -0,0 +1,177 @@ +/**************************************************************************\ +* * +* Форматы карт 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 + Copyright (C) 2011 + + 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 +*/ + +#pragma pack(1) + +/* Старый формат - версия 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 // Самая последняя версия карты + +#pragma pack() + +/* КОНЕЦ */ diff --git a/memory.c b/memory.c new file mode 100755 index 0000000..23e5cbd --- /dev/null +++ b/memory.c @@ -0,0 +1,94 @@ +/* + Copyright (C) Prikol Software 1996-1997 + Copyright (C) Aleksey Volynskov 1996-1997 + Copyright (C) 2011 + + 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 +*/ + +#include "glob.h" +#include +#include +#include +#include +#include "error.h" +#include "files.h" +#include "memory.h" + +dword dpmi_memavl(void); + +extern int d_start,d_end; + +extern mwad_t wad[]; + +static byte m_active=FALSE; + +static void *resp[MAX_WAD]; +static short resl[MAX_WAD]; + +void M_startup(void) { + if(m_active) return; + logo("M_startup: настройка памяти\n"); + memset(resp,0,sizeof(resp)); + memset(resl,0,sizeof(resl)); + // logo(" свободно DPMI-памяти: %uK\n",dpmi_memavl()>>10); + m_active=TRUE; +} + +void M_shutdown(void) { + + if(!m_active) return; + m_active=FALSE; +} + +static void allocres(int h) { + int *p,s; + + if(h>d_start && h=MAX_WAD) ERR_fatal("M_lock: странный номер ресурса"); + if(!resl[h]) if(!resp[h]) allocres(h); + ++resl[h]; + return resp[h]; +} + +void M_unlock(void *p) { + int h; + + if(!p) return; + h=((int*)p)[-1]; + if(h>=MAX_WAD) ERR_fatal("M_unlock: странный номер ресурса"); + if(!resl[h]) return; + --resl[h]; +} diff --git a/memory.h b/memory.h new file mode 100755 index 0000000..121490b --- /dev/null +++ b/memory.h @@ -0,0 +1,28 @@ +/* + Copyright (C) Prikol Software 1996-1997 + Copyright (C) Aleksey Volynskov 1996-1997 + Copyright (C) 2011 + + 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 +*/ + +// High-level memory allocation + +void M_startup(void); +void M_shutdown(void); +void *M_lock(int); +void M_unlock(void *); -- 2.29.2