summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 99e9995)
raw | patch | inline | side by side (parent: 99e9995)
author | DeaDDooMER <deaddoomer@deadsoftware.ru> | |
Fri, 24 Apr 2020 06:58:48 +0000 (10:58 +0400) | ||
committer | DeaDDooMER <deaddoomer@deadsoftware.ru> | |
Fri, 24 Apr 2020 06:58:48 +0000 (10:58 +0400) |
12 files changed:
src/files.c | patch | blob | history | |
src/files.h | patch | blob | history | |
src/game.c | patch | blob | history | |
src/game.h | patch | blob | history | |
src/items.c | patch | blob | history | |
src/items.h | patch | blob | history | |
src/map.c | [new file with mode: 0644] | patch | blob |
src/map.h | patch | blob | history | |
src/switch.c | patch | blob | history | |
src/switch.h | patch | blob | history | |
src/view.c | patch | blob | history | |
src/view.h | patch | blob | history |
diff --git a/src/files.c b/src/files.c
index 47aaa71eb1a65a2b2997471566b3fa3795f5456d..f8543ff7924cc5189353f19828c5386d81320b07 100644 (file)
--- a/src/files.c
+++ b/src/files.c
int d_start, d_end;
mwad_t wad[MAX_WAD];
-map_block_t blk;
+char wads[MAX_WADS][__MAX_PATH];
+FILE* wadh[MAX_WADS];
static byte seq[255];
static byte seqn;
static int s_start, s_end;
static int wad_num;
-static char wads[MAX_WADS][__MAX_PATH];
-static FILE* wadh[MAX_WADS];
-
static char f_drive[__MAX_DRIVE];
static char f_dir[__MAX_DIR];
static char f_name[__MAX_FNAME];
}
*/
-void F_loadmap (char n[8]) {
- int r, o;
- FILE *h;
- map_header_t hdr;
- W_init();
- r = F_getresid(n);
- h = wadh[wad[r].f];
- fseek(h, wad[r].o, SEEK_SET);
- myfread(hdr.id, 8, 1, h);
- hdr.ver = myfread16(h);
- if (memcmp(hdr.id, "Doom2D\x1A", 8) != 0) {
- ERR_fatal("%.8s не является уровнем", n);
- }
- for(;;) {
- blk.t = myfread16(h);
- blk.st = myfread16(h);
- blk.sz = myfread32(h);
- if(blk.t == MB_END) {
- break;
- }
- if(blk.t == MB_COMMENT) {
- fseek(h, blk.sz, SEEK_CUR);
- continue;
- }
- o = ftell(h) + blk.sz;
- if(!G_load(h)) {
- if(!W_load(h)) {
- if(!IT_load(h)) {
- if(!SW_load(h)) {
- ERR_fatal("Неизвестный блок %d(%d) в уровне %.8s", blk.t, blk.st, n);
- }
- }
- }
- }
- fseek(h, o, SEEK_SET);
- }
-}
-
/*void F_freemus(void) {
int i;
diff --git a/src/files.h b/src/files.h
index ee1b8bb67e4e979b758b62eb4a0f0783ab073aca..66896ed30b27bfaed67fe4cc898ef0c6af47da30 100644 (file)
--- a/src/files.h
+++ b/src/files.h
extern int d_start, d_end;
extern mwad_t wad[MAX_WAD];
-extern map_block_t blk;
+extern char wads[MAX_WADS][__MAX_PATH];
+extern FILE* wadh[MAX_WADS];
void F_startup (void);
void F_addwad (const char *fn);
void F_nextmus (char *s);
void F_randmus (char *s);
void F_readstr (FILE* h, char *s, int m);
-void F_loadmap (char n[8]);
#endif /* FILES_H_INCLUDED */
diff --git a/src/game.c b/src/game.c
index 3ba9f4118e6b3f98ea54492830bf21bba3760faf..85108333d617a5508dba067bebb48510e2ad34a5 100644 (file)
--- a/src/game.c
+++ b/src/game.c
g_trans=1;g_transt=0;
}
-int G_load (FILE *h) {
- switch (blk.t) {
- case MB_MUSIC:
- myfread(g_music, 8, 1, h);
- if (music_random) {
- F_randmus(g_music);
- }
- F_loadmus(g_music);
- return 1;
- }
- return 0;
-}
-
void load_game (int n) {
F_freemus();
W_init();
diff --git a/src/game.h b/src/game.h
index f4f1a7033caff5a5c9e31bebb5805132f1b2fe04..adbc7574a2c3dce2613fe6f2b38b50280ce718e0 100644 (file)
--- a/src/game.h
+++ b/src/game.h
#include "glob.h"
#include "view.h" // pos_t
#include "player.h" // player_t
-#include <stdio.h> // FILE
extern byte transdraw;
extern byte _2pl;
extern int g_trans;
-int G_load (FILE *h);
void load_game (int n);
void G_start (void);
void G_init (void);
diff --git a/src/items.c b/src/items.c
index 65f39e2bb5f5437a02ff017ead6f102bc9003776..32c4af541068073301894fc022b12ef018dcd8aa 100644 (file)
--- a/src/items.c
+++ b/src/items.c
rsndtm = 0;
}
-int IT_load (FILE *h) {
- int m, i, j;
- old_thing_t t;
- switch (blk.t) {
- case MB_THING:
- for (i = 0; blk.sz > 0; ++i, blk.sz -= 8) {
- t.x = myfread16(h);
- t.y = myfread16(h);
- t.t = myfread16(h);
- t.f = myfread16(h);
- it[i].o.x = t.x;
- it[i].o.y = t.y;
- it[i].t = t.t;
- it[i].s = t.f;
- if (it[i].t && (it[i].s & THF_DM) && !g_dm) {
- it[i].t=0;
- }
- }
- m = i;
- for (i = 0, j = -1; i < m; ++i) {
- if (it[i].t == TH_PLR1) {
- j = i;
- it[i].t = 0;
- }
- }
- if (!g_dm) {
- if (j == -1) {
- ERR_fatal("Предмет игрок_1 не найден");
- }
- dm_pos[0].x = it[j].o.x;
- dm_pos[0].y = it[j].o.y;
- dm_pos[0].d = it[j].s & THF_DIR;
- }
- for (i = 0, j = -1; i < m; ++i) {
- if (it[i].t == TH_PLR2) {
- j = i;
- it[i].t = 0;
- }
- }
- if (!g_dm && _2pl) {
- if (j == -1) {
- ERR_fatal("Предмет игрок_2 не найден");
- }
- dm_pos[1].x = it[j].o.x;
- dm_pos[1].y = it[j].o.y;
- dm_pos[1].d = it[j].s & THF_DIR;
- }
- for (i = 0, j = 0; i < m; ++i) {
- if (it[i].t == TH_DMSTART) {
- if (g_dm) {
- dm_pos[j].x = it[i].o.x;
- dm_pos[j].y = it[i].o.y;
- dm_pos[j].d = it[i].s & THF_DIR;
- }
- it[i].t = 0;
- ++j;
- }
- }
- if (g_dm && j < 2) {
- ERR_fatal("Меньше 2-ух точек DM");
- }
- if (g_dm) {
- dm_pnum = j;
- dm_pl1p = myrand(dm_pnum);
- do {
- dm_pl2p = myrand(dm_pnum);
- } while (dm_pl2p == dm_pl1p);
- } else {
- dm_pl1p = 0;
- dm_pl2p = 1;
- dm_pnum = 2;
- }
- PL_spawn(&pl1, dm_pos[dm_pl1p].x, dm_pos[dm_pl1p].y, dm_pos[dm_pl1p].d);
- if (_2pl) {
- PL_spawn(&pl2, dm_pos[dm_pl2p].x, dm_pos[dm_pl2p].y, dm_pos[dm_pl2p].d);
- }
- for (i = 0; i < m; ++i) {
- if (it[i].t >= TH_CLIP && it[i].t < TH_DEMON) {
- it[i].s = 0;
- it[i].t = it[i].t - TH_CLIP + I_CLIP;
- if (it[i].t >= I_KEYR && it[i].t <= I_KEYB) {
- it[i].t |= 0x8000;
- }
- } else if (it[i].t >= TH_DEMON) {
- MN_spawn(it[i].o.x, it[i].o.y, it[i].s & THF_DIR, it[i].t - TH_DEMON + MN_DEMON);
- it[i].t = 0;
- }
- }
- return 1;
- }
- return 0;
-}
-
static void takesnd (int t) {
if(tsndtm) return;
t&=0x7FFF;
diff --git a/src/items.h b/src/items.h
index 011188ad0db51662efb6cfecf88157ff6b2a9228..bebb46deba69132b05a024d6cb75a2d2d3de426e 100644 (file)
--- a/src/items.h
+++ b/src/items.h
void IT_alloc (void);
void IT_init (void);
-int IT_load (FILE *h);
void IT_act (void);
void IT_spawn (int x, int y, int t);
void IT_drop_ammo (int t, int n, int x, int y);
diff --git a/src/map.c b/src/map.c
--- /dev/null
+++ b/src/map.c
@@ -0,0 +1,286 @@
+#include "map.h"
+
+#include "game.h"
+#include "items.h"
+#include "things.h"
+#include "monster.h"
+#include "switch.h"
+#include "view.h"
+
+#include "music.h"
+#include "files.h"
+#include "render.h"
+
+#include <stdio.h>
+#include <string.h>
+#include "my.h"
+#include "error.h"
+
+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
+};
+
+typedef struct map_header_t {
+ char id[8];
+ short ver;
+} map_header_t;
+
+typedef struct map_block_t {
+ short t;
+ short st;
+ int sz;
+} map_block_t;
+
+typedef struct old_thing_t {
+ short x, y;
+ short t;
+ unsigned short f;
+} old_thing_t;
+
+static map_block_t blk;
+
+static int G_load (FILE *h) {
+ switch (blk.t) {
+ case MB_MUSIC:
+ myfread(g_music, 8, 1, h);
+ if (music_random) {
+ F_randmus(g_music);
+ }
+ F_loadmus(g_music);
+ return 1;
+ }
+ return 0;
+}
+
+static int IT_load (FILE *h) {
+ int m, i, j;
+ old_thing_t t;
+ switch (blk.t) {
+ case MB_THING:
+ for (i = 0; blk.sz > 0; ++i, blk.sz -= 8) {
+ t.x = myfread16(h);
+ t.y = myfread16(h);
+ t.t = myfread16(h);
+ t.f = myfread16(h);
+ it[i].o.x = t.x;
+ it[i].o.y = t.y;
+ it[i].t = t.t;
+ it[i].s = t.f;
+ if (it[i].t && (it[i].s & THF_DM) && !g_dm) {
+ it[i].t=0;
+ }
+ }
+ m = i;
+ for (i = 0, j = -1; i < m; ++i) {
+ if (it[i].t == TH_PLR1) {
+ j = i;
+ it[i].t = 0;
+ }
+ }
+ if (!g_dm) {
+ if (j == -1) {
+ ERR_fatal("Предмет игрок_1 не найден");
+ }
+ dm_pos[0].x = it[j].o.x;
+ dm_pos[0].y = it[j].o.y;
+ dm_pos[0].d = it[j].s & THF_DIR;
+ }
+ for (i = 0, j = -1; i < m; ++i) {
+ if (it[i].t == TH_PLR2) {
+ j = i;
+ it[i].t = 0;
+ }
+ }
+ if (!g_dm && _2pl) {
+ if (j == -1) {
+ ERR_fatal("Предмет игрок_2 не найден");
+ }
+ dm_pos[1].x = it[j].o.x;
+ dm_pos[1].y = it[j].o.y;
+ dm_pos[1].d = it[j].s & THF_DIR;
+ }
+ for (i = 0, j = 0; i < m; ++i) {
+ if (it[i].t == TH_DMSTART) {
+ if (g_dm) {
+ dm_pos[j].x = it[i].o.x;
+ dm_pos[j].y = it[i].o.y;
+ dm_pos[j].d = it[i].s & THF_DIR;
+ }
+ it[i].t = 0;
+ ++j;
+ }
+ }
+ if (g_dm && j < 2) {
+ ERR_fatal("Меньше 2-ух точек DM");
+ }
+ if (g_dm) {
+ dm_pnum = j;
+ dm_pl1p = myrand(dm_pnum);
+ do {
+ dm_pl2p = myrand(dm_pnum);
+ } while (dm_pl2p == dm_pl1p);
+ } else {
+ dm_pl1p = 0;
+ dm_pl2p = 1;
+ dm_pnum = 2;
+ }
+ PL_spawn(&pl1, dm_pos[dm_pl1p].x, dm_pos[dm_pl1p].y, dm_pos[dm_pl1p].d);
+ if (_2pl) {
+ PL_spawn(&pl2, dm_pos[dm_pl2p].x, dm_pos[dm_pl2p].y, dm_pos[dm_pl2p].d);
+ }
+ for (i = 0; i < m; ++i) {
+ if (it[i].t >= TH_CLIP && it[i].t < TH_DEMON) {
+ it[i].s = 0;
+ it[i].t = it[i].t - TH_CLIP + I_CLIP;
+ if (it[i].t >= I_KEYR && it[i].t <= I_KEYB) {
+ it[i].t |= 0x8000;
+ }
+ } else if (it[i].t >= TH_DEMON) {
+ MN_spawn(it[i].o.x, it[i].o.y, it[i].s & THF_DIR, it[i].t - TH_DEMON + MN_DEMON);
+ it[i].t = 0;
+ }
+ }
+ return 1;
+ }
+ return 0;
+}
+
+static int SW_load (FILE *h) {
+ int i;
+ switch(blk.t) {
+ case MB_SWITCH2:
+ sw_secrets = 0;
+ for (i = 0; i < MAXSW && blk.sz > 0; ++i, blk.sz -= 9) {
+ sw[i].x = myfread8(h);
+ sw[i].y = myfread8(h);
+ sw[i].t = myfread8(h);
+ sw[i].tm = myfread8(h); // unused
+ sw[i].a = myfread8(h);
+ sw[i].b = myfread8(h);
+ sw[i].c = myfread8(h);
+ sw[i].d = myfread8(h); // unused
+ sw[i].f = myfread8(h);
+ sw[i].tm = 0;
+ sw[i].d = 0;
+ sw[i].f |= 0x80;
+ if (sw[i].t == SW_SECRET) {
+ ++sw_secrets;
+ }
+ }
+ return 1;
+ }
+ return 0;
+}
+
+static void unpack (void *buf, int len, void *obuf) {
+ int i = 0;
+ int j = 0;
+ unsigned char *p = buf;
+ unsigned char *q = obuf;
+ while (i < len) {
+ int id = p[i];
+ int step = 1;
+ i += 1;
+ if (id == 0xff) {
+ step = p[i] | p[i + 1] << 8;
+ id = p[i + 2];
+ i += 3;
+ }
+ memset(&q[j], id, step);
+ j += step;
+ }
+}
+
+static int read_array (void *p, FILE *h) {
+ void *buf;
+ switch (blk.st) {
+ case 0:
+ myfread(p, FLDW * FLDH, 1, h);
+ break;
+ case 1:
+ buf = malloc(blk.sz);
+ if (buf == NULL) {
+ ERR_fatal("Не хватает памяти");
+ }
+ myfread(buf, blk.sz, 1, h);
+ unpack(buf, blk.sz, p);
+ free(buf);
+ break;
+ default:
+ return 0;
+ }
+ return 1;
+}
+
+static int W_load (FILE *h) {
+ int i;
+ char s[8];
+ switch (blk.t) {
+ case MB_WALLNAMES:
+ R_begin_load();
+ memset(walf, 0, sizeof(walf));
+ for (i = 1; i < 256 && blk.sz > 0; i++, blk.sz -= 9) {
+ myfread(s, 8, 1, h);
+ walf[i] = myfread8(h) ? 1 : 0; // ???
+ R_load(s);
+ if (strncasecmp(s, "VTRAP01", 8) == 0) {
+ walf[i] |= 2;
+ }
+ }
+ R_end_load();
+ return 1;
+ case MB_BACK:
+ return read_array(fldb, h);
+ case MB_WTYPE:
+ return read_array(fld, h);
+ case MB_FRONT:
+ return read_array(fldf, h);
+ case MB_SKY:
+ sky_type = myfread16(h);
+ R_loadsky(sky_type);
+ return 1;
+ }
+ return 0;
+}
+
+void F_loadmap (char n[8]) {
+ int r, o;
+ FILE *h;
+ map_header_t hdr;
+ W_init();
+ r = F_getresid(n);
+ h = wadh[wad[r].f];
+ fseek(h, wad[r].o, SEEK_SET);
+ myfread(hdr.id, 8, 1, h);
+ hdr.ver = myfread16(h);
+ if (memcmp(hdr.id, "Doom2D\x1A", 8) != 0) {
+ ERR_fatal("%.8s не является уровнем", n);
+ }
+ for (;;) {
+ blk.t = myfread16(h);
+ blk.st = myfread16(h);
+ blk.sz = myfread32(h);
+ if(blk.t == MB_END) {
+ break;
+ }
+ if(blk.t == MB_COMMENT) {
+ fseek(h, blk.sz, SEEK_CUR);
+ continue;
+ }
+ o = ftell(h) + blk.sz;
+ if(!G_load(h)) {
+ if(!W_load(h)) {
+ if(!IT_load(h)) {
+ if(!SW_load(h)) {
+ ERR_fatal("Неизвестный блок %d(%d) в уровне %.8s", blk.t, blk.st, n);
+ }
+ }
+ }
+ }
+ fseek(h, o, SEEK_SET);
+ }
+}
diff --git a/src/map.h b/src/map.h
index e630ff023afc993c6114e9adb45661c2ddd47b39..9aa0b451779061c164cb6b711b1ce315c07006dd 100644 (file)
--- a/src/map.h
+++ b/src/map.h
-/**************************************************************************\
-* *
-* Форматы карт 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 <http://www.gnu.org/licenses/> 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 // Самая последняя версия карты
+void F_loadmap (char n[8]);
#endif /* MAP_H_INCLUDED */
diff --git a/src/switch.c b/src/switch.c
index d95e152e0cf07bb3bc7902a33dcb4f7936988a2c..719f0dd3635ef9988c621211f3c289096a6d8a0c 100644 (file)
--- a/src/switch.c
+++ b/src/switch.c
static int swsnd;
static byte cht, chto, chf, f_ch;
-int SW_load (FILE *h) {
- int i;
- switch(blk.t) {
- case MB_SWITCH2:
- sw_secrets = 0;
- for (i = 0; i < MAXSW && blk.sz > 0; ++i, blk.sz -= 9) {
- sw[i].x = myfread8(h);
- sw[i].y = myfread8(h);
- sw[i].t = myfread8(h);
- sw[i].tm = myfread8(h); // unused
- sw[i].a = myfread8(h);
- sw[i].b = myfread8(h);
- sw[i].c = myfread8(h);
- sw[i].d = myfread8(h); // unused
- sw[i].f = myfread8(h);
- sw[i].tm = 0;
- sw[i].d = 0;
- sw[i].f |= 0x80;
- if (sw[i].t == SW_SECRET) {
- ++sw_secrets;
- }
- }
- return 1;
- }
- return 0;
-}
-
void SW_alloc (void) {
sndswn=Z_getsnd("SWTCHN");
sndswx=Z_getsnd("SWTCHX");
diff --git a/src/switch.h b/src/switch.h
index d0d586c89257b8e4a0962dfa3e2a3630d98a16a7..fd448e36f60be70409cedfe98664b8d998155010 100644 (file)
--- a/src/switch.h
+++ b/src/switch.h
#ifndef SWITCH_H_INCLUDED
#define SWITCH_H_INCLUDED
-#include <stdio.h> // FILE
#include "view.h" // obj_t
#define MAXSW 100
extern int sw_secrets;
extern sw_t sw[MAXSW];
-int SW_load (FILE *h);
void SW_alloc (void);
void SW_init (void);
void Z_water_trap (obj_t *o);
diff --git a/src/view.c b/src/view.c
index 6a8132996c3d632302621c66cd908bde5c45453a..80e753f17b5eaf68d2bb01c95534434dbb796b0f 100644 (file)
--- a/src/view.c
+++ b/src/view.c
MN_init();
R_loadsky(1);
}
-
-static void unpack (void *buf, int len, void *obuf) {
- int i = 0;
- int j = 0;
- unsigned char *p = buf;
- unsigned char *q = obuf;
- while (i < len) {
- int id = p[i];
- int step = 1;
- i += 1;
- if (id == 0xff) {
- step = p[i] | p[i + 1] << 8;
- id = p[i + 2];
- i += 3;
- }
- memset(&q[j], id, step);
- j += step;
- }
-}
-
-int W_load (FILE *h) {
- int i;
- char s[8];
- void *p, *buf;
- switch (blk.t) {
- case MB_WALLNAMES:
- R_begin_load();
- memset(walf, 0, sizeof(walf));
- for (i = 1; i < 256 && blk.sz > 0; i++, blk.sz -= 9) {
- myfread(s, 8, 1, h);
- walf[i] = myfread8(h) ? 1 : 0; // ???
- R_load(s);
- if (strncasecmp(s, "VTRAP01", 8) == 0) {
- walf[i] |= 2;
- }
- }
- R_end_load();
- return 1;
- case MB_BACK:
- p = fldb;
- goto unp;
- case MB_WTYPE:
- p = fld;
- goto unp;
- case MB_FRONT:
- p = fldf;
- unp:
- switch (blk.st) {
- case 0:
- myfread(p, FLDW * FLDH, 1, h);
- break;
- case 1:
- buf = malloc(blk.sz);
- if (buf == NULL) {
- ERR_fatal("Не хватает памяти");
- }
- myfread(buf, blk.sz, 1, h);
- unpack(buf, blk.sz, p);
- free(buf);
- break;
- default:
- return 0;
- }
- return 1;
- case MB_SKY:
- sky_type = myfread16(h);
- R_loadsky(sky_type);
- return 1;
- }
- return 0;
-}
diff --git a/src/view.h b/src/view.h
index a88e0f69b60caebe91f87476c41768762d5bc942..d2fd96ea603d370e6580f2feb87fe33707382158 100644 (file)
--- a/src/view.h
+++ b/src/view.h
extern byte fld[FLDH][FLDW];
void W_init (void);
-int W_load (FILE *h);
#endif /* VIEW_H_INCLUDED */