mirror of
https://github.com/deater/dos33fsprogs.git
synced 2024-11-18 06:09:08 +00:00
682 lines
12 KiB
ArmAsm
682 lines
12 KiB
ArmAsm
;==========================
|
|
; adjust ship up/down
|
|
;==========================
|
|
adjust_ship:
|
|
|
|
lda SHIP_RAISED
|
|
bne make_ship_up
|
|
jmp make_ship_down
|
|
|
|
make_ship_up:
|
|
|
|
; update backgrounds south
|
|
|
|
ldy #LOCATION_SOUTH_BG
|
|
|
|
lda #<pool_shipup_s_lzsa
|
|
sta location10,Y ; MIST_POOL
|
|
lda #>pool_shipup_s_lzsa
|
|
sta location10+1,Y ; MIST_POOL
|
|
|
|
lda #<gear_shipup_s_lzsa
|
|
sta location15,Y ; MIST_GEAR
|
|
lda #>gear_shipup_s_lzsa
|
|
sta location15+1,Y ; MIST_GEAR
|
|
|
|
lda #<dock_switch_shipup_s_lzsa
|
|
sta location1,Y ; MIST_DOCK_SWITCH
|
|
lda #>dock_switch_shipup_s_lzsa
|
|
sta location1+1,Y ; MIST_DOCK_SWITCH
|
|
|
|
lda #<above_dock_shipup_s_lzsa
|
|
sta location3,Y ; MIST_ABOVE_DOCK
|
|
lda #>above_dock_shipup_s_lzsa
|
|
sta location3+1,Y ; MIST_ABOVE_DOCK
|
|
|
|
|
|
|
|
; update backgrounds north
|
|
|
|
ldy #LOCATION_NORTH_BG
|
|
|
|
lda #<tree1_shipup_n_lzsa
|
|
sta location20,Y ; MIST_TREE_CORRIDOR_1
|
|
lda #>tree1_shipup_n_lzsa
|
|
sta location20+1,Y ; MIST_TREE_CORRIDOR_1
|
|
|
|
lda #<dock_shipup_n_lzsa
|
|
sta location0,Y ; MIST_ARRIVAL_DOCK
|
|
lda #>dock_shipup_n_lzsa
|
|
sta location0+1,Y ; MIST_ARRIVAL_DOCK
|
|
|
|
; update backgrounds east
|
|
|
|
ldy #LOCATION_EAST_BG
|
|
lda #<step_top_shipup_e_lzsa
|
|
sta location9,Y ; MIST_OUTSIDE_TEMPLE
|
|
lda #>step_top_shipup_e_lzsa
|
|
sta location9+1,Y ; MIST_OUTSIDE_TEMPLE
|
|
|
|
lda #<step_land3_shipup_e_lzsa
|
|
sta location8,Y ; MIST_STEPS_4TH_LANDING
|
|
lda #>step_land3_shipup_e_lzsa
|
|
sta location8+1,Y ; MIST_STEPS_4TH_LANDING
|
|
|
|
lda #<step_dentist_shipup_e_lzsa
|
|
sta location7,Y ; MIST_STEPS_DENTIST
|
|
lda #>step_dentist_shipup_e_lzsa
|
|
sta location7+1,Y ; MIST_STEPS_DENTIST
|
|
|
|
lda #<step_land2_shipup_e_lzsa
|
|
sta location6,Y ; MIST_STEPS_2ND_LANDING
|
|
lda #>step_land2_shipup_e_lzsa
|
|
sta location6+1,Y ; MIST_STEPS_2ND_LANDING
|
|
|
|
lda #<step_land1_shipup_e_lzsa
|
|
sta location5,Y ; MIST_STEPS_1ST_LANDING
|
|
lda #>step_land1_shipup_e_lzsa
|
|
sta location5+1,Y ; MIST_STEPS_1ST_LANDING
|
|
|
|
lda #<above_dock_shipup_e_lzsa
|
|
sta location3,Y ; MIST_ABOVE_DOCK
|
|
sta location16,Y ; MIST_GEAR_BASE
|
|
lda #>above_dock_shipup_e_lzsa
|
|
sta location3+1,Y ; MIST_ABOVE_DOCK
|
|
sta location16+1,Y ; MIST_GEAR_BASE
|
|
|
|
lda #<dock_shipup_e_lzsa
|
|
sta location0,Y ; MIST_ARRIVAL_DOCK
|
|
lda #>dock_shipup_e_lzsa
|
|
sta location0+1,Y ; MIST_ARRIVAL_DOCK
|
|
|
|
|
|
|
|
; FIXME: hook up exit on dock to ship
|
|
|
|
|
|
rts
|
|
|
|
make_ship_down:
|
|
|
|
; update backgrounds south
|
|
|
|
ldy #LOCATION_SOUTH_BG
|
|
lda #<pool_s_lzsa
|
|
sta location10,Y ; MIST_POOL
|
|
lda #>pool_s_lzsa
|
|
sta location10+1,Y ; MIST_POOL
|
|
|
|
lda #<gear_s_lzsa
|
|
sta location15,Y ; MIST_GEAR
|
|
lda #>gear_s_lzsa
|
|
sta location15+1,Y ; MIST_GEAR
|
|
|
|
lda #<dock_switch_s_lzsa
|
|
sta location1,Y ; MIST_DOCK_SWITCH
|
|
lda #>dock_switch_s_lzsa
|
|
sta location1+1,Y ; MIST_DOCK_SWITCH
|
|
|
|
lda #<above_dock_s_lzsa
|
|
sta location3,Y ; MIST_ABOVE_DOCK
|
|
lda #>above_dock_s_lzsa
|
|
sta location3+1,Y ; MIST_ABOVE_DOCK
|
|
|
|
; update backgrounds north
|
|
|
|
ldy #LOCATION_NORTH_BG
|
|
lda #<tree1_n_lzsa
|
|
sta location20,Y ; MIST_TREE_CORRIDOR_1
|
|
lda #>tree1_n_lzsa
|
|
sta location20+1,Y ; MIST_TREE_CORRIDOR_1
|
|
|
|
lda #<dock_n_lzsa
|
|
sta location0,Y ; MIST_ARRIVAL_DOCK
|
|
lda #>dock_n_lzsa
|
|
sta location0+1,Y ; MIST_ARRIVAL_DOCK
|
|
|
|
; update backgrounds east
|
|
|
|
ldy #LOCATION_EAST_BG
|
|
lda #<step_top_e_lzsa
|
|
sta location9,Y ; MIST_OUTSIDE_TEMPLE
|
|
lda #>step_top_e_lzsa
|
|
sta location9+1,Y ; MIST_OUTSIDE_TEMPLE
|
|
|
|
lda #<step_land3_e_lzsa
|
|
sta location8,Y ; MIST_STEPS_4TH_LANDING
|
|
lda #>step_land3_e_lzsa
|
|
sta location8+1,Y ; MIST_STEPS_4TH_LANDING
|
|
|
|
lda #<step_dentist_e_lzsa
|
|
sta location7,Y ; MIST_STEPS_DENTIST
|
|
lda #>step_dentist_e_lzsa
|
|
sta location7+1,Y ; MIST_STEPS_DENTIST
|
|
|
|
lda #<step_land2_e_lzsa
|
|
sta location6,Y ; MIST_STEPS_2ND_LANDING
|
|
lda #>step_land2_e_lzsa
|
|
sta location6+1,Y ; MIST_STEPS_2ND_LANDING
|
|
|
|
lda #<step_land1_e_lzsa
|
|
sta location5,Y ; MIST_STEPS_1ST_LANDING
|
|
lda #>step_land1_e_lzsa
|
|
sta location5+1,Y ; MIST_STEPS_1ST_LANDING
|
|
|
|
lda #<above_dock_e_lzsa
|
|
sta location3,Y ; MIST_ABOVE_DOCK
|
|
sta location16,Y ; MIST_GEAR_BASE
|
|
lda #>above_dock_e_lzsa
|
|
sta location3+1,Y ; MIST_ABOVE_DOCK
|
|
sta location16+1,Y ; MIST_GEAR_BASE
|
|
|
|
lda #<dock_e_lzsa
|
|
sta location0,Y ; MIST_ARRIVAL_DOCK
|
|
lda #>dock_e_lzsa
|
|
sta location0+1,Y ; MIST_ARRIVAL_DOCK
|
|
|
|
; FIXME: remove exit on dock to ship
|
|
|
|
|
|
|
|
rts
|
|
|
|
|
|
|
|
;==========================
|
|
; draw green if on
|
|
;==========================
|
|
draw_pillar:
|
|
lda LOCATION
|
|
sec
|
|
sbc #MIST_PILLAR_EYE ; find which one we are on
|
|
tay
|
|
tax
|
|
|
|
lda PILLAR_ON
|
|
and powersoftwo,Y
|
|
|
|
beq done_draw_pillar
|
|
|
|
; is on, so draw it green
|
|
txa
|
|
asl
|
|
tay
|
|
|
|
lda pillar_sprites,Y
|
|
sta INL
|
|
lda pillar_sprites+1,Y
|
|
sta INH
|
|
|
|
lda #17
|
|
sta XPOS
|
|
lda #16
|
|
sta YPOS
|
|
|
|
jsr put_sprite_crop
|
|
|
|
done_draw_pillar:
|
|
rts
|
|
|
|
|
|
;=========================
|
|
; pillar was touched
|
|
;=========================
|
|
|
|
touch_pillar:
|
|
|
|
lda LOCATION
|
|
sec
|
|
sbc #MIST_PILLAR_EYE ; find which on we touched
|
|
tay
|
|
|
|
lda PILLAR_ON
|
|
eor powersoftwo,Y
|
|
sta PILLAR_ON
|
|
|
|
rts
|
|
|
|
;=====================================
|
|
; check to see if ship needs to change
|
|
;=====================================
|
|
|
|
check_change_ship:
|
|
|
|
; check to see if we need to raise/lower ship
|
|
|
|
lda SHIP_RAISED
|
|
beq ship_is_down
|
|
|
|
ship_is_up:
|
|
lda PILLAR_ON
|
|
cmp #(PILLAR_SNAKE|PILLAR_BUG|PILLAR_LEAF)
|
|
beq done_adjusting_ship
|
|
|
|
; lower ship
|
|
lda #0
|
|
jmp move_the_ship
|
|
|
|
ship_is_down:
|
|
|
|
lda PILLAR_ON
|
|
cmp #(PILLAR_SNAKE|PILLAR_BUG|PILLAR_LEAF)
|
|
bne done_adjusting_ship
|
|
|
|
; raise ship
|
|
lda #1
|
|
jmp move_the_ship
|
|
|
|
done_adjusting_ship:
|
|
rts
|
|
|
|
|
|
move_the_ship:
|
|
sta SHIP_RAISED
|
|
|
|
; play noise
|
|
|
|
jsr beep
|
|
|
|
; adjust the backgrounds
|
|
|
|
jsr adjust_ship
|
|
|
|
rts
|
|
|
|
|
|
;===========================
|
|
; BEEP (inlined)
|
|
;===========================
|
|
beep:
|
|
ldy #235
|
|
sty tone_smc+1
|
|
|
|
; BEEP
|
|
; repeat 30 times
|
|
lda #30 ; 2
|
|
tone1_loop:
|
|
|
|
tone_smc:
|
|
|
|
ldy #24 ; 2
|
|
loopC: ldx #6 ; 2
|
|
loopD: dex ; 1
|
|
bne loopD ; 2
|
|
dey ; 1
|
|
bne loopC ; 2
|
|
|
|
bit SPEAKER ; 3 ; click speaker
|
|
|
|
sec ; 1
|
|
sbc #1 ; 2
|
|
bne tone1_loop ; 2
|
|
|
|
; Try X=6 Y=21 cycles=757
|
|
; Try X=6 Y=24 cycles=865
|
|
; Try X=7 Y=235 cycles=9636
|
|
|
|
rts
|
|
|
|
|
|
|
|
|
|
powersoftwo:
|
|
.byte $01,$02,$04,$08,$10,$20,$40,$80
|
|
|
|
pillar_sprites:
|
|
.word eye_sprite,snake_sprite,bug_sprite,anchor_sprite
|
|
.word arrow_sprite,leaf_sprite,cross_sprite,emu_sprite
|
|
|
|
eye_sprite: ; @17,16
|
|
.byte 7,6
|
|
.byte $AA,$AA,$AA,$AA,$AA,$AA,$AA
|
|
.byte $AA,$AA,$4A,$4A,$4A,$AA,$AA
|
|
.byte $4A,$A4,$44,$A4,$44,$A4,$4A
|
|
.byte $A4,$4A,$44,$4A,$44,$4A,$A4
|
|
.byte $AA,$AA,$A4,$A4,$A4,$AA,$AA
|
|
.byte $AA,$AA,$AA,$AA,$AA,$AA,$AA
|
|
|
|
snake_sprite: ; @17,16
|
|
.byte 6,6
|
|
.byte $AA,$4A,$4A,$AA,$AA,$AA
|
|
.byte $AA,$44,$AA,$4A,$A4,$4A
|
|
.byte $AA,$44,$AA,$44,$AA,$44
|
|
.byte $AA,$44,$AA,$44,$AA,$44
|
|
.byte $AA,$44,$AA,$44,$AA,$44
|
|
.byte $AA,$AA,$A4,$AA,$AA,$A4
|
|
|
|
bug_sprite: ; @17,16
|
|
.byte 6,5
|
|
.byte $AA,$AA,$AA,$AA,$AA,$AA
|
|
.byte $AA,$44,$AA,$44,$AA,$44
|
|
.byte $AA,$4A,$44,$44,$44,$4A
|
|
.byte $AA,$AA,$44,$44,$44,$AA
|
|
.byte $AA,$44,$AA,$A4,$AA,$44
|
|
|
|
|
|
anchor_sprite: ; @17,16
|
|
.byte 6,6
|
|
.byte $AA,$AA,$AA,$4A,$AA,$AA
|
|
.byte $AA,$AA,$AA,$44,$AA,$AA
|
|
.byte $AA,$AA,$A4,$44,$A4,$AA
|
|
.byte $AA,$AA,$AA,$44,$AA,$AA
|
|
.byte $AA,$A4,$4A,$44,$4A,$A4
|
|
.byte $AA,$AA,$AA,$A4,$AA,$AA
|
|
|
|
arrow_sprite: ; @17,16
|
|
.byte 7,6
|
|
.byte $AA,$AA,$AA,$AA,$4A,$4A,$4A
|
|
.byte $AA,$AA,$AA,$AA,$AA,$44,$44
|
|
.byte $AA,$AA,$AA,$4A,$A4,$AA,$A4
|
|
.byte $AA,$AA,$44,$AA,$AA,$AA,$AA
|
|
.byte $A4,$44,$AA,$AA,$AA,$AA,$AA
|
|
.byte $AA,$A4,$AA,$AA,$AA,$AA,$AA
|
|
|
|
leaf_sprite: ; @17,16
|
|
.byte 6,6
|
|
.byte $AA,$4A,$AA,$AA,$AA,$4A
|
|
.byte $AA,$44,$44,$4A,$44,$44
|
|
.byte $AA,$44,$44,$44,$44,$AA
|
|
.byte $AA,$A4,$44,$44,$44,$4A
|
|
.byte $AA,$4A,$AA,$44,$44,$44
|
|
.byte $AA,$A4,$AA,$AA,$AA,$AA
|
|
|
|
cross_sprite: ; @17,16
|
|
.byte 6,6
|
|
.byte $AA,$AA,$AA,$AA,$AA,$AA
|
|
.byte $AA,$AA,$A4,$44,$A4,$AA
|
|
.byte $AA,$4A,$AA,$44,$AA,$4A
|
|
.byte $AA,$44,$A4,$44,$A4,$44
|
|
.byte $AA,$AA,$AA,$44,$AA,$AA
|
|
.byte $AA,$AA,$A4,$A4,$A4,$AA
|
|
|
|
emu_sprite: ; @17,16
|
|
.byte 7,6
|
|
.byte $AA,$AA,$AA,$AA,$AA,$4A,$AA
|
|
.byte $AA,$AA,$AA,$AA,$AA,$44,$A4
|
|
.byte $AA,$4A,$44,$44,$44,$44,$AA
|
|
.byte $AA,$44,$44,$44,$44,$A4,$AA
|
|
.byte $AA,$44,$AA,$44,$AA,$AA,$AA
|
|
.byte $AA,$AA,$AA,$A4,$A4,$AA,$AA
|
|
|
|
|
|
|
|
tree2_pillars:
|
|
lda DIRECTION
|
|
cmp #DIRECTION_E
|
|
beq tree2_east
|
|
cmp #DIRECTION_W
|
|
beq tree2_west
|
|
|
|
; handle the pool marker switch
|
|
tree2_north:
|
|
lda CURSOR_X
|
|
cmp #25
|
|
bcc tree2_not_switch
|
|
cmp #32
|
|
bcs tree2_not_switch
|
|
|
|
lda CURSOR_Y
|
|
cmp #16
|
|
bcc tree2_not_switch
|
|
cmp #24
|
|
bcs tree2_not_switch
|
|
|
|
lda #MARKER_POOL
|
|
jmp click_marker_switch
|
|
|
|
tree2_not_switch:
|
|
; we have to fake going north
|
|
lda #MIST_TREE_CORRIDOR_1
|
|
sta LOCATION
|
|
jmp change_location
|
|
|
|
tree2_west:
|
|
lda CURSOR_X
|
|
cmp #22
|
|
bcs goto_bug_pillar
|
|
bcc goto_anchor_pillar
|
|
|
|
tree2_east:
|
|
lda CURSOR_X
|
|
cmp #18
|
|
bcs goto_arrow_pillar
|
|
bcc goto_leaf_pillar
|
|
|
|
pool_pillars:
|
|
lda DIRECTION
|
|
cmp #DIRECTION_E
|
|
beq pool_east
|
|
bne pool_west
|
|
|
|
pool_west:
|
|
lda CURSOR_X
|
|
cmp #28
|
|
bcs goto_eye_pillar
|
|
cmp #12
|
|
bcs goto_snake_pillar
|
|
bcc goto_bug_pillar
|
|
|
|
pool_east:
|
|
lda CURSOR_X
|
|
cmp #28
|
|
bcs goto_leaf_pillar
|
|
cmp #11
|
|
bcs goto_cross_pillar
|
|
bcc goto_emu_pillar
|
|
|
|
|
|
goto_eye_pillar:
|
|
lda #MIST_PILLAR_EYE
|
|
jmp done_pillar
|
|
|
|
goto_snake_pillar:
|
|
lda #MIST_PILLAR_SNAKE
|
|
jmp done_pillar
|
|
|
|
goto_bug_pillar:
|
|
lda #MIST_PILLAR_BUG
|
|
jmp done_pillar
|
|
|
|
goto_anchor_pillar:
|
|
lda #MIST_PILLAR_ANCHOR
|
|
jmp done_pillar
|
|
|
|
|
|
goto_emu_pillar:
|
|
lda #MIST_PILLAR_EMU
|
|
jmp done_pillar
|
|
|
|
goto_cross_pillar:
|
|
lda #MIST_PILLAR_CROSS
|
|
jmp done_pillar
|
|
|
|
goto_leaf_pillar:
|
|
lda #MIST_PILLAR_LEAF
|
|
jmp done_pillar
|
|
|
|
goto_arrow_pillar:
|
|
lda #MIST_PILLAR_ARROW
|
|
jmp done_pillar
|
|
|
|
done_pillar:
|
|
sta LOCATION
|
|
jmp change_location
|
|
|
|
|
|
|
|
;=======================
|
|
; flip circuit breaker
|
|
|
|
; if room==MIST_TOWER2_TOP, and with #$fe
|
|
; if room==MIST_TOWER1_TOP, and with #$fd
|
|
|
|
circuit_breaker:
|
|
|
|
bit $C030 ; click speaker
|
|
|
|
lda LOCATION
|
|
cmp #MIST_TOWER2_TOP
|
|
bne other_circuit_breaker
|
|
|
|
lda BREAKER_TRIPPED
|
|
and #$fe
|
|
jmp done_circuit_breaker
|
|
|
|
other_circuit_breaker:
|
|
lda BREAKER_TRIPPED
|
|
and #$fd
|
|
|
|
done_circuit_breaker:
|
|
sta BREAKER_TRIPPED
|
|
|
|
bne done_turn_on_breaker
|
|
|
|
turn_on_breaker:
|
|
|
|
lda GENERATOR_VOLTS
|
|
cmp #$60
|
|
bcs done_turn_on_breaker
|
|
|
|
sta ROCKET_VOLTS
|
|
sta ROCKET_VOLTS_DISP
|
|
|
|
|
|
done_turn_on_breaker:
|
|
|
|
rts
|
|
|
|
|
|
;======================
|
|
; open the spaceship door
|
|
|
|
open_ss_door:
|
|
|
|
; check if voltage is 59
|
|
lda ROCKET_VOLTS
|
|
cmp #$59
|
|
bne done_ss_door
|
|
|
|
; change to open door image
|
|
ldy #LOCATION_NORTH_BG
|
|
lda #<spaceship_door_open_n_lzsa
|
|
sta location26,Y ; MIST_ROCKET_CLOSE
|
|
lda #>spaceship_door_open_n_lzsa
|
|
sta location26+1,Y ; MIST_ROCKET_CLOSE
|
|
|
|
; change to load new level if through
|
|
ldy #LOCATION_SPECIAL_FUNC
|
|
lda #<(go_to_selena-1)
|
|
sta location26,Y ; MIST_ROCKET_CLOSE
|
|
lda #>(go_to_selena-1)
|
|
sta location26+1,Y ; MIST_ROCKET_CLOSE
|
|
|
|
jsr change_location
|
|
|
|
done_ss_door:
|
|
rts
|
|
|
|
|
|
;======================
|
|
; go to selena
|
|
;======================
|
|
|
|
go_to_selena:
|
|
|
|
lda #LOAD_SELENA ; Selena
|
|
sta WHICH_LOAD
|
|
|
|
lda #$ff
|
|
sta LEVEL_OVER
|
|
|
|
rts
|
|
|
|
;======================
|
|
; go to generator
|
|
;======================
|
|
|
|
go_to_generator:
|
|
|
|
lda CURSOR_X
|
|
cmp #27
|
|
bcs goto_tower
|
|
|
|
cmp #13
|
|
bcs goto_shack
|
|
|
|
marker_switch:
|
|
lda CURSOR_Y
|
|
cmp #24
|
|
bcc missed_switch
|
|
|
|
cmp #38
|
|
bcs missed_switch
|
|
|
|
lda #MARKER_GENERATOR
|
|
jmp click_marker_switch
|
|
|
|
missed_switch:
|
|
|
|
rts
|
|
|
|
goto_shack:
|
|
lda #GEN_GREEN_SHACK
|
|
jmp into_generator
|
|
|
|
goto_tower:
|
|
lda #GEN_TOWER1_TRAIL
|
|
|
|
into_generator:
|
|
sta LOCATION
|
|
|
|
lda #LOAD_GENERATOR ; Selena
|
|
sta WHICH_LOAD
|
|
|
|
lda #$ff
|
|
sta LEVEL_OVER
|
|
|
|
rts
|
|
|
|
|
|
|
|
;=================================
|
|
; marker switch compartment stuff
|
|
;=================================
|
|
|
|
draw_white_page:
|
|
|
|
lda DIRECTION
|
|
cmp #DIRECTION_N
|
|
bne no_white_page
|
|
|
|
lda COMPARTMENT_OPEN
|
|
beq no_white_page
|
|
|
|
lda WHITE_PAGE_TAKEN
|
|
bne no_white_page
|
|
|
|
lda #<white_page_sprite
|
|
sta INL
|
|
lda #>white_page_sprite
|
|
sta INH
|
|
|
|
lda #25
|
|
sta XPOS
|
|
lda #34
|
|
sta YPOS
|
|
|
|
jsr put_sprite_crop
|
|
|
|
no_white_page:
|
|
rts
|
|
|
|
|
|
grab_white_page:
|
|
lda WHITE_PAGE_TAKEN
|
|
bne missing_page
|
|
|
|
jmp take_white_page
|
|
|
|
missing_page:
|
|
rts
|
|
|