mirror of
https://frontier.innolan.net/github/AmigaExamples.git
synced 2026-09-12 07:41:42 +00:00
wip - more generic background bobs
This commit is contained in:
+5
-6
@@ -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
|
||||
|
||||
@@ -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
@@ -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
@@ -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
|
||||
@@ -170,9 +170,6 @@ BlueFill:
|
||||
jsr WaitVerticalBlank
|
||||
jsr SwitchBuffers
|
||||
;; jsr InitialiseBackground
|
||||
if BALOON_BOB=1
|
||||
jsr DisableBaloon
|
||||
endif
|
||||
movem.l (sp)+,d0-a6
|
||||
rts
|
||||
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
|
||||
Reference in New Issue
Block a user