From 7dcd81f78b60bed1f860d3a280fbee30cb28997d Mon Sep 17 00:00:00 2001 From: Ketmar Dark Date: Tue, 18 Oct 2016 01:40:25 +0300 Subject: [PATCH] use wad files instead of json data --- data/blood.wad | Bin 0 -> 14972 bytes data/mminer.wad | Bin 0 -> 126748 bytes engine.d | 144 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-- mminer.d | 13 +++++ 4 files changed, 152 insertions(+), 5 deletions(-) create mode 100644 data/blood.wad create mode 100644 data/mminer.wad diff --git a/data/blood.wad b/data/blood.wad new file mode 100644 index 0000000000000000000000000000000000000000..b519617b4d0da55719326deaf5a5f50c7376ea11 GIT binary patch literal 14972 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 i`R6v@vJKs-;D2=LjBzu)+56W~9{z$dr> literal 0 HcwPel00001 diff --git a/data/mminer.wad b/data/mminer.wad new file mode 100644 index 0000000000000000000000000000000000000000..f2c4173cc0e2a4851bedc4369d169b47ea1359dc GIT binary patch literal 126748 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 Gy#E2{3b}>= literal 0 HcwPel00001 diff --git a/engine.d b/engine.d index e61a5f7..41a4314 100644 --- a/engine.d +++ b/engine.d @@ -13,12 +13,42 @@ __gshared bool singleStepWait = false; // ////////////////////////////////////////////////////////////////////////// // __gshared ubyte[][string] gameData; __gshared Room[] gameRooms; +__gshared string gameLevelsName; public void loadGameData () { - gameRooms.txtunser(VFile("data/levelset0.js")); - foreach (immutable idx, ref room; gameRooms) room.roomIdx = cast(int)idx; - gameData.txtunser(VFile("data/data.js")); + //gameData.txtunser(VFile("data/data.js")); + { + foreach (const ref de; vfsAllFiles()) { + auto fi = VFile(de.name); + if (fi.size == 0 || fi.size > 1024*1024*8) continue; + auto data = new ubyte[](cast(uint)fi.size); + fi.rawReadExact(data[]); + gameData[de.name.idup] = data; + } + } + //gameRooms.txtunser(VFile("data/levelset0.js")); + //foreach (immutable idx, ref room; gameRooms) room.roomIdx = cast(int)idx; + gameRooms.length = 20; + { + char[8] sign; + auto fi = VFile("levels"); + fi.rawReadExact(sign[]); + if (sign != "MANIC\x0d\x0a\x1a") throw new Exception("invalid levels"); + char[16] lname; + fi.rawReadExact(lname[]); + const(char)[] nn; + foreach (immutable idx, char ch; lname[]) { + if (ch == 0) break; + nn = lname[0..idx]; + } + while (nn.length && nn[$-1] <= ' ') nn = nn[0..$-1]; + gameLevelsName = nn.idup; + foreach (immutable ridx; 0..20) { + gameRooms[ridx].roomIdx = cast(int)ridx; + gameRooms[ridx].load(fi); + } + } } @@ -141,7 +171,7 @@ public struct Room { static struct KeyPos { int x; int y; int s; } static struct Key { ubyte gfx; KeyPos[] info; } static struct SwitchPos { int x; int y; int s; } - static struct Enemy { bool vert; ubyte gfx; ubyte ink; ubyte paper; int x=-1; int y; int min; int max; int d; int s; int flip; int anim; @SRZIgnore int frame; @SRZIgnore int m; @SRZIgnore int falling; @SRZIgnore int delay; } + static struct Enemy { bool vert; ushort gfx; ubyte ink; ubyte paper; int x=-1; int y; int min; int max; int d; int s; int flip; int anim; @SRZIgnore int frame; @SRZIgnore int m; @SRZIgnore int falling; @SRZIgnore int delay; } static struct SkyLabEnemy { int p, s; ubyte ink; int max; int m; int frame; } static struct SkyLabXY { int x, y, frame; ubyte ink; int m; int s; int max; int p; } static struct SPGRay { int x, y; } @@ -1073,10 +1103,114 @@ private: void buildSwitchImages () { switchesSpr = null; + ubyte[] swg; + if (auto pp = "switches" in gameData) swg = *pp; else swg = gameData["switch"]; foreach (immutable f; 0..2) { - switchesSpr ~= buildImageBrick(gameData["switches"][f*64..$], this.platforms[1].ink, this.paper); + switchesSpr ~= buildImageBrick(swg[f*64..$], this.platforms[1].ink, this.paper); } } + +private: + void load (VFile fl) { + char[33] title; + fl.rawReadExact(map[]); + fl.rawReadExact(title[]); + const(char)[] tit; + foreach (immutable idx, char ch; title[]) { + if (ch == 0) break; + tit = title[0..idx]; + } + while (tit.length && tit[0] <= ' ') tit = tit[1..$]; + while (tit.length && tit[$-1] <= ' ') tit = tit[0..$-1]; + this.title = tit.idup; + + border = fl.readNum!ubyte; + ink = fl.readNum!ubyte; + paper = fl.readNum!ubyte; + + platforms.length = 2; + foreach (immutable idx; 0..2) { + CommonGfx g; + g.ink = fl.readNum!ubyte; + g.paper = fl.readNum!ubyte; + g.gfx = fl.readNum!ubyte; + platforms[idx] = g; + } + + wall.ink = fl.readNum!ubyte; + wall.paper = fl.readNum!ubyte; + wall.gfx = fl.readNum!ubyte; + + crumb.ink = fl.readNum!ubyte; + crumb.paper = fl.readNum!ubyte; + crumb.gfx = fl.readNum!ubyte; + + deadlies.length = 2; + foreach (immutable idx; 0..2) { + CommonGfx g; + g.ink = fl.readNum!ubyte; + g.paper = fl.readNum!ubyte; + g.gfx = fl.readNum!ubyte; + deadlies[idx] = g; + } + + conveyor.ink = fl.readNum!ubyte; + conveyor.paper = fl.readNum!ubyte; + conveyor.gfx = fl.readNum!ubyte; + + willy.x = fl.readNum!short; + willy.y = fl.readNum!short; + willy.sd = fl.readNum!ubyte; + + conveyor.x = fl.readNum!short; + conveyor.y = fl.readNum!short; + conveyor.d = fl.readNum!ubyte; + conveyor.l = fl.readNum!ubyte; + + keys.info.length = 5; + foreach (immutable idx; 0..5) keys.info[idx].x = fl.readNum!short; + foreach (immutable idx; 0..5) keys.info[idx].y = fl.readNum!short; + keys.gfx = fl.readNum!ubyte; + foreach (immutable idx; 0..5) keys.info[idx].s = fl.readNum!ubyte; + + switches.length = 2; + foreach (immutable idx; 0..2) switches[idx].x = fl.readNum!short; + foreach (immutable idx; 0..2) switches[idx].y = fl.readNum!short; + foreach (immutable idx; 0..2) switches[idx].s = fl.readNum!ubyte; + + exit.x = fl.readNum!short; + exit.y = fl.readNum!short; + exit.gfx = fl.readNum!ubyte; + + air = fl.readNum!ubyte; + + enemies.length = 4*2; + + foreach (immutable idx; 0..4) enemies[idx].vert = false; + foreach (immutable idx; 0..4) enemies[idx].ink = fl.readNum!ubyte; + foreach (immutable idx; 0..4) enemies[idx].paper = fl.readNum!ubyte; + foreach (immutable idx; 0..4) enemies[idx].x = fl.readNum!short; + foreach (immutable idx; 0..4) enemies[idx].y = fl.readNum!short; + foreach (immutable idx; 0..4) enemies[idx].min = fl.readNum!short; + foreach (immutable idx; 0..4) enemies[idx].max = fl.readNum!short; + foreach (immutable idx; 0..4) enemies[idx].d = fl.readNum!ubyte; + foreach (immutable idx; 0..4) enemies[idx].s = fl.readNum!ubyte; + foreach (immutable idx; 0..4) enemies[idx].gfx = fl.readNum!short; + foreach (immutable idx; 0..4) enemies[idx].flip = fl.readNum!ubyte; + foreach (immutable idx; 0..4) enemies[idx].anim = fl.readNum!ubyte; + + foreach (immutable idx; 4..8) enemies[idx].vert = true; + foreach (immutable idx; 4..8) enemies[idx].ink = fl.readNum!ubyte; + foreach (immutable idx; 4..8) enemies[idx].paper = fl.readNum!ubyte; + foreach (immutable idx; 4..8) enemies[idx].x = fl.readNum!short; + foreach (immutable idx; 4..8) enemies[idx].y = fl.readNum!short; + foreach (immutable idx; 4..8) enemies[idx].min = fl.readNum!short; + foreach (immutable idx; 4..8) enemies[idx].max = fl.readNum!short; + foreach (immutable idx; 4..8) enemies[idx].d = fl.readNum!ubyte; + foreach (immutable idx; 4..8) enemies[idx].s = fl.readNum!ubyte; + foreach (immutable idx; 4..8) enemies[idx].gfx = fl.readNum!short; + foreach (immutable idx; 4..8) enemies[idx].anim = fl.readNum!ubyte; + } } diff --git a/mminer.d b/mminer.d index 05a32c9..14f4a3f 100644 --- a/mminer.d +++ b/mminer.d @@ -2,6 +2,7 @@ module mminer is aliced; import arsd.simpledisplay; +import iv.vfs.arcs.wad; import iv.vfs.io; import engine; @@ -10,6 +11,18 @@ import x11gfx; // ////////////////////////////////////////////////////////////////////////// // void main (string[] args) { + vfsAddPak("data/mminer.wad"); + + for (int idx = 1; idx < args.length; ++idx) { + if (args[idx] == "-file") { + if (args.length-idx < 2) assert(0, "arg?!"); + vfsAddPak(args[idx+1]); + ++idx; + } else { + assert(0, "invalid arg"); + } + } + loadGameData(); Room curRoom; -- 2.11.4.GIT