dos33fsprogs/games/lemm/intro_level.s

232 lines
3.4 KiB
ArmAsm
Raw Normal View History

2022-03-07 13:53:14 +00:00
2022-03-21 03:09:23 +00:00
;========================
; print the intro message
;========================
2022-03-09 22:04:19 +00:00
2022-03-15 19:16:37 +00:00
intro_level:
2022-03-07 13:53:14 +00:00
; clear text screen
jsr clear_all
2022-03-15 19:16:37 +00:00
2022-03-17 18:33:18 +00:00
level_preview_l_smc:
lda #$DD
2022-03-21 03:09:23 +00:00
sta getsrc_smc+1 ; LZSA_SRC_LO
2022-03-17 18:33:18 +00:00
level_preview_h_smc:
lda #$DD
2022-03-21 03:09:23 +00:00
sta getsrc_smc+2 ; LZSA_SRC_HI
2022-03-10 04:03:23 +00:00
lda #$20
jsr decompress_lzsa2_fast
2022-03-09 22:04:19 +00:00
; print non-inverse
jsr set_normal
; print messages
2022-03-21 03:09:23 +00:00
intro_text_smc_l:
lda #$dd
2022-03-15 19:16:37 +00:00
sta OUTL
2022-03-21 03:09:23 +00:00
intro_text_smc_h:
lda #$dd
2022-03-07 13:53:14 +00:00
sta OUTH
2022-03-09 22:04:19 +00:00
; print the text
2022-03-07 13:53:14 +00:00
ldx #8
text_loop:
jsr move_and_print
dex
bne text_loop
2022-03-10 04:03:23 +00:00
bit KEYRESET
lda APPLEII_MODEL
cmp #'E'
bne intro_not_iie
jmp split_screen_iie
intro_not_iie:
2022-03-09 22:04:19 +00:00
; wait until keypress
2022-03-07 13:53:14 +00:00
jsr wait_until_keypress
rts
2022-03-10 04:31:54 +00:00
2022-03-21 03:09:23 +00:00
;========================
; print the outro message
;========================
2022-03-10 04:31:54 +00:00
outro_level1:
; clear text screen
jsr clear_all
; set text
bit SET_TEXT
2022-03-10 04:31:54 +00:00
; print non-inverse
jsr set_normal
2022-03-15 04:50:35 +00:00
lda LEVEL_OVER
cmp #LEVEL_WIN
bne print_l1_lose_message
2022-03-10 04:31:54 +00:00
; print messages
lda #<level1_win_text
sta OUTL
lda #>level1_win_text
2022-03-15 04:50:35 +00:00
jmp print_l1_common
print_l1_lose_message:
lda #<level1_lose_text
sta OUTL
lda #>level1_lose_text
print_l1_common:
2022-03-10 04:31:54 +00:00
sta OUTH
; print the text
ldx #9
l1_outro_loop:
jsr move_and_print
dex
bne l1_outro_loop
bit KEYRESET
; wait until keypress
jmp wait_until_keypress
level1_win_text:
.byte 6, 1,"ALL LEMMINGS ACCOUNTED FOR.",0
.byte 12, 3,"YOU RESCUED 100%",0
.byte 12, 4,"YOU NEEDED 10%",0
.byte 2, 6,"SUPERB! YOU RESCUED EVERY LEMMING ON",0
2022-03-11 06:22:51 +00:00
.byte 3, 7,"THAT LEVEL. CAN YOU DO IT AGAIN...",0
2022-03-10 04:31:54 +00:00
.byte 6,15,"YOUR ACCESS CODE FOR LEVEL 2",0
2022-03-14 05:07:45 +00:00
.byte 14,16,"IS B002ATARI",0
2022-03-10 04:31:54 +00:00
.byte 6,20,"PRESS RETURN FOR NEXT LEVEL",0
.byte 9,21,"PRESS ESCAPE FOR MENU",0
level1_lose_text:
.byte 6, 1,"ALL LEMMINGS ACCOUNTED FOR.",0
.byte 12, 3,"YOU RESCUED 0%",0
.byte 12, 4,"YOU NEEDED 100%",0
.byte 3, 6,"ROCK BOTTOM! I HOPE FOR YOUR SAKE",0
.byte 8, 7,"THAT YOU NUKED THAT LEVEL.",0
.byte 6,20,"PRESS RETURN FOR NEXT LEVEL",0
.byte 9,21,"PRESS ESCAPE FOR MENU",0
2022-03-15 04:50:35 +00:00
.byte 10,10," ",0 ; lazy hack
.byte 10,10," ",0
2022-03-10 04:31:54 +00:00
2022-03-10 04:03:23 +00:00
.align $100
; split screen?
split_screen_iie:
; wait for vblank on IIe
; positive? during vblank
; bit SET_GR ; 4
; bit HIRES ; 4
; bit FULLGR
2022-03-10 04:03:23 +00:00
wait_vblank_iie:
lda VBLANK
bmi wait_vblank_iie ; wait for positive (in vblank)
wait_vblank_done_iie:
lda VBLANK ; wait for negative (vlank done)
bpl wait_vblank_done_iie
;
split_loop:
;===========================
; hires for 64 lines
; each line 65 cycles (25 hblank+40 bytes)
; (64*65)-8 = 4160-8 = 4152
; Try X=91 Y=9 cycles=4150
nop ; delay two more
ldy #9 ; 2
loop1: ldx #91 ; 2
loop2: dex ; 2
bne loop2 ; 2nt/3
dey ; 2
bne loop1 ; 2nt/3
2022-03-10 04:03:23 +00:00
; text for 128 lines + horizontal blank
; vblank = 4550 cycles
bit LORES ; 4
bit SET_TEXT ; 4
; (128*65)+4550-15 = 8320+4550-15 = 12855
; ZZZZ 8305
; Try X=68 Y=24 cycles=8305
ldy #24 ; 2
loop13: ldx #68 ; 2
loop14: dex ; 2
bne loop14 ; 2nt/3
dey ; 2
bne loop13 ; 2nt/3
bit SET_GR ; 4
bit HIRES ; 4
; don't really need to split this up? Was trying
; to get retrotink to display properly instead of black/white
2022-03-10 04:03:23 +00:00
; Try X=150 Y=17 cycles=12853
; ZZZZ 4550
; Try X=13 Y=64 cycles=4545
2022-03-10 04:03:23 +00:00
nop ; 2
lda $0 ; 3
2022-03-10 04:03:23 +00:00
ldy #64 ; 2
loop3: ldx #13 ; 2
2022-03-10 04:03:23 +00:00
loop4: dex ; 2
bne loop4 ; 2nt/3
dey ; 2
bne loop3 ; 2nt/3
2022-03-10 04:03:23 +00:00
lda KEYPRESS ; 4
bpl split_loop ; 2nt/3t
rts