summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: c7dab73)
raw | patch | inline | side by side (parent: c7dab73)
author | Andriy Shinkarchuck <adriano32.gnu@gmail.com> | |
Sun, 24 Jul 2011 16:30:51 +0000 (19:30 +0300) | ||
committer | Andriy Shinkarchuck <adriano32.gnu@gmail.com> | |
Sun, 24 Jul 2011 16:30:51 +0000 (19:30 +0300) |
map.h | [new file with mode: 0755] | patch | blob |
memory.c | [new file with mode: 0755] | patch | blob |
memory.h | [new file with mode: 0755] | patch | blob |
diff --git a/map.h b/map.h
--- /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) <ARembo@gmail.com> 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 <http://www.gnu.org/licenses/> 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
--- /dev/null
+++ b/memory.c
@@ -0,0 +1,94 @@
+/*
+ Copyright (C) Prikol Software 1996-1997
+ Copyright (C) Aleksey Volynskov 1996-1997
+ Copyright (C) <ARembo@gmail.com> 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 <http://www.gnu.org/licenses/> or
+ write to the Free Software Foundation, Inc.,
+ 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#include "glob.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <malloc.h>
+#include <string.h>
+#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<d_end) s=1; else s=0;
+ if(!(p=malloc(wad[h].l+4+s*8)))
+ ERR_fatal("M_lock: не хватает памяти");
+ *p=h;
+ ++p;
+ resp[h]=p;
+ if(s) {
+ p[0]=p[1]=p[2]=p[3]=0;
+ F_loadres(h,p,0,2);
+ F_loadres(h,p+1,2,2);
+ F_loadres(h,p+2,4,2);
+ F_loadres(h,p+3,6,2);
+ F_loadres(h,p+4,8,wad[h].l-8);
+ }else F_loadres(h,p,0,wad[h].l);
+}
+
+void *M_lock(int h) {
+ if(h==-1 || h==0xFFFF) return NULL;
+ h&=-1-0x8000;
+ if(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
--- /dev/null
+++ b/memory.h
@@ -0,0 +1,28 @@
+/*
+ Copyright (C) Prikol Software 1996-1997
+ Copyright (C) Aleksey Volynskov 1996-1997
+ Copyright (C) <ARembo@gmail.com> 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 <http://www.gnu.org/licenses/> 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 *);