mist: channelwood: can link back to mist finally

This commit is contained in:
Vince Weaver 2020-06-16 01:10:33 -04:00
parent 42ef2297d7
commit ee13a0e1b9
18 changed files with 313 additions and 16 deletions

View File

@ -190,6 +190,7 @@ channel.o: channel.s zp.inc hardware.inc common_defines.inc \
keyboard.s \
draw_pointer.s \
link_book_channel.s \
link_book_mist.s \
gr_copy.s audio.s text_print.s decompress_fast_v2.s
ca65 -o channel.o channel.s -l channel.lst

View File

@ -39,6 +39,13 @@ channel_start:
lda #0
sta ANIMATE_FRAME
; reset elevators and bridges at start
; actual game does this too?
lda CHANNEL_SWITCHES
and #~(CHANNEL_BRIDGE_UP|CHANNEL_PIPE_EXTENDED|CHANNEL_BOOK_ELEVATOR_UP)
sta CHANNEL_SWITCHES
; set up bridges
jsr adjust_after_changes
@ -67,11 +74,20 @@ game_loop:
lda LOCATION
cmp #CHANNEL_TREE_BOOK_OPEN
beq animate_channel_book
cmp #CHANNEL_BOOK_OPEN
beq animate_mist_book
jmp nothing_special
animate_channel_book:
lda ANIMATE_FRAME
cmp #11
bcc channel_book_good
lda #0
sta ANIMATE_FRAME
channel_book_good:
; handle animated linking book
lda ANIMATE_FRAME
@ -83,24 +99,47 @@ animate_channel_book:
sta INH
lda #22
sta XPOS
lda #12
sta YPOS
jsr put_sprite_crop
jmp draw_book
lda FRAMEL
and #$f
animate_mist_book:
lda DIRECTION
cmp #DIRECTION_S
bne done_animate_book
inc ANIMATE_FRAME
lda ANIMATE_FRAME
cmp #11
bne done_animate_book
lda #0
sta ANIMATE_FRAME
cmp #6
bcc mist_book_good ; blt
lda #0
sta ANIMATE_FRAME
mist_book_good:
asl
tay
lda mist_movie,Y
sta INL
lda mist_movie+1,Y
sta INH
lda #24
draw_book:
sta XPOS
lda #12
sta YPOS
jsr put_sprite_crop
lda FRAMEL
and #$f
bne done_animate_book
inc ANIMATE_FRAME
done_animate_book:
jmp nothing_special
jmp nothing_special
nothing_special:
@ -268,5 +307,6 @@ exit_to_mist:
; linking books
.include "link_book_mist.s"
.include "link_book_channel.s"

View File

@ -1,3 +1,80 @@
;===========================
; pick up myst linking book
book_room_grab_book:
lda #CHANNEL_BOOK_CLOSED
sta LOCATION
jmp change_location
rts
;=============================
; book elevator handle pulled
; FIXME: check for water power
; FIXME: animate
book_elevator_handle:
; click speaker
bit SPEAKER
; check for water power
; toggle floor
lda CHANNEL_SWITCHES
eor #CHANNEL_BOOK_ELEVATOR_UP
sta CHANNEL_SWITCHES
and #CHANNEL_BOOK_ELEVATOR_UP
bne book_elevator_floor2
book_elevator_floor1:
; change to ground floor
ldy #LOCATION_SOUTH_BG
lda #<book_elevator_inside_gnd_closed_lzsa
sta location44,Y ; CHANNEL_BOOK_E_IN_CLOSED
lda #>book_elevator_inside_gnd_closed_lzsa
sta location44+1,Y ; CHANNEL_BOOK_E_IN_CLOSED
; change exit
ldy #LOCATION_SOUTH_EXIT
lda #CHANNEL_BOOK_E_INSIDE_GND
sta location44,Y ; CHANNEL_BOOK_E_IN_CLOSED
jmp book_elevator_handle_done
book_elevator_floor2:
; change to 2nd floor
ldy #LOCATION_SOUTH_BG
lda #<book_elevator_inside_top_closed_lzsa
sta location44,Y ; CHANNEL_BOOK_E_IN_CLOSED
lda #>book_elevator_inside_top_closed_lzsa
sta location44+1,Y ; CHANNEL_BOOK_E_IN_CLOSED
; change exit
ldy #LOCATION_SOUTH_EXIT
lda #CHANNEL_BOOK_E_INSIDE_TOP
sta location44,Y ; CHANNEL_BOOK_E_IN_CLOSED
book_elevator_handle_done:
jsr change_location
rts
;=========================
; close door
book_elevator_close_door:
lda #CHANNEL_BOOK_E_IN_CLOSED
sta LOCATION
jmp change_location
;=======================
; raise bridge

View File

@ -350,3 +350,12 @@ CHANNEL_AFTER_BRIDGE1 = 37
CHANNEL_AFTER_BRIDGE2 = 38
CHANNEL_BOOK_FORK = 39
CHANNEL_PIPE_EXTEND = 40
CHANNEL_BOOK_ELEVATOR = 41
CHANNEL_BOOK_E_OPEN = 42
CHANNEL_BOOK_E_INSIDE_GND= 43
CHANNEL_BOOK_E_IN_CLOSED= 44
CHANNEL_BOOK_E_INSIDE_TOP= 45
CHANNEL_BOOK_ROOM = 46
CHANNEL_BOOK_CLOSED = 47
CHANNEL_BOOK_OPEN = 48

View File

@ -48,7 +48,13 @@ channel_graphics.inc: \
after_bridge1_e.lzsa after_bridge1_w.lzsa \
after_bridge2_e.lzsa after_bridge2_w.lzsa \
book_fork_n.lzsa book_fork_s.lzsa book_fork_w.lzsa \
pipe_extend_n.lzsa pipe_extend_down_s.lzsa pipe_extend_up_s.lzsa
pipe_extend_n.lzsa pipe_extend_down_s.lzsa pipe_extend_up_s.lzsa \
book_room_n.lzsa book_room_s.lzsa \
book_elevator_s.lzsa \
book_elevator_open_n.lzsa book_elevator_closed_n.lzsa \
book_elevator_inside_gnd_open.lzsa book_elevator_inside_gnd_closed.lzsa \
book_elevator_inside_top_open.lzsa book_elevator_inside_top_closed.lzsa \
book_mist_closed_s.lzsa book_mist_open_s.lzsa
echo "arrival_n_lzsa: .incbin \"arrival_n.lzsa\"" > channel_graphics.inc
echo "arrival_s_lzsa: .incbin \"arrival_s.lzsa\"" >> channel_graphics.inc
echo "clearing_e_lzsa: .incbin \"clearing_e.lzsa\"" >> channel_graphics.inc
@ -135,6 +141,17 @@ channel_graphics.inc: \
echo "pipe_extend_n_lzsa: .incbin \"pipe_extend_n.lzsa\"" >> channel_graphics.inc
echo "pipe_extend_up_s_lzsa: .incbin \"pipe_extend_up_s.lzsa\"" >> channel_graphics.inc
echo "pipe_extend_down_s_lzsa: .incbin \"pipe_extend_down_s.lzsa\"" >> channel_graphics.inc
echo "book_room_n_lzsa: .incbin \"book_room_n.lzsa\"" >> channel_graphics.inc
echo "book_room_s_lzsa: .incbin \"book_room_s.lzsa\"" >> channel_graphics.inc
echo "book_elevator_s_lzsa: .incbin \"book_elevator_s.lzsa\"" >> channel_graphics.inc
echo "book_elevator_open_n_lzsa: .incbin \"book_elevator_open_n.lzsa\"" >> channel_graphics.inc
echo "book_elevator_closed_n_lzsa: .incbin \"book_elevator_closed_n.lzsa\"" >> channel_graphics.inc
echo "book_elevator_inside_gnd_open_lzsa: .incbin \"book_elevator_inside_gnd_open.lzsa\"" >> channel_graphics.inc
echo "book_elevator_inside_gnd_closed_lzsa: .incbin \"book_elevator_inside_gnd_closed.lzsa\"" >> channel_graphics.inc
echo "book_elevator_inside_top_open_lzsa: .incbin \"book_elevator_inside_top_open.lzsa\"" >> channel_graphics.inc
echo "book_elevator_inside_top_closed_lzsa: .incbin \"book_elevator_inside_top_closed.lzsa\"" >> channel_graphics.inc
echo "book_mist_closed_s_lzsa: .incbin \"book_mist_closed_s.lzsa\"" >> channel_graphics.inc
echo "book_mist_open_s_lzsa: .incbin \"book_mist_open_s.lzsa\"" >> channel_graphics.inc
%.gr: %.png
$(PNG2GR) $< $@

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

View File

@ -13,7 +13,9 @@ locations:
.word location28,location29,location30,location31
.word location32,location33,location34,location35
.word location36,location37,location38,location39
.word location40
.word location40,location41,location42,location43
.word location44,location45,location46,location47
.word location48
; CHANNEL_OUTSIDE_CABIN -- outside in clearing
location0:
@ -707,11 +709,11 @@ location38:
; CHANNEL_BOOK_FORK -- fork to book elevator
location39:
.byte $ff ; north exit
.byte CHANNEL_BOOK_ELEVATOR ; north exit
.byte CHANNEL_PIPE_EXTEND ; south exit
.byte $ff ; east exit
.byte CHANNEL_AFTER_BRIDGE2 ; west exit
.byte $ff ; north exit_dir
.byte DIRECTION_N ; north exit_dir
.byte DIRECTION_S ; south exit_dir
.byte $ff ; east exit_dir
.byte DIRECTION_W ; west exit_dir
@ -742,4 +744,154 @@ location40:
.byte 34,40 ; special y
.word extend_pipe-1 ; special function
; CHANNEL_BOOK_ELEVATOR -- outside book elevator, door closed
location41:
.byte CHANNEL_BOOK_E_OPEN ; north exit
.byte CHANNEL_BOOK_FORK ; south exit
.byte $ff ; east exit
.byte $ff ; west exit
.byte DIRECTION_N ; north exit_dir
.byte DIRECTION_S ; south exit_dir
.byte $ff ; east exit_dir
.byte $ff ; west exit_dir
.word book_elevator_closed_n_lzsa ; north bg
.word book_elevator_s_lzsa ; south bg
.word $0000 ; east bg
.word $0000 ; west bg
.byte BG_NORTH|BG_SOUTH
.byte $ff ; special exit
; CHANNEL_E_OPEN -- outside book elevator, door open
location42:
.byte CHANNEL_BOOK_E_INSIDE_GND ; north exit
.byte CHANNEL_BOOK_FORK ; south exit
.byte $ff ; east exit
.byte $ff ; west exit
.byte DIRECTION_S ; north exit_dir
.byte DIRECTION_S ; south exit_dir
.byte $ff ; east exit_dir
.byte $ff ; west exit_dir
.word book_elevator_open_n_lzsa ; north bg
.word book_elevator_s_lzsa ; south bg
.word $0000 ; east bg
.word $0000 ; west bg
.byte BG_NORTH|BG_SOUTH
.byte $ff ; special exit
; CHANNEL_BOOK_E_INSIDE_GND -- inside book elevator, gnd, door open
location43:
.byte $ff ; north exit
.byte CHANNEL_BOOK_ELEVATOR ; south exit
.byte $ff ; east exit
.byte $ff ; west exit
.byte $ff ; north exit_dir
.byte DIRECTION_S ; south exit_dir
.byte $ff ; east exit_dir
.byte $ff ; west exit_dir
.word $ff ; north bg
.word book_elevator_inside_gnd_open_lzsa ; south bg
.word $0000 ; east bg
.word $0000 ; west bg
.byte BG_SOUTH
.byte DIRECTION_S ; special exit
.byte 10,17 ; special x
.byte 6,46 ; special y
.word book_elevator_close_door-1 ; special function
; CHANNEL_BOOK_E_IN_CLOSED -- inside book elevator, door closed
location44:
.byte $ff ; north exit
.byte CHANNEL_BOOK_E_INSIDE_GND ; south exit
.byte $ff ; east exit
.byte $ff ; west exit
.byte $ff ; north exit_dir
.byte DIRECTION_S ; south exit_dir
.byte $ff ; east exit_dir
.byte $ff ; west exit_dir
.word $ff ; north bg
.word book_elevator_inside_gnd_closed_lzsa ; south bg
.word $0000 ; east bg
.word $0000 ; west bg
.byte BG_SOUTH
.byte DIRECTION_S ; special exit
.byte 28,34 ; special x
.byte 28,36 ; special y
.word book_elevator_handle-1 ; special function
; CHANNEL_BOOK_E_INSIDE_TOP -- inside book elevator, top, door open
location45:
.byte $ff ; north exit
.byte CHANNEL_BOOK_ROOM ; south exit
.byte $ff ; east exit
.byte $ff ; west exit
.byte $ff ; north exit_dir
.byte DIRECTION_S ; south exit_dir
.byte $ff ; east exit_dir
.byte $ff ; west exit_dir
.word $ff ; north bg
.word book_elevator_inside_top_open_lzsa ; south bg
.word $0000 ; east bg
.word $0000 ; west bg
.byte BG_SOUTH
.byte DIRECTION_S ; special exit
.byte 10,17 ; special x
.byte 6,46 ; special y
.word book_elevator_close_door-1 ; special function
; CHANNEL_BOOK_ROOM -- the room with the myst book
location46:
.byte CHANNEL_BOOK_E_INSIDE_TOP ; north exit
.byte $ff ; south exit
.byte $ff ; east exit
.byte $ff ; west exit
.byte DIRECTION_S ; north exit_dir
.byte DIRECTION_S ; south exit_dir
.byte $ff ; east exit_dir
.byte $ff ; west exit_dir
.word book_room_n_lzsa ; north bg
.word book_room_s_lzsa ; south bg
.word $0000 ; east bg
.word $0000 ; west bg
.byte BG_SOUTH|BG_NORTH
.byte DIRECTION_S ; special function
.byte 15,23 ; special x
.byte 30,44 ; special y
.word book_room_grab_book-1 ; special function
; CHANNEL_BOOK_CLOSED -- myst book closed
location47:
.byte CHANNEL_BOOK_E_INSIDE_TOP ; north exit
.byte CHANNEL_BOOK_OPEN ; south exit
.byte $ff ; east exit
.byte $ff ; west exit
.byte DIRECTION_S ; north exit_dir
.byte DIRECTION_S ; south exit_dir
.byte $ff ; east exit_dir
.byte $ff ; west exit_dir
.word book_room_n_lzsa ; north bg
.word book_mist_closed_s_lzsa ; south bg
.word $0000 ; east bg
.word $0000 ; west bg
.byte BG_SOUTH|BG_NORTH
.byte $ff ; special function
; CHANNEL_BOOK_OPEN -- myst book open
location48:
.byte CHANNEL_BOOK_E_INSIDE_TOP ; north exit
.byte CHANNEL_BOOK_ROOM ; south exit
.byte $ff ; east exit
.byte $ff ; west exit
.byte DIRECTION_S ; north exit_dir
.byte DIRECTION_S ; south exit_dir
.byte $ff ; east exit_dir
.byte $ff ; west exit_dir
.word book_room_n_lzsa ; north bg
.word book_mist_open_s_lzsa ; south bg
.word $0000 ; east bg
.word $0000 ; west bg
.byte BG_SOUTH|BG_NORTH
.byte DIRECTION_S
.byte 24,32 ; special x
.byte 12,22 ; special y
.word mist_link_book-1 ; special function

View File

@ -136,6 +136,7 @@ WHITE_PAGE_TAKEN= $B1
CHANNEL_SWITCHES= $B2
CHANNEL_BRIDGE_UP = $01
CHANNEL_PIPE_EXTENDED = $02
CHANNEL_BOOK_ELEVATOR_UP= $04
CHANNEL_SW_WINDMILL = $40
CHANNEL_SW_FAUCET = $80
CHANNEL_VALVES = $B3