; 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