dos33fsprogs/games/ootw/ending/ending.s

434 lines
12 KiB
ArmAsm

; ootw -- It's the End of the Game as We Know It
; by Vince "Deater" Weaver <vince@deater.net>
.include "../zp.inc"
.include "../hardware.inc"
ending:
; temporary debug
; lda #4
; sta DRAW_PAGE
; lda #0
; sta DISP_PAGE
; jmp handle_credits
;=========================
; set up sound
;=========================
lda #0
sta DONE_PLAYING
lda #1
sta LOOP
; detect mockingboard
jsr mockingboard_detect
bcc mockingboard_notfound
mockingboard_found:
; jsr mockingboard_patch ; patch to work in slots other than 4?
;=======================
; Set up 50Hz interrupt
;========================
jsr mockingboard_init
jsr mockingboard_setup_interrupt
;============================
; Init the Mockingboard
;============================
jsr reset_ay_both
jsr clear_ay_both
;==================
; init song
;==================
jsr pt3_init_song
jmp done_setup_sound
mockingboard_notfound:
; patch out cli/sei calls
lda #$EA
sta cli_smc
sta sei_smc
done_setup_sound:
repeat_ending:
;===========================
; Enable graphics
;===========================
bit LORES
bit SET_GR
bit FULLGR
bit KEYRESET
;============
; Setup pages
;============
lda #0
sta DRAW_PAGE
lda #4
sta DISP_PAGE
;============
; start music
;============
cli_smc:
cli ; enable interrupts
;=====================================
; friend arrive, board dragon sequence
;=====================================
lda #<pickup_sequence
sta INTRO_LOOPL
lda #>pickup_sequence
sta INTRO_LOOPH
jsr run_sequence
;=========================
; wing open sequence
;=========================
lda #<wing_sequence
sta INTRO_LOOPL
lda #>wing_sequence
sta INTRO_LOOPH
jsr run_sequence
;=========================
; flying sequence
;=========================
lda #<flying_sequence
sta INTRO_LOOPL
lda #>flying_sequence
sta INTRO_LOOPH
jsr run_sequence
; wait roughly 2 seconds
ldx #200
jsr long_wait
;===========================
; credits
;===========================
handle_credits:
;======================
; scroll credits
;======================
jsr end_credits
;======================
; wait before rebooting
;======================
; wait wait wait
jsr wait_until_keypressed
; disable music
jsr clear_ay_both
sei_smc:
sei
; reboot to title
lda #$ff ; force cold reboot
sta $03F4
jmp ($FFFC)
; jmp repeat_ending
;======================
; wait until keypressed
;======================
wait_until_keypressed:
lda KEYPRESS
bpl wait_until_keypressed
bit KEYRESET
rts
; sequence: 0 = done
; 255 reload $C00 with PTR
; 0..127 wait TIME, then overlay $C00 with X
; 128..254 wait TIME then overlay $C00 with next
; note: pauses *before* flipping to new graphic
; dragon moves its head a bit when we arrive
; repeats twice pulling self
; then again but slightly to right
; two more times
; friend pops up, pauses a while
; times are in seconds.frames
; 1/25th a second in this case, which is 40ms
; time length is in 10ms increments (so X=4 per frame)
pickup_sequence:
.byte 255 ; load to bg
.word rooftop_bg_lzsa ; this
.byte 128+72 ; .word rooftop01_lzsa ; 03.22 (18)
.byte 128+8 ; .word rooftop02a_lzsa ; 04.15 (2) arrive
.byte 128+8 ; .word rooftop02_lzsa ; 04.17 (2) arrive
.byte 128+24 ; .word rooftop03_lzsa ; 04.19 (6)
.byte 128+120 ; .word rooftop04_lzsa ; 05.00 (44)-> 184
.byte 64
.word rooftop04_lzsa ; 05.00 (44)-> 184
.byte 128+50 ; .word rooftop05_lzsa ; 06.19 (13)
.byte 128+72 ; .word rooftop06_lzsa ; 07.07 (18)
.byte 128+64 ; .word rooftop07_lzsa ; 08.00 (16)
.byte 128+120 ; .word rooftop08_lzsa ; 08.16 (31)
.byte 128+56 ; .word rooftop09_lzsa ; 09.22 (14)
.byte 128+76 ; .word rooftop10_lzsa ; 10.11 (19)
.byte 128+100 ; .word rooftop11a_lzsa ; 11.05 (25)
.byte 128+100 ; .word rooftop11b_lzsa ; 12.05 (25)
.byte 128+52 ; .word rooftop11clzsa ; 13.05 (13)
.byte 100
.word rooftop11a_lzsa ; 13.18 (50)
.byte 100
.word rooftop11a_lzsa ; 13.18 (50) -> 200
.byte 52
.word rooftop12_lzsa ; 15.17 (13)
.byte 128+80 ; .word rooftop13_lzsa ; 16.05 (20)
.byte 120
.word rooftop11_lzsa ; 17.00 (40)
.byte 128+120 ; .word rooftop12_lzsa ; 18.15 (30)
.byte 128+96 ; .word rooftop13_lzsa ; 19.20 (24)
.byte 100
.word rooftop11_lzsa ; 20.19 (50)
.byte 100
.word rooftop11_lzsa ; 20.19 (50) ->200
.byte 128+104 ; .word rooftop12_lzsa ; 22.19 (26)
.byte 128+100 ; .word rooftop13_lzsa ; 23.20 (25)
.byte 20
.word rooftop11_lzsa ; 24.20 (5)
.byte 50
.word rooftop14_lzsa ; 25.00 (13)
.byte 128+12 ; .word rooftop15_lzsa ; 25.13 (3)
.byte 128+24 ; .word rooftop16_lzsa ; 25.16 (6)
.byte 128+100 ; .word rooftop17_lzsa ; 25.22 (28) friend stand
.byte 128+16 ; .word rooftop18_lzsa ; 27.00 (4)
.byte 128+20 ; .word rooftop19_lzsa ; 27.04 (5)
.byte 128+32 ; .word rooftop20_lzsa ; 27.09 (8)
.byte 128+20 ; .word rooftop21_lzsa ; 27.17 (5)
.byte 128+100 ; .word rooftop22_lzsa ; 27.22 (28)
.byte 128+44 ; .word rooftop23_lzsa ; 29.00 (11) friend reaching
.byte 128+24 ; .word rooftop24_lzsa ; 29.11 (6)
.byte 128+44 ; .word rooftop25_lzsa ; 29.17 (11) mouth open
.byte 128+44 ; .word rooftop26_lzsa ; 30.03 (11) mouth closed
.byte 128+32 ; .word rooftop27_lzsa ; 30.14 (8) start to pick up)
.byte 128+12 ; .word rooftop28_lzsa ; 30.22 (3) halfway up
.byte 128+24 ; .word rooftop29_lzsa ; 31.00 (6) standing
.byte 0 ; 31.06 finish
wing_sequence:
.byte 255 ; load to bg
.word wing_bg_lzsa ; this
.byte 128+50 ; .word left_unfurl1_lzsa ; 31.06 (14)
.byte 128+11 ; .word left_unfurl2_lzsa ; 31.20 (3)
.byte 128+11 ; .word left_unfurl3_lzsa ; 31.23 (3)
.byte 128+11 ; .word left_unfurl4_lzsa ; 32.01 (2)
.byte 128+100 ; .word left_unfurl5_lzsa ; 32.03 (27)
.byte 128+11 ; .word right_unfurl1_lzsa ; 33.01 (3)
.byte 128+11 ; .word right_unfurl2_lzsa ; 33.04 (2)
.byte 128+11 ; .word right_unfurl3_lzsa ; 33.06 (3)
.byte 128+11 ; .word right_unfurl4_lzsa ; 33.09 (3)
.byte 128+100 ; .word right_unfurl5_lzsa ; 33.12 (27)
.byte 128+11 ; .word onboard01_lzsa ; 34.15 (3)
.byte 128+11 ; .word onboard02_lzsa ; 34.18 (3)
.byte 128+11 ; .word onboard03_lzsa ; 34.21 (3)
.byte 128+11 ; .word onboard04_lzsa ; 34.24 (3)
.byte 128+11 ; .word onboard05_lzsa ; 35.01 (2)
.byte 128+11 ; .word onboard06_lzsa ; 35.04 (3)
.byte 128+11 ; .word onboard07_lzsa ; 35.07 (3)
.byte 128+11 ; .word onboard08_lzsa ; 35.10 (2)
.byte 0 ; 35.12-
flying_sequence:
.byte 255 ; load to bg
.word sky_bg_lzsa ; this
.byte 128+11 ; .word flying01_lzsa ; 35.12 (3)
.byte 128+11 ; .word flying02_lzsa ; 35.15 (3)
.byte 128+11 ; .word flying03_lzsa ; 35.18 (3)
.byte 128+11 ; .word flying04_lzsa ; 35.21 (3)
.byte 128+11 ; .word flying05_lzsa ; 35.24 (2)
.byte 128+11 ; .word flying06_lzsa ; 36.01 (3)
.byte 128+11 ; .word flying07_lzsa ; 36.04 (3)
.byte 128+11 ; .word flying08_lzsa ; 36.07 (3)
.byte 128+11 ; .word flying09_lzsa ; 36.10 (3)
.byte 128+11 ; .word flying10_lzsa ; 36.13 (2)
.byte 128+11 ; .word flying11_lzsa ; 36.15 (3)
.byte 128+11 ; .word flying12_lzsa ; 36.18 (3)
.byte 128+11 ; .word flying13_lzsa ; 36.21 (3)
.byte 128+11 ; .word flying14_lzsa ; 36.24 (3)
.byte 128+11 ; .word flying15_lzsa ; 37.02 (2)
.byte 128+11 ; .word flying16_lzsa ; 37.04 (3)
.byte 128+11 ; .word flying17_lzsa ; 37.07 (3)
.byte 128+11 ; .word flying18_lzsa ; 37.10 (3)
.byte 128+11 ; .word flying19_lzsa ; 37.13 (3)
.byte 128+11 ; .word flying20_lzsa ; 37.16 (2)
.byte 128+11 ; .word flying21_lzsa ; 37.18 (3)
.byte 128+11 ; .word flying22_lzsa ; 37.21 (3)
.byte 128+11 ; .word flying23_lzsa ; 37.24 (3)
.byte 128+11 ; .word flying24_lzsa ; 38.02 (3)
.byte 128+11 ; .word flying25_lzsa ; 38.05 (2)
.byte 128+11 ; .word flying26_lzsa ; 38.07 (3)
.byte 128+11 ; .word flying27_lzsa ; 38.10 (3)
.byte 128+11 ; .word flying28_lzsa ; 38.13 (3)
.byte 128+11 ; .word flying29_lzsa ; 38.16 (3)
.byte 128+11 ; .word flying30_lzsa ; 38.19 (2)
.byte 128+11 ; .word flying31_lzsa ; 38.21 (3)
.byte 128+11 ; .word flying32_lzsa ; 38.24 (3)
.byte 128+11 ; .word flying33_lzsa ; 39.02 (3)
.byte 128+11 ; .word flying34_lzsa ; 39.05 (3)
.byte 128+11 ; .word flying35_lzsa ; 39.08 (2)
.byte 128+11 ; .word flying36_lzsa ; 39.10 (3)
.byte 128+11 ; .word flying37_lzsa ; 39.13 (3)
.byte 128+11 ; .word flying38_lzsa ; 39.16 (3)
.byte 128+11 ; .word flying39_lzsa ; 39.19 (3)
.byte 128+11 ; .word flying40_lzsa ; 39.22 (2)
.byte 128+11 ; .word flying41_lzsa ; 39.24 (3)
.byte 128+11 ; .word flying42_lzsa ; 40.02 (3)
.byte 128+11 ; .word flying43_lzsa ; 40.05 (3)
.byte 128+11 ; .word flying44_lzsa ; 40.08 (3)
.byte 128+11 ; .word flying45_lzsa ; 40.11 (2)
.byte 128+11 ; .word flying46_lzsa ; 40.13 (3)
.byte 128+11 ; .word flying47_lzsa ; 40.16 (3)
.byte 128+11 ; .word flying48_lzsa ; 40.19 (3)
.byte 128+11 ; .word flying49_lzsa ; 40.22 (2)
.byte 128+11 ; .word flying50_lzsa ; 40.24 (3)
.byte 128+11 ; .word flying51_lzsa ; 41.02 (3)
.byte 128+11 ; .word flying52_lzsa ; 41.05 (3)
.byte 128+11 ; .word flying53_lzsa ; 41.08 (3)
.byte 128+11 ; .word flying54_lzsa ; 41.11 (3)
.byte 128+11 ; .word flying55_lzsa ; 41.14 (2)
.byte 128+11 ; .word flying56_lzsa ; 41.16 (3)
.byte 128+11 ; .word flying57_lzsa ; 41.19 (3)
.byte 128+11 ; .word flying58_lzsa ; 41.22 (3)
.byte 128+11 ; .word flying59_lzsa ; 42.00 (3)
.byte 128+11 ; .word flying60_lzsa ; 42.03 (2)
.byte 128+11 ; .word flying61_lzsa ; 42.05 (3)
.byte 128+11 ; .word flying62_lzsa ; 42.08 (3)
.byte 128+11 ; .word flying63_lzsa ; 42.11 (3)
.byte 128+11 ; .word flying64_lzsa ; 42.14 (2)
.byte 128+11 ; .word flying65_lzsa ; 42.16 (3)
.byte 128+11 ; .word the_end00_lzsa ; 42.19 (3)
.byte 128+11 ; .word the_end01_lzsa ; 42.22 (3)
.byte 128+11 ; .word the_end02_lzsa ; 43.00 (3)
.byte 128+11 ; .word the_end03_lzsa ; 43.03 (2)
.byte 128+11 ; .word the_end04_lzsa ; 43.05 (3)
.byte 128+11 ; .word the_end05_lzsa ; 43.08 (3)
.byte 128+11 ; .word the_end06_lzsa ; 43.11 (3)
.byte 128+11 ; .word the_end07_lzsa ; 43.14 (3)
.byte 128+11 ; .word the_end08_lzsa ; 43.17 (3)
.byte 128+11 ; .word the_end09_lzsa ; 43.20 (2)
.byte 128+11 ; .word the_end10_lzsa ; 43.22 (3)
.byte 128+11 ; .word the_end11_lzsa ; 44.00 (3)
.byte 128+11 ; .word the_end12_lzsa ; 44.03 (3)
.byte 128+11 ; .word the_end13_lzsa ; 44.06 (3)
.byte 128+11 ; .word the_end14_lzsa ; 44.09 (2)
.byte 128+11 ; .word the_end15_lzsa ; 44.11 (3)
.byte 128+11 ; .word the_end16_lzsa ; 44.14 (3)
.byte 128+11 ; .word the_end17_lzsa ; 44.17 (3)
.byte 128+20 ; .word the_end18_lzsa ; 44.23 (5) up
.byte 128+44 ; .word the_end19_lzsa ; 45.03 (11)wayup
.byte 128+44 ; .word the_end20_lzsa ; 45.14 (11)side
.byte 128+52 ; .word the_end21_lzsa ; 46.00 (13)down
.byte 40
.word the_end20_lzsa ; 46.13 (10)side
.byte 16
.word the_end18_lzsa ; 46.23 (4)up
.byte 128+40 ; .word the_end19_lzsa ; 47.02 (10)wayup
.byte 128+44 ; .word the_end20_lzsa ; 47.12 (11)side
.byte 128+48 ; .word the_end21_lzsa ; 47.23 (12)down
.byte 40
.word the_end20_lzsa ; 48.10 (10)side
.byte 16
.word the_end18_lzsa ; 48.20 (4)up
.byte 128+64 ; .word the_end_19_lzsa ; 48.24 (16)wayup
.byte 128+24 ; .word the_end_20_lzsa ; 49.15 (6)side
.byte 128+48 ; .word the_end_21_lzsa ; 49.21 (12)down
.byte 8
.word the_end20_lzsa ; 50.08 (2)side
.byte 12
.word the_end22_lzsa ; 50.10 (3)moving again
.byte 128+11 ; .word the_end23_lzsa ; 50.13 (2)
.byte 128+11 ; .word the_end24_lzsa ; 50.15 (3)
.byte 128+11 ; .word the_end25_lzsa ; 50.18 (3)
.byte 128+11 ; .word the_end26_lzsa ; 50.21 (3)
.byte 128+11 ; .word the_end27_lzsa ; 50.24 (3)dark
.byte 128+11 ; .word the_end28_lzsa ; 51.02 (2)
.byte 128+11 ; .word the_end29_lzsa ; 51.04 (3)
.byte 128+11 ; .word black_lzsa ; 51.07 black
.byte 0 ; 53.00 credits
.include "credits.s"
.include "../text_print.s"
.include "../gr_pageflip.s"
.include "../decompress_fast_v2.s"
.include "../gr_fast_clear.s"
.include "../gr_copy.s"
.include "../gr_offsets.s"
.include "../gr_overlay.s"
.include "../gr_run_sequence2.s"
.include "../pt3_player/pt3_lib_core.s"
.include "../pt3_player/pt3_lib_init.s"
.include "../pt3_player/interrupt_handler.s"
.include "../pt3_player/pt3_lib_mockingboard_detect.s"
.include "../pt3_player/pt3_lib_mockingboard_setup.s"
; backgrounds
.include "graphics/ending/ootw_c16_end.inc"
PT3_LOC = song
; must be page aligned
.align 256
song:
.incbin "music/ootw_outro.pt3"