mist: stoney: can now unlock hatch to get above lighthouse

This commit is contained in:
Vince Weaver 2020-08-10 14:03:57 -04:00
parent 29bb054128
commit f0f0140b4a
7 changed files with 169 additions and 3 deletions

View File

@ -58,7 +58,7 @@ finger_match_lit_sprite:
finger_key_sprite:
.byte 6,4
.byte $aa,$aa,$aa,$aa,$aa,$ba
.byte $aa,$aa,$aa,$aa,$aa,$bd
.byte $dd,$dd,$dd,$dd,$db,$bb
.byte $aa,$ad,$aa,$ab,$bd,$bb
.byte $aa,$aa,$aa,$aa,$ab,$ab

View File

@ -15,6 +15,7 @@ stoney_graphics.inc: \
lighthouse_path_e.lzsa lighthouse_path_w.lzsa \
lighthouse_door_e.lzsa lighthouse_door_w.lzsa \
lighthouse_inside_e.lzsa lighthouse_inside_w.lzsa \
lighthouse_inside_locked_e.lzsa \
lighthouse_inside_n.lzsa \
lighthouse_inside_nowater_n.lzsa lighthouse_inside_notrunk_n.lzsa \
lighthouse_inside_lidup_n.lzsa \
@ -67,6 +68,7 @@ stoney_graphics.inc: \
echo "lighthouse_door_e_lzsa: .incbin \"lighthouse_door_e.lzsa\"" >> stoney_graphics.inc
echo "lighthouse_door_w_lzsa: .incbin \"lighthouse_door_w.lzsa\"" >> stoney_graphics.inc
echo "lighthouse_inside_e_lzsa: .incbin \"lighthouse_inside_e.lzsa\"" >> stoney_graphics.inc
echo "lighthouse_inside_locked_e_lzsa: .incbin \"lighthouse_inside_locked_e.lzsa\"" >> stoney_graphics.inc
echo "lighthouse_inside_w_lzsa: .incbin \"lighthouse_inside_w.lzsa\"" >> stoney_graphics.inc
echo "lighthouse_inside_n_lzsa: .incbin \"lighthouse_inside_n.lzsa\"" >> stoney_graphics.inc
echo "lighthouse_inside_nowater_n_lzsa: .incbin \"lighthouse_inside_nowater_n.lzsa\"" >> stoney_graphics.inc

Binary file not shown.

Before

Width:  |  Height:  |  Size: 862 B

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

View File

@ -98,7 +98,7 @@ location4:
.byte STONEY_LIGHTHOUSE_PATH ; west exit
.byte $ff ; north exit_dir
.byte $ff ; south exit_dir
.byte DIRECTION_E ; east exit_dir
.byte DIRECTION_E|DIRECTION_ONLY_POINT ; east exit_dir
.byte DIRECTION_W ; west exit_dir
.word $0000 ; north bg
.word $0000 ; south bg

View File

@ -52,6 +52,8 @@ stoney_start:
jsr update_compass_state
jsr update_tunnel_lights
jsr update_pump_state
jsr update_hatch_state
jsr update_inside_lighthouse_action
lda #1
sta CURSOR_VISIBLE ; visible at first

View File

@ -1469,9 +1469,12 @@ trunk_open_plug:
bne water_already_gone
lda #12
sta ANIMATE_FRAME
bne water_water_water ; bra
water_already_gone:
lda #0
water_water_water:
sta ANIMATE_FRAME
lda TRUNK_STATE
eor #TRUNK_VALVE_OPEN
ora #TRUNK_WATER_DRAINED
@ -1619,9 +1622,28 @@ inside_and_drained:
lda #STONEY_LIGHTHOUSE_SPIRAL
sta LOCATION
jmp change_location
inside_water_up:
lda TRUNK_STATE
and #TRUNK_LID_OPEN
beq inside_water_do_nothing
; take key
lda TRUNK_STATE
ora #TRUNK_KEY_TAKEN
sta TRUNK_STATE
; switch cursor to have key
lda #HOLDING_KEY
sta HOLDING_ITEM
; HACK
; swap out so we can open lock now
jsr update_inside_lighthouse_action
inside_water_do_nothing:
rts
rotate_to_ladder:
@ -1630,6 +1652,9 @@ rotate_to_ladder:
jmp change_direction
;=============================
; draw inside of lighthouse
;=============================
draw_inside_lighthouse:
@ -1640,6 +1665,26 @@ draw_inside_lighthouse:
looking_toward_trunk:
; if trunk is open and key not taken, draw it
lda TRUNK_STATE
and #(TRUNK_KEY_TAKEN|TRUNK_LID_OPEN)
cmp #TRUNK_LID_OPEN
bne dont_draw_key
lda #16
sta XPOS
lda #30
sta YPOS
lda #<trunk_key_sprite
sta INL
lda #>trunk_key_sprite
sta INH
jsr put_sprite_crop
dont_draw_key:
lda ANIMATE_FRAME
; since 0 is the static image, we can just treat
@ -1767,3 +1812,120 @@ trunk_key_sprite:
.byte $00,$A0,$A0,$00,$A0
;============================
; update hatch state
;============================
update_hatch_state:
; default is locked and can't go to top
lda TRUNK_STATE
and #TRUNK_HATCH_OPEN
beq close_hatch
open_hatch:
ldy #LOCATION_EAST_EXIT
lda #STONEY_LIGHTHOUSE_UPSTAIRS
sta location5,Y ; STONEY_LIGHTHOUSE_INSIDE
ldy #LOCATION_EAST_BG
lda #<lighthouse_inside_e_lzsa
sta location5,Y ; STONEY_LIGHTHOUSE_INSIDE
lda #>lighthouse_inside_e_lzsa
sta location5+1,Y ; STONEY_LIGHTHOUSE_INSIDE
rts
close_hatch:
ldy #LOCATION_EAST_EXIT
lda #$ff
sta location5,Y ; STONEY_LIGHTHOUSE_INSIDE
ldy #LOCATION_EAST_BG
lda #<lighthouse_inside_locked_e_lzsa
sta location5,Y ; STONEY_LIGHTHOUSE_INSIDE
lda #>lighthouse_inside_locked_e_lzsa
sta location5+1,Y ; STONEY_LIGHTHOUSE_INSIDE
rts
;========================
; update inside lighthouse action
;========================
; change action behavior if holding key
update_inside_lighthouse_action:
lda HOLDING_ITEM
cmp #HOLDING_KEY
bne normal_action
holding_action:
ldy #LOCATION_SPECIAL_EXIT
lda #DIRECTION_E
sta location5,Y ; STONEY_LIGHTHOUSE_INSIDE
ldy #LOCATION_SPECIAL_X1
lda #12
sta location5,Y
lda #19
sta location5+1,Y
lda #8
sta location5+2,Y
lda #20
sta location5+3,Y
ldy #LOCATION_SPECIAL_FUNC
lda #<(unlock_hatch-1)
sta location5,Y
lda #>(unlock_hatch-1)
sta location5+1,Y
rts
normal_action:
ldy #LOCATION_SPECIAL_EXIT
lda #DIRECTION_N
sta location5,Y ; STONEY_LIGHTHOUSE_INSIDE
ldy #LOCATION_SPECIAL_X1
lda #10
sta location5,Y
lda #35
sta location5+1,Y
lda #20
sta location5+2,Y
lda #44
sta location5+3,Y
ldy #LOCATION_SPECIAL_FUNC
lda #<(handle_inside_lighthouse-1)
sta location5,Y
lda #>(handle_inside_lighthouse-1)
sta location5+1,Y
rts
;========================
; unlock the hatch
;========================
; FIXME: show animation?
; drop key?
; in actual game you still have to manually open hatch
; after the lock falls off
unlock_hatch:
; drop key
lda #0
sta HOLDING_ITEM
jsr update_inside_lighthouse_action
; unlock the hatch
lda TRUNK_STATE
ora #TRUNK_HATCH_OPEN
sta TRUNK_STATE
jsr update_hatch_state
jmp change_direction