mirror of
https://github.com/deater/dos33fsprogs.git
synced 2024-10-22 10:24:13 +00:00
478 lines
6.9 KiB
ArmAsm
478 lines
6.9 KiB
ArmAsm
|
;==============================
|
||
|
; OOTW -- Intro -- The Elevator
|
||
|
;==============================
|
||
|
|
||
|
|
||
|
intro_03_elevator:
|
||
|
|
||
|
;===============================
|
||
|
;===============================
|
||
|
; Elevator going down
|
||
|
;===============================
|
||
|
;===============================
|
||
|
|
||
|
elevator:
|
||
|
;=============================
|
||
|
; Load background to $c00 and $1000
|
||
|
|
||
|
lda #<(intro_elevator_lzsa)
|
||
|
sta getsrc_smc+1 ; LZSA_SRC_LO
|
||
|
lda #>(intro_elevator_lzsa)
|
||
|
sta getsrc_smc+2 ; LZSA_SRC_HI
|
||
|
|
||
|
lda #$c ; load to off-screen $c00
|
||
|
jsr decompress_lzsa2_fast
|
||
|
|
||
|
lda #<(intro_elevator_lzsa)
|
||
|
sta getsrc_smc+1 ; LZSA_SRC_LO
|
||
|
lda #>(intro_elevator_lzsa)
|
||
|
sta getsrc_smc+2 ; LZSA_SRC_HI
|
||
|
|
||
|
lda #$10 ; load also to off-screen $1000
|
||
|
jsr decompress_lzsa2_fast
|
||
|
|
||
|
|
||
|
jsr gr_copy_to_current
|
||
|
|
||
|
lda #$66
|
||
|
sta COLOR
|
||
|
|
||
|
; elevator outer door
|
||
|
|
||
|
ldx #39
|
||
|
stx V2
|
||
|
ldx #4
|
||
|
ldy #14
|
||
|
jsr vlin ; VLIN 4,39 AT 14 (X, V2 at Y)
|
||
|
|
||
|
ldx #35
|
||
|
stx V2
|
||
|
ldx #7
|
||
|
ldy #18
|
||
|
jsr vlin ; VLIN 7,35 AT 18 (X, V2 at Y)
|
||
|
|
||
|
; elevator inner door
|
||
|
ldx #2
|
||
|
stx ELEVATOR_COUNT
|
||
|
elevator_middle:
|
||
|
ldx #38
|
||
|
stx V2
|
||
|
ldx #5
|
||
|
ldy #15
|
||
|
|
||
|
jsr vlin ; X, V2 at Y
|
||
|
|
||
|
ldx #36
|
||
|
stx V2
|
||
|
ldx #6
|
||
|
ldy #17
|
||
|
|
||
|
jsr vlin ; X, V2 at Y
|
||
|
|
||
|
elevator_inner:
|
||
|
ldx #37
|
||
|
stx V2
|
||
|
ldx #5
|
||
|
ldy #16
|
||
|
|
||
|
jsr vlin ; X, V2 at Y
|
||
|
|
||
|
|
||
|
|
||
|
jsr page_flip
|
||
|
|
||
|
jsr gr_copy_to_current
|
||
|
|
||
|
ldx #50
|
||
|
jsr long_wait
|
||
|
|
||
|
dec ELEVATOR_COUNT
|
||
|
lda ELEVATOR_COUNT
|
||
|
beq elevator_inner
|
||
|
cmp #1
|
||
|
beq elevator_middle
|
||
|
|
||
|
; door closed
|
||
|
|
||
|
jsr page_flip
|
||
|
|
||
|
ldx #100
|
||
|
jsr long_wait
|
||
|
|
||
|
;======================
|
||
|
; yellow line goes down
|
||
|
;======================
|
||
|
|
||
|
lda #0
|
||
|
sta COLOR
|
||
|
lda #5
|
||
|
sta V2
|
||
|
yellow_line_down:
|
||
|
|
||
|
jsr gr_copy_to_current
|
||
|
|
||
|
ldx #5
|
||
|
ldy #16
|
||
|
jsr vlin ; X, V2 at Y
|
||
|
|
||
|
jsr page_flip
|
||
|
|
||
|
ldx #12
|
||
|
jsr long_wait
|
||
|
|
||
|
inc V2
|
||
|
lda V2
|
||
|
cmp #37
|
||
|
bne yellow_line_down
|
||
|
|
||
|
lda DRAW_PAGE
|
||
|
pha
|
||
|
|
||
|
lda #$c ; erase yellow line
|
||
|
sta DRAW_PAGE ; on page $1000 version
|
||
|
ldx #5
|
||
|
ldy #16
|
||
|
jsr vlin ; X, V2 at Y
|
||
|
|
||
|
pla
|
||
|
sta DRAW_PAGE
|
||
|
|
||
|
;========================
|
||
|
; change floor indicators
|
||
|
;========================
|
||
|
|
||
|
lda #$33
|
||
|
sta COLOR
|
||
|
lda #5
|
||
|
sta V2
|
||
|
|
||
|
lda #4
|
||
|
sta PARTICLE_COUNT
|
||
|
floor_loop:
|
||
|
|
||
|
jsr gr_copy_to_current_1000
|
||
|
|
||
|
lda PARTICLE_COUNT
|
||
|
asl
|
||
|
tay
|
||
|
ldx indicators,Y
|
||
|
lda indicators+1,Y
|
||
|
|
||
|
jsr plot
|
||
|
|
||
|
jsr page_flip
|
||
|
ldx #150
|
||
|
jsr long_wait
|
||
|
|
||
|
dec PARTICLE_COUNT
|
||
|
bpl floor_loop
|
||
|
|
||
|
;====================
|
||
|
; dark elevator
|
||
|
;====================
|
||
|
|
||
|
; clear $c00 to black
|
||
|
|
||
|
lda DRAW_PAGE
|
||
|
pha
|
||
|
|
||
|
lda #$8
|
||
|
sta DRAW_PAGE
|
||
|
jsr clear_all
|
||
|
|
||
|
pla
|
||
|
sta DRAW_PAGE
|
||
|
|
||
|
; blue from 20, 30 - 20,34 and yellow (brown?) from 20,0 to 20,30
|
||
|
; scrolls down until all yellow
|
||
|
|
||
|
lda #30
|
||
|
sta ELEVATOR_COUNT
|
||
|
going_down_loop:
|
||
|
|
||
|
jsr gr_copy_to_current ; copy black screen in
|
||
|
|
||
|
; draw the yellow part
|
||
|
|
||
|
lda #$DD
|
||
|
sta COLOR
|
||
|
lda ELEVATOR_COUNT
|
||
|
sta V2
|
||
|
ldx #0
|
||
|
ldy #20
|
||
|
jsr vlin ; X, V2 at Y
|
||
|
|
||
|
lda #$22 ; draw the blue part
|
||
|
sta COLOR
|
||
|
|
||
|
lda ELEVATOR_COUNT
|
||
|
clc
|
||
|
adc #4
|
||
|
cmp #40
|
||
|
bmi not_too_big
|
||
|
|
||
|
lda #40
|
||
|
not_too_big:
|
||
|
sta V2
|
||
|
ldx ELEVATOR_COUNT
|
||
|
ldy #20
|
||
|
jsr vlin ; X, V2 at Y
|
||
|
|
||
|
jsr page_flip
|
||
|
|
||
|
ldx #8 ; pause
|
||
|
jsr long_wait
|
||
|
|
||
|
inc ELEVATOR_COUNT
|
||
|
lda ELEVATOR_COUNT
|
||
|
cmp #40
|
||
|
bne going_down_loop
|
||
|
|
||
|
;=====================
|
||
|
; all yellow for a bit
|
||
|
;=====================
|
||
|
|
||
|
jsr gr_copy_to_current ; copy black screen in
|
||
|
lda #$DD
|
||
|
sta COLOR
|
||
|
lda #40
|
||
|
sta V2
|
||
|
ldx #0
|
||
|
ldy #20
|
||
|
jsr vlin ; X, V2 at Y
|
||
|
jsr page_flip
|
||
|
|
||
|
ldx #100 ; wait a bit
|
||
|
jsr long_wait
|
||
|
|
||
|
|
||
|
; single blue dot
|
||
|
; solid blue line 10 later
|
||
|
|
||
|
lda #2
|
||
|
sta ELEVATOR_CYCLE
|
||
|
|
||
|
going_down_repeat:
|
||
|
|
||
|
lda #1
|
||
|
sta ELEVATOR_COUNT
|
||
|
going_down_blue:
|
||
|
|
||
|
jsr gr_copy_to_current ; copy black screen in
|
||
|
|
||
|
; draw the blue part
|
||
|
|
||
|
lda #$22
|
||
|
sta COLOR
|
||
|
lda ELEVATOR_COUNT
|
||
|
sta V2
|
||
|
ldx #0
|
||
|
ldy #20
|
||
|
jsr vlin ; X, V2 at Y
|
||
|
|
||
|
gdb_smc:
|
||
|
lda #$dd ; draw the blue part
|
||
|
sta COLOR
|
||
|
|
||
|
lda #40
|
||
|
sta V2
|
||
|
ldx ELEVATOR_COUNT
|
||
|
ldy #20
|
||
|
jsr vlin ; X, V2 at Y
|
||
|
|
||
|
jsr page_flip
|
||
|
|
||
|
ldx #8 ; pause
|
||
|
jsr long_wait
|
||
|
|
||
|
inc ELEVATOR_COUNT
|
||
|
lda ELEVATOR_COUNT
|
||
|
cmp #40
|
||
|
bne going_down_blue
|
||
|
|
||
|
dec ELEVATOR_CYCLE
|
||
|
beq elevator_exit
|
||
|
|
||
|
|
||
|
lda #1
|
||
|
sta ELEVATOR_COUNT
|
||
|
going_down_black:
|
||
|
|
||
|
jsr gr_copy_to_current ; copy black screen in
|
||
|
|
||
|
; draw the blue part
|
||
|
|
||
|
lda #$00
|
||
|
sta COLOR
|
||
|
lda ELEVATOR_COUNT
|
||
|
sta V2
|
||
|
ldx #0
|
||
|
ldy #20
|
||
|
jsr vlin ; X, V2 at Y
|
||
|
|
||
|
lda #$22 ; draw the blue part
|
||
|
sta COLOR
|
||
|
|
||
|
lda #40
|
||
|
sta V2
|
||
|
ldx ELEVATOR_COUNT
|
||
|
ldy #20
|
||
|
jsr vlin ; X, V2 at Y
|
||
|
|
||
|
jsr page_flip
|
||
|
|
||
|
ldx #8 ; pause
|
||
|
jsr long_wait
|
||
|
|
||
|
inc ELEVATOR_COUNT
|
||
|
lda ELEVATOR_COUNT
|
||
|
cmp #40
|
||
|
bne going_down_black
|
||
|
|
||
|
lda #$00
|
||
|
sta gdb_smc+1
|
||
|
|
||
|
jmp going_down_repeat
|
||
|
|
||
|
|
||
|
; black, 2, blue, black about 20
|
||
|
; blue until hit bottom, doors open
|
||
|
|
||
|
elevator_exit:
|
||
|
|
||
|
ldx #100 ; pause
|
||
|
jsr long_wait
|
||
|
|
||
|
|
||
|
|
||
|
;===============================
|
||
|
;===============================
|
||
|
; Getting out of Elevator
|
||
|
;===============================
|
||
|
;===============================
|
||
|
|
||
|
|
||
|
;=============================
|
||
|
; Load elevator background
|
||
|
|
||
|
lda #<(intro_off_elevator_lzsa)
|
||
|
sta getsrc_smc+1 ; LZSA_SRC_LO
|
||
|
lda #>(intro_off_elevator_lzsa)
|
||
|
sta getsrc_smc+2 ; LZSA_SRC_HI
|
||
|
|
||
|
lda #$c ; load to off-screen $c00
|
||
|
jsr decompress_lzsa2_fast
|
||
|
|
||
|
lda #<(walking00_lzsa)
|
||
|
sta getsrc_smc+1 ; LZSA_SRC_LO
|
||
|
lda #>(walking00_lzsa)
|
||
|
sta getsrc_smc+2 ; LZSA_SRC_HI
|
||
|
|
||
|
lda #$10 ; load to off-screen $1000
|
||
|
jsr decompress_lzsa2_fast
|
||
|
|
||
|
|
||
|
lda #10
|
||
|
sta ELEVATOR_COUNT
|
||
|
|
||
|
elevator_open_loop:
|
||
|
jsr gr_overlay ; note: overwrites color
|
||
|
lda #$00
|
||
|
sta COLOR
|
||
|
|
||
|
; Would have liked to have a central purple stripe, but not easy
|
||
|
|
||
|
; 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
|
||
|
|
||
|
|
||
|
lda ELEVATOR_COUNT
|
||
|
sta ELEVATOR_CYCLE
|
||
|
elevator_inner_loop:
|
||
|
lda #9
|
||
|
clc
|
||
|
adc ELEVATOR_CYCLE
|
||
|
tay
|
||
|
|
||
|
lda #40
|
||
|
sta V2
|
||
|
ldx #0
|
||
|
jsr vlin ; X, V2 at Y
|
||
|
|
||
|
sec
|
||
|
lda #30
|
||
|
sbc ELEVATOR_CYCLE
|
||
|
tay
|
||
|
|
||
|
lda #40
|
||
|
sta V2
|
||
|
ldx #0
|
||
|
jsr vlin ; X, V2 at Y
|
||
|
|
||
|
dec ELEVATOR_CYCLE
|
||
|
bne elevator_inner_loop
|
||
|
|
||
|
jsr page_flip
|
||
|
|
||
|
ldx #25
|
||
|
jsr long_wait ; pause
|
||
|
|
||
|
dec ELEVATOR_COUNT
|
||
|
bne elevator_open_loop
|
||
|
|
||
|
;==================================
|
||
|
; draw walking off the elevator
|
||
|
|
||
|
lda #<walking_sequence
|
||
|
sta INTRO_LOOPL
|
||
|
lda #>walking_sequence
|
||
|
sta INTRO_LOOPH
|
||
|
|
||
|
jsr run_sequence
|
||
|
|
||
|
;======================================
|
||
|
; make background black and pause a bit
|
||
|
|
||
|
jsr clear_all
|
||
|
jsr page_flip
|
||
|
|
||
|
ldx #80
|
||
|
jmp long_wait ; returns for us
|
||
|
|
||
|
|
||
|
|
||
|
;=================================
|
||
|
;=================================
|
||
|
; Intro Segment 03 Data (Elevator)
|
||
|
;=================================
|
||
|
;=================================
|
||
|
|
||
|
.include "graphics/03_elevator/intro_elevator.inc"
|
||
|
.include "graphics/03_elevator/intro_off_elevator.inc"
|
||
|
.include "graphics/03_elevator/intro_walking.inc"
|
||
|
|
||
|
|
||
|
; Elevator light co-ordinates
|
||
|
; we load them backwards
|
||
|
indicators:
|
||
|
.byte 18,4 ; 4
|
||
|
.byte 16,3 ; 3
|
||
|
.byte 14,2 ; 2
|
||
|
.byte 18,2 ; 1
|
||
|
.byte 16,1 ; 0
|
||
|
|
||
|
; Walking off elevator sequence
|
||
|
|
||
|
walking_sequence:
|
||
|
.byte 20
|
||
|
.word walking01_lzsa
|
||
|
.byte 128+20 ; .word walking02_lzsa
|
||
|
.byte 128+20 ; .word walking03_lzsa
|
||
|
.byte 128+20 ; .word walking04_lzsa
|
||
|
.byte 128+20 ; .word walking05_lzsa
|
||
|
.byte 128+20 ; .word walking06_lzsa
|
||
|
.byte 128+20 ; .word walking07_lzsa
|
||
|
.byte 128+20 ; .word walking08_lzsa
|
||
|
.byte 20
|
||
|
.word walking08_lzsa
|
||
|
.byte 0
|