dos33fsprogs/games/mist_hgr/marker_switch.s

229 lines
4.2 KiB
ArmAsm

; Marker switches
; 1 MARKER_DOCK = $01 MIST_DOCK_SWITCH N 0
; 15 MARKER_GEARS = $02 MIST_GEAR N 1
; 18 MARKER_SPACESHIP= $04 MIST_SPACESHIP_SWITCH N 2
; 19 MARKER_GENERATOR= $08 MIST_TREE_CORRIDOR_4 W 3
; 22 MARKER_CLOCK = $10 MIST_CLOCK_ISLAND S 4
; cab/0 MARKER_TREE = $20 CABIN_OUTSIDE E 5
; cab/1 MARKER_TREE = $20 CABIN_OPEN E 5
; 13 MARKER_POOL = $40 MIST_TREE_CORRIDOR_2 N 6
; den/0 MARKER_DENTIST = $80 DENTIST_OUTSIDE N 7
; den/1 MARKER_DENTIST = $80 DENTIST_OUTSIDE_OPEN N 7
; up is on
; game starts with
; map -> library on (always?)
; DOCK = off, draws dock
; DENTIST=off, draws round dentist building
; POOL=off, draws pool and pillars
; SPACESHIP=off, draws spaceship
; geneator=off, draws generator building
; cabin= off, draws shack and tree ring
; clock, off, draws island and box on shore
; gears,, off, draws gears
; note on actual if you open white page but walk away, the door will
; shut and the switch will flip back
; which switch in A
click_marker_switch:
; click
eor MARKER_SWITCHES ; toggle switch
sta MARKER_SWITCHES
cmp #$FE ; all but dock
bne dont_open_secret
lda #1
bne done_handle_secret
dont_open_secret:
lda #0
done_handle_secret:
sta COMPARTMENT_OPEN
jsr click_speaker
jsr click_speaker
rts
marker_sprite_off:
.byte 2,2
.byte $AA,$AA
.byte $6A,$6A
marker_sprite_on:
.byte 2,2
.byte $6A,$6A
.byte $AA,$AA
marker_wide_sprite_off:
.byte 3,2
.byte $AA,$AA,$AA
.byte $6A,$6A,$6A
marker_wide_sprite_on:
.byte 3,2
.byte $96,$A6,$96
.byte $AA,$55,$AA
marker_sprites_on:
.word marker_sprite_on ; dock
.word marker_sprite_on ; gears
.word marker_sprite_on ; spaceship
.word marker_sprite_on ; generator
.word marker_sprite_on ; clock
.word marker_sprite_on ; tree
.word marker_sprite_on ; pool
.word marker_wide_sprite_on ; dentist
marker_sprites_off:
.word marker_sprite_off ; dock
.word marker_sprite_off ; gears
.word marker_sprite_off ; spaceship
.word marker_sprite_off ; generator
.word marker_sprite_off ; clock
.word marker_sprite_off ; tree
.word marker_sprite_off ; pool
.word marker_wide_sprite_off ; dentist
marker_sprites_direction:
.byte DIRECTION_N ; dock
.byte DIRECTION_N ; gears
.byte DIRECTION_N ; spaceship
.byte DIRECTION_W ; generator
.byte DIRECTION_S ; clock
.byte DIRECTION_E ; tree
.byte DIRECTION_N ; pool
.byte DIRECTION_N ; dentist
marker_sprites_xy:
.byte 26,26 ; dock
.byte 7,30 ; gears
.byte 23,22 ; spaceship
.byte 8,28 ; generator
.byte 5,28 ; clock
.byte 24,24 ; cabin
.byte 28,18 ; pool
.byte 5,32 ; dentist
; FIXME: use generic log2 table somewhere
marker_which:
.byte $01,$02,$04,$08,$10,$20,$40,$80
draw_marker_switch:
; see if need to draw
lda WHICH_LOAD
cmp #LOAD_DENTIST
beq marker_check_dentist
cmp #LOAD_CABIN
beq marker_check_cabin
cmp #LOAD_MIST
beq marker_check_myst
rts
marker_check_myst:
lda LOCATION
check_ms_dock:
cmp #MIST_DOCK_SWITCH
bne check_ms_gear
ldy #0
beq draw_marker
check_ms_gear:
cmp #MIST_GEAR
bne check_ms_spaceship
ldy #1
bne draw_marker
check_ms_spaceship:
cmp #MIST_SPACESHIP_SWITCH
bne check_ms_generator
ldy #2
bne draw_marker
check_ms_generator:
cmp #MIST_TREE_CORRIDOR_4
bne check_ms_clock
ldy #3
bne draw_marker
check_ms_clock:
cmp #MIST_CLOCK_ISLAND
bne check_ms_pool
ldy #4
bne draw_marker
check_ms_pool:
cmp #MIST_TREE_CORRIDOR_2
bne done_draw_marker
ldy #6
bne draw_marker
marker_check_dentist:
lda LOCATION
cmp #DENTIST_OUTSIDE
beq dentist_marker
cmp #DENTIST_OUTSIDE_OPEN
bne done_draw_marker
dentist_marker:
ldy #7
bne draw_marker ; bra
marker_check_cabin:
lda LOCATION
cmp #CABIN_OUTSIDE
beq cabin_marker
cmp #CABIN_OPEN
bne done_draw_marker
cabin_marker:
ldy #5
draw_marker:
; check if facing right direction
lda marker_sprites_direction,Y
cmp DIRECTION
bne done_draw_marker
tya
tax
asl
tay
lda marker_sprites_xy,Y
sta XPOS
lda marker_sprites_xy+1,Y
sta YPOS
lda MARKER_SWITCHES
and marker_which,X
beq draw_marker_off
draw_marker_on:
lda marker_sprites_on,Y
sta INL
lda marker_sprites_on+1,Y
jmp actually_draw_marker
draw_marker_off:
lda marker_sprites_off,Y
sta INL
lda marker_sprites_off+1,Y
actually_draw_marker:
sta INH
; jsr put_sprite_crop
done_draw_marker:
rts