1
0
mirror of https://frontier.innolan.net/github/AmigaExamples.git synced 2025-11-21 03:31:10 +00:00

wip baloon bob

This commit is contained in:
alpine9000
2016-05-21 11:13:42 +10:00
parent f857e6cf1e
commit 60c26bb3ad
13 changed files with 344 additions and 43 deletions

3
028.bs/.gitignore vendored
View File

@ -1,4 +1,3 @@
assets/P61.placeholder
assets/P61.song1
assets/P61.*
bin
save

View File

@ -12,7 +12,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
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
IMAGES=foreground.png \
background.png \
@ -71,11 +71,12 @@ IMAGES=foreground.png \
font8x8.png\
font8x85.png\
splash.png\
splashSave.png
splashSave.png\
baloonMask.png
IMAGEDATA=$(addprefix out/, $(IMAGES:.png=.bin))
VASM_EXTRA_ARGS=-DTIMING_TEST=0 -DSFX=1
VASM_EXTRA_ARGS=-DTIMING_TEST=0 -DSFX=1 -DBALOON_BOB=1
LINKER_OPTIONS=-T link.script.x
@ -196,6 +197,10 @@ 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/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

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=$800940D;$9409;$8000 ;CHANGE! to the USE hexcode from P61con for a big
usecode=-1;$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.

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@ -4,8 +4,8 @@
xdef RenderNextBackgroundFrame
xdef backgroundScrollX
xdef backgroundOnscreen
xdef backgroundOffscreen
xdef backgroundOffscreen
xdef backgroundTilemap
InitialiseBackground:
move.l #0,backgroundScrollX
@ -32,10 +32,21 @@ RenderBackgroundTile:
add.l d0,a0
lea backgroundTilemap,a1
add.l #BITPLANE_WIDTH_BYTES-2,a0 ; dest
add.w (a2),a1 ; source tile
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
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
@ -57,10 +68,15 @@ RenderNextBackgroundFrame:
bne .skip
move.l #0,backgroundScrollX
.skip:
bsr RenderBackgroundTile
if BALOON_BOB=1
jsr RenderBaloon
endif
bsr RenderBackgroundTile
rts
backgroundScrollX:
dc.l 0
backgroundTilemap:
@ -72,6 +88,7 @@ backgroundOnscreen:
dc.l backgroundBitplanes1
backgroundOffscreen:
dc.l backgroundBitplanes2
section .bss
backgroundBitplanes1:
@ -81,5 +98,4 @@ backgroundBitplanes2:
ds.b IMAGESIZE
ds.b LINESIZE*10

View File

@ -5,7 +5,7 @@
</tileset>
<layer name="background" width="200" height="16">
<data encoding="base64" compression="zlib">
eJztmslqxDAMhlPoHFrodIEuh+7tYbq8//NVhQoGN14k/ZacMIfvEEKwtctydtM07ZS8EK+G76M5IU4N358RW+KcuBhAHolsR8C1vPWw+YP9j597raeV74P4BKx/XHmfs6XVLpfElWGf18QNcUvcAe2ByDtS2Sy6lehhzta1te6TZ44H9r/9+NiA6Wnn3kTv+4F4JJ6IZ8F3tdzNds/VAI98LdGtVg9aO7LvvhHvU//4sMpXoqctLftOc5KX30nI1QCPvNDTJ6xreceHxpdaic7xa9wrwnctNpViPeelsO9+Ed9TfHxE23JJfnfgP7k6WDt35oiuH5p4R8xD0HkmEo0s3vK39JM1H46YYbKeouLDOvvQErWullKPopEFJX9rnCH6SdQMM4V9v6SnNfRXvZDmWml9W/LdTmucjdxPsu/PvYvur5YAIteWeodeeRGFtne3MMp9akR8eM4zDiwTa05CzQfZd0frr7Txv4bY87gbiagJnqD6uVH7q5HuB7zv8lCyS/dt6Wm8dBT1/1VU/cidZT3Oc63nYu9YRcku3belp2ldy1rfEbaQ5IFR64cWyeyo9VyMjlXr/U2rfUf+b2NOJ6yXUt7SrJP2kqU8kNan6PqxBrzPPNF3N8j/1eeInOel9Snnu+jY+OUH2JqqXQ==
eJztmsluAjEMhqdSObTqLnU5dN9EC+//fDUqlkbpZCa2/9gZyuETIAGO4zXOLLuuWyp5IV4Nv4/miDg2/P6UOCPOiYsG9JHodgCU5b0Piy3sf/y5ljytfl/Et0Huevt6OPG9nC2tdrkkrgTfT9d5TdwQt8Qd0B6IvCPVzbK3kn0YsvWUrPvkM8cD+18/PhZgato55Rn8f5Z1nwDkPxCPxJNQt6nczXbP1QCPfC3ZW+0+aO3IvvtGvHe4+Pjsvf/o/adVvzFq2tKy7jQnefmdhFwN8MhnNX3CKqtWfOTqh8aXSvGqTQjmslaE7+ZsiqirKdZzXgr77qr77dGj4yPalnPyuz1/ydXBqXNnjuj6oYl3zTxkDZDbKhpdvPUv6SenfDhihsn7FBUf1tlHCUN13EMukrG+U6MLSv/SOEP0k9YZZg72/bF92oX+qhbSXCutb3O+2ymNs5b7yY3v585C0f3VHEDk2rHeoVZeRKHt3S20cp8aER+WGdWe/4E1J6Hmg+y7rfVX2vjfhdjzuBvhmlBjxtoCqH6u1f6qpfsB77s8lO7SdVt6Gq89inr+Kqp+5M6yHue50nOxd6yidJeu29LTlMqy1neELSR5oNX6oUUyOyo9F6Nj1fo8a6l9W35uY2hPeF/G8pZGTjpfGMsDaX2Krh+7gPeZJ/ruBvm8+hCR87y0PuV8Fx0bG34AHDOqDg==
</data>
</layer>
</map>

254
028.bs/baloon.s Normal file
View File

@ -0,0 +1,254 @@
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

View File

@ -169,7 +169,10 @@ BlueFill:
jsr BlitFillColor
jsr WaitVerticalBlank
jsr SwitchBuffers
jsr InitialiseBackground
;; jsr InitialiseBackground
if BALOON_BOB=1
jsr DisableBaloon
endif
movem.l (sp)+,d0-a6
rts

View File

@ -49,8 +49,9 @@ Entry:
jsr ShowSplash
MainMenu:
jsr ShowMenu
jsr BlueFill
jsr BlueFill
jsr InitialiseBackground
;; d0 - fg bitplane pointer offset
;; d1 - bg bitplane pointer offset
@ -162,12 +163,15 @@ FadeInLoop:
move.l #0,verticalBlankCount
move.l #1,frameCount
move.l #FOREGROUND_SCROLL_PIXELS,foregroundScrollPixels
if BALOON_BOB=1
jsr EnableBaloon
endif
bra GameLoop
.c1:
bra FadeInLoop
GameLoop:
GameLoop:
move.l verticalBlankCount,d0
move.l frameCount,d1
cmp.l d1,d0
@ -315,6 +319,9 @@ InstallNextLevel:
LevelComplete:
PlaySound Yay
if BALOON_BOB=1
jsr DisableBaloon
endif
jsr ResetItems
jsr HidePlayer
jsr SelectNextPlayerSprite
@ -498,7 +505,10 @@ BigBang:
.scrollFinished:
PlaySound Falling
jsr WaitVerticalBlank
jsr WaitVerticalBlank
if BALOON_BOB=1
jsr DisableBaloon
endif
jsr PlayNextSound
jsr ResetItems
move.w #0,moving

View File

@ -19,14 +19,14 @@ SwitchBuffers:
move.l a0,a1
lea copperListBpl1Ptr,a0
bsr.s PokeBitplanePointers
bsr PokeBitplanePointers
lea copperListBpl1Ptr_MP,a0
bsr.s PokeBitplanePointers
bsr PokeBitplanePointers
add.l #BITPLANE_WIDTH_BYTES*SCREEN_BIT_DEPTH*(96-1),d0
lea copperListBpl1Ptr2_MP,a0
bsr.s PokeBitplanePointers
bsr PokeBitplanePointers
SwitchBackgroundBuffers:
@ -34,6 +34,16 @@ SwitchBackgroundBuffers:
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
move.l backgroundOffscreen,a0
move.l backgroundOnscreen,backgroundOffscreen
move.l a0,backgroundOnscreen

View File

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<map version="1.0" orientation="orthogonal" renderorder="left-down" width="25" height="8" tilewidth="16" tileheight="16" nextobjectid="1">
<tileset firstgid="1" name="items" tilewidth="16" tileheight="16" tilecount="320" columns="20">
<image source="../assets/items.png" trans="000000" width="320" height="256"/>
</tileset>
<tileset firstgid="321" name="foreground" tilewidth="16" tileheight="16" tilecount="320" columns="20">
<image source="../assets/assets.png" width="320" height="256"/>
</tileset>
<layer name="foreground" width="25" height="8">
<data encoding="base64" compression="zlib">
eJxzZ2RgqGKCYEckNgi7o/HJlasD8p2AOAwLTa5cJZqdWUCx30CcC2SbM6Gqz8JhBiE5dDuQ3SOLZg9IjhMqhkwXQ/XtJMEfYWj2gMzIhco9h4rFMyFomD+UgWxDIOaHqofpw+cPcuIDZE8kE2n+oEV8RONJg9SSAwC2JUt4
</data>
</layer>
<layer name="pathway" width="25" height="8">
<data encoding="base64" compression="zlib">
eJxjYBgFo2AU4AIAAyAAAQ==
</data>
</layer>
<layer name="items" width="25" height="8">
<data encoding="base64" compression="zlib">
eJxjYBgYIIVHjpEM8xihmBuHPDMSW5oMN8HsQKYJqWUhQh0x9sGAABZ5RjQ5GJ+XBHPRAQcR9rARMIMcwE8DMykFAFiPAMk=
</data>
</layer>
</map>

View File

@ -23,10 +23,6 @@ module
section .noload
cnop 0,512
diskmodule:
if SFX=1
incbin "assets/P61.placeholder"
else
incbin "assets/P61.song1"
endif
incbin "assets/P61.jmd-songA"
cnop 0,512
enddiskmodule:

View File

@ -30,7 +30,6 @@ PlayNextSound:
xdef PlayChachingSound
xdef PlayWhooshSound
xdef PlayYaySound
xdef PlayZapSound
PlayJumpSound:
lea jump(pc),a1
@ -82,16 +81,6 @@ PlayYaySound:
move.w #(DMAF_AUD3|DMAF_SETCLR),DMACON(a6)
rts
PlayZapSound:
KillSound
lea zap,a1
move.l a1,AUD3LCH(a6)
move.w #124,AUD3PER(a6)
move.w #64,AUD3VOL(a6)
move.w #(endZap-zap)/2,AUD3LEN(a6) ;Set length in words
move.w #(DMAF_AUD3|DMAF_SETCLR),DMACON(a6)
rts
align 4
jump:
incbin "out/jump.raw"
@ -112,11 +101,6 @@ endWhoosh:
yay:
incbin "out/yay.raw"
endYay:
zap:
;; incbin "out/zap.raw"
incbin "out/yay.raw"
endZap:
align 4
align 2
emptySound: