mirror of
https://github.com/blondie7575/GSCats.git
synced 2024-11-21 00:32:22 +00:00
438 lines
7.1 KiB
ArmAsm
438 lines
7.1 KiB
ArmAsm
;
|
|
; titleScreen
|
|
; A friendly place to start the game
|
|
;
|
|
; Created by Quinn Dunki on 7/23/23
|
|
;
|
|
|
|
.a16
|
|
.i16
|
|
|
|
titlePalette:
|
|
.word $06af,$0072,$0072,$0861,$0c93,$0eb4,$0d66,$0f9a,$0777,$0d00,$0bbb,$ddd,$007b,$0a5b,$0000,$0fff
|
|
|
|
TITLE_ANIMATION_FRAMES = 5
|
|
CAT_DELAY = 300
|
|
CAT0_VRAM = $5d79
|
|
CAT1_VRAM = $5da0
|
|
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
; titleScreen
|
|
;
|
|
; Shows the title screen and main game menu
|
|
;
|
|
titleScreen:
|
|
jsr setScanLineInterruptVector
|
|
;jsr setVBLInterruptVector
|
|
stz leftScreenEdge
|
|
|
|
; Copy title screen art from where it was loaded in bank 6
|
|
; This isn't fast, but doesn't need to be
|
|
ldx #0
|
|
|
|
titleScreenCopyLoop:
|
|
lda $060000,x
|
|
sta SHADOWVRAM,x
|
|
inx
|
|
inx
|
|
cpx #$7d00
|
|
bne titleScreenCopyLoop
|
|
|
|
; Set up sprite rendering
|
|
BITS8
|
|
lda #3
|
|
sta SpriteBankBank00+3 ; Tell compiled sprites what bank they are in
|
|
BITS16
|
|
|
|
; Set up audio
|
|
jsr initSoundSystem
|
|
|
|
; Render menu text
|
|
jsr titleScreenRenderMenu
|
|
|
|
; jsr setBorderAtScanLine
|
|
|
|
; Fade in
|
|
lda #titlePalette
|
|
sta PARAML2
|
|
jsr paletteFade
|
|
|
|
ldy #CAT0_VRAM ; Save a generic background to erase cats
|
|
jsr protectAnimation16x16
|
|
|
|
titleScreenMainLoop:
|
|
|
|
; Track animations
|
|
;jsr syncOverscanBottom ; This looks awesome but makes interactivity terrible
|
|
jsr syncVBL
|
|
;BORDER_COLOR #$7
|
|
|
|
lda titleAnimationCounter
|
|
inc
|
|
cmp TITLE_ANIMATION_FRAMES
|
|
jsr titleScreenResetAnimation
|
|
|
|
; Update current animation if needed
|
|
lda animationState+AS_CURRENTFRAME
|
|
bmi titleScreenIdle
|
|
jsr tickAnimation
|
|
bra titleScreenKeyboard
|
|
|
|
titleScreenIdle:
|
|
|
|
; Time start of cat 0 animation
|
|
lda animationDelay0
|
|
dec
|
|
bne titleScreenStillCat
|
|
lda #CAT_DELAY
|
|
sta animationDelay0
|
|
|
|
; Start new cat 0 animation
|
|
ldy #CAT0_VRAM
|
|
jsr unrenderAnimation16x16
|
|
|
|
lda #titleAnimationPos0
|
|
sta PARAML0
|
|
ldx #TITLE_ANIMATION_FRAMES
|
|
ldy #30
|
|
lda #ANIMATION_SIZE_16x32
|
|
jsr startAnimation
|
|
bra titleScreenNextCat
|
|
|
|
titleScreenStillCat:
|
|
|
|
; Render idle cat 0
|
|
sta animationDelay0
|
|
ldy #CAT0_VRAM
|
|
lda #29
|
|
jsr drawSpriteBankSafe
|
|
|
|
titleScreenNextCat:
|
|
|
|
; Time start of cat 1 animation
|
|
lda animationDelay1
|
|
dec
|
|
bne titleScreenStillCat2
|
|
lda #CAT_DELAY
|
|
sta animationDelay1
|
|
|
|
; Start new cat 1 animation
|
|
ldy #CAT1_VRAM
|
|
jsr unrenderAnimation16x16
|
|
|
|
lda #titleAnimationPos1
|
|
sta PARAML0
|
|
ldx #TITLE_ANIMATION_FRAMES
|
|
ldy #21
|
|
lda #ANIMATION_SIZE_16x32
|
|
jsr startAnimation
|
|
bra titleScreenKeyboard
|
|
|
|
titleScreenStillCat2:
|
|
|
|
; Render idle cat 1
|
|
sta animationDelay1
|
|
ldy #CAT1_VRAM
|
|
lda #20
|
|
jsr drawSpriteBankSafe
|
|
|
|
titleScreenKeyboard:
|
|
|
|
; Check for selection
|
|
jsr kbdScanTitle
|
|
jsr kbdScanDebug
|
|
lda menuActionRequested
|
|
beq titleScreenMainLoopEndFrame
|
|
|
|
cmp #-1
|
|
beq titleScreenKeyboardMenuUp
|
|
cmp #1
|
|
beq titleScreenKeyboardMenuDown
|
|
cmp #2
|
|
beq titleScreenKeyboardMenuGo
|
|
bra titleScreenMainLoopEndFrame
|
|
|
|
titleScreenResetAnimation:
|
|
stz titleAnimationCounter
|
|
rts
|
|
|
|
titleScreenKeyboardMenuUp:
|
|
lda menuSelection
|
|
beq titleScreenMainLoopEndFrame
|
|
dec
|
|
sta menuSelection
|
|
jsr titleScreenRenderMenu
|
|
bra titleScreenMainLoopEndFrame
|
|
|
|
titleScreenKeyboardMenuDown:
|
|
lda menuSelection
|
|
cmp #2
|
|
beq titleScreenMainLoopEndFrame
|
|
inc
|
|
sta menuSelection
|
|
jsr titleScreenRenderMenu
|
|
bra titleScreenMainLoopEndFrame
|
|
|
|
titleScreenKeyboardMenuGo:
|
|
lda menuSelection
|
|
beq titleScreenBeginGame
|
|
cmp #1
|
|
beq titleScreenHelp
|
|
cmp #2
|
|
beq titleScreenQuit
|
|
|
|
titleScreenMainLoopEndFrame:
|
|
stz menuActionRequested
|
|
jmp titleScreenMainLoop
|
|
|
|
titleScreenBeginGame:
|
|
; Transition to gameplay
|
|
jsr titleScreenRemoveBorderEffect
|
|
stz menuActionRequested
|
|
lda #skyPalette
|
|
sta PARAML2
|
|
jsr paletteFade
|
|
jmp beginGameplay
|
|
|
|
titleScreenQuit:
|
|
jsr titleScreenRemoveBorderEffect
|
|
jmp quitGame
|
|
|
|
titleScreenHelp:
|
|
jsr titleScreenRemoveBorderEffect
|
|
stz menuActionRequested
|
|
|
|
; Fade out
|
|
lda #skyPalette
|
|
sta PARAML2
|
|
jsr paletteFade
|
|
jmp titleScreenRenderHelp
|
|
|
|
titleScreenRemoveBorderEffect:
|
|
jsr unsetVBLInterruptVector
|
|
jsr unsetScanLineInterruptVector
|
|
rts
|
|
|
|
|
|
titleAnimationCounter:
|
|
.word 0
|
|
titleAnimationPos0:
|
|
.word 114,120
|
|
titleAnimationPos1:
|
|
.word 192,120
|
|
animationDelay0:
|
|
.word CAT_DELAY/2
|
|
animationDelay1:
|
|
.word CAT_DELAY
|
|
menuActionRequested:
|
|
.word 0
|
|
selectionString:
|
|
pstring "[[[[[[[[[[[[[[[["
|
|
unselectionString:
|
|
pstring "\\\\\\\\\\\\\\\\"
|
|
startString:
|
|
pstring "BEGIN GAME"
|
|
helpString:
|
|
pstring "HOW TO PLAY"
|
|
quitString:
|
|
pstring "QUIT"
|
|
menuSelection:
|
|
.word 0
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
; titleScreenRenderMenu
|
|
;
|
|
; Render the game menu
|
|
;
|
|
; Trashes A
|
|
;
|
|
titleScreenRenderMenu:
|
|
|
|
ldy #$78f0
|
|
jsr titleScreenUnRenderSelection
|
|
lda menuSelection
|
|
bne titleScreenRenderMenuItem0
|
|
ldy #$78f0
|
|
jsr titleScreenRenderSelection
|
|
|
|
titleScreenRenderMenuItem0:
|
|
lda #startString
|
|
sta PARAML0
|
|
lda #1
|
|
ldy #$78fc
|
|
jsl renderStringFar
|
|
|
|
ldy #$7f30
|
|
jsr titleScreenUnRenderSelection
|
|
lda menuSelection
|
|
cmp #1
|
|
bne titleScreenRenderMenuItem1
|
|
ldy #$7f30
|
|
jsr titleScreenRenderSelection
|
|
|
|
titleScreenRenderMenuItem1:
|
|
lda #helpString
|
|
sta PARAML0
|
|
lda #1
|
|
ldy #$7f39
|
|
jsl renderStringFar
|
|
|
|
ldy #$8570
|
|
jsr titleScreenUnRenderSelection
|
|
lda menuSelection
|
|
cmp #2
|
|
bne titleScreenRenderMenuItem2
|
|
ldy #$8570
|
|
jsr titleScreenRenderSelection
|
|
|
|
titleScreenRenderMenuItem2:
|
|
lda #quitString
|
|
sta PARAML0
|
|
lda #1
|
|
ldy #$8588
|
|
jsl renderStringFar
|
|
|
|
rts
|
|
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
; titleScreenRenderSelection
|
|
;
|
|
; Render the menu selection bar
|
|
;
|
|
; Y = VRAM position of bar
|
|
;
|
|
titleScreenRenderSelection:
|
|
lda #selectionString
|
|
sta PARAML0
|
|
lda #1
|
|
jsl renderStringFar
|
|
rts
|
|
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
; titleScreenUnRenderSelection
|
|
;
|
|
; Unrender the menu selection bar
|
|
;
|
|
; Y = VRAM position of bar
|
|
;
|
|
titleScreenUnRenderSelection:
|
|
lda #unselectionString
|
|
sta PARAML0
|
|
lda #1
|
|
jsl renderStringFar
|
|
rts
|
|
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
; titleScreenRenderHelp
|
|
;
|
|
; Render the help menu
|
|
;
|
|
titleScreenRenderHelp:
|
|
SAVE_AXY
|
|
|
|
; Clear screen
|
|
ldx #0
|
|
ldy #200
|
|
jsr colorFill
|
|
|
|
; Draw help text
|
|
lda #helpText0
|
|
sta PARAML0
|
|
ldy #$2c8a
|
|
lda #1
|
|
jsl renderStringFar
|
|
|
|
lda #helpText1
|
|
sta PARAML0
|
|
ldy #$32ca
|
|
lda #1
|
|
jsl renderStringFar
|
|
|
|
lda #helpText2
|
|
sta PARAML0
|
|
ldy #$390a
|
|
lda #1
|
|
jsl renderStringFar
|
|
|
|
lda #helpText3
|
|
sta PARAML0
|
|
ldy #$4bed
|
|
lda #2
|
|
jsl renderStringFar
|
|
|
|
lda #helpText4
|
|
sta PARAML0
|
|
ldy #$572d
|
|
lda #2
|
|
jsl renderStringFar
|
|
|
|
lda #helpText5
|
|
sta PARAML0
|
|
ldy #$6265
|
|
lda #2
|
|
jsl renderStringFar
|
|
|
|
lda #helpText6
|
|
sta PARAML0
|
|
ldy #$6dad
|
|
lda #2
|
|
jsl renderStringFar
|
|
|
|
lda #helpText7
|
|
sta PARAML0
|
|
ldy #$78ed
|
|
lda #2
|
|
jsl renderStringFar
|
|
|
|
lda #helpText8
|
|
sta PARAML0
|
|
ldy #$8435
|
|
lda #2
|
|
jsl renderStringFar
|
|
|
|
lda #helpText9
|
|
sta PARAML0
|
|
ldy #$90b7
|
|
lda #1
|
|
jsl renderStringFar
|
|
|
|
; Fade in
|
|
lda #titlePalette
|
|
sta PARAML2
|
|
jsr paletteFade
|
|
|
|
jsr kbdWaitForAnyKey
|
|
|
|
; Fade out
|
|
lda #skyPalette
|
|
sta PARAML2
|
|
jsr paletteFade
|
|
|
|
RESTORE_AXY
|
|
jmp titleScreen
|
|
|
|
helpText0:
|
|
pstring "SPROCKET AND TINKER DO NOT GET ALONG!"
|
|
helpText1:
|
|
pstring "YOUR GOAL IS TO ANGER THE OTHER CAT"
|
|
helpText2:
|
|
pstring "SO MUCH THAT SHE PEES."
|
|
helpText3:
|
|
pstring "_^ AIM"
|
|
helpText4:
|
|
pstring "\] POWER"
|
|
helpText5:
|
|
pstring "`ab FIRE"
|
|
helpText6:
|
|
pstring "ef WEAPON"
|
|
helpText7:
|
|
pstring "cd SCROLL"
|
|
helpText8:
|
|
pstring "g QUIT"
|
|
helpText9:
|
|
pstring "PRESS ANY KEY"
|