aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlec Murphy <alec@checksum.fail>2017-02-11 19:41:44 -0500
committerAlec Murphy <alec@checksum.fail>2017-02-11 19:41:44 -0500
commit68fc81e5acff82e2d34b8e1f088c463fafc1e5d3 (patch)
tree4339b5058af8f0edb8ca648dbe7a06ca5f44de82
parent360455ba9cbde0702f55d3db837ead75dd45fd3d (diff)
Add basic background scrolling.
-rwxr-xr-xBG1.GR.Zbin0 -> 16561 bytes
-rwxr-xr-xLEVEL.LVL.Zbin1144 -> 1083 bytes
-rw-r--r--LVLEDIT.HC3
-rw-r--r--MEGAMAN.HC3
-rw-r--r--MMBG.HC25
-rw-r--r--MMGAME.HC4
-rw-r--r--MMSOUND.HC3
7 files changed, 37 insertions, 1 deletions
diff --git a/BG1.GR.Z b/BG1.GR.Z
new file mode 100755
index 0000000..f793eed
--- /dev/null
+++ b/BG1.GR.Z
Binary files differ
diff --git a/LEVEL.LVL.Z b/LEVEL.LVL.Z
index e643007..3939e74 100755
--- a/LEVEL.LVL.Z
+++ b/LEVEL.LVL.Z
Binary files differ
diff --git a/LVLEDIT.HC b/LVLEDIT.HC
index 59bfbc5..65cac36 100644
--- a/LVLEDIT.HC
+++ b/LVLEDIT.HC
@@ -1,6 +1,9 @@
Bool MM_EDIT_MODE = TRUE;
CDC *Buffer = DCAlias();
+CDC *BgrImage = DCNew(0, 0);
CDC *BgrMap = DCNew(512, 512);
+CDC *BgrLayer = DCNew(0, 0);
+
I64 PtrMsGrab, PtrMsStd;
I64 TxtB, TxtH, TxtL;
U8 ScanCode;
diff --git a/MEGAMAN.HC b/MEGAMAN.HC
index 3ec7a8b..de080ac 100644
--- a/MEGAMAN.HC
+++ b/MEGAMAN.HC
@@ -1,6 +1,9 @@
Bool MM_EDIT_MODE = FALSE;
CDC *Buffer = DCAlias();
+CDC *BgrImage = GRRead("BG1.GR.Z");
CDC *BgrMap = GRRead("LEVEL.LVL.Z");
+CDC *BgrLayer = DCNew(640, 480);
+
I64 PtrMsGrab, PtrMsStd;
U8 ScanCode;
diff --git a/MMBG.HC b/MMBG.HC
index 955f83b..33c01e1 100644
--- a/MMBG.HC
+++ b/MMBG.HC
@@ -3,6 +3,9 @@ I64 BgrState;
I64 BgrMapStartPosY, BgrMapPosX, BgrMapPosY;
I64 BgrScrollPosX, BgrScrollPosY;
+CDC *OpaqueTile = DCNew(48, 48);
+DCFill(OpaqueTile, DKGRAY);
+
U16 GetTilesAdj(I64 _xx, I64 _yy, I64 _dir) {
I64 TileIncr, TileH, TileL, TileZ;
TileIncr = 0;
@@ -73,7 +76,10 @@ I64 AlignToMapTile(I64 _xx, I64 _yy, U8 _tile) {
};
U0 FreeBgrs() {
+ Free(BgrImage);
Free(BgrMap);
+ Free(BgrLayer);
+ Free(OpaqueTile);
};
U0 UpdateBgr() {
@@ -81,13 +87,20 @@ U0 UpdateBgr() {
BgrIncrY=0;
BgrMapPosX=BgrScrollPosX/48;
BgrMapPosY=BgrMapStartPosY+(BgrScrollPosY/48);
- DCFill(Buffer, DKGRAY);
+ if (MM_EDIT_MODE==FALSE) {
+ DCFill(Buffer, DKGRAY);
+ GrBlot(Buffer, 0, 0, DCExt(BgrImage, (BgrScrollPosX % (BgrImage->width-640)), BgrScrollPosY, (BgrScrollPosX % (BgrImage->width-640)) + 639, BgrScrollPosY + 479));
+ } else {
+ DCFill(Buffer, DKGRAY);
+ };
+
while (BgrIncrY<(48*20)) {
BgrIncrX = 0;
while (BgrIncrX<(48*26)) {
switch (GrPeek(BgrMap, BgrMapPosX, BgrMapPosY)) {
// Ground tiles
case 0x30:
+ GrBlot(Buffer, BgrIncrX - (BgrScrollPosX % 48), BgrIncrY, OpaqueTile);
MMSprite(SPR_Tiles, 0, BgrIncrX - (BgrScrollPosX % 48), BgrIncrY, 255, 0, 255+47, 0+47, 0);
break;
// Jump-through blocks
@@ -96,42 +109,52 @@ U0 UpdateBgr() {
break;
// Left1stPanel
case 0x31:
+ GrBlot(Buffer, BgrIncrX - (BgrScrollPosX % 48), BgrIncrY, OpaqueTile);
MMSprite(SPR_Tiles, 0, BgrIncrX - (BgrScrollPosX % 48), BgrIncrY, 0, 51, 0+47, 51+47, 0);
break;
// TopLeft1stPanel
case 0x32:
+ GrBlot(Buffer, BgrIncrX - (BgrScrollPosX % 48), BgrIncrY, OpaqueTile);
MMSprite(SPR_Tiles, 0, BgrIncrX - (BgrScrollPosX % 48), BgrIncrY, 0, 0, 0+47, 0+47, 0);
break;
// Left2ndPanel
case 0x33:
+ GrBlot(Buffer, BgrIncrX - (BgrScrollPosX % 48), BgrIncrY, OpaqueTile);
MMSprite(SPR_Tiles, 0, BgrIncrX - (BgrScrollPosX % 48), BgrIncrY, 51, 51, 51+47, 51+47, 0);
break;
// TopLeft2ndPanel
case 0x34:
+ GrBlot(Buffer, BgrIncrX - (BgrScrollPosX % 48), BgrIncrY, OpaqueTile);
MMSprite(SPR_Tiles, 0, BgrIncrX - (BgrScrollPosX % 48), BgrIncrY, 51, 0, 51+47, 0+47, 0);
break;
// MidPanel
case 0x35:
+ GrBlot(Buffer, BgrIncrX - (BgrScrollPosX % 48), BgrIncrY, OpaqueTile);
MMSprite(SPR_Tiles, 0, BgrIncrX - (BgrScrollPosX % 48), BgrIncrY, 102, 51, 102+47, 51+47, 0);
break;
// TopMidPanel
case 0x36:
+ GrBlot(Buffer, BgrIncrX - (BgrScrollPosX % 48), BgrIncrY, OpaqueTile);
MMSprite(SPR_Tiles, 0, BgrIncrX - (BgrScrollPosX % 48), BgrIncrY, 102, 0, 102+47, 0+47, 0);
break;
// Right2ndPanel
case 0x37:
+ GrBlot(Buffer, BgrIncrX - (BgrScrollPosX % 48), BgrIncrY, OpaqueTile);
MMSprite(SPR_Tiles, 0, BgrIncrX - (BgrScrollPosX % 48), BgrIncrY, 153, 51, 153+47, 51+47, 0);
break;
// TopRight2ndPanel
case 0x38:
+ GrBlot(Buffer, BgrIncrX - (BgrScrollPosX % 48), BgrIncrY, OpaqueTile);
MMSprite(SPR_Tiles, 0, BgrIncrX - (BgrScrollPosX % 48), BgrIncrY, 153, 0, 153+47, 0+47, 0);
break;
// Right1stPanel
case 0x39:
+ GrBlot(Buffer, BgrIncrX - (BgrScrollPosX % 48), BgrIncrY, OpaqueTile);
MMSprite(SPR_Tiles, 0, BgrIncrX - (BgrScrollPosX % 48), BgrIncrY, 204, 51, 204+47, 51+47, 0);
break;
// TopRight1stPanel
case 0x3A:
+ GrBlot(Buffer, BgrIncrX - (BgrScrollPosX % 48), BgrIncrY, OpaqueTile);
MMSprite(SPR_Tiles, 0, BgrIncrX - (BgrScrollPosX % 48), BgrIncrY, 204, 0, 204+47, 0+47, 0);
break;
// Ladder
diff --git a/MMGAME.HC b/MMGAME.HC
index 8e355fa..0180723 100644
--- a/MMGAME.HC
+++ b/MMGAME.HC
@@ -281,6 +281,7 @@ U0 GameLoop() {
if (MMHealth>0) { Sfx(SFX_MMHIT); MMInvCtr = 1; MMInvFlop = 0; };
if (MMHealth<=0) {
for(MMDeathInit=0;MMDeathInit<12;MMDeathInit++) { MMDeathX[MMDeathInit] = MMX; MMDeathY[MMDeathInit] = MMY-MMJumpY; }
+ Sfx(MUS_STOP);
Sfx(SFX_MMDEATH);
MMDeath=1;
MMDeathPit=0;
@@ -371,6 +372,7 @@ U0 GameLoop() {
if (MMDeathPit==1) {
for(MMDeathInit=0;MMDeathInit<12;MMDeathInit++) { MMDeathX[MMDeathInit] = -999; MMDeathY[MMDeathInit] = -999; }
+ Sfx(MUS_STOP);
Sfx(SFX_MMDEATH);
MMDeath=1;
MMDeathPit=1;
@@ -607,10 +609,12 @@ U0 MegaMan() {
*gr.fp_draw_grab_ms = &HideMs;
*gr.fp_draw_ms = &HideMs;
DCFill(Buffer,BLACK);
+ Sfx(MUS_DEMO);
GameLoop;
GrUpdateScrn;
};
// Exit game.
+ Sfx(MUS_STOP);
FreeBgrs;
FreeSprites;
PaletteSetStd;
diff --git a/MMSOUND.HC b/MMSOUND.HC
index 6d0b48a..27e233a 100644
--- a/MMSOUND.HC
+++ b/MMSOUND.HC
@@ -1,3 +1,6 @@
+#define MUS_STOP 0x40
+#define MUS_DEMO 0x41
+
#define SFX_MMTELIN 0x54
#define SFX_MMSHOT 0x55
#define SFX_MMJUMP 0x56