1 module mminer
is aliced
;
3 import arsd
.simpledisplay
;
5 import iv
.vfs
.arcs
.wad
;
12 // ////////////////////////////////////////////////////////////////////////// //
13 void main (string
[] args
) {
14 vfsAddPak("data/mminer.wad");
16 for (int idx
= 1; idx
< args
.length
; ++idx
) {
17 if (args
[idx
] == "-file") {
18 if (args
.length
-idx
< 2) assert(0, "arg?!");
19 vfsAddPak(args
[idx
+1]);
22 assert(0, "invalid arg");
30 void loadRoom (int idx
) {
31 curRoom
= gameRooms
[idx
];
33 blitType
= BlitType
.Green
;
34 curRoom
.willyDead
= true;
40 auto sdwin
= new SimpleWindow(vbufW
*(blit2x ?
2 : 1), vbufH
*(blit2x ?
2 : 1), "Manic Miner", OpenGlOptions
.no
, Resizablity
.fixedSize
);
43 Image vbimg
= new Image(vbufW
*(blit2x ?
2 : 1), vbufH
*(blit2x ?
2 : 1));
47 sdwin
.eventLoop(1000/20,
50 if (sdwin
.closed
) return;
52 if (!curRoom
.willyDead
&& !singleStepWait
) {
54 if (curRoom
.willyDead
) {
55 blitType
= BlitType
.BlackWhite
;
57 if (curRoom
.checkExit()) {
58 if (gameRooms
.length
-curRoom
.roomIdx
> 1) {
59 loadRoom(curRoom
.roomIdx
+1);
60 curRoom
.willyDead
= true;
62 blitType
= BlitType
.Green
;
65 singleStepWait
= singleStep
;
67 //clear(rgbcol(255, 127, 0));
70 roomImg
= curRoom
.draw(roomImg
);
71 //roomImg.blit2xTV(0, 0);
72 roomImg
.blitFast(0, 0);
75 drawStr(10, vbufH
-10, curRoom
.title
, rgbcol(255, 255, 0));
79 auto painter
= sdwin
.draw();
80 painter
.drawImage(Point(0, 0), vbimg
);
81 //map.drawMap(painter, player);
85 delegate (KeyEvent evt
) {
87 case Key
.Left
: curRoom
.keyLeft
= evt
.pressed
; break;
88 case Key
.Right
: curRoom
.keyRight
= evt
.pressed
; break;
89 case Key
.Up
: curRoom
.keyUp
= evt
.pressed
; break;
90 case Key
.Down
: curRoom
.keyDown
= evt
.pressed
; break;
91 case Key
.Ctrl
: curRoom
.keyJump
= evt
.pressed
; break;
92 case Key
.N1
: debugColdet
= !debugColdet
; break;
94 if (!evt
.pressed
) break;
95 curRoom
.cheatRemoveKeys();
98 if (!evt
.pressed
) break;
99 debugColdet
= !debugColdet
;
102 if (!evt
.pressed
) break;
103 singleStep
= !singleStep
;
104 singleStepWait
= singleStep
;
107 if (!evt
.pressed
) break;
108 singleStepWait
= false;
111 if (!evt
.pressed
) break;
112 blitType
= BlitType
.Normal
;
113 if (curRoom
.willyDead
) {
114 auto kst
= curRoom
.saveKeyState();
115 loadRoom(curRoom
.roomIdx
);
116 blitType
= BlitType
.Normal
;
117 curRoom
.willyDead
= false;
118 curRoom
.restoreKeyState(kst
);
121 case Key
.Q
: case Key
.Escape
: doQuit
= true; break;
123 if (!evt
.pressed
) break;
124 if (curRoom
.roomIdx
> 0) {
125 loadRoom(curRoom
.roomIdx
-1);
129 if (!evt
.pressed
) break;
130 if (gameRooms
.length
-curRoom
.roomIdx
> 1) {
131 loadRoom(curRoom
.roomIdx
+1);
136 if (doQuit
) { sdwin
.close(); return; }
139 delegate (MouseEvent evt
) {
142 delegate (dchar ch
) {