diff --git a/028.bs/assets/assets.png b/028.bs/assets/assets.png index ddb2d36..a9d3293 100644 Binary files a/028.bs/assets/assets.png and b/028.bs/assets/assets.png differ diff --git a/028.bs/constants.i b/028.bs/constants.i index 7dbfaa1..2925489 100644 --- a/028.bs/constants.i +++ b/028.bs/constants.i @@ -34,6 +34,9 @@ FOREGROUND_PLAYAREA_RIGHT_MARGIN_BYTES equ 12 FOREGROUND_PLAYAREA_HEIGHT_WORDS equ 8 FOREGROUND_MOVING_COUNTER equ 50 +FOREGROUND_TILE_ENDLEVEL equ $7098 +FOREGROUND_TILE_EMPTY equ $709a + BACKGROUND_SCROLL_SHIFT_CONVERT equ 4 BACKGROUND_SCROLL_TILE_INDEX_CONVERT equ 3 BACKGROUND_SCROLL_PIXELS equ 16 @@ -85,4 +88,5 @@ RASTER_X_START equ $81 ; hard coded coordinates from hardware manual RASTER_Y_START equ $2c RASTER_X_STOP equ RASTER_X_START+SCREEN_WIDTH RASTER_Y_STOP equ RASTER_Y_START+256 -IMAGESIZE equ BITPLANE_WIDTH_BYTES*SCREEN_BIT_DEPTH*SCREEN_HEIGHT \ No newline at end of file +SCROLL_EXTRA equ 0 +IMAGESIZE equ BITPLANE_WIDTH_BYTES*SCREEN_BIT_DEPTH*(SCREEN_HEIGHT+SCROLL_EXTRA) \ No newline at end of file diff --git a/028.bs/foreground.tmx b/028.bs/foreground.tmx index 1757def..663c026 100644 --- a/028.bs/foreground.tmx +++ b/028.bs/foreground.tmx @@ -1,24 +1,24 @@ - - - - - - - - - - - eJxjZ2BgsGTEjtlH5eguZwekmYBYDAtNidxWPHKVNLBvOMiBwkwLhzzTIJTbTaa+ejrro8QPlMTnaDqnvhyhOFtOID4HSx4gV45c/9HKnYMxjQx1OUrKjcFWR9A7nQ82OWkG3G0wWsgNxjbmYJIDAJ+ZWmA= - - - - - eJztlD0OwjAMheOhU0+QqSdg4v4HYOoJmDgBEyu10FPdh5M0bRFI5JOiSGli+/mnITT+hbOEcJLl3tjHOK37wTZ7mW1rnR4Vb9fEcglzD3wS6+doDYDz38krf9b33j7vxN9tDPDDsXMtvVh6OmP7FujycnTNfGM/OR/eO/WLGo7OHWiL07qFZW+hJoze2zI7sMU7iPJ+18Zid2Bnjb9Z/TYPXky5eOHDi5NzlkPrPEhaS4le0m+21KQ0Hxb0qPWnuodEnaCVbeiZ3XmucObN3Na8Kbk5Tmkp4Wn07K79Z3McNb31DWrzZvMRf1hXo8wTZUo3PA== - - - - - eJztlV0OgjAQhNmjIaJVAZuo97+KNrGxQPeXSnjgeyEps7Pb2QSqamdLHEBfUwtrPOh6RN3VMBPnuRYl+oV8qYwbGGst/qnHhfG4LbxTUyATq4ek7sFoYsa5rJ8w10bdEfHtkHNMP4Xa13QeDdhcViT3sWbhPu/bb9Yu0XpiH57YI0Yr0KY9Jfqe0bxW/mZpCPfr4fcMcHk6wU40nJgai2eJ/kPmnJuVIudn9dT+J7QZngn9v/exlPvG59spxxv5VRN9 - - - + + + + + + + + + + + eJxjZ2BgsGLEjtlH5eguZwekmYBYDAtNidxWPHKVNLBvqMtZQuNFC4c8iB5scrvJ1FdPZ33k+AEWH5TE9Wg6p03+wJfulpOZDuidB8iVI9d/1HYnNfLHqBz1yo2hWH/QIp0PFjlYfEgz4G6D0UJuMLYxB5McAAccW5U= + + + + + eJztlD0OwjAMheOhU0+QqSdg4v4HYOoJmDgBEyu10FPdh5M0bRFI5JOiSGli+/mnITT+hbOEcJLl3tjHOK37wTZ7mW1rnR4Vb9fEcglzD3wS6+doDYDz38krf9b33j7vxN9tDPDDsXMtvVh6OmP7FujycnTNfGM/OR/eO/WLGo7OHWiL07qFZW+hJoze2zI7sMU7iPJ+18Zid2Bnjb9Z/TYPXky5eOHDi5NzlkPrPEhaS4le0m+21KQ0Hxb0qPWnuodEnaCVbeiZ3XmucObN3Na8Kbk5Tmkp4Wn07K79Z3McNb31DWrzZvMRf1hXo8wTZUo3PA== + + + + + eJztlcsOgjAQRZlPU0TxgRK0+v9/ok1sLLXzLCEsOBuS9s7tzJ0FVbWyJLagr9kIawbQvRF0J0NPnOdcTPGez5fKuIax1uIfe9wZj3PhTPUEmVg9JHXc/CHjXNYP+NcG3Q7xvSDnmD7lSOjSfjTk+irxk9Ras3Cf++abdRtpe2IfjtgjRiPQukgj0XeC2Uoorafw83Xw+3q4PFtiJ+m+JOyZGovnU1GDvX/NnHO9UuT8rJ7a/4Q2wwOht+xjTm5Mf6+F978i5w1JIRUK + + + diff --git a/028.bs/game1.s b/028.bs/game1.s index 1abba4f..9fde2c5 100644 --- a/028.bs/game1.s +++ b/028.bs/game1.s @@ -1,5 +1,6 @@ include "includes.i" - + + xdef LevelComplete xdef BigBang xdef IncrementCounter xdef RenderCounter @@ -29,7 +30,7 @@ xdef startForegroundMapPtr xdef startPathwayMapPtr - xdef mapSize + xdef itemsMapOffset xdef moving xdef foregroundScrollPixels @@ -113,6 +114,7 @@ Reset: bra GameOver .notGameOver: lea message,a1 + move.w #128,d0 jsr Message @@ -171,6 +173,8 @@ FadeInLoop: move.l #0,verticalBlankCount move.l #1,frameCount + move.l #FOREGROUND_SCROLL_PIXELS,foregroundScrollPixels + bra GameLoop .c1: bra FadeInLoop @@ -195,7 +199,6 @@ GameLoop: add.l #1,frameCount move.l frameCount,d6 - move.l #FOREGROUND_SCROLL_PIXELS,foregroundScrollPixels jsr WaitVerticalBlank @@ -298,6 +301,7 @@ Update: GameOver: lea gameOverMessage,a1 + move.w #128,d0 jsr Message move.l #100,d0 @@ -311,8 +315,33 @@ GameOver: bne .gotJoystick bra .waitForJoystick .gotJoystick: - move.l #foregroundMap,startForegroundMapPtr - move.l #pathwayMap,startPathwayMapPtr + move.l #level1ForegroundMap,startForegroundMapPtr + move.l #level1PathwayMap,startPathwayMapPtr + move.l #'0004',livesCounterText + jsr InitialiseItems + bra Reset + + +LevelComplete: + jsr ResetItems + jsr ResetPlayer + lea levelCompleteMessage,a1 + move.w #100,d0 + jsr Message + + move.l #100,d0 +.pause: + jsr WaitVerticalBlank + dbra d0,.pause + +.waitForJoystick: + jsr ReadJoystick + btst.b #0,joystick + bne .gotJoystick + bra .waitForJoystick +.gotJoystick: + move.l #level1ForegroundMap,startForegroundMapPtr + move.l #level1PathwayMap,startPathwayMapPtr move.l #'0004',livesCounterText jsr InitialiseItems bra Reset @@ -630,10 +659,13 @@ RenderForegroundTile: add.l d0,a0 lea foregroundTilemap,a1 move.w (a2),d0 - cmp.l #0,d0 - beq .s2 + ;; cmp.l #0,d0 + ;; beq .s2 add.w (a2),a1 ; source tile add.l #(BITPLANE_WIDTH_BYTES*SCREEN_BIT_DEPTH*(256-(16*8)+32)/4)+BITPLANE_WIDTH_BYTES-FOREGROUND_PLAYAREA_RIGHT_MARGIN_BYTES,a0 + cmp.w #$ffff,d0 + beq stopScrolling + lea animIndex,a4 move.l d2,d1 lsl.l #2,d1 @@ -650,6 +682,9 @@ RenderForegroundTile: sub.l #2,(a4) .s2: rts +stopScrolling: + move.l #0,foregroundScrollPixels + rts PostMissedTile: @@ -662,7 +697,6 @@ BigBang: PlaySound Falling jsr WaitVerticalBlank jsr PlayNextSound - jsr ResetItems move.w #0,moving move.l #0,frameCount @@ -761,6 +795,8 @@ ClearForegroundTile: lsr.l #2,d1 ; anim scaling (speed) cmp.l #10,d1 bge .s1 + cmp.l #0,foregroundScrollPixels + beq .s1 add.l d1,a1 add.l #2,(a4) bra .s2 @@ -805,13 +841,14 @@ Message: ;; d0 - xpos ;; d1 - ypos + move.w d0,d1 move.w #(32*4)<<6|(320/16),d0 lea mpanelOrig,a0 lea mpanel,a2 jsr SimpleBlit lea mpanel,a0 - move.w #128,d0 + move.w d1,d0 move.w #11,d1 jsr DrawMaskedText8 bsr ShowMessagePanel @@ -891,7 +928,12 @@ message: gameOverMessage: dc.b "GAME OVER" dc.b 0 - align 4 + align 4 + +levelCompleteMessage: + dc.b "LEVEL COMPLETE!" + dc.b 0 + align 4 skippedFramesCounterText: dc.b "0000" @@ -1330,25 +1372,25 @@ mpanel: incbin "out/mpanel.bin" mpanelOrig: incbin "out/mpanel.bin" -pathwayMap: - include "out/pathway-map.s" - dc.w $FFFF -foregroundMap: +level1ForegroundMap: include "out/foreground-map.s" dc.w $FFFF +level1PathwayMap: + include "out/pathway-map.s" + dc.w $FFFF itemsMap: include "out/items-indexes.s" dc.w $FFFF -mapSize: - dc.l itemsMap-foregroundMap +itemsMapOffset: + dc.l itemsMap-level1ForegroundMap foregroundMapPtr: dc.l 0 pathwayMapPtr: dc.l 0 startForegroundMapPtr: - dc.l foregroundMap + dc.l level1ForegroundMap startPathwayMapPtr: - dc.l pathwayMap + dc.l level1PathwayMap diff --git a/028.bs/items.s b/028.bs/items.s index fbc9baf..0c9facb 100644 --- a/028.bs/items.s +++ b/028.bs/items.s @@ -208,7 +208,7 @@ RenderItemSprite: cmp.b #$f,d1 ; only add sprite after tile has scrolled in bne dontAddSprite move.l a2,a3 - add.l mapSize,a3 + add.l itemsMapOffset,a3 cmpi.w #0,(a3) beq dontAddSprite diff --git a/028.bs/player.s b/028.bs/player.s index b75c377..0071331 100644 --- a/028.bs/player.s +++ b/028.bs/player.s @@ -1,5 +1,6 @@ include "includes.i" + xdef ResetPlayer xdef GetNextAutoMove xdef CheckPlayerMiss xdef UpdatePlayer @@ -35,6 +36,11 @@ InitialisePlayer: move.w #PLAYER_INITIAL_Y+16,spriteYEnd rts +ResetPlayer: + move.w #0,spriteX + move.w #0,spriteY + move.w #0,spriteYEnd + rts HidePlayer: move.w #$7000,spriteX @@ -42,8 +48,11 @@ HidePlayer: ScrollSprites: + cmp.l #0,foregroundScrollPixels + beq .skip sub.w #1,spriteX bra ScrollItemSprites +.skip: rts @@ -330,9 +339,12 @@ CheckPlayerMiss: ;; a3 now points at the tile under the sprite move.w (a3),d0 + + cmp.w #FOREGROUND_TILE_EMPTY,d0 ; empty tile + bge .doBigBang - cmp.w #$7098,d0 ; empty tile - beq .doBigBang + cmp.w #FOREGROUND_TILE_ENDLEVEL,d0 + beq .levelComplete cmp.w #$78e,d0 bge .noBigBang @@ -340,6 +352,9 @@ CheckPlayerMiss: .doBigBang: jmp BigBang +.levelComplete: + jmp LevelComplete + .noBigBang: move.w (a3),d0 cmp.w #$1e00,d0