wip - more generic background bobs

This commit is contained in:
alpine9000
2016-05-24 17:40:28 +10:00
parent 06205c4f4a
commit bd3d11c705
11 changed files with 343 additions and 307 deletions
+5 -6
View File
@@ -14,7 +14,7 @@ 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/baloon.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
IMAGES=foreground.png \
background.png \
@@ -76,12 +76,12 @@ IMAGES=foreground.png \
font8x85.png\
splash.png\
splashSave.png\
baloonMask.png\
backgroundMask-mask.png\
countdown.png
IMAGEDATA=$(addprefix out/, $(IMAGES:.png=.bin))
VASM_EXTRA_ARGS=-DSFX=1 -DBALOON_BOB=1 -DMAX_P61_SIZE=$(MAX_P61_SIZE) -allmp
VASM_EXTRA_ARGS=-DSFX=1 -DMAX_P61_SIZE=$(MAX_P61_SIZE) -allmp
LINKER_OPTIONS=-T link.script.x
@@ -219,9 +219,8 @@ out/splashSave.bin: assets/splash.png out/splash.bin
../tools/croppa/out/croppa --input=assets/splash.png --output=out/splashSave.png --width=96 --height=64 --rows=1 --cols=1 --dx=0 --dy=0 --x=112 --y=150
$(IMAGECON) --input out/splashSave.png $(IMAGECON_ARGS) --output-bitplanes --output-grey-palette-asm --output-palette-asm --output-palette --output out/splashSave --colors=32 --output-copperlist --full-color-palette-file --use-palette=out/splash.pal
out/baloonMask.bin: assets/background.png
#../tools/croppa/out/croppa --input=assets/background.png --output=out/baloonMask.png --width=48 --height=32 --rows=1 --cols=1 --dx=0 --dy=0 --x=0 --y=64
$(IMAGECON) --input assets/baloonMask.png $(IMAGECON_ARGS) --output-mask --output out/baloonMask --colors=8 --transparent-color=0,0,0 --output-png --palette-offset=8
out/backgroundMask-mask.bin: assets/background.png
$(IMAGECON) --input assets/background.png $(IMAGECON_ARGS) --output-mask --output out/backgroundMask --output-png --colors=8 --transparent-color=0,0,14 --output-png --palette-offset=8
out/splash.bin: assets/splash.png
$(IMAGECON) --input $< $(IMAGECON_ARGS) --output-bitplanes --output-grey-palette-asm --output-palette-asm --output-palette --output out/splash --colors=32 --output-copperlist --full-color-palette-file
+1 -1
View File
@@ -5,7 +5,7 @@ P61mode =2 ;Try other modes ONLY IF there are no Fxx commands >= 20.
;; --- options common to all P61modes ---
usecode=-1;$8000 ;CHANGE! to the USE hexcode from P61con for a big
usecode=$8159|$800D40D|$1559;$8000 ;CHANGE! to the USE hexcode from P61con for a big
;CPU-time gain! (See module usecodes at end of source)
;Multiple songs, single playroutine? Just "OR" the
;usecodes together!
Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

+45 -14
View File
@@ -22,8 +22,27 @@ InitialiseBackground:
move.l #0,d2
jsr BlitFillColor
rts
RenderBackgroundTile:
;; a2 - map
move.l backgroundScrollX,d0
lsr.w #BACKGROUND_SCROLL_SHIFT_CONVERT,d0 ; convert to pixels
lsr.w #3,d0 ; bytes to scroll
add.l d0,a0
lea backgroundTilemap,a1
add.l #BITPLANE_WIDTH_BYTES-2,a0 ; dest
move.w (a2),d0 ; source tile
add.w d0,a1
move.l backgroundScrollX,d2
lsr.b #BACKGROUND_SCROLL_SHIFT_CONVERT,d2 ; convert to pixels
andi.w #$f,d2 ; find the shift component
;; this is where the old baloon was triggered - won't work anymore
jsr BlitBackgroundTile
rts
OldRenderBackgroundTile:
;; a2 - map
move.l backgroundScrollX,d0
lsr.w #BACKGROUND_SCROLL_SHIFT_CONVERT,d0 ; convert to pixels
@@ -38,16 +57,8 @@ RenderBackgroundTile:
lsr.b #BACKGROUND_SCROLL_SHIFT_CONVERT,d2 ; convert to pixels
andi.w #$f,d2 ; find the shift component
if BALOON_BOB=1
cmp.w #$306,d0
bne .dontTriggerBaloon
move.w d2,d0
jsr TriggerBaloon
.dontTriggerBaloon:
endif
jsr BlitBackgroundTile
cmp.l #backgroundBitplanes1,backgroundOffscreen
bne .offsetSub
add.l #backgroundBitplanes2-backgroundBitplanes1,a0
@@ -55,7 +66,9 @@ RenderBackgroundTile:
.offsetSub:
sub.l #backgroundBitplanes2-backgroundBitplanes1,a0
.doBlit:
jsr BlitBackgroundTile
jsr BlitBackgroundTile
rts
RenderNextBackgroundFrame:
@@ -69,11 +82,29 @@ RenderNextBackgroundFrame:
move.l #0,backgroundScrollX
.skip:
if BALOON_BOB=1
jsr RenderBaloon
endif
if 1 ; new background tile render method
jsr RestoreBobBackgrounds
move.l backgroundOffscreen,a0
bsr RenderBackgroundTile
add.l #2,a2
add.l #BACKGROUND_SCROLL_PIXELS,backgroundScrollX
move.l backgroundOffscreen,a0
bsr RenderBackgroundTile
sub.l #BACKGROUND_SCROLL_PIXELS,backgroundScrollX
sub.l #2,a2
else
jsr RestoreBobBackgrounds
move.l backgroundOffscreen,a0
bsr OldRenderBackgroundTile
endif
jsr RenderBob
rts
-254
View File
@@ -1,254 +0,0 @@
include "includes.i"
if BALOON_BOB=1
xdef RenderBaloon
xdef baloonSaveOffscreen
xdef baloonSaveOnscreen
xdef baloonLastSaveOffscreen
xdef baloonLastSaveOnscreen
xdef DisableBaloon
xdef EnableBaloon
xdef TriggerBaloon
BALOON_BLIT_WIDTH_BYTES equ 6
BALOON_BLIT_WIDTH_WORDS equ BALOON_BLIT_WIDTH_BYTES/2
DisableBaloon:
bsr RestoreBaloonBackground
move.w #0,baloonsEnabled
move.l baloonStartX,baloonX
rts
EnableBaloon:
move.w #1,baloonsEnabled
rts
TriggerBaloon:
cmp.w #1,baloonsEnabled
bne .skip
;; d0.w - y tile index
lsl.w #4,d0
move.l #0,baloonLastSaveOffscreen
move.l #0,baloonLastSaveOnscreen
move.w d0,baloonY
move.l baloonStartX,baloonX
move.w #2,baloonsEnabled
.skip:
rts
RestoreBaloonBackground:
bsr RestorePreviousBaloonBackground
move.l baloonSaveOffscreen,a0
move.l baloonSaveOnscreen,baloonSaveOffscreen
move.l a0,baloonSaveOnscreen
move.l baloonLastSaveOffscreen,a0
move.l baloonLastSaveOnscreen,baloonLastSaveOffscreen
move.l a0,baloonLastSaveOnscreen
bsr RestorePreviousBaloonBackground
rts
RestorePreviousBaloonBackground:
cmp.l #0,baloonLastSaveOffscreen
beq .skip
move.l baloonX,d2
add.l #16<<BACKGROUND_SCROLL_SHIFT_CONVERT,d2
cmp.l #0<<BACKGROUND_SCROLL_SHIFT_CONVERT,d2
bgt .dontReset
move.l #0,baloonLastSaveOffscreen
move.l #0,baloonLastSaveOnscreen
move.w #1,baloonsEnabled
;; move.l baloonStartX,baloonX
rts
.dontReset:
if 0
move.l baloonLastSaveOffscreen,d0
move.l backgroundOffscreen,d1
sub.l d1,d0
divu.w #BITPLANE_WIDTH_BYTES,d0
swap d0
cmp.w #BITPLANE_WIDTH_BYTES,d0
bge .1word
cmp.w #BITPLANE_WIDTH_BYTES-2,d0
bge .2word
bra .normal
.1word:
bsr RestorePreviousBaloonBackground1Word
rts
.2word:
bsr RestorePreviousBaloonBackground2Word
rts
.normal:
endif
WaitBlitter
move.w #0,BLTCON1(a6) ;
move.w #BC0F_SRCA|BC0F_DEST|$f0,BLTCON0(a6)
move.w #0,BLTAMOD(a6)
move.w #BITPLANE_WIDTH_BYTES-BALOON_BLIT_WIDTH_BYTES,BLTDMOD(a6) ;
move.l baloonSaveOffscreen,BLTAPTH(a6) ; source
move.l baloonLastSaveOffscreen,BLTDPTH(a6) ; dest
move.w #$ffff,BLTAFWM(a6)
move.w #$ffff,BLTALWM(a6)
move.w #(32*SCREEN_BIT_DEPTH)<<6|(BALOON_BLIT_WIDTH_WORDS),BLTSIZE(a6) ;rectangle size, starts blit
move.l #0,baloonLastSaveOffscreen
.skip:
rts
RestorePreviousBaloonBackground1Word:
cmp.l #0,baloonLastSaveOffscreen
beq .skip
WaitBlitter
move.w #0,BLTCON1(a6) ;
move.w #BC0F_SRCA|BC0F_DEST|$f0,BLTCON0(a6)
move.w #4,BLTAMOD(a6)
move.w #BITPLANE_WIDTH_BYTES-BALOON_BLIT_WIDTH_BYTES+4,BLTDMOD(a6) ;
move.l baloonSaveOffscreen,BLTAPTH(a6) ; source
move.l baloonLastSaveOffscreen,BLTDPTH(a6) ; dest
move.w #$ffff,BLTAFWM(a6)
move.w #$ffff,BLTALWM(a6)
move.w #(32*SCREEN_BIT_DEPTH)<<6|(1),BLTSIZE(a6) ;rectangle size, starts blit
move.l #0,baloonLastSaveOffscreen
.skip:
rts
RestorePreviousBaloonBackground2Word:
cmp.l #0,baloonLastSaveOffscreen
beq .skip
WaitBlitter
move.w #0,BLTCON1(a6) ;
move.w #BC0F_SRCA|BC0F_DEST|$f0,BLTCON0(a6)
move.w #2,BLTAMOD(a6)
move.w #BITPLANE_WIDTH_BYTES-BALOON_BLIT_WIDTH_BYTES+2,BLTDMOD(a6) ;
move.l baloonSaveOffscreen,BLTAPTH(a6) ; source
move.l baloonLastSaveOffscreen,BLTDPTH(a6) ; dest
move.w #$ffff,BLTAFWM(a6)
move.w #$ffff,BLTALWM(a6)
move.w #(32*SCREEN_BIT_DEPTH)<<6|(BALOON_BLIT_WIDTH_WORDS-1),BLTSIZE(a6) ;rectangle size, starts blit
move.l #0,baloonLastSaveOffscreen
.skip:
rts
SaveBaloonBackground:
;; a0.l source bitplane data
WaitBlitter
move.w #0,BLTCON1(a6) ;
move.w #BC0F_SRCA|BC0F_DEST|$f0,BLTCON0(a6)
move.w #BITPLANE_WIDTH_BYTES-BALOON_BLIT_WIDTH_BYTES,BLTAMOD(a6)
move.w #0,BLTDMOD(a6)
move.l a0,BLTAPTH(a6) ; source
move.l baloonSaveOffscreen,BLTDPTH(a6) ; dest
move.w #$ffff,BLTAFWM(a6)
move.w #$ffff,BLTALWM(a6)
move.w #(32*SCREEN_BIT_DEPTH)<<6|(BALOON_BLIT_WIDTH_WORDS),BLTSIZE(a6) ;rectangle size, starts blit
move.l a0,baloonLastSaveOffscreen
rts
RenderBaloon:
cmp.w #2,baloonsEnabled
beq .renderBaloon
rts
.renderBaloon:
bsr RestorePreviousBaloonBackground
move.l baloonX,d2
add.l backgroundScrollX,d2
move.l baloonDeltaX,d1
add.l d1,baloonX
move.w baloonY,d1
mulu.w #BITPLANE_WIDTH_BYTES*SCREEN_BIT_DEPTH,d1
move.l d2,d0
lsr.w #BACKGROUND_SCROLL_SHIFT_CONVERT,d0 ; convert to pixels
lsr.w #3,d0 ; bytes to scroll
move.l backgroundOffscreen,a0
add.l d0,a0
add.l d1,a0
lea backgroundTilemap,a1
add.w #$c00,a1 ; source tile
bsr SaveBaloonBackground
WaitBlitter
move.w #0,BLTCON1(a6) ;
move.l d2,d0
lsr.w #BACKGROUND_SCROLL_SHIFT_CONVERT,d0 ; convert to pixels
lsl.w #8,d0 ; BLIT_SOURCE_SHIFT<<BLIT_ASHIFTSHIFT
lsl.w #4,d0 ; BLIT_SOURCE_SHIFT<<BLIT_ASHIFTSHIFT
move.w d0,BLTCON1(A6)
ori.w #BC0F_SRCA|BC0F_SRCB|BC0F_SRCC|BC0F_DEST|$ca,d0
;; A(mask) B(bob) C(bg) D(dest)
move.w d0,BLTCON0(a6)
move.w #0,BLTAMOD(a6) ; mask
move.w #BACKGROUND_TILEMAP_WIDTH_BYTES-BALOON_BLIT_WIDTH_BYTES,BLTBMOD(a6) ; bob
move.w #BITPLANE_WIDTH_BYTES-BALOON_BLIT_WIDTH_BYTES,BLTCMOD(a6) ; background
move.w #BITPLANE_WIDTH_BYTES-BALOON_BLIT_WIDTH_BYTES,BLTDMOD(a6) ; dest
move.l #baloonMask,BLTAPTH(a6) ; mask
move.l a1,BLTBPTH(a6) ; bob
move.l a0,BLTCPTH(a6) ; bg
move.l a0,BLTDPTH(a6) ; dest
move.w #$ffff,BLTAFWM(a6)
move.w #$0000,BLTALWM(a6)
move.w #(32*SCREEN_BIT_DEPTH)<<6|(BALOON_BLIT_WIDTH_WORDS),BLTSIZE(a6) ;rectangle size, starts blit
WaitBlitter
.dontRenderBaloon:
rts
baloonSaveOffscreen:
dc.l baloonSave1
baloonSaveOnscreen:
dc.l baloonSave2
baloonX:
dc.l (320-16)<<BACKGROUND_SCROLL_SHIFT_CONVERT
baloonY:
dc.w 20
baloonDeltaX:
dc.l -24
baloonStartX:
dc.l (320-32)<<BACKGROUND_SCROLL_SHIFT_CONVERT
baloonEndX:
dc.l 0
baloonsEnabled:
dc.w 0
baloonMask:
incbin "out/baloonMask-mask.bin"
baloonSave1:
ds.b BALOON_BLIT_WIDTH_BYTES*32*3
baloonSave2:
ds.b BALOON_BLIT_WIDTH_BYTES*32*3
baloonLastSaveOffscreen:
dc.l 0
baloonLastSaveOnscreen:
dc.l 0
endif
-3
View File
@@ -170,9 +170,6 @@ BlueFill:
jsr WaitVerticalBlank
jsr SwitchBuffers
;; jsr InitialiseBackground
if BALOON_BOB=1
jsr DisableBaloon
endif
movem.l (sp)+,d0-a6
rts
+49
View File
@@ -0,0 +1,49 @@
BOB_X equ 4
BOB_Y equ 8
BOB_DX equ 12
BOB_SOURCE_ADDRESS equ 16
BOB_MASK_ADDRESS equ 20
BOB_SAVE_BUFFER_ADDRESS equ 24
BOB_LAST_DEST_ADDRESS equ 32
BOB_BLIT_SIZE equ 40
BOB_BLIT_HEIGHT equ 32
BOB_BLIT_WIDTH_WORDS equ 3
BOB_BLIT_WIDTH_BYTES equ BOB_BLIT_WIDTH_WORDS*2
BOB_MODULO equ BACKGROUND_TILEMAP_WIDTH_BYTES-BOB_BLIT_WIDTH_BYTES
BOB_SHIFT_CONVERT equ 4
BOB_SAVE_SIZE equ BOB_BLIT_WIDTH_BYTES*SCREEN_BIT_DEPTH*BOB_BLIT_HEIGHT
BLITTER_OBJECT: macro
\@:
dc.l 1
.\@x:
dc.l (\2)<<BOB_SHIFT_CONVERT
.\@y:
dc.l \3
.\@dx:
dc.l \4
.\@sourceAddress:
dc.l backgroundTilemap+(BACKGROUND_TILEMAP_WIDTH_BYTES*\5*SCREEN_BIT_DEPTH)
.\@maskAddress:
dc.l bobMask+(BACKGROUND_TILEMAP_WIDTH_BYTES*\5*SCREEN_BIT_DEPTH)
.\@saveBufferAddress:
dc.l splash+(\1)*(BOB_SAVE_SIZE*2)
dc.l splash+(\1)*(BOB_SAVE_SIZE*2)+BOB_SAVE_SIZE
.\@lastDestAddress:
dc.l 0
dc.l 0
.\@blitSize:
dc.w ((\6)*SCREEN_BIT_DEPTH)<<6|(BOB_BLIT_WIDTH_WORDS)
align 4
endm
BALOON_BOB: macro
BLITTER_OBJECT \1,320,\2,\3,67,29
endm
CLOUD_BOB: macro
BLITTER_OBJECT \1,320,\2,\3,24,18
endm
+194
View File
@@ -0,0 +1,194 @@
include "includes.i"
include "bob.i"
xdef RenderBob
xdef ResetBobs
xdef RestoreBobBackgrounds
xdef bobBufferOffset
xdef EnableBobs
;; BALOON_BOB/CLOUD_BOB
;; index,y,dx
;; BLITTER_OBJECT
;; index,startX,y,dx,mapLine,blitHeight
bob:
BALOON_BOB 0,15,24
endBob:
BALOON_BOB 1,150,32
CLOUD_BOB 2,64,8
CLOUD_BOB 3,170,12
dc.l 0
ResetBobs:
bsr RestoreBobBackgrounds
eor.l #4,bobBufferOffset
bsr RestoreBobBackgrounds
eor.l #4,bobBufferOffset
move.w #0,bobsEnabled
rts
RestoreBobBackgrounds:
movem.l d0/a2,-(sp)
WaitBlitter
move.w #$ffff,BLTAFWM(a6)
move.w #$ffff,BLTALWM(a6)
move.w #BC0F_SRCA|BC0F_DEST|$f0,BLTCON0(a6)
move.w #0,BLTCON1(a6)
move.w #0,BLTAMOD(a6)
move.w #BITPLANE_WIDTH_BYTES-(BOB_BLIT_WIDTH_BYTES),BLTDMOD(a6)
lea bob,a5
.loop:
cmp.l #0,(a5)
beq .done
lea BOB_LAST_DEST_ADDRESS(a5),a1
adda.l bobBufferOffset,a1
cmp.l #0,(a1)
beq .skip
lea BOB_SAVE_BUFFER_ADDRESS(a5),a2
adda.l bobBufferOffset,a2
WaitBlitter
move.l (a2),BLTAPTH(a6) ; source
move.l (a1),BLTDPTH(a6) ; dest
move.w BOB_BLIT_SIZE(a5),BLTSIZE(a6)
move.l #0,(a1)
.skip:
adda.l #endBob-bob,a5
bra .loop
.done:
movem.l (sp)+,d0/a2
rts
SaveBackground:
;; a5.l bob address
;; kills a0,a2
rts
SaveBobBackgrounds:
WaitBlitter
move.w #$ffff,BLTAFWM(a6)
move.w #$ffff,BLTALWM(a6)
move.w #BC0F_SRCA|BC0F_DEST|$f0,BLTCON0(a6)
move.w #0,BLTCON1(a6)
move.w #BITPLANE_WIDTH_BYTES-(BOB_BLIT_WIDTH_BYTES),BLTAMOD(a6)
move.w #0,BLTDMOD(a6)
lea bob,a5
.loop:
cmp.l #0,(a5)
beq .done
move.l BOB_X(a5),d2
sub.l BOB_DX(a5),d2
cmp.l #-32<<BOB_SHIFT_CONVERT,d2
bgt .dontReset
move.l #320<<BOB_SHIFT_CONVERT,d2
.dontReset:
move.l d2,BOB_X(a5)
add.l backgroundScrollX,d2
move.l d2,d0
lsr.w #BOB_SHIFT_CONVERT,d0 ; convert to pixels
lsr.w #3,d0 ; bytes to scroll
move.l backgroundOffscreen,a0
add.l d0,a0
move.l BOB_Y(a5),d1
mulu.w #BITPLANE_WIDTH_BYTES*SCREEN_BIT_DEPTH,d1
adda.w d1,a0
lea BOB_SAVE_BUFFER_ADDRESS(a5),a2
adda.l bobBufferOffset,a2
WaitBlitter
move.l a0,BLTAPTH(a6) ; source
move.l (a2),BLTDPTH(a6) ; dest
move.w BOB_BLIT_SIZE(a5),BLTSIZE(a6)
lea BOB_LAST_DEST_ADDRESS(a5),a2
adda.l bobBufferOffset,a2
move.l a0,(a2)
adda.l #endBob-bob,a5
bra .loop
.done:
rts
RenderBob:
cmp.w #0,bobsEnabled
beq .dontRenderBobs
movem.l d0-a5,-(sp)
bsr SaveBobBackgrounds
WaitBlitter
;; move.w #(48/8)-BOB_BLIT_WIDTH_BYTES,BLTAMOD(a6) ; mask
move.w #BACKGROUND_TILEMAP_WIDTH_BYTES-BOB_BLIT_WIDTH_BYTES,BLTAMOD(a6) ; mask
move.w #BOB_MODULO,BLTBMOD(a6) ; bob
move.w #BITPLANE_WIDTH_BYTES-BOB_BLIT_WIDTH_BYTES,BLTCMOD(a6) ; background
move.w #BITPLANE_WIDTH_BYTES-BOB_BLIT_WIDTH_BYTES,BLTDMOD(a6) ; dest
move.w #$ffff,BLTAFWM(a6)
move.w #$0000,BLTALWM(a6)
lea bob,a5
.loop:
cmp.l #0,(a5)
beq .done
move.l BOB_X(a5),d2
add.l backgroundScrollX,d2
lea BOB_LAST_DEST_ADDRESS(a5),a0
adda.l bobBufferOffset,a0
move.l (a0),a0
move.l d2,d0
;; lsr.w #BOB_SHIFT_CONVERT,d0 ; convert to pixels
lsl.w #8,d0 ; BLIT_SOURCE_SHIFT<<BLIT_ASHIFTSHIFT
;; lsl.w #4,d0 ; BLIT_SOURCE_SHIFT<<BLIT_ASHIFTSHIFT
WaitBlitter
move.w d0,BLTCON1(A6)
ori.w #BC0F_SRCA|BC0F_SRCB|BC0F_SRCC|BC0F_DEST|$ca,d0
move.w d0,BLTCON0(a6)
;; A(mask) B(bob) C(bg) D(dest)
move.l BOB_MASK_ADDRESS(a5),BLTAPTH(a6) ; mask
move.l BOB_SOURCE_ADDRESS(a5),BLTBPTH(a6) ; bob
move.l a0,BLTCPTH(a6) ; bg
move.l a0,BLTDPTH(a6) ; dest
move.w BOB_BLIT_SIZE(a5),BLTSIZE(a6) ;rectangle size, starts blit
adda.l #endBob-bob,a5
bra .loop
.done:
movem.l (sp)+,d0-a5
.dontRenderBobs:
rts
EnableBobs:
move.w #1,bobsEnabled
rts
bobBufferOffset:
dc.l 0 ; 0 or 4
bobsEnabled:
dc.w 0
bobMask:
incbin "out/backgroundMask-mask.bin"
+10 -14
View File
@@ -136,19 +136,21 @@ SetupBoardLoop:
bsr Update
jsr RenderNextForegroundFrame
jsr SwitchBackgroundBuffers2
move.w #15,d5
sub.l #BACKGROUND_SCROLL_PIXELS,backgroundScrollX
.renderNextBackgroundFrameLoop:
add.l #BACKGROUND_SCROLL_PIXELS,backgroundScrollX
jsr RenderNextBackgroundFrame
jsr SwitchBackgroundBuffers
jsr SwitchBackgroundBuffers2
dbra d5,.renderNextBackgroundFrameLoop
cmp.l #FOREGROUND_PLAYAREA_WIDTH_WORDS,frameCount
bge .gotoGameLoop
bra SetupBoardLoop
.gotoGameLoop:
jsr SwitchBackgroundBuffers
add.l #1,frameCount
jsr WaitForJoystick
move.w #0,moving
@@ -170,9 +172,7 @@ FadeInLoop:
move.l #0,verticalBlankCount
move.l #1,frameCount
move.l #FOREGROUND_SCROLL_PIXELS,foregroundScrollPixels
if BALOON_BOB=1
jsr EnableBaloon
endif
jsr EnableBobs
bra GameLoop
.c1:
bra FadeInLoop
@@ -197,7 +197,6 @@ GameLoop:
.noSkippedFrames:
add.l #1,frameCount
jsr WaitVerticalBlank
bsr HoriScrollPlayfield
jsr SwitchBuffers
move.l foregroundScrollX,d0
@@ -223,7 +222,7 @@ GameLoop:
bgt .notMoving
move.w #1,moving
.notMoving:
bsr Update
jsr CheckPlayerMiss
bsr RenderNextForegroundFrame
@@ -239,6 +238,7 @@ GameLoop:
jsr RenderPathway
.dontRenderPathway:
jsr PlayNextSound
bra GameLoop
@@ -333,9 +333,7 @@ InstallNextLevel:
LevelComplete:
PlaySound Yay
if BALOON_BOB=1
jsr DisableBaloon
endif
jsr ResetBobs
jsr ResetItems
jsr HidePlayer
jsr SelectNextPlayerSprite
@@ -520,9 +518,7 @@ BigBang:
PlaySound Falling
jsr WaitVerticalBlank
if BALOON_BOB=1
jsr DisableBaloon
endif
jsr ResetBobs
jsr PlayNextSound
jsr ResetItems
move.w #0,moving
+18 -12
View File
@@ -2,6 +2,7 @@
xdef SwitchBuffers
xdef SwitchBackgroundBuffers
xdef SwitchBackgroundBuffers2
xdef PokePanelBitplanePointers
@@ -29,26 +30,17 @@ SwitchBuffers:
bsr PokeBitplanePointers
SwitchBackgroundBuffers:
move.l backgroundScrollX,d0
lsr.w #BACKGROUND_SCROLL_SHIFT_CONVERT,d0 ; convert to pixels
lsr.w #3,d0 ; bytes to scroll
if BALOON_BOB=1
move.l baloonSaveOffscreen,a0
move.l baloonSaveOnscreen,baloonSaveOffscreen
move.l a0,baloonSaveOnscreen
move.l baloonLastSaveOffscreen,a0
move.l baloonLastSaveOnscreen,baloonLastSaveOffscreen
move.l a0,baloonLastSaveOnscreen
endif
eor.l #4,bobBufferOffset
move.l backgroundOffscreen,a0
move.l backgroundOnscreen,backgroundOffscreen
move.l a0,backgroundOnscreen
move.l a0,a1
lea copperListBpl2Ptr,a0
bsr.s PokeBitplanePointers
@@ -59,10 +51,24 @@ SwitchBackgroundBuffers:
lea copperListBpl2Ptr2_MP,a0
bsr.s PokeBitplanePointers
jsr SwitchItemSpriteBuffers
rts
SwitchBackgroundBuffers2:
move.l backgroundScrollX,d0
lsr.w #BACKGROUND_SCROLL_SHIFT_CONVERT,d0 ; convert to pixels
lsr.w #3,d0 ; bytes to scroll
eor.l #4,bobBufferOffset
move.l backgroundOffscreen,a0
move.l backgroundOnscreen,backgroundOffscreen
move.l a0,backgroundOnscreen
move.l a0,a1
rts
PokeBitplanePointers:
; d0 = frame offset in bytes
; a0 = BPLP copper list address
+21 -3
View File
@@ -6,9 +6,16 @@
SPLASH_COLOR_DEPTH equ 5
SPLASH_SCREEN_WIDTH_BYTES equ 40
ReloadSplashScreen:
move.l #endDiskSplash-diskSplash,d0
move.l #splash,a0
move.l #diskSplash,a1
jsr LoadDiskData
rts
ShowSplash:
lea CUSTOM,a6
;; set up playfield
move.w #(RASTER_Y_START<<8)|RASTER_X_START,DIWSTRT(a6)
move.w #((RASTER_Y_STOP-256)<<8)|(RASTER_X_STOP-256),DIWSTOP(a6)
@@ -20,8 +27,10 @@ ShowSplash:
move.w #SPLASH_SCREEN_WIDTH_BYTES*SPLASH_COLOR_DEPTH-SPLASH_SCREEN_WIDTH_BYTES,BPL1MOD(a6)
move.w #SPLASH_SCREEN_WIDTH_BYTES*SPLASH_COLOR_DEPTH-SPLASH_SCREEN_WIDTH_BYTES,BPL2MOD(a6)
bsr ReloadSplashScreen
;; poke bitplane pointers
lea splash(pc),a1
lea splash,a1
lea splashCopperListBplPtr(pc),a2
moveq #SPLASH_COLOR_DEPTH-1,d0
.bitplaneloop:
@@ -70,5 +79,14 @@ splashCopperListBplPtr:
dc.w BPL6PTH,0
dc.l $fffffffe
splash:
section .bss
splash:
ds.b endDiskSplash-diskSplash
cnop 0,1024
section .noload
diskSplash:
incbin "out/splash.bin"
endDiskSplash:
cnop 0,512