diff --git a/028.bs/assets/items.png b/028.bs/assets/items.png index 7bb4868..ef7c34b 100644 Binary files a/028.bs/assets/items.png and b/028.bs/assets/items.png differ diff --git a/028.bs/constants.i b/028.bs/constants.i index 5725b0b..9b24710 100644 --- a/028.bs/constants.i +++ b/028.bs/constants.i @@ -59,7 +59,8 @@ ITEM_NUM_SLOTS equ ((8*3)+ITEM_NUM_BEES) ITEM_SPRITE_HORIZONTAL_START_PIXELS equ 32 ITEM_SPRITE_Y_COLLISION_OFFSET equ 1 -ITEM_SPRITE_BEE_INDEX equ 24 +ITEM_SPRITE_BEE_DOWN_INDEX equ 24 +ITEM_SPRITE_BEE_UP_INDEX equ 25 ITEM_SPRITE_ARROW_INDEX equ 16 ITEM_SPRITE_COINB_INDEX equ 8 diff --git a/028.bs/credits.s b/028.bs/credits.s index c2365f1..a530b68 100644 --- a/028.bs/credits.s +++ b/028.bs/credits.s @@ -123,7 +123,7 @@ credits: dc.b 0 dc.b "CODE - ALPINE9000" dc.b 0 - dc.b "LEVELS - CHIPMUNK/ALPINE9000" + dc.b "LEVELS - CHIPMUNK&ALPINE9000" dc.b 0 dc.b "TRACKLOADER - PHOTON/SCOOPEX" dc.b 0 @@ -139,7 +139,7 @@ credits: dc.b 0 dc.b "FS-UAE - Frode Solheim" dc.b 0 - dc.b "VASM/VLINK - PHX/Volker" + dc.b "VASM/VLINK - PHX&Volker" align 4 copperList: copperListBplPtr: diff --git a/028.bs/items.s b/028.bs/items.s index dd0954b..302d71a 100644 --- a/028.bs/items.s +++ b/028.bs/items.s @@ -13,6 +13,11 @@ xdef DetectBeeCollisions +DetectBeeCollisions: + bsr DetectDownBeeCollisions + bsr DetectUpBeeCollisions + rts + DeleteItemSprite: move.w #0,ITEM_SPRITE(a1) move.w #0,ITEM_X(a1) @@ -20,11 +25,13 @@ DeleteItemSprite: move.w ITEM_Y(a1),d2 rts - VerticalScrollBees: + bsr VerticalScrollDownBee + bsr VerticalScrollUpBee + rts + +VerticalScrollDownBee: lea item25,a1 - move.w #ITEM_NUM_BEES-1,d6 -.loop: cmp.w #0,ITEM_SPRITE(a1) beq .done move.w ITEM_Y(a1),d4 @@ -33,7 +40,7 @@ VerticalScrollBees: lsl.w #ITEM_Y_OFFSET_SHIFT_CONVERT,d4 move.w ITEM_Y_OFFSET(a1),d0 add.w d0,d4 - cmp.w #1,beeMovingDown + cmp.w #1,beeDownMovingDown bne .up .down: add.w #1,d0 @@ -48,15 +55,45 @@ VerticalScrollBees: ble .beeAtTop bra .done .beeAtTop: - move.w #1,beeMovingDown + move.w #1,beeDownMovingDown bra .done .beeAtBottom: - move.w #0,beeMovingDown + move.w #0,beeDownMovingDown .done: - add.l #ITEM_STRUCT_SIZE,a1 - dbra d6,.loop rts +VerticalScrollUpBee: + lea item26,a1 + cmp.w #0,ITEM_SPRITE(a1) + beq .done + move.w ITEM_Y(a1),d4 + lsl.w #ITEM_SPRITE_SPACING_SHIFT_CONVERT,d4 + add.w #ITEM_SPRITE_VSTART,d4 + lsl.w #ITEM_Y_OFFSET_SHIFT_CONVERT,d4 + move.w ITEM_Y_OFFSET(a1),d0 + sub.w d0,d4 + cmp.w #1,beeUpMovingDown + bne .up +.down: + add.w #1,d0 + bra .c1 +.up: + sub.w #1,d0 +.c1: + move.w d0,ITEM_Y_OFFSET(a1) + cmp.w #(ITEM_SPRITE_VSTART)<= r2.x+w + ble .skip + + move.w d2,d6 + add.w #BEE_COLLIDE_SIZE,d6 + cmp.w d3,d6 ; r1.x+w <= r2.x + ble .skip + + move.w d4,d6 + add.w #BEE_COLLIDE_SIZE,d6 + cmp.w d5,d6 ; r1.y >= r2.y+h + ble .skip + + move.w d5,d6 + add.w #BEE_COLLIDE_SIZE,d6 + cmp.w d4,d6 ; r1.y+h < r2.y + ble .skip + + bsr DeleteItemSprite + jmp BigBang +.skip: + rts RenderCoinScore: @@ -208,18 +287,19 @@ SwitchItemSpriteBuffers: PrepareItemSpriteData: - cmp.l #0,itemSpritesEnabled - bne .enableSprites move.l #deadSprite,sprite2Pointer move.l #deadSprite,sprite3Pointer move.l #deadSprite,sprite4Pointer - move.l #deadSprite,sprite5Pointer + move.l #deadSprite,sprite5Pointer + + cmp.l #0,itemSpritesEnabled + bne .enableSprites rts .enableSprites: move.l #ITEM_NUM_SLOTS-1,d0 .loop: - bsr _SetupItemSpriteData + bsr _SetupItemSpriteData dbra d0,.loop rts @@ -270,7 +350,19 @@ _SetupItemSpriteData: adda.w d0,a0 lsl.w #ITEM_SPRITE_VERTICAL_BYTES_SHIFT_CONVERT,d2 - adda.w d2,a0 + move.w d2,d3 + + cmp.l #item25,a1 + beq .bee + cmp.l #item26,a1 + beq .bee + bra .continueBee +.bee: + move.w #0,d3 +.continueBee: + + + adda.w d3,a0 ; ITEM_Y or 0 for bee move.w ITEM_X(a1),d0 lsr.w #FOREGROUND_SCROLL_SHIFT_CONVERT,d0 ; convert to pixels @@ -289,7 +381,15 @@ _SetupItemSpriteData: move.w ITEM_Y(a1),d0 lsl.w #ITEM_SPRITE_SPACING_SHIFT_CONVERT,d0 lsr.w #ITEM_Y_OFFSET_SHIFT_CONVERT,d1 - add.w d1,d0 + + cmp.b #ITEM_SPRITE_BEE_UP_INDEX,d4 + bne .notBeeUp + sub.w d1,d0 + bra .afterNotBeeUp +.notBeeUp: + add.w d1,d0 +.afterNotBeeUp: + add.w #ITEM_SPRITE_VSTART,d0 move.b d0,(a0) ; spriteVStart add.w #ITEM_SPRITE_HEIGHT,d0 @@ -298,9 +398,11 @@ _SetupItemSpriteData: .noYOffset: .c1: - sub.l d2,a0 ;#1*ITEM_SPRITE_VERTICAL_BYTES,a0 - cmp.b #ITEM_SPRITE_BEE_INDEX,d4 - bge .beeSprite + sub.l d3,a0 ;#1*ITEM_SPRITE_VERTICAL_BYTES,a0 or 0 for bee + cmp.b #ITEM_SPRITE_BEE_UP_INDEX,d4 + bge .beeUpSprite + cmp.b #ITEM_SPRITE_BEE_DOWN_INDEX,d4 + bge .beeDownSprite cmp.b #ITEM_SPRITE_ARROW_INDEX,d4 bge .arrowSprite cmp.b #ITEM_SPRITE_COINB_INDEX,d4 @@ -311,22 +413,32 @@ _SetupItemSpriteData: .coinBSprite: move.l a0,sprite3Pointer bra .done -.arrowSprite: - move.l a0,sprite4Pointer +.arrowSprite: cmp.w #0,ITEM_X(a1) beq .done + move.l a0,sprite4Pointer bsr InstallArrowPalette bra .done -.beeSprite: - move.l a0,sprite5Pointer +.beeDownSprite: cmp.w #0,ITEM_X(a1) - beq .dontAnimate + beq .dontAnimateDownBee + move.l a0,sprite4Pointer bsr InstallBeePalette - bra .dontAnimate - -.dontAnimate: - cmp.w #1,beeMovingDown + bra .dontAnimateDownBee +.beeUpSprite: + cmp.w #0,ITEM_X(a1) + beq .dontAnimateUpBee + move.l a0,sprite5Pointer + bsr InstallBeePalette + bra .dontAnimateUpBee +.dontAnimateDownBee: + cmp.w #1,beeDownMovingDown beq .setBeeDown + bra .setBeeUp +.dontAnimateUpBee: + cmp.w #1,beeUpMovingDown + beq .setBeeDown + bra .setBeeUp .setBeeUp: move.w #1<<3,ITEM_INDEX(a1) bra .spriteIsNotEnabled @@ -396,17 +508,19 @@ InstallArrowPalette: itemSpritesEnabled: dc.l 0 spriteBufferIndex: - dc.l 0 + dc.l 0 sprite2Pointer: - dc.l 0 + dc.l deadSprite sprite3Pointer: - dc.l 0 + dc.l deadSprite sprite4Pointer: - dc.l 0 + dc.l deadSprite sprite5Pointer: - dc.l 0 -beeMovingDown: + dc.l deadSprite +beeUpMovingDown: dc.w 1 +beeDownMovingDown: + dc.w 1 ;; coinA ItemControl item1,spriteCoinA1,1 @@ -438,13 +552,11 @@ beeMovingDown: ItemControl item23,spriteArrow1,0 ItemControl item24,spriteArrow1,0 - ;; bee - ItemControl item25,spriteBee1,1 - ItemControl item26,spriteBee1,1 - if 0 - ItemControl item27,spriteArrow1,1 - ItemControl item28,spriteArrow1,1 - endif + ;; beeDown + ItemControl item25,spriteBeeDown1,1 + + ;; beeUp + ItemControl item26,spriteBeeUp1,1 ItemSprite spriteCoinA1,sprite_coin-0.bin ItemSprite spriteCoinA2,sprite_coin-0.bin @@ -473,15 +585,11 @@ beeMovingDown: ItemSprite spriteArrow7,sprite_arrow-1.bin ItemSprite spriteArrow8,sprite_arrow-1.bin - ItemSprite spriteBee1,sprite_bee-1.bin - ItemSprite spriteBee2,sprite_bee-0.bin - ItemSprite spriteBee3,sprite_bee-1.bin - ItemSprite spriteBee4,sprite_bee-0.bin - ItemSprite spriteBee5,sprite_bee-1.bin - ItemSprite spriteBee6,sprite_bee-0.bin - ItemSprite spriteBee7,sprite_bee-1.bin - ItemSprite spriteBee8,sprite_bee-0.bin + ItemSprite spriteBeeDown1,sprite_bee-1.bin + ItemSprite spriteBeeDown2,sprite_bee-0.bin + ItemSprite spriteBeeUp1,sprite_bee-0.bin + ItemSprite spriteBeeUp2,sprite_bee-1.bin nextSpriteSlot: dc.w 0 diff --git a/028.bs/levels/levelA_foreground.tmx b/028.bs/levels/levelA_foreground.tmx index 1ff602e..d788e5a 100644 --- a/028.bs/levels/levelA_foreground.tmx +++ b/028.bs/levels/levelA_foreground.tmx @@ -18,7 +18,7 @@ - eJztlUsOgzAMRMnRCrRAv5FaNnD/e1SRqORG8S9OKQveBilMxvZYgqra2RK1S59PyHngQLyDeEfXwHo5C/Uaz7UoUS/kS2XcuG9tjj/0GBiPi3GmpkAmuR6Se09G88lYkjXcXbs85+jeFfFphTNS+3oZssb6ykUyjyWL45J1D7Q+ugf34RV7hDU4YE2J/sZoxpW/WRrCfHH/XJ69YCcaTo7+P+V4auunuCfOMa2ElJ/V81d0f9yHlcfG+9spxxtPYBLK + eJztlEkOgzAMRfHRCm0ZOkVqV+X+90BZILlWPJC4EQveDvPx8B3SNAd7ooV0/MvEIyfhHSaAXIPrZTLqt+SshUe96K/kcQe/2pz8OMcI8r5vhTN1Dp7k5rB891Y0q8cWr/Huzoz+zsQ5PWUUdJ9Mn2bg+8rFMk+JF5fEfxLIM95H2LBHXEMD17ToH5XvJE/ifLR/zc/BsBPp/qFcFS09A95w9Z+JuNarRCqfNedc+Yz1Qr1/76OU1877O/BjAd0kEuI=