; ootw -- It's the End of the Game as We Know It ; TODO: missing a bunch of frames ; by Vince "Deater" Weaver .include "../zp.inc" .include "../hardware.inc" ending: ;========================= ; 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 (is this necessary?) ;=========================== lda #0 sta DRAW_PAGE lda #1 sta DISP_PAGE ;=========================== ; show some pictures ;============================ ;================== ; bath ;================== ; lda #>(bath_rle) ; sta GBASH ; lda #<(bath_rle) ; sta GBASL ; lda #$c ; load image off-screen $c00 ; jsr load_rle_gr ; jsr gr_copy_to_current ; jsr page_flip ; jsr wait_until_keypressed ;================== ; battle ;================== ; lda #>(battle_rle) ; sta GBASH ; lda #<(battle_rle) ; sta GBASL ; lda #$c ; load image off-screen $c00 ; jsr load_rle_gr ; jsr gr_copy_to_current ; jsr page_flip ; jsr wait_until_keypressed ;================== ; grabbed ;================== ; lda #>(grabbed_rle) ; sta GBASH ; lda #<(grabbed_rle) ; sta GBASL ; lda #$c ; load image off-screen $c00 ; jsr load_rle_gr ; jsr gr_copy_to_current ; jsr page_flip ; jsr wait_until_keypressed ;=========================== ; ending sequence ;============================ ;========================= ; set up bg ;========================= lda #>(sky_bg_rle) sta GBASH lda #<(sky_bg_rle) sta GBASL lda #$0c ; load image off-screen $c00 jsr load_rle_gr ;=================== ; rooftop00 lda #>(rooftop0_rle) sta GBASH lda #<(rooftop0_rle) sta GBASL lda #$10 ; load image off-screen $1000 jsr load_rle_gr jsr gr_overlay jsr page_flip ; jsr wait_until_keypressed ; start music cli_smc: cli ; enable interrupts ldx #240 jsr long_wait ;=================== ; rooftop01 lda #>(rooftop1_rle) sta GBASH lda #<(rooftop1_rle) sta GBASL lda #$10 ; load image off-screen $1000 jsr load_rle_gr jsr gr_overlay jsr page_flip ; jsr wait_until_keypressed ldx #60 jsr long_wait ;=================== ; rooftop02 lda #>(rooftop2_rle) sta GBASH lda #<(rooftop2_rle) sta GBASL lda #$10 ; load image off-screen $1000 jsr load_rle_gr jsr gr_overlay jsr page_flip ; jsr wait_until_keypressed ldx #60 jsr long_wait ;=================== ; rooftop03 lda #>(rooftop3_rle) sta GBASH lda #<(rooftop3_rle) sta GBASL lda #$10 ; load image off-screen $1000 jsr load_rle_gr jsr gr_overlay jsr page_flip ; jsr wait_until_keypressed ldx #50 jsr long_wait ;=================== ; onboard lda #>(onboard_rle) sta GBASH lda #<(onboard_rle) sta GBASL lda #$10 ; load image off-screen $1000 jsr load_rle_gr jsr gr_overlay jsr page_flip ; jsr wait_until_keypressed ldx #50 jsr long_wait ;========================= ; set up wing bg ;========================= lda #>(wing_bg_rle) sta GBASH lda #<(wing_bg_rle) sta GBASL lda #$0c ; load image off-screen $c00 jsr load_rle_gr ;=================== ; left wing 1 lda #>(left_unfurl1_rle) sta GBASH lda #<(left_unfurl1_rle) sta GBASL lda #$10 ; load image off-screen $1000 jsr load_rle_gr jsr gr_overlay jsr page_flip ; jsr wait_until_keypressed ldx #40 jsr long_wait ;=================== ; left wing 2 lda #>(left_unfurl2_rle) sta GBASH lda #<(left_unfurl2_rle) sta GBASL lda #$10 ; load image off-screen $1000 jsr load_rle_gr jsr gr_overlay jsr page_flip ; jsr wait_until_keypressed ldx #25 jsr long_wait ;=================== ; right wing 1 lda #>(right_unfurl1_rle) sta GBASH lda #<(right_unfurl1_rle) sta GBASL lda #$10 ; load image off-screen $1000 jsr load_rle_gr jsr gr_overlay jsr page_flip ; jsr wait_until_keypressed ldx #40 jsr long_wait ;=================== ; right wing 2 lda #>(right_unfurl2_rle) sta GBASH lda #<(right_unfurl2_rle) sta GBASL lda #$10 ; load image off-screen $1000 jsr load_rle_gr jsr gr_overlay jsr page_flip ; jsr wait_until_keypressed ldx #30 jsr long_wait ;========================= ; re-set up sky bg ;========================= lda #>(sky_bg_rle) sta GBASH lda #<(sky_bg_rle) sta GBASL lda #$0c ; load image off-screen $c00 jsr load_rle_gr ;=================== ; flying01 lda #>(flying01_rle) sta GBASH lda #<(flying01_rle) sta GBASL lda #$10 ; load image off-screen $1000 jsr load_rle_gr jsr gr_overlay jsr page_flip ; jsr wait_until_keypressed ldx #25 jsr long_wait ;=================== ; flying03 lda #>(flying03_rle) sta GBASH lda #<(flying03_rle) sta GBASL lda #$10 ; load image off-screen $1000 jsr load_rle_gr jsr gr_overlay jsr page_flip ; jsr wait_until_keypressed ldx #25 jsr long_wait ;=================== ; flying05 lda #>(flying05_rle) sta GBASH lda #<(flying05_rle) sta GBASL lda #$10 ; load image off-screen $1000 jsr load_rle_gr jsr gr_overlay jsr page_flip ; jsr wait_until_keypressed ldx #25 jsr long_wait ;=================== ; flying07 lda #>(flying07_rle) sta GBASH lda #<(flying07_rle) sta GBASL lda #$10 ; load image off-screen $1000 jsr load_rle_gr jsr gr_overlay jsr page_flip ; jsr wait_until_keypressed ldx #25 jsr long_wait ;=================== ; flying09 lda #>(flying09_rle) sta GBASH lda #<(flying09_rle) sta GBASL lda #$10 ; load image off-screen $1000 jsr load_rle_gr jsr gr_overlay jsr page_flip ; jsr wait_until_keypressed ldx #25 jsr long_wait ;=================== ; flying11 lda #>(flying11_rle) sta GBASH lda #<(flying11_rle) sta GBASL lda #$10 ; load image off-screen $1000 jsr load_rle_gr jsr gr_overlay jsr page_flip ; jsr wait_until_keypressed ldx #25 jsr long_wait ;=================== ; the end01 lda #>(the_end01_rle) sta GBASH lda #<(the_end01_rle) sta GBASL lda #$10 ; load image off-screen $1000 jsr load_rle_gr jsr gr_overlay jsr page_flip ; jsr wait_until_keypressed ldx #25 jsr long_wait ;=================== ; the end02 lda #>(the_end02_rle) sta GBASH lda #<(the_end02_rle) sta GBASL lda #$10 ; load image off-screen $1000 jsr load_rle_gr jsr gr_overlay jsr page_flip ; jsr wait_until_keypressed ldx #25 jsr long_wait ;=================== ; the end03 lda #>(the_end03_rle) sta GBASH lda #<(the_end03_rle) sta GBASL lda #$10 ; load image off-screen $1000 jsr load_rle_gr jsr gr_overlay jsr page_flip ; jsr wait_until_keypressed ldx #25 jsr long_wait ;=================== ; the end04 lda #>(the_end04_rle) sta GBASH lda #<(the_end04_rle) sta GBASL lda #$10 ; load image off-screen $1000 jsr load_rle_gr jsr gr_overlay jsr page_flip ; jsr wait_until_keypressed ldx #25 jsr long_wait ;=================== ; the end05 lda #>(the_end05_rle) sta GBASH lda #<(the_end05_rle) sta GBASL lda #$10 ; load image off-screen $1000 jsr load_rle_gr jsr gr_overlay jsr page_flip ; jsr wait_until_keypressed ldx #25 jsr long_wait ;=================== ; the end06 lda #>(the_end06_rle) sta GBASH lda #<(the_end06_rle) sta GBASL lda #$10 ; load image off-screen $1000 jsr load_rle_gr jsr gr_overlay jsr page_flip ; jsr wait_until_keypressed ldx #25 jsr long_wait ;=================== ; the end07 lda #>(the_end07_rle) sta GBASH lda #<(the_end07_rle) sta GBASL lda #$10 ; load image off-screen $1000 jsr load_rle_gr jsr gr_overlay jsr page_flip ; jsr wait_until_keypressed ldx #200 jsr long_wait ;=================== ; the end08 lda #>(the_end08_rle) sta GBASH lda #<(the_end08_rle) sta GBASL lda #$10 ; load image off-screen $1000 jsr load_rle_gr jsr gr_overlay jsr page_flip ; jsr wait_until_keypressed ldx #25 jsr long_wait ;=================== ; the end09 lda #>(the_end09_rle) sta GBASH lda #<(the_end09_rle) sta GBASL lda #$10 ; load image off-screen $1000 jsr load_rle_gr jsr gr_overlay jsr page_flip ; jsr wait_until_keypressed ldx #25 jsr long_wait ;=================== ; the end10 lda #>(the_end10_rle) sta GBASH lda #<(the_end10_rle) sta GBASL lda #$10 ; load image off-screen $1000 jsr load_rle_gr jsr gr_overlay jsr page_flip ; jsr wait_until_keypressed ldx #25 jsr long_wait ;=========================== ; real end ;=========================== quit_level: jsr TEXT jsr HOME lda KEYRESET ; clear strobe ;====================== ; scroll credits ;====================== ; ; ; 0@24 ; 0@23,1@24 ; 0@22,1@23,2@24... ; 0@0... ldx #46 scroll_loop: jsr HOME ldy #0 stx XPOS print_loop: lda credit_list,Y sta OUTL lda credit_list+1,Y sta OUTH tya pha ldy XPOS jsr gotoy jsr print_string pla tay iny iny inc XPOS inc XPOS lda XPOS cmp #48 bne print_loop txa pha ldx #20 jsr long_wait pla tax dex dex bpl scroll_loop ldx #200 jsr long_wait jsr HOME bit KEYRESET ;====================== ; print end message ;====================== lda #0 sta DRAW_PAGE lda #end_message sta OUTH jsr move_and_print ; 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 ; 0123456789012345678901234567890123456789 ; DESIGNED BY ..... ERIC CHAHI ; ; ARTWORK ......... ERIC CHAHI ; ; MUSIC BY ........ JEAN-FRANCOIS FREITAS ; ; SOUND EFFECTS ; JEAN-FRANCOIS FREITAS ; ERIC CHAHI ; ; APPLE II PORT ; VINCE WEAVER ; ; APPLE ][ FOREVER credits0:.byte "",0 credits1:.byte " DESIGNED BY ..... ERIC CHAHI",0 credits2:.byte "",0 credits3:.byte " ARTWORK ......... ERIC CHAHI",0 credits4:.byte "",0 credits5:.byte " MUSIC BY ........ JEAN-FRANCOIS FREITAS",0 credits6:.byte "",0 credits7:.byte " SOUND EFFECTS",0 credits8:.byte " JEAN-FRANCOIS FREITAS",0 credits9:.byte " ERIC CHAHI",0 credits10:.byte "",0 credits11:.byte " APPLE II+ PORT",0 credits12:.byte " VINCE WEAVER",0 credits13:.byte "",0 credits14:.byte " APPLE ][ FOREVER",0 credit_list: .word credits0 ; 0 .word credits0 ; 1 .word credits0 ; 2 .word credits1 ; 3 .word credits2 ; 4 .word credits3 ; 5 .word credits4 ; 6 .word credits5 ; 7 .word credits6 ; 8 .word credits0 ; 9 .word credits7 ; 10 .word credits8 ; 11 .word credits9 ; 12 .word credits10 ; 13 .word credits11 ; 14 .word credits12 ; 16 .word credits0 ; 15 .word credits0 ; 18 .word credits13 ; 17 .word credits14 ; 19 .word credits0 ; 20 .word credits0 ; 21 .word credits0 ; 22 end_message: .byte 6,10,"NOW GO BACK TO ANOTHER EARTH",0 ;============================ ; set BASL/BASH to offset w Y gotoy: lda gr_offsets,Y sta BASL lda gr_offsets+1,Y sta BASH rts ;====================== ; wait until keypressed ;====================== wait_until_keypressed: lda KEYPRESS bpl wait_until_keypressed bit KEYRESET rts ;===================== ; long(er) wait ; waits approximately ?? ms long_wait: lda #100 jsr WAIT ; delay dex bne long_wait rts .include "../text_print.s" .include "../gr_pageflip.s" .include "../gr_unrle.s" .include "../gr_fast_clear.s" .include "../gr_copy.s" .include "../gr_offsets.s" .include "../gr_overlay.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 "ootw_graphics/l15final/ootw_c15_final.inc" .include "graphics/ending/ootw_c16_end.inc" PT3_LOC = song ; must be page aligned .align 256 song: .incbin "audio/ootw_outro.pt3"