dos33fsprogs/games/peasant/title.s
Vince Weaver e7f1907f38 peasant: finally get qboot working across 2 disks
using PRORWTS seek now
also fixed subtle bug in qboot when loading partial tracks

also a bunch of movement in the demo stuff by accident, oops but it's
2am and I'm too lazy to back that out
2022-01-16 02:05:43 -05:00

325 lines
4.7 KiB
ArmAsm

; o/~ It's the Title Screen, Yes it's the Title Screen o/~
; by Vince `deater` Weaver vince@deater.net
.include "hardware.inc"
.include "zp.inc"
.include "qload.inc"
.include "music.inc"
title:
jsr hgr2 ; clear screen, HGR page 2
;=========================
; set up hgr lookup tables
;=========================
jsr hgr_make_tables ; necessary?
;=========================
;=========================
; Title
;=========================
;=========================
do_title:
lda #0
sta FRAME
;================================
; load regular title image to $40
lda #<(title_trogfree_lzsa)
sta getsrc_smc+1
lda #>(title_trogfree_lzsa)
sta getsrc_smc+2
lda #$40
jsr decompress_lzsa2_fast
;=================================
; load trogdor title image to $20
lda #<(title_lzsa)
sta getsrc_smc+1
lda #>(title_lzsa)
sta getsrc_smc+2
lda #$20
jsr decompress_lzsa2_fast
bit KEYRESET
lda SOUND_STATUS
and #SOUND_MOCKINGBOARD
beq mockingboard_notfound
jsr mockingboard_loop
jmp title_loop_done
mockingboard_notfound:
jsr duet_loop
title_loop_done:
;************************
; Tips
;************************
jsr directions
lda #LOAD_INTRO
sta WHICH_LOAD
rts
;=====================
;=====================
; mockingboard loop
;=====================
;=====================
mockingboard_loop:
;===================================
; Setup Mockingboard
;===================================
PT3_ENABLE_APPLE_IIC = 1
;==================================
; load music into the language card
; into $D000 set 2
;==================================
; switch in language card
; read/write RAM, $d000 bank 2
lda $C083
lda $C083
; lda $C081 ; enable ROM
; lda $C081 ; enable write
; actually load it
lda #LOAD_MUSIC
sta WHICH_LOAD
jsr load_file
lda #0
sta DONE_PLAYING
lda #1
sta LOOP
jsr mockingboard_patch ; patch to work in slots other than 4?
;=======================
; Set up 50Hz interrupt
;========================
jsr mockingboard_init
jsr mockingboard_setup_interrupt
zurg:
;============================
; Init the Mockingboard
;============================
jsr reset_ay_both
jsr clear_ay_both
;==================
; init song
;==================
jsr pt3_init_song
;=======================
; start music
;=======================
cli
; we're supposed to animate flame, flash the "CLICK ANYWHERE" sign
; and show trogdor when his music plays
reset_altfire:
lda #50
sta ALTFIRE ; start on yy=50 on screen
lda #<altfire_sprite ; point to alternate fire
sta alt_smc1+1 ; sprite in memory
sta alt_smc2+1
lda #>altfire_sprite
sta alt_smc1+2
sta alt_smc2+2
title_loop:
lda C_VOLUME ; see if volume on trogdor channel
beq no_trog
bit PAGE1 ; if it did, flip page to trogdor
jmp done_trog
no_trog:
bit PAGE2 ; otherwise stay at regular
done_trog:
; work on flame
lda FRAME ; skip most of time
and #$3f
bne altfire_good
; do altfire loop
ldx ALTFIRE ; point (GBASL) to current line to copy
lda hposn_high,X
sta GBASH
lda hposn_low,X
sta GBASL
ldy #34 ; xx=34*7
inner_altfire:
; swap sprite data with screen data
lda (GBASL),Y ; get pixels from screen
pha ; save for later
alt_smc1:
lda $d000 ; get pixels from sprite
sta (GBASL),Y ; store to screen
pla ; restore saved pixels
alt_smc2:
sta $d000 ; store to pixel area
inc alt_smc1+1 ; increment the sprite pointers
inc alt_smc2+1
bne alt_noflo
inc alt_smc1+2 ; handle 16-bit if overflowed
inc alt_smc2+2
alt_noflo:
iny
cpy #40 ; continue to xx=(40*7)
bne inner_altfire
inc ALTFIRE
lda ALTFIRE
cmp #135 ; continue until yy=135
beq reset_altfire
altfire_good:
inc FRAME
lda KEYPRESS ; 4
bpl title_loop ; 3
;==========================
; key was pressed, exit
bit KEYRESET ; clear the keyboard buffer
bit PAGE2 ; return to viewing PAGE2
;==============
; disable music
sei ; disable music
jsr clear_ay_both
rts
;=====================
;=====================
; Electric Duet Loop
;=====================
;=====================
duet_loop:
lda #<peasant_ed
sta MADDRL
lda #>peasant_ed
sta MADDRH
duet_loop_again:
jsr play_ed
lda #1
sta peasant_ed+24
lda #0
sta peasant_ed+25
sta peasant_ed+26
lda #<(peasant_ed+24)
sta MADDRL
lda #>(peasant_ed+24)
sta MADDRH
lda duet_done
beq duet_loop_again
duet_finished:
bit KEYRESET
rts
;.include "decompress_fast_v2.s"
;.include "wait_keypress.s"
.include "directions.s"
;.include "hgr_font.s"
;.include "hgr_tables.s"
;.include "hgr_hgr2.s"
.include "duet.s"
peasant_ed:
.incbin "music/peasant.ed"
.include "pt3_lib_mockingboard_patch.s"
.include "graphics_title/title_graphics.inc"
altfire:
.include "graphics_title/altfire.inc"