simple menu screen
This commit is contained in:
parent
50b54f3d80
commit
8def0bd2aa
|
@ -11,7 +11,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/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
|
||||
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
|
||||
|
||||
IMAGES=foreground.png \
|
||||
background.png \
|
||||
|
@ -66,7 +66,9 @@ IMAGES=foreground.png \
|
|||
sprite_fallingTank-3.png \
|
||||
sprite_fallingTank-4.png \
|
||||
font8x8.png\
|
||||
splash.png
|
||||
font8x85.png\
|
||||
splash.png\
|
||||
splashSave.png
|
||||
|
||||
IMAGEDATA=$(addprefix out/, $(IMAGES:.png=.bin))
|
||||
|
||||
|
@ -177,8 +179,18 @@ out/sprite_arrow%.png: assets/assets.png
|
|||
out/font%.bin: assets/font%.png
|
||||
$(IMAGECON) --input $< $(IMAGECON_ARGS) --output-bitplanes --output-grey-palette-asm --output-palette-asm --output-palette --output out/font$* --colors=16 --use-palette assets/mpanel.pal --full-color-palette-file --output-mask --transparent-color=0,0,0 --output-png
|
||||
|
||||
out/font8x85.bin: assets/font8x8.png
|
||||
$(IMAGECON) --input $< $(IMAGECON_ARGS) --output-bitplanes --output-grey-palette-asm --output-palette-asm --output-palette --output out/font8x85 --colors=32 --use-palette assets/font8x85.pal --full-color-palette-file --output-mask --transparent-color=0,0,0 --output-png
|
||||
|
||||
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/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 --full-color-palette-file --output-png --output-copperlist
|
||||
$(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
|
||||
|
||||
out/menu-palette.s: assets/splash.png
|
||||
$(IMAGECON) --input $< $(IMAGECON_ARGS) --output-palette-asm --output-palette --output out/menu --colors=32 --output-copperlist --full-color-palette-file --darken=0.55
|
||||
|
||||
out/%_playarea_fade.s: out/%_bottom_section_playarea.pal ../tools/fade/out/fade
|
||||
../tools/fade/out/fade --from-grey --to=out/$*_bottom_section_playarea.pal --output=$*_playarea > out/$*_playarea_fade.s
|
||||
|
@ -225,6 +237,7 @@ out/yay.raw: assets/yay.wav
|
|||
out/main.o: $(IMAGEDATA) \
|
||||
out/levelA_foreground-map.s out/levelB_foreground-map.s \
|
||||
out/background-map.s Makefile link.script.x\
|
||||
out/menu-palette.s\
|
||||
out/paletteA_playarea_fade.s out/paletteA_flags_fade.s out/paletteA_foreground-palette-table.s out/paletteA_tileFade.s\
|
||||
out/paletteB_playarea_fade.s out/paletteB_flags_fade.s out/paletteB_foreground-palette-table.s out/paletteB_tileFade.s\
|
||||
out/panelFade.s out/jump.raw out/falling.raw out/chaching.raw out/whoosh.raw out/yay.raw
|
||||
|
|
|
@ -39,7 +39,7 @@ p61system=0 ;1=system-friendly. Use for DOS/Workbench programs.
|
|||
|
||||
p61exec =0 ;0 if execbase is destroyed, such as in a trackmo.
|
||||
|
||||
p61fade =0 ;enable channel volume fading from your demo
|
||||
p61fade =1 ;enable channel volume fading from your demo
|
||||
|
||||
if SFX=1
|
||||
channels=3 ;<4 for game sound effects in the higher channels. Incompatible
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
include "P6112-Options.i"
|
||||
xdef P61_Init
|
||||
xdef P61_Music
|
||||
xdef P61_Master
|
||||
; #-----+-----------------------------------------#
|
||||
; |Name:| P6112 - Optimized Player 6.1 Playroutine|
|
||||
; +-----+-----------------------------------------+
|
||||
|
|
|
@ -0,0 +1,32 @@
|
|||
000 000 000 255
|
||||
000 000 000 255
|
||||
000 000 000 255
|
||||
000 000 000 255
|
||||
000 000 000 255
|
||||
000 000 000 255
|
||||
000 000 000 255
|
||||
000 000 000 255
|
||||
000 000 000 255
|
||||
000 000 000 255
|
||||
000 000 000 255
|
||||
000 000 000 255
|
||||
000 000 000 255
|
||||
000 000 000 255
|
||||
000 000 000 255
|
||||
000 000 000 255
|
||||
000 000 000 255
|
||||
000 000 000 255
|
||||
000 000 000 255
|
||||
000 000 000 255
|
||||
000 000 000 255
|
||||
000 000 000 255
|
||||
000 000 000 255
|
||||
000 000 000 255
|
||||
000 000 000 255
|
||||
000 000 000 255
|
||||
000 000 000 255
|
||||
000 000 000 255
|
||||
000 000 000 255
|
||||
000 000 000 255
|
||||
000 000 000 255
|
||||
255 255 255 255
|
|
@ -0,0 +1,117 @@
|
|||
include "includes.i"
|
||||
xdef DrawMaskedText85
|
||||
|
||||
BLIT_LF_MINTERM equ $ca ; cookie cut
|
||||
BLIT_WIDTH_WORDS equ 2 ; blit 2 words to allow shifting
|
||||
BLIT_WIDTH_BYTES equ 4
|
||||
FONT_HEIGHT equ 8
|
||||
FONT_WIDTH equ 8
|
||||
FONTMAP_WIDTH_BYTES equ 32
|
||||
_SCREEN_BIT_DEPTH equ 5
|
||||
_BITPLANE_WIDTH_BYTES equ 320/8
|
||||
|
||||
DrawMaskedText85:
|
||||
;; a0 - bitplane
|
||||
;; a1 - text
|
||||
;; d0 - xpos
|
||||
;; d1 - ypos
|
||||
movem.l d0-d7/a0-a4,-(sp)
|
||||
WaitBlitter
|
||||
|
||||
;; blitter config that is shared for every character
|
||||
move.w #BC0F_SRCA|BC0F_SRCB|BC0F_SRCC|BC0F_DEST|BLIT_LF_MINTERM,d6 ; BLTCON0 value (masked version)
|
||||
move.w #FONTMAP_WIDTH_BYTES-BLIT_WIDTH_BYTES,BLTAMOD(a6) ; A modulo (only used for masked version)
|
||||
move.w #FONTMAP_WIDTH_BYTES-BLIT_WIDTH_BYTES,BLTBMOD(a6) ; B modulo
|
||||
move.w #_BITPLANE_WIDTH_BYTES-BLIT_WIDTH_BYTES,BLTCMOD(a6) ; C modulo
|
||||
move.w #_BITPLANE_WIDTH_BYTES-BLIT_WIDTH_BYTES,BLTDMOD(a6) ; D modulo
|
||||
mulu.w #_BITPLANE_WIDTH_BYTES*_SCREEN_BIT_DEPTH,d1 ; ypos bytes
|
||||
move.w #$0000,BLTALWM(a6) ; mask out extra word used for shifting
|
||||
move.w #$ffff,BLTADAT(a6) ; preload source mask so only BLTA?WM mask is used
|
||||
move.l a1,a3 ; character pointer
|
||||
move.l #font8x85,a5 ; font pointer
|
||||
move.l #fontMask,d7 ; font mask pointer
|
||||
move.w #FONTMAP_WIDTH_BYTES*_SCREEN_BIT_DEPTH*FONT_HEIGHT,d3 ; bytes per font line
|
||||
.loop:
|
||||
clr.l d2
|
||||
move.b (a3)+,d2 ; get next character
|
||||
cmp.b #0,d2 ; 0 terminates the string
|
||||
beq .done
|
||||
move.l a0,a4 ; bitplane pointer
|
||||
bsr DrawChar8 ; draw it
|
||||
add.l #FONT_WIDTH,d0 ; increment the x position
|
||||
bra .loop
|
||||
.done:
|
||||
movem.l (sp)+,d0-d7/a0-a4
|
||||
rts
|
||||
|
||||
DrawChar8:
|
||||
;; kills d2,d4,d5,a1,a2,a4
|
||||
;; d0 - xpos
|
||||
;; d1 - ypos bytes
|
||||
;; d2* - char
|
||||
;; d3 - bytes per font line
|
||||
;; d6 - bltcon0 value
|
||||
;; a4* - bitplane
|
||||
;; a5 - #font
|
||||
;; d7 - #fontMask
|
||||
|
||||
sub.w #' ',d2 ; index = char - ' '
|
||||
move.w d2,d5
|
||||
lsr.w #5,d5 ; char / 32 = fontmap line
|
||||
andi.w #$1f,d2 ; char index in line (char index - start of line index)
|
||||
add.l #1,d5 ; while we have a weird font image, ' ' starts on second line
|
||||
move.l a5,a1 ; #font
|
||||
mulu.w d3,d5 ; d5 *= #FONTMAP_WIDTH_BYTES*_SCREEN_BIT_DEPTH*FONT_HEIGHT
|
||||
move.l d7,a2 ; #fontMask
|
||||
add.w d5,a2 ; add y offset in lines to fontMask address
|
||||
add.w d5,a1 ; add y offset in lines to font address
|
||||
add.w d2,a1 ; add offset into font
|
||||
add.l d2,a2 ; add offset into mask
|
||||
|
||||
.blitChar8:
|
||||
;; kills a4,d2,d4,d5
|
||||
;; d0 - xpos
|
||||
;; d1 - ypos bytes
|
||||
;; d2.0 - odd character = 1, even character = 0
|
||||
;; d3 - bytes per font line
|
||||
;; d6 - bltcon0 value
|
||||
;; a4 - display
|
||||
;; a1 - object
|
||||
;; a2 - mask
|
||||
|
||||
move.l d0,d4 ; xpos
|
||||
move.l d0,d5 ; xpos
|
||||
lsr.w #3,d4 ; d4 = xpos bytes
|
||||
|
||||
WaitBlitter
|
||||
|
||||
btst #0,d2 ; check if odd or even char
|
||||
beq .evenChar ;
|
||||
.oddChar
|
||||
subq #8,d5 ; offset the x position for the odd character
|
||||
move.w #$00FF,BLTAFWM(a6) ; select the second (odd) character in the word
|
||||
subq #1,a4 ; move the destination pointer left by one byte
|
||||
bra .continue
|
||||
.evenChar:
|
||||
move.w #$FF00,BLTAFWM(a6) ; select the first character in the word
|
||||
.continue:
|
||||
;; this shift will give us the bits to shift (bits 0-3) in bits (12-15) of d5
|
||||
swap d5 ; d5 << 12
|
||||
lsr.l #4,d5 ;
|
||||
move.w d5,BLTCON1(A6) ; set the shift bits 12-15, bits 00-11 cleared
|
||||
move.l a2,BLTAPTH(a6) ; mask bitplane
|
||||
move.l a1,BLTBPTH(a6) ; source bitplane
|
||||
or.w d6,d5 ; d5 = BLTCON0 value
|
||||
move.w d5,BLTCON0(a6) ; set minterm, dma channel and shift
|
||||
add.l d4,a4 ; dest += XPOS_BYTES
|
||||
add.l d1,a4 ; dest += YPOS_BYTES
|
||||
move.l a4,BLTCPTH(a6) ; background top left corner
|
||||
move.l a4,BLTDPTH(a6) ; destination top left corner
|
||||
|
||||
move.w #(FONT_HEIGHT*_SCREEN_BIT_DEPTH)<<6|(BLIT_WIDTH_WORDS),BLTSIZE(a6) ;rectangle size, starts blit
|
||||
rts
|
||||
|
||||
font8x85:
|
||||
incbin "out/font8x85.bin"
|
||||
fontMask:
|
||||
incbin "out/font8x85-mask.bin"
|
|
@ -27,6 +27,8 @@
|
|||
xdef livesCounterText
|
||||
xdef panel
|
||||
|
||||
xdef nextLevelInstaller
|
||||
xdef levelInstallers
|
||||
|
||||
byteMap:
|
||||
dc.l Entry
|
||||
|
@ -44,10 +46,10 @@ Entry:
|
|||
move.l a3,LVL3_INT_VECTOR
|
||||
|
||||
jsr StartMusic
|
||||
jsr ShowSplash
|
||||
if SPLASH_USE_FOREGROUND=1
|
||||
jsr InstallBlackPalette
|
||||
endif
|
||||
jsr ShowSplash
|
||||
MainMenu:
|
||||
jsr ShowMenu
|
||||
|
||||
jsr BlueFill
|
||||
|
||||
;; d0 - fg bitplane pointer offset
|
||||
|
@ -66,9 +68,9 @@ Entry:
|
|||
lea panel,a1
|
||||
jsr PokePanelBitplanePointers
|
||||
|
||||
jsr InitialiseMessagePanel
|
||||
|
||||
jsr ShowMessagePanel
|
||||
jsr InitialiseMessagePanel
|
||||
lea nullText,a1
|
||||
jsr Message
|
||||
|
||||
jsr Init ; enable the playfield
|
||||
jsr InstallSpriteColorPalette
|
||||
|
@ -279,25 +281,19 @@ Update:
|
|||
InitialiseNewGame:
|
||||
jsr InitialiseItems
|
||||
jsr InitialisePlayer
|
||||
jsr InstallLevelA
|
||||
jsr InstallNextLevel
|
||||
bra Reset
|
||||
|
||||
|
||||
GameOver:
|
||||
move.l #levelInstallers,nextLevelInstaller
|
||||
lea gameOverMessage,a1
|
||||
jsr Message
|
||||
jsr WaitForJoystick
|
||||
bra InitialiseNewGame
|
||||
bra MainMenu
|
||||
|
||||
|
||||
LevelComplete:
|
||||
PlaySound Yay
|
||||
jsr ResetItems
|
||||
jsr HidePlayer
|
||||
jsr SelectNextPlayerSprite
|
||||
move.l levelCompleteMessage,a1
|
||||
jsr Message
|
||||
|
||||
InstallNextLevel:
|
||||
move.l nextLevelInstaller,a0
|
||||
cmp.l #0,(a0)
|
||||
bne .dontResetLevelInstaller
|
||||
|
@ -308,6 +304,17 @@ LevelComplete:
|
|||
jsr (a1)
|
||||
add.l #4,a0
|
||||
move.l a0,nextLevelInstaller
|
||||
rts
|
||||
|
||||
LevelComplete:
|
||||
PlaySound Yay
|
||||
jsr ResetItems
|
||||
jsr HidePlayer
|
||||
jsr SelectNextPlayerSprite
|
||||
move.l levelCompleteMessage,a1
|
||||
jsr Message
|
||||
|
||||
bsr InstallNextLevel
|
||||
|
||||
jsr WaitForJoystick
|
||||
|
||||
|
@ -673,33 +680,6 @@ InstallFlagsGreyPalette:
|
|||
dbra d0,.loop
|
||||
rts
|
||||
|
||||
if SPLASH_USE_FOREGROUND=1
|
||||
InstallBlackPalette:
|
||||
move.w #$000,COLOR00(a6)
|
||||
move.w #$000,COLOR01(a6)
|
||||
move.w #$000,COLOR02(a6)
|
||||
move.w #$000,COLOR03(a6)
|
||||
move.w #$000,COLOR04(a6)
|
||||
move.w #$000,COLOR05(a6)
|
||||
move.w #$000,COLOR06(a6)
|
||||
move.w #$000,COLOR07(a6)
|
||||
move.w #$000,COLOR08(a6)
|
||||
move.w #$000,COLOR09(a6)
|
||||
move.w #$000,COLOR10(a6)
|
||||
move.w #$000,COLOR11(a6)
|
||||
move.w #$000,COLOR12(a6)
|
||||
move.w #$000,COLOR13(a6)
|
||||
move.w #$000,COLOR14(a6)
|
||||
move.w #$000,COLOR15(a6)
|
||||
move.w #$000,COLOR16(a6)
|
||||
move.w #$000,COLOR17(a6)
|
||||
move.w #$000,COLOR18(a6)
|
||||
move.w #$000,COLOR19(a6)
|
||||
move.w #$000,COLOR20(a6)
|
||||
rts
|
||||
endif
|
||||
|
||||
|
||||
InstallTilePalette:
|
||||
move.l tileFade,tileFadePtr
|
||||
lea playAreaCopperPalettePtr2,a1
|
||||
|
@ -806,6 +786,9 @@ InstallFlagGreyPalette:
|
|||
|
||||
include "copper.i"
|
||||
|
||||
nullText:
|
||||
dc.b 0
|
||||
align 4
|
||||
player1Text:
|
||||
dc.b "P1"
|
||||
dc.b 0
|
||||
|
@ -919,22 +902,14 @@ levelInstallers:
|
|||
dc.l InstallLevelB
|
||||
dc.l 0
|
||||
nextLevelInstaller:
|
||||
dc.l levelInstallers+4
|
||||
dc.l levelInstallers
|
||||
panelFade:
|
||||
include "out/panelFade.s"
|
||||
|
||||
if SPLASH_USE_FOREGROUND=1
|
||||
foregroundBitplanes1:
|
||||
incbin "out/splash.bin"
|
||||
.endSplash
|
||||
ds.b (IMAGESIZE*2)-(.endSplash-foregroundBitplanes1)
|
||||
endif
|
||||
|
||||
section .bss
|
||||
if SPLASH_USE_FOREGROUND=0
|
||||
foregroundBitplanes1:
|
||||
ds.b IMAGESIZE*2
|
||||
endif
|
||||
playAreaPalette:
|
||||
dc.l 0
|
||||
playareaFade:
|
||||
|
|
|
@ -0,0 +1,297 @@
|
|||
include "includes.i"
|
||||
|
||||
xdef ShowMenu
|
||||
|
||||
SPLASH_COLOR_DEPTH equ 5
|
||||
SPLASH_SCREEN_WIDTH_BYTES equ 40
|
||||
|
||||
PLAY_COPPER_WORD equ $bad1
|
||||
MUSIC_COPPER_WORD equ PLAY_COPPER_WORD+$2000
|
||||
DIFFICULTY_COPPER_WORD equ PLAY_COPPER_WORD+$1000
|
||||
|
||||
MENU_SELECTED_TOP_COLOR equ $be0 ;$e71
|
||||
MENU_SELECTED_BOTTOM_COLOR equ $9d4 ;$fe7
|
||||
MENU_TEXT_COLOR equ $7ef
|
||||
|
||||
ShowMenu:
|
||||
lea CUSTOM,a6
|
||||
|
||||
jsr WaitVerticalBlank
|
||||
;; set up default palette
|
||||
include "out/menu-palette.s"
|
||||
|
||||
;; 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)
|
||||
|
||||
move.w #(RASTER_X_START/2-SCREEN_RES),DDFSTRT(a6)
|
||||
move.w #(RASTER_X_START/2-SCREEN_RES)+(8*((SCREEN_WIDTH/16)-1)),DDFSTOP(a6)
|
||||
|
||||
move.w #(SPLASH_COLOR_DEPTH<<12)|$200,BPLCON0(a6)
|
||||
move.w #0,BPLCON1(a6)
|
||||
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)
|
||||
|
||||
;; poke bitplane pointers
|
||||
lea splash,a1
|
||||
lea splashCopperListBplPtr(pc),a2
|
||||
moveq #SPLASH_COLOR_DEPTH-1,d0
|
||||
.bitplaneloop:
|
||||
move.l a1,d1
|
||||
move.w d1,2(a2)
|
||||
swap d1
|
||||
move.w d1,6(a2)
|
||||
lea SPLASH_SCREEN_WIDTH_BYTES(a1),a1 ; bit plane data is interleaved
|
||||
addq #8,a2
|
||||
dbra d0,.bitplaneloop
|
||||
|
||||
;; install copper list, then enable dma
|
||||
lea splashCopperList(pc),a0
|
||||
move.l a0,COP1LC(a6)
|
||||
|
||||
;; jsr WaitVerticalBlank
|
||||
move.w #(DMAF_BLITTER|DMAF_SETCLR!DMAF_COPPER!DMAF_RASTER!DMAF_MASTER),DMACON(a6)
|
||||
move.w #(INTF_SETCLR|INTF_VERTB|INTF_INTEN),INTENA(a6)
|
||||
|
||||
bsr RefreshDifficulty
|
||||
bsr RenderMenu
|
||||
|
||||
.wait:
|
||||
jsr WaitVerticalBlank
|
||||
jsr _ProcessJoystick
|
||||
rts
|
||||
|
||||
|
||||
RenderMenu:
|
||||
lea splashSave,a0
|
||||
lea splash,a2
|
||||
add.l #(150*40*5)+((320-96)/16),a2
|
||||
|
||||
WaitBlitter
|
||||
move.w #(BC0F_SRCA|BC0F_DEST|$f0),BLTCON0(A6)
|
||||
move.w #0,BLTCON1(a6)
|
||||
move.l #$ffffffff,BLTAFWM(a6) ;no masking of first/last word
|
||||
move.w #0,BLTAMOD(a6) ;A modulo
|
||||
move.w #(320-96)/8,BLTDMOD(a6) ;D modulo
|
||||
move.l a0,BLTAPTH(a6) ;source graphic top left corner
|
||||
move.l a2,BLTDPTH(a6) ;destination top left corner
|
||||
move.w #((64*5)<<6)|(96/16),BLTSIZE(a6)
|
||||
|
||||
lea menu,a1
|
||||
lea splash,a0
|
||||
move.w #(320/2)-(6*8)+4,d0
|
||||
move.w #150,d1
|
||||
jsr DrawMaskedText85
|
||||
lea difficulty,a1
|
||||
move.w #(320/2)-(6*8),d0
|
||||
add.w #16,d1
|
||||
jsr DrawMaskedText85
|
||||
lea music,a1
|
||||
add.w #16,d1
|
||||
jsr DrawMaskedText85
|
||||
lea credits,a1
|
||||
add.w #16,d1
|
||||
move.w #(320/2)-(6*8)+4,d0
|
||||
jsr DrawMaskedText85
|
||||
rts
|
||||
|
||||
MenuUp:
|
||||
cmp.w #PLAY_COPPER_WORD,selectedStartPtr
|
||||
beq .done
|
||||
PlaySound Jump
|
||||
sub.w #$1000,selectedStartPtr
|
||||
sub.w #$1000,selectedStartPtr2
|
||||
sub.w #$1000,selectedEndPtr
|
||||
.done:
|
||||
rts
|
||||
|
||||
MenuDown:
|
||||
cmp.w #$ead1,selectedStartPtr
|
||||
beq .done
|
||||
PlaySound Jump
|
||||
add.w #$1000,selectedStartPtr
|
||||
add.w #$1000,selectedStartPtr2
|
||||
add.w #$1000,selectedEndPtr
|
||||
.done:
|
||||
rts
|
||||
|
||||
ToggleMusic:
|
||||
eor.w #64,P61_Master
|
||||
cmp.w #64,P61_Master
|
||||
beq .musicOn
|
||||
.musicOff:
|
||||
lea musicOff,a0
|
||||
lea music,a1
|
||||
bsr StrCpy
|
||||
bra .done
|
||||
.musicOn:
|
||||
lea musicOn,a0
|
||||
lea music,a1
|
||||
bsr StrCpy
|
||||
bra .done
|
||||
.done:
|
||||
bsr RenderMenu
|
||||
rts
|
||||
|
||||
ToggleDifficulty:
|
||||
cmp.l #levelInstallers,nextLevelInstaller
|
||||
beq .currentlyEasy
|
||||
.currentlyHard:
|
||||
move.l #levelInstallers,nextLevelInstaller
|
||||
bra RefreshDifficulty
|
||||
.currentlyEasy:
|
||||
move.l #levelInstallers+4,nextLevelInstaller
|
||||
bra RefreshDifficulty
|
||||
RefreshDifficulty:
|
||||
cmp.l #levelInstallers,nextLevelInstaller
|
||||
beq .easy
|
||||
.hard:
|
||||
lea difficultyHard,a0
|
||||
lea difficulty,a1
|
||||
bsr StrCpy
|
||||
bra .done
|
||||
.easy:
|
||||
lea difficultyEasy,a0
|
||||
lea difficulty,a1
|
||||
bsr StrCpy
|
||||
bra .done
|
||||
.done:
|
||||
bsr RenderMenu
|
||||
rts
|
||||
|
||||
ButtonPressed:
|
||||
cmp.w #PLAY_COPPER_WORD,selectedStartPtr
|
||||
beq .playButton
|
||||
cmp.w #MUSIC_COPPER_WORD,selectedStartPtr
|
||||
beq .musicButton
|
||||
cmp.w #DIFFICULTY_COPPER_WORD,selectedStartPtr
|
||||
beq .difficultyButton
|
||||
bra .done
|
||||
.difficultyButton:
|
||||
bsr ToggleDifficulty
|
||||
bra .done
|
||||
.musicButton:
|
||||
bsr ToggleMusic
|
||||
bra .done
|
||||
.done:
|
||||
bra _ProcessJoystick
|
||||
.playButton:
|
||||
rts
|
||||
|
||||
WaitForButtonRelease:
|
||||
.joystickPressed:
|
||||
jsr WaitVerticalBlank
|
||||
jsr PlayNextSound
|
||||
jsr ReadJoystick
|
||||
btst.b #0,joystick
|
||||
bne .joystickPressed
|
||||
rts
|
||||
|
||||
WaitForJoystickRelease:
|
||||
move.b joystickpos,-(sp)
|
||||
.wait:
|
||||
jsr WaitVerticalBlank
|
||||
jsr PlayNextSound
|
||||
jsr ReadJoystick
|
||||
move.b (sp),d0
|
||||
cmp.b joystickpos,d0
|
||||
beq .wait
|
||||
move.b (sp)+,d7
|
||||
rts
|
||||
|
||||
|
||||
_ProcessJoystick:
|
||||
bsr WaitForButtonRelease
|
||||
.wait:
|
||||
jsr ReadJoystick
|
||||
jsr WaitVerticalBlank
|
||||
jsr PlayNextSound
|
||||
btst.b #0,joystick
|
||||
bne .pressed
|
||||
cmp.b #1,joystickpos ; up
|
||||
bne .notUp
|
||||
bsr MenuUp
|
||||
bsr WaitForJoystickRelease
|
||||
.notUp:
|
||||
cmp.b #5,joystickpos ; down
|
||||
bne .notDown
|
||||
bsr MenuDown
|
||||
bsr WaitForJoystickRelease
|
||||
.notDown:
|
||||
bra .wait
|
||||
.pressed:
|
||||
bra ButtonPressed
|
||||
rts
|
||||
|
||||
StrCpy:
|
||||
;; a0 - src
|
||||
;; a1 - dest
|
||||
.loop:
|
||||
cmp.b #0,(a0)
|
||||
beq .done
|
||||
move.b (a0)+,(a1)+
|
||||
bra .loop
|
||||
.done:
|
||||
rts
|
||||
|
||||
menu:
|
||||
dc.b " PLAY NOW! "
|
||||
dc.b 0
|
||||
difficulty:
|
||||
dc.b "LEVEL - EASY"
|
||||
dc.b 0
|
||||
music:
|
||||
dc.b "MUSIC - ON "
|
||||
dc.b 0
|
||||
credits:
|
||||
dc.b " CREDITS "
|
||||
dc.b 0
|
||||
align 4
|
||||
|
||||
|
||||
difficultyEasy:
|
||||
dc.b "LEVEL - EASY"
|
||||
dc.b 0
|
||||
|
||||
difficultyHard:
|
||||
dc.b "LEVEL - HARD"
|
||||
dc.b 0
|
||||
|
||||
musicOn:
|
||||
dc.b "MUSIC - ON "
|
||||
dc.b 0
|
||||
musicOff:
|
||||
dc.b "MUSIC - OFF "
|
||||
dc.b 0
|
||||
|
||||
splashCopperList:
|
||||
splashCopperListBplPtr:
|
||||
dc.w BPL1PTL,0
|
||||
dc.w BPL1PTH,0
|
||||
dc.w BPL2PTL,0
|
||||
dc.w BPL2PTH,0
|
||||
dc.w BPL3PTL,0
|
||||
dc.w BPL3PTH,0
|
||||
dc.w BPL4PTL,0
|
||||
dc.w BPL4PTH,0
|
||||
dc.w BPL5PTL,0
|
||||
dc.w BPL5PTH,0
|
||||
dc.w BPL6PTL,0
|
||||
dc.w BPL6PTH,0
|
||||
|
||||
dc.w COLOR31,MENU_TEXT_COLOR
|
||||
selectedStartPtr:
|
||||
dc.w PLAY_COPPER_WORD,$fffe
|
||||
dc.w COLOR31,MENU_SELECTED_TOP_COLOR
|
||||
selectedStartPtr2:
|
||||
dc.w PLAY_COPPER_WORD+(($1000/4)*3),$fffe
|
||||
dc.w COLOR31,MENU_SELECTED_BOTTOM_COLOR
|
||||
|
||||
selectedEndPtr:
|
||||
dc.w PLAY_COPPER_WORD+$1000,$fffe
|
||||
dc.w COLOR31,MENU_TEXT_COLOR
|
||||
|
||||
dc.l $fffffffe
|
||||
|
||||
splashSave:
|
||||
incbin "out/splashSave.bin"
|
|
@ -1,7 +1,8 @@
|
|||
include "includes.i"
|
||||
|
||||
xdef ShowSplash
|
||||
|
||||
xdef splash
|
||||
|
||||
SPLASH_COLOR_DEPTH equ 5
|
||||
SPLASH_SCREEN_WIDTH_BYTES equ 40
|
||||
|
||||
|
@ -20,11 +21,7 @@ ShowSplash:
|
|||
move.w #SPLASH_SCREEN_WIDTH_BYTES*SPLASH_COLOR_DEPTH-SPLASH_SCREEN_WIDTH_BYTES,BPL2MOD(a6)
|
||||
|
||||
;; poke bitplane pointers
|
||||
if SPLASH_USE_FOREGROUND=1
|
||||
lea foregroundBitplanes1,a1
|
||||
else
|
||||
lea splash(pc),a1
|
||||
endif
|
||||
lea splashCopperListBplPtr(pc),a2
|
||||
moveq #SPLASH_COLOR_DEPTH-1,d0
|
||||
.bitplaneloop:
|
||||
|
@ -44,10 +41,13 @@ ShowSplash:
|
|||
;; set up default palette
|
||||
include "out/splash-palette.s"
|
||||
|
||||
lea COLOR31(a6),a0
|
||||
move.w #$f00,(a0)
|
||||
|
||||
jsr WaitVerticalBlank
|
||||
move.w #(DMAF_BLITTER|DMAF_SETCLR!DMAF_COPPER!DMAF_RASTER!DMAF_MASTER),DMACON(a6)
|
||||
move.w #(INTF_SETCLR|INTF_VERTB|INTF_INTEN),INTENA(a6)
|
||||
|
||||
|
||||
.wait:
|
||||
jsr WaitVerticalBlank
|
||||
jsr WaitForJoystick
|
||||
|
@ -70,7 +70,5 @@ splashCopperListBplPtr:
|
|||
dc.w BPL6PTH,0
|
||||
dc.l $fffffffe
|
||||
|
||||
if SPLASH_USE_FOREGROUND=0
|
||||
splash:
|
||||
incbin "out/splash.bin"
|
||||
endif
|
|
@ -22,7 +22,8 @@ imagecon_config_t config = {
|
|||
.overridePalette = 0,
|
||||
.paletteOffset = 0,
|
||||
.maskTransparentColor = 0,
|
||||
.fullColorPaletteFile = 0
|
||||
.fullColorPaletteFile = 0,
|
||||
.darken = 0
|
||||
};
|
||||
|
||||
|
||||
|
@ -51,6 +52,7 @@ usage()
|
|||
" --use-palette <palette file>\n"\
|
||||
" --full-color-palette-file\n"\
|
||||
" --palette-offset <index>\n"\
|
||||
" --darken <percentage>\n"\
|
||||
" --verbose\n", config.argv[0]);
|
||||
exit(1);
|
||||
}
|
||||
|
@ -506,6 +508,7 @@ main(int argc, char **argv)
|
|||
{"output", required_argument, 0, 'o'},
|
||||
{"colors", required_argument, 0, 'c'},
|
||||
{"input", required_argument, 0, 'i'},
|
||||
{"darken", required_argument, 0, 'd'},
|
||||
{"transparent-color", required_argument, 0, 't'},
|
||||
{0, 0, 0, 0}
|
||||
};
|
||||
|
@ -529,6 +532,11 @@ main(int argc, char **argv)
|
|||
case 'p':
|
||||
config.overridePalette = optarg;
|
||||
break;
|
||||
case 'd':
|
||||
if (sscanf(optarg, "%f", &config.darken) != 1) {
|
||||
abort_("invalid darken argument");
|
||||
}
|
||||
break;
|
||||
case 'l':
|
||||
if (sscanf(optarg, "%d", &config.paletteOffset) != 1) {
|
||||
abort_("invalid palette offset");
|
||||
|
|
|
@ -44,6 +44,7 @@ typedef struct {
|
|||
int quantize;
|
||||
int outputPng;
|
||||
int verbose;
|
||||
float darken;
|
||||
char** argv;
|
||||
} imagecon_config_t;
|
||||
|
||||
|
|
|
@ -89,6 +89,11 @@ palette_output(imagecon_image_t* ic, char* outFilename)
|
|||
}
|
||||
|
||||
for (int i = 0; i < (config.ehbMode ? ic->numColors/2 : ic->numColors); i++) {
|
||||
if (config.darken != 0) {
|
||||
ic->palette[i].r *= config.darken;
|
||||
ic->palette[i].g *= config.darken;
|
||||
ic->palette[i].b *= config.darken;
|
||||
}
|
||||
if (config.verbose) {
|
||||
printf("%02d: hex=%03x r=%03d g=%03d b=%03d a=%03d\n", i , RGB24TORGB12(ic->palette[i].r) << 8 | RGB24TORGB12(ic->palette[i].g) << 4 | RGB24TORGB12(ic->palette[i].b), ic->palette[i].r, ic->palette[i].g, ic->palette[i].b, ic->palette[i].a);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue