wip button triggered pickups

This commit is contained in:
alpine9000 2016-05-28 13:49:04 +10:00
parent c5d2907524
commit 37f5148ed5
11 changed files with 273 additions and 31 deletions

View File

@ -14,11 +14,12 @@ BASE_ADDRESS=4000
# note: this must be high enough not to conflict with MFMbufE
BOOTBLOCK_ASM=alpine_bootblock.s
OBJS=out/init.o out/utils.o out/image.o out/blit.o out/joystick.o out/player.o out/items.o out/blitmtext.o out/blitmtext85.o out/blittext.o out/music.o out/P6112-Play.o out/splash.o out/background.o out/sound.o out/trackloader.o out/disk.o out/counter.o out/map.o out/message.o out/menu.o out/credits.o out/bob.o
OBJS=out/init.o out/utils.o out/image.o out/blit.o out/joystick.o out/player.o out/items.o out/blitmtext.o out/blitmtext85.o out/blittext.o out/music.o out/P6112-Play.o out/splash.o out/background.o out/sound.o out/trackloader.o out/disk.o out/counter.o out/map.o out/message.o out/menu.o out/credits.o out/bob.o out/pickups.o
IMAGES=foreground.png \
background.png \
panel.png \
pickups.png \
mpanel.png \
mpanelOrig.png \
sprite_pig-0.png \
@ -117,6 +118,9 @@ out/background.bin: assets/background.png
out/panel.bin: assets/panel.png
$(IMAGECON) --input $< $(IMAGECON_ARGS) --colors 16 --output-bitplanes --output-palette --full-color-palette-file --output-palette-asm --output-palette --output-png --output-copperlist --output-grey-palette --output out/panel --use-palette=assets/panel.pal
out/pickups.bin: assets/pickups.png
$(IMAGECON) --input $< $(IMAGECON_ARGS) --colors 16 --output-bitplanes --output-palette --full-color-palette-file --output-palette-asm --output-palette --output-png --output-copperlist --output-grey-palette --output out/pickups --use-palette=assets/panel.pal
out/countdown.bin: assets/countdown.png
$(IMAGECON) --input $< $(IMAGECON_ARGS) --colors 16 --output-bitplanes --output-palette --full-color-palette-file --output-palette-asm --output-palette --output-png --output-copperlist --output-grey-palette --output out/countdown --use-palette=assets/panel.pal

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

View File

@ -1,17 +1,16 @@
000 153 238 255
051 136 136 255
071 112 076 000
058 175 154 255
255 255 255 255
255 238 187 255
255 255 221 255
068 187 170 255
156 235 234 255
255 235 173 255
000 034 051 255
170 238 238 255
255 221 000 255
238 187 153 255
255 136 000 255
000 068 119 255
085 221 204 255
255 000 064 255
170 187 153 255
255 255 204 255
042 118 117 255
232 173 135 255
154 174 135 255
071 218 199 255
250 102 011 255
255 226 011 255
025 138 157 255
251 000 050 255
255 255 213 255

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 2.8 KiB

BIN
028.bs/assets/pickups.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

@ -116,8 +116,8 @@ LINESIZE equ BITPLANE_WIDTH_BYTES*SCREEN_BIT_DEPTH
PANEL_BIT_DEPTH equ 4
PANEL_LIVES_X equ 218
PANEL_PLAYER1_X equ 192
PANEL_LIVES_X equ 236
PANEL_PLAYER1_X equ 214
PANEL_COLUMNS_REMAINING_X equ 100
PANEL_SCORE_X equ 29

View File

@ -24,6 +24,7 @@
xdef startForegroundMapPtr
xdef startPathwayMapPtr
xdef frameCount
xdef moving
xdef itemsMapOffset
xdef itemsMapEndPtr
@ -97,6 +98,7 @@ Reset:
move.l playerXColumnLastSafe,playerXColumn
jsr PreRenderColumnsRemaining
jsr RenderPlayerScore
jsr ResetPickups
move.l startForegroundMapPtr,foregroundMapPtr
move.l startPathwayMapPtr,pathwayMapPtr
@ -252,6 +254,8 @@ GameLoop:
jsr PlayNextSound
jsr PrepareItemSpriteData
jsr FlashPickup
bra GameLoop
@ -303,13 +307,11 @@ Update:
rts
RevealPathway:
PlaySound Whoosh
move.w #50,pathwayFadeCount
jsr InstallTilePalette
rts
FreezeScrolling:
PlaySound Whoosh
move.w #150,freezeCountdownCounter
move.w #0,moving
rts
@ -317,6 +319,7 @@ FreezeScrolling:
InitialiseNewGame:
jsr InitialiseItems
jsr InitialisePlayer
jsr InitialisePickups
jsr InstallNextLevel
bra Reset
@ -508,6 +511,7 @@ stopScrolling:
PostMissedTile:
jsr InitialisePickups
lea livesCounterText,a0
jsr DecrementCounter
bra Reset
@ -1085,7 +1089,6 @@ stopScrollingPending:
dc.w 0
freezeCountdownCounter:
dc.w 0
startUserstack:
ds.b $1000 ; size of stack
userstack:

View File

@ -82,15 +82,18 @@ DetectItemCollisions:
rts
.arrowCollision:
bsr DeleteItemSprite
jsr SpriteEnableAuto
;; jsr SpriteEnableAuto
jsr PickupArrow
rts
.clockCollision:
bsr DeleteItemSprite
jsr FreezeScrolling
;; jsr FreezeScrolling
jsr PickupClock
rts
.eyeCollision:
bsr DeleteItemSprite
jsr RevealPathway
;; jsr RevealPathway
jsr PickupEye
rts
.skip:
add.l #ITEM_STRUCT_SIZE,a1
@ -489,4 +492,5 @@ __nextPlayerBonus:
dc.l 0
align 4

View File

@ -8,17 +8,17 @@
</tileset>
<layer name="foreground" width="100" height="8">
<data encoding="base64" compression="zlib">
eJxjZ2BgsGLEjtlpIDeK8WM7YNgxAbEYFppcOctB4K+hirVwhCmIJlduND7Ix5Tkj8rR/EF1DErnu/HkgeWj+YOueLT+GFx4tP4YXFgaT9uUFnKjGD8GACo/pGY=
eJwLZGBgsGLEjtlpIDeK8WM7YNgxAbEYFhokV4lHDpc+y0Hgr6GKtXCEKYgmV240PsjHhPIHOXlnND7Ix6B0vhtPHlg+mj/oignlga2j9QddMaE6Al/eGc0f1MfSeNqmtJAbxfgxAO5ipn8=
</data>
</layer>
<layer name="pathway" width="100" height="8" visible="0">
<layer name="pathway" width="100" height="8">
<data encoding="base64" compression="zlib">
eJxjYBgFo2AUkAvOA7EuIwODMSMqPVDgIxFqTjLQx53I9nwnQR8xfsAFWAcw7EF+RXc7N9Q9yOkEHXCjieHzAyxMsYXRXTxy6PaQEk4gfSB7YXF4HosacvLAYwbK4poYgCts0f0Pi5/vWOSQ/Y8cDvjswSYHswMGJJHYjxmIz4+geJZnxO0XSgCt4wSWRpHtA/lbHkc8wfyKbgZIDJlGz1cwMWx5jpJww5ePcfmFUgAzd6DrFloBUsMNOTwkh2F4jCQAAEy5K70=
eJxjZxgFo2AUkAseA7EuIwODMSMqPVDgIxFqTjLQx53I9nwnQR8xfiDGTmSaHgBkD7rbuaF2n2fA7RZuNDFWPO6F+Q9bGN3FI4duDz47sOkD2QuLw/NY1JCTB0B5h5K4JgbgClt0/8Pi5zsWOWT/I4cDPnuwycHsgAFJJPZjBuLzIyie5Rlx+4UQwJc/aB0nsDSKbB/IDfI44gnmV3QzQGLINHq+golhy3PkhhsI4MvHuPxCCBDKO+h1zHADpIYbcnhIDsPwGEkAAMreL30=
</data>
</layer>
<layer name="items" width="100" height="8" visible="0">
<layer name="items" width="100" height="8">
<data encoding="base64" compression="zlib">
eJxjYBgFQx04Mg60C4gHTnR2KzXsA4UvsWE8FOLCmQpuJNcMYvQFE1ADC2NiwpqUuKMFCCHT7migPh8qu9uFCPNw2UmMXhBAD+sARkx5mJoAEuKRXOBKhNm+QyDP4gIg/6G7n1B4ehARJ0MJuOFwsx8WcVxqiQHYzKPUzFGACfxHw3PEAACaNwuB
eJxjYBgFQx04Mg60C4gHTnR2KzXsA4UvsWEcPQTiwpkKbiTXDGL0BRNQA4sLYuKElLijBQgh025QOvKhsrtdiDAPl53E6AWBUDR1AWh85PgIICEeyQWuRJjtOwTyLC4A8h+6+wmFpwcRcTKUgBsON/thEcellhiAzTxKzSQVRA3B+CEV+I8AP44CCAAABPMMCg==
</data>
</layer>
</map>

216
028.bs/pickups.s Normal file
View File

@ -0,0 +1,216 @@
include "includes.i"
xdef InitialisePickups
xdef UsePickup
xdef PickupEye
xdef PickupClock
xdef PickupArrow
xdef FlashPickup
xdef ResetPickups
PICKUP_OFFSET equ (SCREEN_WIDTH_BYTES*PANEL_BIT_DEPTH*17)+(272/8)
PICKUP_NUM_FLASHES equ 6
ResetPickupItem: macro
cmp.w #0,has\1Pickup
beq .\@skip
move.w #PICKUP_NUM_FLASHES,has\1Pickup
bsr Show\1Pickup
.\@skip:
endm
ResetPickups:
move.l #0,lastPickupFrameCount
ResetPickupItem Arrow
ResetPickupItem Clock
ResetPickupItem Eye
rts
InitialisePickups:
move.w #0,hasEyePickup
move.w #0,hasArrowPickup
move.w #0,hasClockPickup
bsr HideEyePickup
bsr HideArrowPickup
bsr HideClockPickup
rts
UsePickup:
move.l frameCount,d0
sub.l lastPickupFrameCount,d0
cmp.l #50,d0
blt .done
move.l frameCount,lastPickupFrameCount
cmp.w #0,hasEyePickup
bne .useEye
cmp.w #0,hasClockPickup
bne .useClock
cmp.w #0,hasArrowPickup
bne .useArrow
bra .done
.useEye:
PlaySound Whoosh
bsr HideEyePickup
move.w #0,hasEyePickup
jsr RevealPathway
bra .done
.useClock:
PlaySound Whoosh
bsr HideClockPickup
move.w #0,hasClockPickup
jsr FreezeScrolling
bra .done
.useArrow:
move.l foregroundPlayerTileAddress,a0
cmp.w #0,a0
beq .done
move.w (a0),d0
cmp.w #$f02,d0 ; dont active on safe columns
beq .done
cmp.w #$1682,d0 ; dont active on safe zones
beq .done
PlaySound Whoosh
bsr HideArrowPickup
move.w #0,hasArrowPickup
jsr SpriteEnableAuto
bra .done
.done:
rts
FlashItem: macro
move.w has\1Pickup,d0
cmp.w #PICKUP_NUM_FLASHES,d0
beq .\@skip
cmp.w #0,d0
beq .\@skip
btst #0,d0
bne .\@on
bsr Hide\1Pickup
bra .\@done
.\@on:
bsr Show\1Pickup
.\@done:
add.w #1,has\1Pickup
.\@skip
endm
FlashPickup:
cmp.w #0,flashCount
bgt .skip
move.w #8,flashCount
FlashItem Arrow
FlashItem Clock
FlashItem Eye
.skip:
sub.w #1,flashCount
rts
PickupItem: macro
PlaySound Whoosh
cmp.w #0,has\1Pickup
beq .\@doPickup
jsr \2
bra .\@done
.\@doPickup:
bsr Show\1Pickup
move.w #1,has\1Pickup
.\@done:
endm
PickupClock:
PickupItem Clock,FreezeScrolling
rts
PickupEye:
PickupItem Eye,RevealPathway
rts
PickupArrow:
PickupItem Arrow,SpriteEnableAuto
rts
ShowEyePickup:
move.w #0,d0
move.w #0,d1
bsr BlitPickup
rts
HideEyePickup:
move.w #0,d0
move.w #1,d1
bsr BlitPickup
rts
ShowClockPickup:
move.w #1,d0
move.w #0,d1
bsr BlitPickup
rts
HideClockPickup:
move.w #1,d0
move.w #1,d1
bsr BlitPickup
rts
ShowArrowPickup:
move.w #2,d0
move.w #0,d1
bsr BlitPickup
rts
HideArrowPickup:
move.w #2,d0
move.w #1,d1
bsr BlitPickup
rts
BlitPickup:
WaitBlitter
;; d0.w pickup index
;; 0 - eye, 1 - clock, 2 - arrow, 3 - blank
;; d1.w blank
;; 0 - not blank, 1 - blank
move.w #BC0F_SRCA|BC0F_DEST|$f0,BLTCON0(a6)
lea pickups,a0
move.l #panel+PICKUP_OFFSET,a1
lsl.w #1,d0
cmp.w #0,d1
adda.w d0,a1
beq .notBlank
move.w #48/8,d0
.notBlank:
adda.w d0,a0
move.w #0,BLTCON1(a6)
move.w #$ffff,BLTALWM(a6)
move.w #$ffff,BLTAFWM(a6)
move.w #(64-16)/8,BLTAMOD(a6)
move.w #SCREEN_WIDTH_BYTES-2,BLTDMOD(a6)
move.l a0,BLTAPTH(a6) ;source graphic top left corner
move.l a1,BLTDPTH(a6) ;destination top left corner
move.w #(14*PANEL_BIT_DEPTH)<<6|(1),BLTSIZE(a6)
rts
hasClockPickup:
dc.w 0
hasEyePickup:
dc.w 0
hasArrowPickup:
dc.w 0
lastPickupFrameCount:
dc.l 0
flashCount:
dc.w 0
revealMessageText:
dc.b "SHOW ME THE BOARD!"
dc.b 0
align 4
pickups:
incbin "out/pickups.bin"

View File

@ -25,6 +25,7 @@
xdef playerLevelPausePixels
xdef playerLevelMissPixels
xdef spriteCurrentPathwayTile
PLAYER_INSTALL_COLOR_PALETTE equ 0
PLAYER_SPRITE_DATA equ 4
@ -40,6 +41,7 @@ ResetPlayer:
move.w #PATHWAY_CONFIG_FREE,pathwayLastConfig
move.w #0,pathwayMissPending
move.l #0,foregroundPlayerTileAddress
bsr SpriteDisableAuto
move.w #0,spritePlayerFallingAnimation
@ -192,6 +194,11 @@ ProcessJoystick:
beq .skip
.autoMoveDisabled:
btst.b #0,joystick
beq .joystickNotPressed
jsr UsePickup
.joystickNotPressed:
cmp.b #3,joystickpos
bne .notRight
PlayerMoveRight
@ -212,7 +219,6 @@ ProcessJoystick:
rts
SpriteEnableAuto:
PlaySound Whoosh
CompareScore SCORE_ARROW_SUBTRACTION
ble .toZero
AddToScore SCORE_ARROW_SUBTRACTION
@ -413,7 +419,7 @@ CheckPlayerMiss:
GetNextAutoMove:
move.w spriteCurrentPathwayTile,d0
lsr.w #4,d0
lsr.w #4,d0 ; light and dark colored tiles
cmp.w #$708,d0
beq .horizontal
@ -427,6 +433,16 @@ GetNextAutoMove:
beq .topRight
cmp.w #$618,d0
beq .vertical
move.l foregroundPlayerTileAddress,a0
move.w (a0),d0
lsr.w #4,d0 ; light and dark colored tiles
cmp.w #$3c0,d0
beq .topLeft
cmp.w #$2d0,d0
beq .leftBottom
cmp.w #$438,d0
beq .horizontal
bra .skip
.horizontal:
cmp.w #PLAYER_MOVE_RIGHT,spriteLastMove