dos33fsprogs/ootw/title.s

297 lines
5.1 KiB
ArmAsm

; 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 OUTL
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 OUTL
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"