mirror of
https://github.com/deater/dos33fsprogs.git
synced 2024-08-18 23:29:26 +00:00
229 lines
4.2 KiB
ArmAsm
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
|
|
|
|
|