From eb1360f0e099e7b152c994da7770b4b257f8781e Mon Sep 17 00:00:00 2001 From: Vince Weaver Date: Sun, 26 Jan 2020 01:30:49 -0500 Subject: [PATCH] ootw: add new assembly title screen --- ootw/Makefile | 30 ++++- ootw/hello.bas | 39 +----- ootw/hello.bas.old | 38 ++++++ ootw/loader2.s | 67 +++++++++- ootw/new_design.txt | 9 ++ ootw/text_print.s | 1 + ootw/title.s | 296 ++++++++++++++++++++++++++++++++++++++++++++ ootw/zp.inc | 3 + 8 files changed, 438 insertions(+), 45 deletions(-) create mode 100644 ootw/hello.bas.old create mode 100644 ootw/title.s diff --git a/ootw/Makefile b/ootw/Makefile index 978e8871..cd73eda6 100644 --- a/ootw/Makefile +++ b/ootw/Makefile @@ -20,10 +20,12 @@ ootw.dsk: HELLO LOADER INTRO OOTW_C1 OOTW_C2 OOTW_C3 OOTW_C4 OOTW_C5 # $(DOS33) -y ootw.dsk BSAVE -a 0x1700 AUDIO_TEST # $(DOS33) -y ootw.dsk BSAVE -a 0x2000 COMPRESS-TEST -ootw_side2.dsk: HELLO2 LOADER2 ENDING +ootw_side2.dsk: HELLO TITLE LOADER2 ENDING OOTW_C15 cp empty.dsk ootw_side2.dsk - $(DOS33) -y ootw_side2.dsk SAVE A HELLO2 HELLO + $(DOS33) -y ootw_side2.dsk SAVE A HELLO HELLO + $(DOS33) -y ootw_side2.dsk BSAVE -a 0x1000 TITLE $(DOS33) -y ootw_side2.dsk BSAVE -a 0x1400 LOADER2 LOADER + $(DOS33) -y ootw_side2.dsk BSAVE -a 0x1700 OOTW_C15 $(DOS33) -y ootw_side2.dsk BSAVE -a 0x1700 ENDING @@ -127,6 +129,21 @@ ootw_c5.o: ootw_c5.s \ ootw_graphics/l5cave/ootw_c5_cave.inc ca65 -o ootw_c5.o ootw_c5.s -l ootw_c5.lst +### + +OOTW_C15: ootw_c15.o + ld65 -o OOTW_C15 ootw_c15.o -C ../linker_scripts/apple2_1700.inc + +ootw_c15.o: ootw_c15.s \ + gr_copy.s gr_copy_offset.s gr_fast_clear.s gr_pageflip.s gr_unrle.s \ + gr_putsprite.s gr_putsprite_flipped.s gr_putsprite_crop.s \ + keyboard.s gr_run_sequence.s physicist.s \ + collision.s door.s gun.s blast.s shield.s \ + ootw_graphics/sprites/physicist.inc \ + ootw_graphics/l5cave/ootw_c5_cave.inc + ca65 -o ootw_c15.o ootw_c15.s -l ootw_c15.lst + + #### @@ -255,6 +272,15 @@ LOADER2: loader2.o loader2.o: loader2.s ca65 -o loader2.o loader2.s -l loader2.lst +#### + +TITLE: title.o + ld65 -o TITLE title.o -C ../linker_scripts/apple2_1000.inc + +title.o: title.s + ca65 -o title.o title.s -l title.lst + + #### diff --git a/ootw/hello.bas b/ootw/hello.bas index 1ba96eb9..3cbb7c5f 100644 --- a/ootw/hello.bas +++ b/ootw/hello.bas @@ -1,38 +1,3 @@ 5 HOME - 10 PRINT "OOTW PROOF-OF-CONCEPT V2.7 (8/22/2019)" - 15 PRINT " BY DEATER" - 20 PRINT " DISK,LZ4 BY QKUMBA" - 25 PRINT " ," - 30 PRINT "ORIGINAL BY ERIC CHAHI" - 40 PRINT "INSPIRED BY PAUL NICHOLAS PICO-8 VERSION" - 50 PRINT - 60 PRINT - 80 PRINT - 85 HTAB 10:PRINT " ______" - 90 HTAB 10:PRINT "A \/\/\/ PRODUCTION" - 92 PRINT - 95 HTAB 12:PRINT "APPLE ][ FOREVER" - 100 PRINT:PRINT "WHAT DO YOU WANT TO DO?" - 110 PRINT "0). START WITH INTRO MOVIE" - 120 PRINT "1). START AT CHECKPOINT 1 (IH8S)" - 130 PRINT "2). START AT CHECKPOINT 2 (RAGE)" - 135 PRINT "3). START AT CHECKPOINT 3 (VENT)" - 135 PRINT "4). START AT CHECKPOINT 4 (RCHG)" - 135 PRINT "5). START AT CHECKPOINT 5 (CAVE)" - 140 INPUT A - 150 IF A < 0 OR A > 5 THEN 5 - 155 IF A=1 OR A=2 OR A=3 OR A=4 OR A=5 THEN GOSUB 300 - 160 POKE 5,A - 200 PRINT CHR$ (4)"BRUN LOADER" - 300 HOME - 305 HTAB 8:PRINT "LOADING (BE PATIENT...)" - 310 PRINT:PRINT:PRINT:PRINT - 315 PRINT "CONTROLS:" - 320 PRINT " A OR <- : MOVE LEFT" - 325 PRINT " D OR -> : MOVE RIGHT" - 340 PRINT " W OR UP : JUMP" - 345 PRINT " S OR DOWN : CROUCH / PICKUP" - 350 PRINT " SPACEBAR : KICK / SHOOT" - 355 PRINT " L : CHARGE GUN" - 360 PRINT " ESC : QUITS" - 365 RETURN + 10 PRINT CHR$(4);"BRUN TITLE" + diff --git a/ootw/hello.bas.old b/ootw/hello.bas.old new file mode 100644 index 00000000..1ba96eb9 --- /dev/null +++ b/ootw/hello.bas.old @@ -0,0 +1,38 @@ + 5 HOME + 10 PRINT "OOTW PROOF-OF-CONCEPT V2.7 (8/22/2019)" + 15 PRINT " BY DEATER" + 20 PRINT " DISK,LZ4 BY QKUMBA" + 25 PRINT " ," + 30 PRINT "ORIGINAL BY ERIC CHAHI" + 40 PRINT "INSPIRED BY PAUL NICHOLAS PICO-8 VERSION" + 50 PRINT + 60 PRINT + 80 PRINT + 85 HTAB 10:PRINT " ______" + 90 HTAB 10:PRINT "A \/\/\/ PRODUCTION" + 92 PRINT + 95 HTAB 12:PRINT "APPLE ][ FOREVER" + 100 PRINT:PRINT "WHAT DO YOU WANT TO DO?" + 110 PRINT "0). START WITH INTRO MOVIE" + 120 PRINT "1). START AT CHECKPOINT 1 (IH8S)" + 130 PRINT "2). START AT CHECKPOINT 2 (RAGE)" + 135 PRINT "3). START AT CHECKPOINT 3 (VENT)" + 135 PRINT "4). START AT CHECKPOINT 4 (RCHG)" + 135 PRINT "5). START AT CHECKPOINT 5 (CAVE)" + 140 INPUT A + 150 IF A < 0 OR A > 5 THEN 5 + 155 IF A=1 OR A=2 OR A=3 OR A=4 OR A=5 THEN GOSUB 300 + 160 POKE 5,A + 200 PRINT CHR$ (4)"BRUN LOADER" + 300 HOME + 305 HTAB 8:PRINT "LOADING (BE PATIENT...)" + 310 PRINT:PRINT:PRINT:PRINT + 315 PRINT "CONTROLS:" + 320 PRINT " A OR <- : MOVE LEFT" + 325 PRINT " D OR -> : MOVE RIGHT" + 340 PRINT " W OR UP : JUMP" + 345 PRINT " S OR DOWN : CROUCH / PICKUP" + 350 PRINT " SPACEBAR : KICK / SHOOT" + 355 PRINT " L : CHARGE GUN" + 360 PRINT " ESC : QUITS" + 365 RETURN diff --git a/ootw/loader2.s b/ootw/loader2.s index 1efadb21..2dce864b 100644 --- a/ootw/loader2.s +++ b/ootw/loader2.s @@ -100,6 +100,17 @@ filenames_low: .byte intro_filename @@ -108,24 +119,68 @@ filenames_high: .byte >ootw_c3_filename .byte >ootw_c4_filename .byte >ootw_c5_filename + .byte >ootw_c6_filename + .byte >ootw_c7_filename + .byte >ootw_c8_filename + .byte >ootw_c9_filename + .byte >ootw_c10_filename + .byte >ootw_c11_filename + .byte >ootw_c12_filename + .byte >ootw_c13_filename + .byte >ootw_c14_filename + .byte >ootw_c15_filename + .byte >ending_filename intro_filename: - .byte "ENDING",0 + .byte 0 ootw_c1_filename: - .byte "OOTW_C1",0 + .byte 0 ootw_c2_filename: - .byte "OOTW_C2",0 + .byte 0 ootw_c3_filename: - .byte "OOTW_C3",0 + .byte 0 ootw_c4_filename: - .byte "OOTW_C4",0 + .byte 0 ootw_c5_filename: - .byte "OOTW_C5",0 + .byte 0 + +ootw_c6_filename: + .byte "OOTW_C6",0 + +ootw_c7_filename: + .byte "OOTW_C7",0 + +ootw_c8_filename: + .byte "OOTW_C8",0 + +ootw_c9_filename: + .byte "OOTW_9",0 + +ootw_c10_filename: + .byte "OOTW_C10",0 + +ootw_c11_filename: + .byte "OOTW_C11",0 + +ootw_c12_filename: + .byte "OOTW_C12",0 + +ootw_c13_filename: + .byte "OOTW_C13",0 + +ootw_c14_filename: + .byte "OOTW_C14",0 + +ootw_c15_filename: + .byte "OOTW_C15",0 + +ending_filename: + .byte "ENDING",0 diff --git a/ootw/new_design.txt b/ootw/new_design.txt index 567f24f3..561b43b4 100644 --- a/ootw/new_design.txt +++ b/ootw/new_design.txt @@ -34,3 +34,12 @@ INSPIRED BY PAUL NICHOLAS PICO-8 VERSION ENDING + + +*0 1 2 BASE, HIGHLIGHT ... WHICH=BASE+HIGHLIGHT +0 *1 2 +0 1 *2 +1 2 *3 + +1 *2 3 + diff --git a/ootw/text_print.s b/ootw/text_print.s index 2a090799..cb738201 100644 --- a/ootw/text_print.s +++ b/ootw/text_print.s @@ -43,6 +43,7 @@ print_string: print_string_loop: lda (OUTL),Y beq done_print_string +ps_smc1: eor #$80 ; flip from ASCII to text char sta (BASL),Y iny diff --git a/ootw/title.s b/ootw/title.s new file mode 100644 index 00000000..ce308f7d --- /dev/null +++ b/ootw/title.s @@ -0,0 +1,296 @@ +; Title Screen / Menu for OOTW + +.include "zp.inc" +.include "hardware.inc" + +title: + lda #0 + sta MENU_BASE ; start at level0 by default + sta MENU_HIGHLIGHT + + bit TEXT + bit PAGE0 + + lda #title_text + sta OUTH + jsr move_and_print_list + +title_loop: + clc + lda MENU_BASE + adc MENU_HIGHLIGHT + sta WHICH_LOAD + + + jsr draw_menu + +wait_for_keypress: + lda KEYPRESS + bpl wait_for_keypress + bit KEYRESET + + ; $15/$A = right/down + cmp #$15+$80 + beq down_pressed + cmp #$A+$80 + beq down_pressed + + ; 8/B = left/up + cmp #$8+$80 + beq up_pressed + cmp #$B+$80 + beq up_pressed + + ; Return = 13 + cmp #13+$80 + beq all_done + + ; unknown, ignore + jmp title_loop + +down_pressed: + lda MENU_HIGHLIGHT + cmp #2 + beq down_offset + inc MENU_HIGHLIGHT + bne title_loop ; branch always + +down_offset: + lda MENU_BASE + cmp #16-2 + beq title_loop ; don't increment if 16 + inc MENU_BASE + bne title_loop ; branch always + +up_pressed: + lda MENU_HIGHLIGHT + beq up_offset ; don't decrement if 0 + dec MENU_HIGHLIGHT + jmp title_loop +up_offset: + lda MENU_BASE + beq title_loop ; don't decrement if 0 + dec MENU_BASE + jmp title_loop + +all_done: + jmp all_done + + +.include "text_print.s" +.include "gr_offsets.s" + +draw_menu: + lda #menu_items + sta OUTH + + clc + ldy #0 +get_right_offset: + cpy MENU_BASE + beq get_right_offset_done + + lda OUTL + adc #23 + sta OUTL + lda OUTH + adc #0 + sta OUTH + + iny + + jmp get_right_offset + +get_right_offset_done: + + ldy #1 + lda #19 + sta (OUTL),Y + + jsr disable_highlight + lda MENU_HIGHLIGHT + bne no_highlight_line1 + jsr enable_highlight +no_highlight_line1: + + jsr move_and_print + + ldy #1 + lda #20 + sta (OUTL),Y + + jsr disable_highlight + lda MENU_HIGHLIGHT + cmp #1 + bne no_highlight_line2 + jsr enable_highlight +no_highlight_line2: + + jsr move_and_print + + ldy #1 + lda #21 + sta (OUTL),Y + + jsr disable_highlight + lda MENU_HIGHLIGHT + cmp #2 + bne no_highlight_line3 + jsr enable_highlight +no_highlight_line3: + + jsr move_and_print + + jsr disable_highlight + +draw_scrollbar: + lda #' '+$80 + sta $550+29 + sta $550+30 + ldx WHICH_LOAD + beq draw_line1 +draw_top: + lda #'/'+$80 + sta $550+29 ; line 18 + lda #'\'+$80 + sta $550+30 +draw_line1: + lda #'I'+$80 + cpx #5 + bcs draw_line1_I ; bge +draw_line1_X: + clc + adc #'X'-'I' +draw_line1_I: + sta $5d0+29 ; line 19 + sta $5d0+30 + +draw_line2: + lda #'I'+$80 + cpx #5 + bcc draw_line2_I ; blt + cpx #10 + bcs draw_line2_I ; bge + +draw_line2_X: + clc + adc #'X'-'I' +draw_line2_I: + sta $650+29 ; line 20 + sta $650+30 + +draw_line3: + lda #'I'+$80 + cpx #10 + bcc draw_line3_I ; blt + +draw_line3_X: + clc + adc #'X'-'I' +draw_line3_I: + sta $6d0+29 ; line 21 + sta $6d0+30 +draw_bottom: + lda #' '+$80 + sta $750+29 ; line 22 + sta $750+30 ; line 22 + cpx #16 + beq done_draw_bottom + lda #'\'+$80 + sta $750+29 ; line 22 + lda #'/'+$80 + sta $750+30 +done_draw_bottom: + + rts + + + +enable_highlight: + lda #$29 ; and + sta ps_smc1 + lda #$3f + sta ps_smc1+1 + rts + +disable_highlight: + lda #$49 + sta ps_smc1 ; eor + lda #$80 + sta ps_smc1+1 + rts + + + + + + + +;.byte 0,18," /\",0 +;.byte 0,19," CHECKPOINT 1 (IH8S) XX",0 +;.byte 0,20," CHECKPOINT 2 (RAGE) II",0 +;.byte 0,21," CHECKPOINT 3 (VENT) II",0 +;.byte 0,22," \/",0 + + +title_text: +.byte 1, 0, "//II II--\ II--\ II II-- ]][[ ]][[",0 +.byte 0, 1,"//_II II__/ II__/ II II- ][ ][",0 +.byte 0, 2,"II II II II II__ II__ ]][[ ]][[",0 +.byte 0, 3,"II II II _",0 +.byte 3, 4, "II II // //=I\ II==\ II II \\",0 +.byte 3, 5, "II II // // II II==/ II II //",0 +.byte 3, 6, "II II//\\// \===I/ II \\ II== II//",0 +.byte 0, 8,"OOTW PROOF-OF-CONCEPT V2.8 (25 JAN 2020)",0 +.byte 0, 9,"CODE: DEATER DISK,LZ4: QKUMBA",0 +.byte 12,10, ",",0 +.byte 0,11,"ORIGINAL BY ERIC CHAHI",0 +.byte 0,12,"INSPIRED BY PAUL NICHOLAS PICO-8 VERSION",0 +.byte 12,13, "______",0 +.byte 10,14, "A \/\/\/ PRODUCTION",0 +.byte 12,16, "APPLE ][ FOREVER",0 + +.byte 1,23, "USE ARROWS TO SELECT, RETURN TO START",0 +.byte 255 + + + + +menu_items: ; 23 wide +.byte 8,0,"INTRO MOVIE ",0 +.byte 8,0,"CHECKPOINT 1 (IH8S)",0 ; LDKD +.byte 8,0,"CHECKPOINT 2 (RAGE)",0 ; HTDC +.byte 8,0,"CHECKPOINT 3 (VENT)",0 ; CLLD +.byte 8,0,"CHECKPOINT 4 (RCHG)",0 ; LBKG +.byte 8,0,"CHECKPOINT 5 (CAVE)",0 ; XDDJ +.byte 8,0,"CHECKPOINT 6 (CEIL)",0 ; FXLC +.byte 8,0,"CHECKPOINT 7 (RUNC)",0 ; KRFK +.byte 8,0,"CHECKPOINT 8 (ROLL)",0 ; KLFB +.byte 8,0,"CHECKPOINT 9 (SWIM)",0 ; TTCT +.byte 8,0,"CHECKPOINT 10 (GRND)",0 ; HRTB +.byte 8,0,"CHECKPOINT 11 (ABVE)",0 ; BRTD +.byte 8,0,"CHECKPOINT 12 (THRW)",0 ; TFBB +.byte 8,0,"CHECKPOINT 13 (ARMS)",0 ; TXHF +.byte 8,0,"CHECKPOINT 14 (TANK)",0 ; CKJL +.byte 8,0,"CHECKPOINT 15 (ANKD)",0 ; LFCK +.byte 8,0,"ENDING ",0 + + +; 160 POKE 5,A + + +; 305 HTAB 8:PRINT "LOADING (BE PATIENT...)" +; 310 PRINT:PRINT:PRINT:PRINT +; 315 PRINT "CONTROLS:" +; 320 PRINT " A OR <- : MOVE LEFT" +; 325 PRINT " D OR -> : MOVE RIGHT" +; 340 PRINT " W OR UP : JUMP" +; 345 PRINT " S OR DOWN : CROUCH / PICKUP" +; 350 PRINT " SPACEBAR : KICK / SHOOT" +; 355 PRINT " L : CHARGE GUN" +; 360 PRINT " ESC : QUITS" + diff --git a/ootw/zp.inc b/ootw/zp.inc index 42b23a30..abdab7af 100644 --- a/ootw/zp.inc +++ b/ootw/zp.inc @@ -7,8 +7,11 @@ LZ4_DST = $02 LZ4_END = $04 WHICH_LOAD = $05 COUNT = $06 +MENU_BASE = $06 +MENU_HIGHLIGHT = $07 DELTA = $08 + ;; Zero page monitor routines addresses WNDLFT = $20