mist_hgr: hooray, can go through book to a featureless void

that void is mist island, but apparently really foggy
This commit is contained in:
Vince Weaver 2021-07-13 15:22:29 -04:00
parent c47e3aa4bb
commit 3fec7e69fa
13 changed files with 2610 additions and 47 deletions

View File

@ -19,8 +19,9 @@ all: mist_hgr.dsk
mist_hgr.dsk: QBOOT TEXT_TITLE QLOAD \
MIST_TITLE \
SAVE1 SAVE2 SAVE3 SAVE4 SAVE5
#MIST OCTAGON VIEWER \
SAVE1 SAVE2 SAVE3 SAVE4 SAVE5 \
MIST
# OCTAGON VIEWER \
# DENTIST D\'NI SHIP GENERATOR \
cp $(EMPTY_DISK) mist_hgr.dsk
$(DOS33_RAW) mist_hgr.dsk 0 0 QBOOT 0 1
@ -32,10 +33,9 @@ mist_hgr.dsk: QBOOT TEXT_TITLE QLOAD \
$(DOS33_RAW) mist_hgr.dsk 0 13 SAVE3 0 1
$(DOS33_RAW) mist_hgr.dsk 0 14 SAVE4 0 1
$(DOS33_RAW) mist_hgr.dsk 0 15 SAVE5 0 1
$(DOS33_RAW) mist_hgr.dsk 1 0 QLOAD 0 0
$(DOS33_RAW) mist_hgr.dsk 3 0 MIST_TITLE 0 0
# 84
# $(DOS33_RAW) mist_hgr.dsk 8 0 MIST 0 159
$(DOS33_RAW) mist_hgr.dsk 1 0 QLOAD 0 0
$(DOS33_RAW) mist_hgr.dsk 3 0 MIST_TITLE 0 0
$(DOS33_RAW) mist_hgr.dsk 9 0 MIST 0 0
# $(DOS33_RAW) mist_hgr.dsk 18 0 OCTAGON 0 128
# $(DOS33_RAW) mist_hgr.dsk 26 0 DENTIST 0 31
# $(DOS33_RAW) mist_hgr.dsk 28 0 D\'NI 0 27
@ -177,8 +177,8 @@ common_routines.inc: qload.lst generate_common
MIST_TITLE: mist_title.o
ld65 -o MIST_TITLE mist_title.o -C $(LINKER_SCRIPTS)/apple2_4000.inc
mist_title.o: mist_title.s zp.inc hardware.inc common_defines.inc \
common_routines.inc \
mist_title.o: mist_title.s \
zp.inc hardware.inc common_defines.inc common_routines.inc \
graphics_title_hgr/mist_title.lzsa graphics_title/title_graphics.inc \
gr_offsets.s end_level.s \
draw_pointer.s text_print.s gr_fast_clear.s decompress_fast_v2.s \
@ -191,26 +191,23 @@ mist_title.o: mist_title.s zp.inc hardware.inc common_defines.inc \
####
MIST: mist.o
ld65 -o MIST mist.o -C ./apple2_2000.inc
MIST: mist_island.o
ld65 -o MIST mist_island.o -C $(LINKER_SCRIPTS)/apple2_4000.inc
mist.o: mist.s zp.inc hardware.inc common_defines.inc common_routines.inc \
mist_island.o: mist_island.s \
zp.inc hardware.inc common_defines.inc common_routines.inc \
graphics_mist/mist_graphics.inc \
common_sprites.inc \
leveldata_mist.inc \
clock_bridge_puzzle.s clock_sprites.inc \
clock_bridge_puzzle.s \
marker_switch.s \
keyboard.s \
draw_pointer.s \
end_level.s \
mist_puzzles.s \
handle_pages.s
ca65 -o mist.o mist.s -l mist.lst
keyboard.s draw_pointer.s end_level.s mist_puzzles.s handle_pages.s
ca65 -o mist_island.o mist_island.s -l mist_island.lst
####
GENERATOR: generator.o
ld65 -o GENERATOR generator.o -C ./apple2_2000.inc
ld65 -o GENERATOR generator.o -C $(LINKER_SCRIPTS)/apple2_2000.inc
generator.o: generator.s zp.inc hardware.inc \
common_defines.inc common_routines.inc \
@ -223,7 +220,7 @@ generator.o: generator.s zp.inc hardware.inc \
####
OCTAGON: octagon.o
ld65 -o OCTAGON octagon.o -C ./apple2_2000.inc
ld65 -o OCTAGON octagon.o -C $(LINKER_SCRIPTS)/apple2_2000.inc
octagon.o: octagon.s zp.inc hardware.inc common_defines.inc \
common_routines.inc \
@ -241,7 +238,7 @@ octagon.o: octagon.s zp.inc hardware.inc common_defines.inc \
####
D\'NI: dni.o
ld65 -o D\'NI dni.o -C ./apple2_2000.inc
ld65 -o D\'NI dni.o -C $(LINKER_SCRIPTS)/apple2_2000.inc
dni.o: dni.s zp.inc hardware.inc common_defines.inc \
common_routines.inc \
@ -255,7 +252,7 @@ dni.o: dni.s zp.inc hardware.inc common_defines.inc \
####
MECHE: meche.o
ld65 -o MECHE meche.o -C ./apple2_2000.inc
ld65 -o MECHE meche.o -C $(LINKER_SCRIPTS)/apple2_2000.inc
meche.o: meche.s zp.inc hardware.inc common_defines.inc \
common_routines.inc \
@ -275,7 +272,7 @@ meche.o: meche.s zp.inc hardware.inc common_defines.inc \
####
SELENA: selena.o
ld65 -o SELENA selena.o -C ./apple2_2000.inc
ld65 -o SELENA selena.o -C $(LINKER_SCRIPTS)/apple2_2000.inc
selena.o: selena.s zp.inc hardware.inc common_defines.inc \
common_routines.inc \
@ -294,7 +291,7 @@ selena.o: selena.s zp.inc hardware.inc common_defines.inc \
####
SUB: sub.o
ld65 -o SUB sub.o -C ./apple2_2000.inc
ld65 -o SUB sub.o -C $(LINKER_SCRIPTS)/apple2_2000.inc
sub.o: sub.s zp.inc hardware.inc common_defines.inc \
common_routines.inc \
@ -312,7 +309,7 @@ sub.o: sub.s zp.inc hardware.inc common_defines.inc \
####
VIEWER: viewer.o
ld65 -o VIEWER viewer.o -C ./apple2_2000.inc
ld65 -o VIEWER viewer.o -C $(LINKER_SCRIPTS)/apple2_2000.inc
viewer.o: viewer.s zp.inc hardware.inc common_defines.inc \
graphics_viewer/viewer_graphics.inc \
@ -330,7 +327,7 @@ viewer.o: viewer.s zp.inc hardware.inc common_defines.inc \
####
STONEY: stoney.o
ld65 -o STONEY stoney.o -C ./apple2_2000.inc
ld65 -o STONEY stoney.o -C $(LINKER_SCRIPTS)/apple2_2000.inc
stoney.o: stoney.s zp.inc hardware.inc common_defines.inc \
graphics_stoney/stoney_graphics.inc \
@ -350,7 +347,7 @@ stoney.o: stoney.s zp.inc hardware.inc common_defines.inc \
####
SHIP: ship.o
ld65 -o SHIP ship.o -C ./apple2_2000.inc
ld65 -o SHIP ship.o -C $(LINKER_SCRIPTS)/apple2_2000.inc
ship.o: ship.s zp.inc hardware.inc common_defines.inc \
graphics_ship/ship_graphics.inc \
@ -369,7 +366,7 @@ ship.o: ship.s zp.inc hardware.inc common_defines.inc \
####
CABIN: cabin.o
ld65 -o CABIN cabin.o -C ./apple2_2000.inc
ld65 -o CABIN cabin.o -C $(LINKER_SCRIPTS)/apple2_2000.inc
cabin.o: cabin.s zp.inc hardware.inc common_defines.inc \
common_routines.inc \
@ -389,7 +386,7 @@ cabin.o: cabin.s zp.inc hardware.inc common_defines.inc \
####
CHANNEL: channel.o
ld65 -o CHANNEL channel.o -C ./apple2_2000.inc
ld65 -o CHANNEL channel.o -C $(LINKER_SCRIPTS)/apple2_2000.inc
channel.o: channel.s zp.inc hardware.inc common_defines.inc \
common_routines.inc \
@ -408,7 +405,7 @@ channel.o: channel.s zp.inc hardware.inc common_defines.inc \
####
ARBOR: arbor.o
ld65 -o ARBOR arbor.o -C ./apple2_2000.inc
ld65 -o ARBOR arbor.o -C $(LINKER_SCRIPTS)/apple2_2000.inc
arbor.o: arbor.s zp.inc hardware.inc common_defines.inc \
common_routines.inc \
@ -420,7 +417,7 @@ arbor.o: arbor.s zp.inc hardware.inc common_defines.inc \
####
NIBEL: nibel.o
ld65 -o NIBEL nibel.o -C ./apple2_2000.inc
ld65 -o NIBEL nibel.o -C $(LINKER_SCRIPTS)/apple2_2000.inc
nibel.o: nibel.s zp.inc hardware.inc common_defines.inc \
common_routines.inc \
@ -432,7 +429,7 @@ nibel.o: nibel.s zp.inc hardware.inc common_defines.inc \
####
DENTIST: dentist.o
ld65 -o DENTIST dentist.o -C ./apple2_2000.inc
ld65 -o DENTIST dentist.o -C $(LINKER_SCRIPTS)/apple2_2000.inc
dentist.o: dentist.s zp.inc hardware.inc common_defines.inc \
common_routines.inc \

View File

@ -0,0 +1,524 @@
; note, the clock is a bit different in the real game
; can't see face when pressing buttons
; and the way the hands move is a bit more complex (or is it?)
;======================
; reset the puzzle inside the clock
clock_inside_reset:
lda #0
sta CLOCK_TOP
sta CLOCK_MIDDLE
sta CLOCK_BOTTOM
sta CLOCK_COUNT
sta CLOCK_LAST
rts
;======================
; handle the clock inside puzzle
clock_inside_puzzle:
lda XPOS
cmp #25
bcc inside_not_reset
inside_reset:
jsr clock_inside_reset
rts
inside_not_reset:
lda CLOCK_COUNT
cmp #9
beq inside_done
lda XPOS
cmp #18
bcc inside_left
bcs inside_right
inside_left:
inc CLOCK_MIDDLE
lda CLOCK_LAST
cmp #1
bne left_spin_bottom
lda YPOS
cmp #24
bcs left_nospin_bottom
left_spin_bottom:
inc CLOCK_BOTTOM
left_nospin_bottom:
lda #1
jmp wrap_wheels
inside_right:
inc CLOCK_MIDDLE
lda CLOCK_LAST
cmp #2
bne right_spin_top
lda YPOS
cmp #24
bcs right_nospin_top
right_spin_top:
inc CLOCK_TOP
right_nospin_top:
lda #2
wrap_wheels:
sta CLOCK_LAST
inc CLOCK_COUNT
ldx #0
wrap_wheels_loop:
lda CLOCK_TOP,X
cmp #3
bne no_wrap
lda #0
sta CLOCK_TOP,X
no_wrap:
inx
cpx #3
bne wrap_wheels_loop
; see if done!
; note 0->3, 1->1, 2->2 so want 2/2/1 -> 2/2/1
lda CLOCK_TOP
cmp #2
bne no_open_gear
lda CLOCK_MIDDLE
cmp #2
bne no_open_gear
lda CLOCK_BOTTOM
cmp #1
bne no_open_gear
lda #1
change_gear:
sta GEAR_OPEN
jsr open_the_gear
jmp inside_done
no_open_gear:
lda GEAR_OPEN
beq inside_done
; change if it was open
lda #0
jmp change_gear
inside_done:
rts
;======================
; draw the clock inside
draw_clock_inside:
lda DIRECTION
cmp #DIRECTION_S
bne done_draw_clock_puzzle
; draw weight
; lda #<clock_weight_sprite
; sta INL
; lda #>clock_weight_sprite
; sta INH
; lda #9
; sta XPOS
; lda CLOCK_COUNT
; asl
; asl
; clc
; adc #4
; sta YPOS
; jsr put_sprite_crop
; lda CLOCK_TOP
; asl
; tay
; lda clock_gear_sprites,Y
; sta INL
; lda clock_gear_sprites+1,Y
; sta INH
; lda #17
; sta XPOS
; lda #8
; sta YPOS
; jsr put_sprite_crop
; lda CLOCK_MIDDLE
; asl
; tay
; lda clock_gear_sprites,Y
; sta INL
; lda clock_gear_sprites+1,Y
; sta INH
; lda #17
; sta XPOS
; lda #12
; sta YPOS
; jsr put_sprite_crop
; lda CLOCK_BOTTOM
; asl
; tay
; lda clock_gear_sprites,Y
; sta INL
; lda clock_gear_sprites+1,Y
; sta INH
; lda #17
; sta XPOS
; lda #16
; sta YPOS
; jsr put_sprite_crop
done_draw_clock_puzzle:
rts
;======================
; open the gear
open_the_gear:
lda GEAR_OPEN
beq no_gear_open
yes_gear_open:
ldy #LOCATION_NORTH_EXIT
lda #MIST_OPEN_GEAR
sta location15,Y ; MIST_GEAR
ldy #LOCATION_NORTH_EXIT_DIR
lda #DIRECTION_E
sta location15,Y ; MIST_GEAR
ldy #LOCATION_NORTH_BG
lda #<gear_open_n_lzsa
sta location15,Y ; MIST_GEAR
lda #>gear_open_n_lzsa
sta location15+1,Y ; MIST_GEAR
ldy #LOCATION_SOUTH_BG
lda #<clock_inside_open_lzsa
sta location23,Y ; MIST_CLOCK_INSIDE
lda #>clock_inside_open_lzsa
sta location23+1,Y ; MIST_CLOCK_INSIDE
jmp done_open_the_gear
no_gear_open:
ldy #LOCATION_NORTH_EXIT
lda #$FF
sta location15,Y ; MIST_GEAR
; ldy #LOCATION_NORTH_EXIT_DIR
; lda #DIRECTION_E
; sta location15,Y
ldy #LOCATION_NORTH_BG
lda #<gear_n_lzsa
sta location15,Y ; MIST_GEAR
lda #>gear_n_lzsa
sta location15+1,Y ; MIST_GEAR
ldy #LOCATION_SOUTH_BG
lda #<clock_inside_s_lzsa ; MIST_CLOCK_INSIDE
sta location23,Y
lda #>clock_inside_s_lzsa
sta location23+1,Y
done_open_the_gear:
jsr change_location
rts
;======================
; raise bridge
raise_bridge:
lda CLOCK_BRIDGE
beq lower_bridge
ldy #LOCATION_SOUTH_EXIT
lda #MIST_CLOCK_ISLAND
sta location21,Y ; MIST_CLOCK_PUZZLE
ldy #LOCATION_SOUTH_EXIT_DIR
lda #DIRECTION_S
sta location21,Y ; MIST_CLOCK_PUZZLE
ldy #LOCATION_SOUTH_BG
lda #<clock_puzzle_bridge_lzsa
sta location21,Y ; MIST_CLOCK_PUZZLE
lda #>clock_puzzle_bridge_lzsa
sta location21+1,Y ; MIST_CLOCK_PUZZLE
; draw it on other too
lda #<clock_bridge_lzsa
sta location11,Y ; MIST_CLOCK
lda #>clock_bridge_lzsa
sta location11+1,Y ; MIST_CLOCK
jmp done_clock_bridge
lower_bridge:
ldy #LOCATION_SOUTH_EXIT
; lda #MIST_TREE_CORRIDOR_5
lda #$ff
sta location21,Y ; MIST_CLOCK_PUZZLE
ldy #LOCATION_SOUTH_EXIT_DIR
lda #DIRECTION_N
sta location21,Y ; MIST_CLOCK_PUZZLE
ldy #LOCATION_SOUTH_BG
lda #<clock_puzzle_s_lzsa
sta location21,Y ; MIST_CLOCK_PUZZLE
lda #>clock_puzzle_s_lzsa
sta location21+1,Y ; MIST_CLOCK_PUZZLE
; lower on other too
lda #<clock_s_lzsa
sta location11,Y ; MIST_CLOCK
lda #>clock_s_lzsa
sta location11+1,Y ; MIST_CLOCK
done_clock_bridge:
rts
;======================
; draw the clock face
draw_clock_face:
lda DIRECTION
cmp #DIRECTION_S
bne done_draw_clock_face
lda CLOCK_HOUR
asl
tay
; lda clock_hour_sprites,Y
; sta INL
; lda clock_hour_sprites+1,Y
; sta INH
lda LOCATION
cmp #MIST_CLOCK
bne old_clock_face
new_clock_face:
lda #24
sta XPOS
lda #8
bne done_clock_face ; bra
old_clock_face:
lda #20
sta XPOS
lda #6
done_clock_face:
sta YPOS
; jsr put_sprite_crop
; lda CLOCK_MINUTE
; asl
; tay
; lda clock_minute_sprites,Y
; sta INL
; lda clock_minute_sprites+1,Y
; sta INH
lda LOCATION
cmp #MIST_CLOCK
bne old_clock_face2
new_clock_face2:
lda #24
sta XPOS
lda #8
bne done_clock_face2 ; bra
old_clock_face2:
lda #20
sta XPOS
lda #6
done_clock_face2:
sta YPOS
; jsr put_sprite_crop
done_draw_clock_face:
rts
;======================
; clock puzzle
clock_puzzle:
lda CURSOR_X
cmp #19
bcc clock_puzzle_minutes ; blt
cmp #24
bcc clock_puzzle_hours ; blt
bcs clock_puzzle_button ; bge
clock_puzzle_hours:
inc CLOCK_HOUR
lda CLOCK_HOUR
cmp #12
bne clock_puzzle_done
lda #0
sta CLOCK_HOUR
beq clock_puzzle_done
clock_puzzle_minutes:
inc CLOCK_MINUTE
lda CLOCK_MINUTE
cmp #12
bne clock_puzzle_done
lda #0
sta CLOCK_MINUTE
beq clock_puzzle_done
clock_puzzle_button:
lda CLOCK_MINUTE
cmp #8
bne bridge_down
lda CLOCK_HOUR
cmp #2
bne bridge_down
lda #1
jmp bridge_adjust
bridge_down:
lda #0
bridge_adjust:
sta CLOCK_BRIDGE
jsr click_speaker ; click speaker
jsr raise_bridge
; update the background
jsr change_location
clock_puzzle_done:
rts
;.include "clock_sprites.inc"
; put at 12,6 on screen 4 N
gear_block_sprite1:
.byte 4,3
.byte $ff,$ff,$ff,$ff
.byte $df,$df,$df,$df
.byte $ff,$dd,$ff,$0f
; put at 9,6 on screen 20 N
gear_block_sprite2:
.byte 7,4
.byte $ff,$ff,$ff,$ff,$ff,$ff,$ff
.byte $ff,$ff,$ff,$ff,$ff,$ff,$ff
.byte $fd,$fd,$dd,$ff,$dd,$fd,$df
.byte $ff,$ff,$dd,$ff,$dd,$ff,$0f
; put at 21,4 on screen 5 N
gear_block_sprite3:
.byte 2,2
.byte $ff,$ff
.byte $ff,$ff
check_gear_delete:
; all views of gear are when looking north?
lda DIRECTION
cmp #DIRECTION_N
bne done_gear_delete
lda LOCATION
cmp #MIST_ABOVE_DOCK
beq gear_look1
cmp #MIST_DOCK_STEPS
beq gear_look2
cmp #MIST_GEAR_BASE
beq gear_look2
cmp #MIST_BASE_STEPS
beq gear_look3
cmp #MIST_STEPS_1ST_LANDING
beq gear_look3
bne done_gear_delete
gear_look1:
lda #<gear_block_sprite1
sta INL
lda #>gear_block_sprite1
sta INH
lda #12
sta XPOS
lda #6
jmp draw_gear_delete
gear_look2:
lda #<gear_block_sprite2
sta INL
lda #>gear_block_sprite2
sta INH
lda #9
sta XPOS
lda #6
jmp draw_gear_delete
gear_look3:
lda #<gear_block_sprite3
sta INL
lda #>gear_block_sprite3
sta INH
lda #21
sta XPOS
lda #4
draw_gear_delete:
sta YPOS
; jsr put_sprite_crop
done_gear_delete:
rts

View File

@ -0,0 +1,163 @@
#include ../Makefile.inc
LZSA = ~/research/lzsa/lzsa/lzsa
MAKE_VGI = ../../../graphics/hgr/vgi/make_vgi_asm
all: mist_graphics.inc
####
mist_graphics.inc: \
todo.lzsa
# dock_n.lzsa dock_s.lzsa dock_e.lzsa dock_w.lzsa dock_w_open.lzsa \
# dock_shipup_e.lzsa dock_shipup_n.lzsa \
# dock_switch_n.lzsa dock_switch_s.lzsa \
# dock_switch_shipup_s.lzsa \
# dock_steps_w.lzsa \
# cat_letter.lzsa \
# above_dock_e.lzsa above_dock_n.lzsa above_dock_s.lzsa \
# above_dock_shipup_s.lzsa above_dock_shipup_e.lzsa \
# step_base_s.lzsa step_base_n.lzsa \
# step_land1_w.lzsa step_land1_e.lzsa \
# step_land1_shipup_e.lzsa \
# step_land2_e.lzsa step_land2_w.lzsa \
# step_land2_shipup_e.lzsa \
# step_dentist_n.lzsa step_dentist_e.lzsa step_dentist_w.lzsa \
# step_dentist_shipup_e.lzsa \
# step_land3_w.lzsa step_land3_e.lzsa \
# step_land3_shipup_e.lzsa \
# step_top_e.lzsa step_top_w.lzsa step_top_n.lzsa step_top_s.lzsa \
# step_top_shipup_e.lzsa \
# pool_n.lzsa pool_s.lzsa pool_e.lzsa pool_w.lzsa \
# pool_shipup_s.lzsa \
# clock_e.lzsa clock_n.lzsa clock_s.lzsa clock_bridge.lzsa \
# spaceship_far_e.lzsa spaceship_far_n.lzsa \
# tree1_n.lzsa tree1_s.lzsa \
# tree1_shipup_n.lzsa \
# tree2_n.lzsa tree2_s.lzsa tree2_e.lzsa tree2_w.lzsa \
# tree5_n.lzsa tree5_e.lzsa tree5_s.lzsa \
# gear_n.lzsa gear_w.lzsa gear_s.lzsa gear_open_n.lzsa\
# gear_shipup_s.lzsa \
# gear_base_n.lzsa \
# spaceship_switch_s.lzsa spaceship_switch_n.lzsa \
# spaceship_path_e.lzsa spaceship_path_w.lzsa \
# tree4_n.lzsa tree4_s.lzsa tree4_w.lzsa tree4_e.lzsa \
# clock_island_s.lzsa clock_island_n.lzsa \
# clock_puzzle_s.lzsa clock_puzzle_bridge.lzsa \
# clock_inside_n.lzsa clock_inside_s.lzsa clock_inside_open.lzsa \
# gear_open_e.lzsa \
# pad_n.lzsa pad_e.lzsa \
# spaceship_door_n.lzsa spaceship_door_open_n.lzsa \
# tower2_base_w.lzsa tower2_top_w.lzsa \
# tower2_path_e.lzsa tower2_path_n.lzsa \
# pillar_cross.lzsa pillar_eye.lzsa pillar_snake.lzsa pillar_emu.lzsa \
# pillar_bug.lzsa pillar_anchor.lzsa pillar_arrow.lzsa pillar_leaf.lzsa
echo "dock_n_lzsa: .incbin \"todo.lzsa\"" > mist_graphics.inc
echo "dock_s_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "dock_e_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "dock_w_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "dock_shipup_e_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "dock_shipup_n_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "dock_w_open_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "dock_switch_n_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "dock_switch_s_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "dock_switch_shipup_s_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "dock_steps_w_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "cat_letter_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "above_dock_e_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "above_dock_s_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "above_dock_n_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "above_dock_shipup_s_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "above_dock_shipup_e_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "step_base_n_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "step_base_s_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "step_land1_w_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "step_land1_e_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "step_land1_shipup_e_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "step_land2_w_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "step_land2_e_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "step_land2_shipup_e_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "step_dentist_n_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "step_dentist_w_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "step_dentist_e_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "step_dentist_shipup_e_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "step_land3_w_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "step_land3_e_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "step_land3_shipup_e_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "step_top_e_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "step_top_w_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "step_top_n_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "step_top_s_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "step_top_shipup_e_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "pool_n_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "pool_s_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "pool_e_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "pool_w_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "pool_shipup_s_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "clock_s_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "clock_n_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "clock_e_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "clock_bridge_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "spaceship_far_n_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "spaceship_far_e_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "tree1_n_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "tree1_s_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "tree1_shipup_n_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "tree2_n_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "tree2_s_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "tree2_e_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "tree2_w_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "tree5_n_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "tree5_s_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "tree5_e_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "gear_n_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "gear_s_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "gear_w_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "gear_shipup_s_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "gear_open_n_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "gear_base_n_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "spaceship_switch_n_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "spaceship_switch_s_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "spaceship_path_w_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "tree4_n_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "tree4_s_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "tree4_w_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "tree4_e_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "clock_island_s_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "clock_island_n_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "clock_puzzle_s_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "clock_puzzle_bridge_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "clock_inside_s_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "clock_inside_n_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "clock_inside_open_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "gear_open_e_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "pad_n_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "pad_e_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "spaceship_door_n_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "spaceship_door_open_n_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "tower2_base_w_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "tower2_top_w_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "tower2_path_e_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "tower2_path_n_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "pillar_cross_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "pillar_eye_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "pillar_snake_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "pillar_emu_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "pillar_bug_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "pillar_anchor_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "pillar_arrow_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
echo "pillar_leaf_lzsa: .incbin \"todo.lzsa\"" >> mist_graphics.inc
#####
%.data: %.vgi
$(MAKE_VGI) -b < $< > $@
%.lzsa: %.data
$(LZSA) -r -f2 $< $@
####
clean:
rm -f *~ *.o *.lst *.gr *.lzsa mist_graphics.inc

View File

@ -0,0 +1,3 @@
; TODO
CLS 0xff ; white2 background
END

View File

@ -0,0 +1,97 @@
; FIXME: should be able to drop pages back where we picked them up
;==============================
; Take Blue Page
;==============================
; A should be page to take (i.e. MECHE_PAGE or similar)
take_blue_page:
pha
jsr drop_current_page
pla
pha
eor BLUE_PAGES_TAKEN ; toggle the taken flag
sta BLUE_PAGES_TAKEN
pla
ora #HOLDING_BLUE_PAGE ; put it in hand
sta HOLDING_PAGE
rts
;==============================
; Take Red Page
;==============================
; A should be page to take (i.e. MECHE_PAGE or similar)
take_red_page:
pha
jsr drop_current_page
pla
pha
eor RED_PAGES_TAKEN
sta RED_PAGES_TAKEN
pla
ora #HOLDING_RED_PAGE
sta HOLDING_PAGE
rts
;==============================
; Take White Page
;==============================
take_white_page:
pha
jsr drop_current_page
pla
pha
lda #1
sta WHITE_PAGE_TAKEN
pla
ora #HOLDING_WHITE_PAGE
sta HOLDING_PAGE
rts
;==============================
; Drop current page
;==============================
; clicked on a page while holding another
drop_current_page:
lda HOLDING_PAGE
and #$c0
cmp #HOLDING_RED_PAGE
beq drop_red_page
cmp #HOLDING_BLUE_PAGE
beq drop_blue_page
cmp #HOLDING_WHITE_PAGE
beq drop_white_page
; there was no page?
rts
drop_white_page:
lda #0
sta WHITE_PAGE_TAKEN
rts
drop_red_page:
lda HOLDING_PAGE
and #$3f
eor RED_PAGES_TAKEN
sta RED_PAGES_TAKEN
rts
drop_blue_page:
lda HOLDING_PAGE
and #$3f
eor BLUE_PAGES_TAKEN
sta BLUE_PAGES_TAKEN
rts

View File

@ -0,0 +1,793 @@
;===============================================
; level data for Mist Island level
;===============================================
locations:
.word location0, location1, location2, location3
.word location4, location5, location6, location7
.word location8, location9, location10,location11
.word location12,location13,location14,location15
.word location16,location17,location18,location19
.word location20,location21,location22,location23
.word location24,location25,location26,location27
.word location28,location29,location30,location31
.word location32,location33,location34,location35
.word location36,location37,location38,location39
; MIST_ARRIVAL_DOCK -- dock
location0:
.byte MIST_DOCK_SWITCH ; north exit
.byte $ff ; south exit
.byte $ff ; east exit
.byte MIST_VIEWER_DOOR ; west exit
.byte DIRECTION_N ; north exit_dir
.byte DIRECTION_S ; south exit_dir
.byte $ff ; east exit_dir
.byte DIRECTION_W ; west exit_dir
.word dock_n_lzsa ; north bg
.word dock_s_lzsa ; south bg
.word dock_e_lzsa ; east bg
.word dock_w_lzsa ; west bg
.byte BG_EAST|BG_NORTH|BG_SOUTH|BG_WEST ; all bgs
.byte DIRECTION_E ; special exit
.byte 9,29 ; special x
.byte 2,46 ; special y
.word enter_stoneyship-1 ; special function
; MIST_DOCK_SWITCH -- by dock switch
location1:
.byte MIST_DOCK_STEPS ; north exit
.byte MIST_ARRIVAL_DOCK ; south exit
.byte $ff ; east exit
.byte $ff ; west exit
.byte DIRECTION_W ; north exit_dir
.byte DIRECTION_S ; south exit_dir
.byte $ff ; east exit_dir
.byte $ff ; west exit_dir
.word dock_switch_n_lzsa ; north bg
.word dock_switch_s_lzsa ; south bg
.word $0000 ; east bg
.word $0000 ; west bg
.byte BG_NORTH|BG_SOUTH
.byte DIRECTION_N ; special exit
.byte 23,30 ; special x
.byte 25,44 ; special y
.word click_switch_dock-1 ; special function
; MIST_DOCK_STEPS -- dock steps
location2:
.byte MIST_GEAR ; north exit
.byte $ff ; south exit
.byte MIST_DOCK_SWITCH ; east exit
.byte MIST_ABOVE_DOCK ; west exit
.byte DIRECTION_N ; north exit_dir
.byte $ff ; south exit_dir
.byte DIRECTION_S ; east exit_dir
.byte DIRECTION_S ; west exit_dir
.word gear_base_n_lzsa ; north bg
.word $0000 ; south bg
.word $0000 ; east bg
.word dock_steps_w_lzsa ; west bg
.byte BG_WEST|BG_NORTH
.byte $ff ; special exit
; MIST_ABOVE_DOCK -- above dock path
location3:
.byte MIST_GEAR_BASE ; north exit
.byte MIST_BASE_STEPS ; south exit
.byte MIST_DOCK_SWITCH ; east exit
.byte $ff ; west exit
.byte DIRECTION_N ; north exit_dir
.byte DIRECTION_S ; south exit_dir
.byte DIRECTION_S ; east exit_dir
.byte $ff ; west exit_dir
.word above_dock_n_lzsa ; north bg
.word above_dock_s_lzsa ; south bg
.word above_dock_e_lzsa ; east bg
.word $0000 ; west bg
.byte BG_SOUTH|BG_NORTH|BG_EAST
.byte $ff ; special exit
; MIST_BASE_STEPS -- base of steps
location4:
.byte MIST_ABOVE_DOCK ; north exit
.byte MIST_STEPS_1ST_LANDING ; south exit
.byte $ff ; east exit
.byte $ff ; west exit
.byte DIRECTION_N ; north exit_dir
.byte DIRECTION_W ; south exit_dir
.byte $ff ; east exit_dir
.byte $ff ; west exit_dir
.word step_base_n_lzsa ; north bg
.word step_base_s_lzsa ; south bg
.word $0000 ; east bg
.word $0000 ; west bg
.byte BG_SOUTH|BG_NORTH
.byte $ff ; special exit
; MIST_STEPS_1ST_LANDING -- steps 1st landing
location5:
.byte MIST_ABOVE_DOCK ; north exit
.byte $ff ; south exit
.byte MIST_BASE_STEPS ; east exit
.byte MIST_STEPS_2ND_LANDING ; west exit
.byte DIRECTION_N ; north exit_dir
.byte $ff ; south exit_dir
.byte DIRECTION_N ; east exit_dir
.byte DIRECTION_W ; west exit_dir
.word step_base_n_lzsa ; north bg
.word $0000 ; south bg
.word step_land1_e_lzsa ; east bg
.word step_land1_w_lzsa ; west bg
.byte BG_WEST | BG_EAST | BG_NORTH
.byte $ff ; special exit
; MIST_STEPS_2ND_LANDING -- steps 2nd landing
location6:
.byte $ff ; north exit
.byte $ff ; south exit
.byte MIST_STEPS_1ST_LANDING ; east exit
.byte MIST_STEPS_DENTIST ; west exit
.byte $ff ; north exit_dir
.byte $ff ; south exit_dir
.byte DIRECTION_E ; east exit_dir
.byte DIRECTION_W ; west exit_dir
.word $0000 ; north bg
.word $0000 ; south bg
.word step_land2_e_lzsa ; east bg
.word step_land2_w_lzsa ; west bg
.byte BG_WEST | BG_EAST
.byte DIRECTION_W ; special exit (letter)
.byte 27,32 ; special x
.byte 36,45 ; special y
.word read_letter-1
; MIST_STEPS_DENTIST -- steps outside dentist chair branch
location7:
.byte $ff ; north exit
.byte $ff ; south exit
.byte MIST_STEPS_2ND_LANDING ; east exit
.byte MIST_STEPS_4TH_LANDING ; west exit
.byte $ff ; north exit_dir
.byte $ff ; south exit_dir
.byte DIRECTION_E ; east exit_dir
.byte DIRECTION_W ; west exit_dir
.word step_dentist_n_lzsa ; north bg
.word $0000 ; south bg
.word step_dentist_e_lzsa ; east bg
.word step_dentist_w_lzsa ; west bg
.byte BG_EAST|BG_WEST|BG_NORTH
.byte DIRECTION_N ; special exit
.byte 10,30 ; special x
.byte 0,46 ; special y
.word goto_dentist-1
; MIST_STEPS_4TH_LANDING -- steps one more time up
location8:
.byte $ff ; north exit
.byte $ff ; south exit
.byte MIST_STEPS_DENTIST ; east exit
.byte MIST_OUTSIDE_TEMPLE ; west exit
.byte $ff ; north exit_dir
.byte $ff ; south exit_dir
.byte DIRECTION_E ; east exit_dir
.byte DIRECTION_W ; west exit_dir
.word $0000 ; north bg
.word $0000 ; south bg
.word step_land3_e_lzsa ; east bg
.word step_land3_w_lzsa ; west bg
.byte BG_WEST | BG_EAST ; west and eastl
.byte DIRECTION_E ; special exit
.byte 0,16 ; special x
.byte 0,32 ; special y
.word goto_dentist_steps-1
; MIST_OUTSIDE_TEMPLE -- at the top outside temple
location9:
.byte $ff ; north exit
.byte MIST_POOL ; south exit
.byte MIST_STEPS_4TH_LANDING ; east exit
.byte MIST_ROCKET_PATH_PAD ; west exit
.byte DIRECTION_N ; north exit_dir
.byte DIRECTION_S ; south exit_dir
.byte DIRECTION_E ; east exit_dir
.byte DIRECTION_N|DIRECTION_ONLY_POINT ; west exit_dir
.word step_top_n_lzsa ; north bg
.word step_top_s_lzsa ; south bg
.word step_top_e_lzsa ; east bg
.word step_top_w_lzsa ; west bg
.byte BG_EAST|BG_WEST|BG_NORTH|BG_SOUTH ; all dirs
.byte DIRECTION_N ; special exit
.byte 10,30 ; special x
.byte 0,46 ; special y
.word enter_octagon-1
; MIST_POOL -- pool
location10:
.byte MIST_OUTSIDE_TEMPLE ; north exit
.byte MIST_TREE_CORRIDOR_1 ; 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 pool_n_lzsa ; north bg
.word pool_s_lzsa ; south bg
.word pool_e_lzsa ; east bg
.word pool_w_lzsa ; west bg
.byte BG_NORTH|BG_SOUTH|BG_EAST|BG_WEST
.byte DIRECTION_E|DIRECTION_W ; special exit
.byte 2,38 ; special x
.byte 10,32 ; special y
.word pool_pillars-1
; MIST_CLOCK -- clock
location11:
.byte MIST_TREE_CORRIDOR_5 ; north exit
.byte MIST_CLOCK_PUZZLE ; 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 clock_n_lzsa ; north bg
.word clock_s_lzsa ; south bg
.word clock_e_lzsa ; east bg
.word $0000 ; west bg
.byte BG_SOUTH|BG_EAST|BG_NORTH
.byte DIRECTION_E ; special exit
.byte 5,30 ; special x
.byte 2,46 ; special y
.word enter_channel_clock-1 ; special function
; MIST_SPACESHIP_FAR -- spaceship far
location12:
.byte MIST_SPACESHIP_SWITCH ; north exit
.byte $ff ; south exit
.byte MIST_ROCKET_PATH_PAD ; east exit
.byte $ff ; west exit
.byte DIRECTION_N ; north exit_dir
.byte $ff ; south exit_dir
.byte DIRECTION_E ; east exit_dir
.byte $ff ; west exit_dir
.word spaceship_far_n_lzsa ; north bg
.word $0000 ; south bg
.word spaceship_far_e_lzsa ; east bg
.word $0000 ; west bg
.byte BG_NORTH|BG_EAST
.byte $ff ; special exit
; MIST_TREE_CORRIDOR_2 -- tree corridor #2
location13:
.byte MIST_TREE_CORRIDOR_1 ; north exit
.byte MIST_TREE_CORRIDOR_4 ; south exit
.byte $ff ; east exit
.byte $ff ; west exit
.byte DIRECTION_N|DIRECTION_ONLY_POINT ; north exit_dir
.byte DIRECTION_S ; south exit_dir
.byte $ff ; east exit_dir
.byte $ff ; west exit_dir
.word tree2_n_lzsa ; north bg
.word tree2_s_lzsa ; south bg
.word tree2_e_lzsa ; east bg
.word tree2_w_lzsa ; west bg
.byte BG_NORTH|BG_SOUTH|BG_EAST|BG_WEST
.byte DIRECTION_E|DIRECTION_W|DIRECTION_N
.byte 6,33 ; special x
.byte 10,38 ; special y
.word tree2_pillars-1
; MIST_TREE_CORRIDOR_5 -- tree corridor #5
location14:
.byte MIST_TREE_CORRIDOR_4 ; north exit
.byte MIST_CLOCK ; south exit
.byte $ff ; east exit
.byte $ff ; west exit
.byte DIRECTION_N ; north exit_dir
.byte DIRECTION_S ; south exit_dir
.byte DIRECTION_E ; east exit_dir
.byte $ff ; west exit_dir
.word tree5_n_lzsa ; north bg
.word tree5_s_lzsa ; south bg
.word tree5_e_lzsa ; east bg
.word $0000 ; west bg
.byte BG_NORTH | BG_EAST | BG_SOUTH
.byte DIRECTION_E ; special exit
.byte 9,29 ; special x
.byte 2,46 ; special y
.word enter_channel_main-1 ; special function
; MIST_GEAR -- gear
location15:
.byte $ff ; north exit
.byte MIST_ABOVE_DOCK ; south exit
.byte $ff ; east exit
.byte $ff ; west exit
.byte $ff ; north exit_dir
.byte DIRECTION_E ; south exit_dir
.byte $ff ; east exit_dir
.byte $ff ; west exit_dir
.word gear_n_lzsa ; north bg
.word gear_s_lzsa ; south bg
.word $0000 ; east bg
.word gear_w_lzsa ; west bg
.byte BG_NORTH | BG_SOUTH | BG_WEST
.byte DIRECTION_N ; special exit
.byte 4,10 ; special x
.byte 28,35 ; special y
.word click_switch_gear-1 ; special function
; MIST_GEAR_BASE -- gear base
location16:
.byte MIST_GEAR ; north exit
.byte MIST_BASE_STEPS ; south exit
.byte MIST_DOCK_SWITCH ; east exit
.byte $ff ; west exit
.byte DIRECTION_N ; north exit_dir
.byte DIRECTION_S ; south exit_dir
.byte DIRECTION_S ; east exit_dir
.byte $ff ; west exit_dir
.word gear_base_n_lzsa ; north bg
.word above_dock_s_lzsa ; south bg
.word above_dock_e_lzsa ; east bg
.word $0000 ; west bg
.byte BG_NORTH | BG_EAST | BG_SOUTH
.byte $ff ; special exit
; MIST_CAT_LETTER -- catherine letter
location17:
.byte MIST_STEPS_2ND_LANDING ; north exit
.byte $ff ; south exit
.byte $ff ; east exit
.byte $ff ; west exit
.byte DIRECTION_W ; north exit_dir
.byte $ff ; south exit_dir
.byte $ff ; east exit_dir
.byte $ff ; west exit_dir
.word cat_letter_lzsa ; north bg
.word $0000 ; south bg
.word $0000 ; east bg
.word $0000 ; west bg
.byte BG_NORTH
.byte $ff ; special exit
; MIST_SPACESHIP_SWITCH -- spaceship switch
location18:
.byte MIST_ROCKET_CLOSE ; north exit
.byte MIST_SPACESHIP_FAR ; south exit
.byte $ff ; east exit
.byte $ff ; west exit
.byte DIRECTION_N ; north exit_dir
.byte DIRECTION_E ; south exit_dir
.byte $ff ; east exit_dir
.byte $ff ; west exit_dir
.word spaceship_switch_n_lzsa ; north bg
.word spaceship_switch_s_lzsa ; south bg
.word $0000 ; east bg
.word $0000 ; west bg
.byte BG_NORTH|BG_SOUTH
.byte DIRECTION_N ; special exit
.byte 22,27 ; special x
.byte 20,28 ; special y
.word click_switch_spaceship-1 ; special function
; MIST_TREE_CORRIDOR_4 -- tree corridor4 (with generator switch)
location19:
.byte MIST_TREE_CORRIDOR_2 ; north exit
.byte MIST_TREE_CORRIDOR_5 ; 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 DIRECTION_W ; west exit_dir
.word tree4_n_lzsa ; north bg
.word tree4_s_lzsa ; south bg
.word tree4_e_lzsa ; east bg
.word tree4_w_lzsa ; west bg
.byte BG_NORTH|BG_SOUTH|BG_WEST|BG_EAST
.byte DIRECTION_W ; special exit
.byte 6,34 ; special x
.byte 0,46 ; special y
.word go_to_generator-1 ; special function
; MIST_TREE_CORRIDOR_1
location20:
.byte MIST_POOL ; north exit
.byte MIST_TREE_CORRIDOR_2 ; 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 tree1_n_lzsa ; north bg
.word tree1_s_lzsa ; south bg
.word $0000 ; east bg
.word $0000 ; west bg
.byte BG_NORTH|BG_SOUTH
.byte $ff ; special exit
; MIST_CLOCK_PUZZLE -- clock puzzle
location21:
.byte MIST_TREE_CORRIDOR_5 ; north exit
.byte $ff ; south exit
.byte $ff ; east exit
.byte $ff ; west exit
.byte DIRECTION_N ; north exit_dir
.byte $ff ; south exit_dir
.byte $ff ; east exit_dir
.byte $ff ; west exit_dir
.word clock_n_lzsa ; north bg
.word clock_puzzle_s_lzsa ; south bg
.word $0000 ; east bg
.word $0000 ; west bg
.byte BG_SOUTH|BG_NORTH
.byte DIRECTION_S ; special exit
.byte 12,30 ; special x
.byte 38,48 ; special y
.word clock_puzzle-1 ; special function
; MIST_CLOCK_ISLAND -- clock island
location22:
.byte MIST_CLOCK ; north exit
.byte MIST_CLOCK_INSIDE ; 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 clock_island_n_lzsa ; north bg
.word clock_island_s_lzsa ; south bg
.word $0000 ; east bg
.word $0000 ; west bg
.byte BG_SOUTH|BG_NORTH
.byte DIRECTION_S ; special exit
.byte 3,9 ; special x
.byte 26,36 ; special y
.word click_switch_clock-1 ; special function
; MYST_CLOCK_INSIDE -- clock inside
location23:
.byte MIST_CLOCK_ISLAND ; north exit
.byte $ff ; south exit
.byte $ff ; east exit
.byte $ff ; west exit
.byte DIRECTION_N ; north exit_dir
.byte $ff ; south exit_dir
.byte $ff ; east exit_dir
.byte $ff ; west exit_dir
.word clock_inside_n_lzsa ; north bg
.word clock_inside_s_lzsa ; south bg
.word $0000 ; east bg
.word $0000 ; west bg
.byte BG_SOUTH|BG_NORTH
.byte DIRECTION_S ; special exit
.byte 12,30 ; special x
.byte 8,32 ; special y
.word clock_inside_puzzle-1 ; special function
; MIST_OPEN_GEAR -- open_gear (?)
location24:
.byte $ff ; north exit
.byte $ff ; south exit
.byte MIST_GEAR ; east exit
.byte $ff ; west exit
.byte $ff ; north exit_dir
.byte $ff ; south exit_dir
.byte DIRECTION_N ; east exit_dir
.byte $ff ; west exit_dir
.word $0000 ; north bg
.word $0000 ; south bg
.word gear_open_e_lzsa ; east bg
.word $0000 ; west bg
.byte BG_EAST
.byte DIRECTION_E ; special exit
.byte 17,23 ; special x
.byte 14,24 ; special y
.word go_to_meche-1 ; special function
; MIST_ROCKET_PATH_PAD -- pad on way to rocket
location25:
.byte MIST_SPACESHIP_PATH ; north exit
.byte $ff ; south exit
.byte MIST_OUTSIDE_TEMPLE ; east exit
.byte $ff ; west exit
.byte DIRECTION_W ; north exit_dir
.byte $ff ; south exit_dir
.byte DIRECTION_E ; east exit_dir
.byte $ff ; west exit_dir
.word pad_n_lzsa ; north bg
.word $0000 ; south bg
.word pad_e_lzsa ; east bg
.word $0000 ; west bg
.byte BG_NORTH | BG_EAST
.byte DIRECTION_N
.byte 0,20 ; special x
.byte 0,48 ; special y
.word pad_special-1 ; special function
; MIST_ROCKET_CLOSE -- rocket close in
location26:
.byte MIST_SPACESHIP_SWITCH ; north exit
.byte $ff ; south exit
.byte $ff ; east exit
.byte $ff ; west exit
.byte DIRECTION_N ; north exit_dir
.byte $ff ; south exit_dir
.byte $ff ; east exit_dir
.byte $ff ; west exit_dir
.word spaceship_door_n_lzsa ; north bg
.word $0000 ; south bg
.word $0000 ; east bg
.word $0000 ; west bg
.byte BG_NORTH
.byte DIRECTION_N ; special exit
.byte 15,25 ; special x
.byte 8,46 ; special y
.word open_ss_door-1 ; special function
; MIST_TOWER2_PATH -- tower2 path
location27:
.byte MIST_TOWER2_BASE ; north exit
.byte $ff ; south exit
.byte MIST_ROCKET_PATH_PAD ; east exit
.byte $ff ; west exit
.byte DIRECTION_W|DIRECTION_ONLY_POINT ; north exit_dir
.byte $ff ; south exit_dir
.byte DIRECTION_E ; east exit_dir
.byte $ff ; west exit_dir
.word tower2_path_n_lzsa ; north bg
.word $0000 ; south bg
.word tower2_path_e_lzsa ; east bg
.word $0000 ; west bg
.byte BG_NORTH|BG_EAST
.byte $ff
; MIST_TOWER2_BASE -- tower2 base
location28:
.byte $ff ; north exit
.byte $ff ; south exit
.byte $ff ; east exit
.byte MIST_TOWER2_PATH ; west exit
.byte $ff ; north exit_dir
.byte $ff ; south exit_dir
.byte $ff ; east exit_dir
.byte DIRECTION_N ; west exit_dir
.word $0000 ; north bg
.word $0000 ; south bg
.word $0000 ; east bg
.word tower2_base_w_lzsa ; west bg
.byte BG_WEST
.byte DIRECTION_W ; special exit
.byte 13,27 ; special x
.byte 0,46 ; special y
.word leave_tower2-1 ; special function
; MIST_TOWER2_TOP -- tower2 top
location29:
.byte $ff ; north exit
.byte $ff ; south exit
.byte $ff ; east exit
.byte MIST_TOWER2_BASE ; west exit
.byte $ff ; north exit_dir
.byte $ff ; south exit_dir
.byte $ff ; east exit_dir
.byte DIRECTION_W|DIRECTION_ONLY_POINT ; west exit_dir
.word $0000 ; north bg
.word $0000 ; south bg
.word $0000 ; east bg
.word tower2_top_w_lzsa ; west bg
.byte BG_WEST
.byte DIRECTION_W ; special exit
.byte 17,22 ; special x
.byte 10,18 ; special y
.word circuit_breaker-1 ; special function
; MIST_VIEWER_DOOR -- viewer door
location30:
.byte MIST_DOCK_SWITCH ; north exit
.byte $ff ; 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 dock_n_lzsa ; north bg
.word dock_s_lzsa ; south bg
.word dock_e_lzsa ; east bg
.word dock_w_open_lzsa ; west bg
.byte BG_EAST|BG_NORTH|BG_SOUTH|BG_WEST ; all bgs
.byte DIRECTION_W ; special exit
.byte 9,29 ; special x
.byte 2,46 ; special y
.word enter_viewer-1 ; special function
; MIST_PILLAR_EYE -- pillar with eye
location31:
.byte $ff ; north exit
.byte $ff ; south exit
.byte $ff ; east exit
.byte MIST_POOL ; west exit
.byte $ff ; north exit_dir
.byte $ff ; south exit_dir
.byte $ff ; east exit_dir
.byte DIRECTION_W ; west exit_dir
.word $0000 ; north bg
.word $0000 ; south bg
.word $0000 ; east bg
.word pillar_eye_lzsa ; west bg
.byte BG_WEST
.byte DIRECTION_W ; special exit
.byte 14,27 ; special x
.byte 12,30 ; special y
.word touch_pillar-1 ; special function
; MIST_PILLAR_SNAKE -- pillar with snake
location32:
.byte $ff ; north exit
.byte $ff ; south exit
.byte $ff ; east exit
.byte MIST_POOL ; west exit
.byte $ff ; north exit_dir
.byte $ff ; south exit_dir
.byte $ff ; east exit_dir
.byte DIRECTION_W ; west exit_dir
.word $0000 ; north bg
.word $0000 ; south bg
.word $0000 ; east bg
.word pillar_snake_lzsa ; west bg
.byte BG_WEST
.byte DIRECTION_W ; special exit
.byte 14,27 ; special x
.byte 12,30 ; special y
.word touch_pillar-1 ; special function
; MIST_PILLAR_BUG -- pillar with bug
location33:
.byte $ff ; north exit
.byte $ff ; south exit
.byte $ff ; east exit
.byte MIST_TREE_CORRIDOR_2 ; west exit
.byte $ff ; north exit_dir
.byte $ff ; south exit_dir
.byte $ff ; east exit_dir
.byte DIRECTION_W ; west exit_dir
.word $0000 ; north bg
.word $0000 ; south bg
.word $0000 ; east bg
.word pillar_bug_lzsa ; west bg
.byte BG_WEST
.byte DIRECTION_W ; special exit
.byte 14,27 ; special x
.byte 12,30 ; special y
.word touch_pillar-1 ; special function
; MIST_PILLAR_ANCHOR -- pillar with anchor
location34:
.byte $ff ; north exit
.byte $ff ; south exit
.byte $ff ; east exit
.byte MIST_TREE_CORRIDOR_2 ; west exit
.byte $ff ; north exit_dir
.byte $ff ; south exit_dir
.byte $ff ; east exit_dir
.byte DIRECTION_W ; west exit_dir
.word $0000 ; north bg
.word $0000 ; south bg
.word $0000 ; east bg
.word pillar_anchor_lzsa ; west bg
.byte BG_WEST
.byte DIRECTION_W ; special exit
.byte 14,27 ; special x
.byte 12,30 ; special y
.word touch_pillar-1 ; special function
; MIST_PILLAR_ARROW -- pillar with arrow
location35:
.byte $ff ; north exit
.byte $ff ; south exit
.byte MIST_TREE_CORRIDOR_2 ; east exit
.byte $ff ; west exit
.byte $ff ; north exit_dir
.byte $ff ; south exit_dir
.byte DIRECTION_E ; east exit_dir
.byte $ff ; west exit_dir
.word $0000 ; north bg
.word $0000 ; south bg
.word pillar_arrow_lzsa ; east bg
.word $0000 ; west bg
.byte BG_EAST
.byte DIRECTION_E ; special exit
.byte 14,27 ; special x
.byte 12,30 ; special y
.word touch_pillar-1 ; special function
; MIST_PILLAR_LEAF -- pillar with leaf
location36:
.byte $ff ; north exit
.byte $ff ; south exit
.byte MIST_TREE_CORRIDOR_2 ; east exit
.byte $ff ; west exit
.byte $ff ; north exit_dir
.byte $ff ; south exit_dir
.byte DIRECTION_E ; east exit_dir
.byte $ff ; west exit_dir
.word $0000 ; north bg
.word $0000 ; south bg
.word pillar_leaf_lzsa ; east bg
.word $0000 ; west bg
.byte BG_EAST
.byte DIRECTION_E ; special exit
.byte 14,27 ; special x
.byte 12,30 ; special y
.word touch_pillar-1 ; special function
; MIST_PILLAR_CROSS -- pillar with cross
location37:
.byte $ff ; north exit
.byte $ff ; south exit
.byte MIST_POOL ; east exit
.byte $ff ; west exit
.byte $ff ; north exit_dir
.byte $ff ; south exit_dir
.byte DIRECTION_E ; east exit_dir
.byte $ff ; west exit_dir
.word $0000 ; north bg
.word $0000 ; south bg
.word pillar_cross_lzsa ; east bg
.word $0000 ; west bg
.byte BG_EAST
.byte DIRECTION_E ; special exit
.byte 14,27 ; special x
.byte 12,30 ; special y
.word touch_pillar-1 ; special function
; MIST_PILLAR_EMU -- pillar with emu
location38:
.byte $ff ; north exit
.byte $ff ; south exit
.byte MIST_POOL ; east exit
.byte $ff ; west exit
.byte $ff ; north exit_dir
.byte $ff ; south exit_dir
.byte DIRECTION_E ; east exit_dir
.byte $ff ; west exit_dir
.word $0000 ; north bg
.word $0000 ; south bg
.word pillar_emu_lzsa ; east bg
.word $0000 ; west bg
.byte BG_EAST
.byte DIRECTION_E ; special exit
.byte 14,27 ; special x
.byte 12,30 ; special y
.word touch_pillar-1 ; special function
; there is a corresponding east background
; but we are out of room
; MIST_SPACESHIP_PATH -- spaceship path
location39:
.byte $ff ; north exit
.byte $ff ; south exit
.byte $ff ; east exit
.byte MIST_SPACESHIP_FAR ; west exit
.byte $ff ; north exit_dir
.byte $ff ; south exit_dir
.byte $ff ; east exit_dir
.byte DIRECTION_N ; west exit_dir
.word $0000 ; north bg
.word $0000 ; south bg
.word $0000 ; east bg
.word spaceship_path_w_lzsa ; west bg
.byte BG_WEST
.byte $ff ; special exit

View File

@ -20,10 +20,10 @@ skip_turn_off_music:
sta clear_all_color+1
jsr clear_all
jsr page_flip
; jsr page_flip
jsr clear_all
jsr page_flip
; jsr clear_all
; jsr page_flip
; play sound effect

View File

@ -0,0 +1,228 @@
; 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

View File

@ -16,13 +16,17 @@ mist_start:
; init screen
;===================
jsr TEXT
jsr HOME
; jsr TEXT
; jsr HOME
bit KEYRESET
; bit SET_GR
; bit PAGE0
; bit LORES
bit SET_GR
bit PAGE0
bit LORES
bit HIRES
bit FULLGR
;=================
@ -42,6 +46,7 @@ mist_start:
lda #20
sta CURSOR_X
lda #89
sta CURSOR_Y
; init the clock bridge
@ -61,20 +66,22 @@ mist_start:
lda #1
sta CURSOR_VISIBLE ; visible at first
jsr save_bg_14x14 ; save initial bg
game_loop:
;=================
; reset things
;=================
lda #0
sta IN_RIGHT
sta IN_LEFT
; lda #0
; sta IN_RIGHT
; sta IN_LEFT
;====================================
; copy background to current page
;====================================
jsr gr_copy_to_current
; jsr gr_copy_to_current
;====================================
; handle special-case forground logic
@ -151,7 +158,7 @@ nothing_special:
; page flip
;====================================
jsr page_flip
; jsr page_flip
;=================

View File

@ -0,0 +1,692 @@
;==========================
; adjust ship up/down
;==========================
adjust_ship:
lda SHIP_RAISED
bne make_ship_up
jmp make_ship_down
make_ship_up:
; update backgrounds south
ldy #LOCATION_SOUTH_BG
lda #<pool_shipup_s_lzsa
sta location10,Y ; MIST_POOL
lda #>pool_shipup_s_lzsa
sta location10+1,Y ; MIST_POOL
lda #<gear_shipup_s_lzsa
sta location15,Y ; MIST_GEAR
lda #>gear_shipup_s_lzsa
sta location15+1,Y ; MIST_GEAR
lda #<dock_switch_shipup_s_lzsa
sta location1,Y ; MIST_DOCK_SWITCH
lda #>dock_switch_shipup_s_lzsa
sta location1+1,Y ; MIST_DOCK_SWITCH
lda #<above_dock_shipup_s_lzsa
sta location3,Y ; MIST_ABOVE_DOCK
sta location16,Y ; MIST_GEAR_BASE
lda #>above_dock_shipup_s_lzsa
sta location3+1,Y ; MIST_ABOVE_DOCK
sta location16+1,Y ; MIST_GEAR_BASE
; update backgrounds north
ldy #LOCATION_NORTH_BG
lda #<tree1_shipup_n_lzsa
sta location20,Y ; MIST_TREE_CORRIDOR_1
lda #>tree1_shipup_n_lzsa
sta location20+1,Y ; MIST_TREE_CORRIDOR_1
lda #<dock_shipup_n_lzsa
sta location0,Y ; MIST_ARRIVAL_DOCK
lda #>dock_shipup_n_lzsa
sta location0+1,Y ; MIST_ARRIVAL_DOCK
; update backgrounds east
ldy #LOCATION_EAST_BG
lda #<step_top_shipup_e_lzsa
sta location9,Y ; MIST_OUTSIDE_TEMPLE
lda #>step_top_shipup_e_lzsa
sta location9+1,Y ; MIST_OUTSIDE_TEMPLE
lda #<step_land3_shipup_e_lzsa
sta location8,Y ; MIST_STEPS_4TH_LANDING
lda #>step_land3_shipup_e_lzsa
sta location8+1,Y ; MIST_STEPS_4TH_LANDING
lda #<step_dentist_shipup_e_lzsa
sta location7,Y ; MIST_STEPS_DENTIST
lda #>step_dentist_shipup_e_lzsa
sta location7+1,Y ; MIST_STEPS_DENTIST
lda #<step_land2_shipup_e_lzsa
sta location6,Y ; MIST_STEPS_2ND_LANDING
lda #>step_land2_shipup_e_lzsa
sta location6+1,Y ; MIST_STEPS_2ND_LANDING
lda #<step_land1_shipup_e_lzsa
sta location5,Y ; MIST_STEPS_1ST_LANDING
lda #>step_land1_shipup_e_lzsa
sta location5+1,Y ; MIST_STEPS_1ST_LANDING
lda #<above_dock_shipup_e_lzsa
sta location3,Y ; MIST_ABOVE_DOCK
sta location16,Y ; MIST_GEAR_BASE
lda #>above_dock_shipup_e_lzsa
sta location3+1,Y ; MIST_ABOVE_DOCK
sta location16+1,Y ; MIST_GEAR_BASE
lda #<dock_shipup_e_lzsa
sta location0,Y ; MIST_ARRIVAL_DOCK
sta location30,Y ; MIST_VIEWER_DOOR
lda #>dock_shipup_e_lzsa
sta location0+1,Y ; MIST_ARRIVAL_DOCK
sta location30+1,Y ; MIST_VIEWER_DOOR
; hook up exit on dock to ship
ldy #LOCATION_SPECIAL_EXIT
lda #DIRECTION_E
sta location0,Y ; MIST_ARRIVAL_DOCK
rts
make_ship_down:
; update backgrounds south
ldy #LOCATION_SOUTH_BG
lda #<pool_s_lzsa
sta location10,Y ; MIST_POOL
lda #>pool_s_lzsa
sta location10+1,Y ; MIST_POOL
lda #<gear_s_lzsa
sta location15,Y ; MIST_GEAR
lda #>gear_s_lzsa
sta location15+1,Y ; MIST_GEAR
lda #<dock_switch_s_lzsa
sta location1,Y ; MIST_DOCK_SWITCH
lda #>dock_switch_s_lzsa
sta location1+1,Y ; MIST_DOCK_SWITCH
lda #<above_dock_s_lzsa
sta location3,Y ; MIST_ABOVE_DOCK
sta location16,Y ; MIST_GEAR_BASE
lda #>above_dock_s_lzsa
sta location3+1,Y ; MIST_ABOVE_DOCK
sta location16+1,Y ; MIST_GEAR_BASE
; update backgrounds north
ldy #LOCATION_NORTH_BG
lda #<tree1_n_lzsa
sta location20,Y ; MIST_TREE_CORRIDOR_1
lda #>tree1_n_lzsa
sta location20+1,Y ; MIST_TREE_CORRIDOR_1
lda #<dock_n_lzsa
sta location0,Y ; MIST_ARRIVAL_DOCK
lda #>dock_n_lzsa
sta location0+1,Y ; MIST_ARRIVAL_DOCK
; update backgrounds east
ldy #LOCATION_EAST_BG
lda #<step_top_e_lzsa
sta location9,Y ; MIST_OUTSIDE_TEMPLE
lda #>step_top_e_lzsa
sta location9+1,Y ; MIST_OUTSIDE_TEMPLE
lda #<step_land3_e_lzsa
sta location8,Y ; MIST_STEPS_4TH_LANDING
lda #>step_land3_e_lzsa
sta location8+1,Y ; MIST_STEPS_4TH_LANDING
lda #<step_dentist_e_lzsa
sta location7,Y ; MIST_STEPS_DENTIST
lda #>step_dentist_e_lzsa
sta location7+1,Y ; MIST_STEPS_DENTIST
lda #<step_land2_e_lzsa
sta location6,Y ; MIST_STEPS_2ND_LANDING
lda #>step_land2_e_lzsa
sta location6+1,Y ; MIST_STEPS_2ND_LANDING
lda #<step_land1_e_lzsa
sta location5,Y ; MIST_STEPS_1ST_LANDING
lda #>step_land1_e_lzsa
sta location5+1,Y ; MIST_STEPS_1ST_LANDING
lda #<above_dock_e_lzsa
sta location3,Y ; MIST_ABOVE_DOCK
sta location16,Y ; MIST_GEAR_BASE
lda #>above_dock_e_lzsa
sta location3+1,Y ; MIST_ABOVE_DOCK
sta location16+1,Y ; MIST_GEAR_BASE
lda #<dock_e_lzsa
sta location0,Y ; MIST_ARRIVAL_DOCK
sta location30,Y ; MIST_VIEWER_DOOR
lda #>dock_e_lzsa
sta location0+1,Y ; MIST_ARRIVAL_DOCK
sta location30+1,Y ; MIST_VIEWER_DOOR
; remove exit on dock to ship
ldy #LOCATION_SPECIAL_EXIT
lda #$ff
sta location0,Y ; MIST_ARRIVAL_DOCK
rts
;==========================
; draw green if on
;==========================
draw_pillar:
lda LOCATION
sec
sbc #MIST_PILLAR_EYE ; find which one we are on
tay
tax
lda PILLAR_ON
and powersoftwo,Y
beq done_draw_pillar
; is on, so draw it green
txa
asl
tay
lda pillar_sprites,Y
sta INL
lda pillar_sprites+1,Y
sta INH
lda #17
sta XPOS
lda #16
sta YPOS
; jsr put_sprite_crop
done_draw_pillar:
rts
;=========================
; pillar was touched
;=========================
touch_pillar:
lda LOCATION
sec
sbc #MIST_PILLAR_EYE ; find which on we touched
tay
lda PILLAR_ON
eor powersoftwo,Y
sta PILLAR_ON
rts
;=====================================
; check to see if ship needs to change
;=====================================
check_change_ship:
; check to see if we need to raise/lower ship
lda SHIP_RAISED
beq ship_is_down
ship_is_up:
lda PILLAR_ON
cmp #(PILLAR_SNAKE|PILLAR_BUG|PILLAR_LEAF)
beq done_adjusting_ship
; lower ship
lda #0
jmp move_the_ship
ship_is_down:
lda PILLAR_ON
cmp #(PILLAR_SNAKE|PILLAR_BUG|PILLAR_LEAF)
bne done_adjusting_ship
; raise ship
lda #1
jmp move_the_ship
done_adjusting_ship:
rts
move_the_ship:
sta SHIP_RAISED
; play noise
jsr long_beep
; adjust the backgrounds
jsr adjust_ship
rts
powersoftwo:
.byte $01,$02,$04,$08,$10,$20,$40,$80
pillar_sprites:
.word eye_sprite,snake_sprite,bug_sprite,anchor_sprite
.word arrow_sprite,leaf_sprite,cross_sprite,emu_sprite
eye_sprite: ; @17,16
.byte 7,6
.byte $AA,$AA,$AA,$AA,$AA,$AA,$AA
.byte $AA,$AA,$4A,$4A,$4A,$AA,$AA
.byte $4A,$A4,$44,$A4,$44,$A4,$4A
.byte $A4,$4A,$44,$4A,$44,$4A,$A4
.byte $AA,$AA,$A4,$A4,$A4,$AA,$AA
.byte $AA,$AA,$AA,$AA,$AA,$AA,$AA
snake_sprite: ; @17,16
.byte 6,6
.byte $AA,$4A,$4A,$AA,$AA,$AA
.byte $AA,$44,$AA,$4A,$A4,$4A
.byte $AA,$44,$AA,$44,$AA,$44
.byte $AA,$44,$AA,$44,$AA,$44
.byte $AA,$44,$AA,$44,$AA,$44
.byte $AA,$AA,$A4,$AA,$AA,$A4
bug_sprite: ; @17,16
.byte 6,5
.byte $AA,$AA,$AA,$AA,$AA,$AA
.byte $AA,$44,$AA,$44,$AA,$44
.byte $AA,$4A,$44,$44,$44,$4A
.byte $AA,$AA,$44,$44,$44,$AA
.byte $AA,$44,$AA,$A4,$AA,$44
anchor_sprite: ; @17,16
.byte 6,6
.byte $AA,$AA,$AA,$4A,$AA,$AA
.byte $AA,$AA,$AA,$44,$AA,$AA
.byte $AA,$AA,$A4,$44,$A4,$AA
.byte $AA,$AA,$AA,$44,$AA,$AA
.byte $AA,$A4,$4A,$44,$4A,$A4
.byte $AA,$AA,$AA,$A4,$AA,$AA
arrow_sprite: ; @17,16
.byte 7,6
.byte $AA,$AA,$AA,$AA,$4A,$4A,$4A
.byte $AA,$AA,$AA,$AA,$AA,$44,$44
.byte $AA,$AA,$AA,$4A,$A4,$AA,$A4
.byte $AA,$AA,$44,$AA,$AA,$AA,$AA
.byte $A4,$44,$AA,$AA,$AA,$AA,$AA
.byte $AA,$A4,$AA,$AA,$AA,$AA,$AA
leaf_sprite: ; @17,16
.byte 6,6
.byte $AA,$4A,$AA,$AA,$AA,$4A
.byte $AA,$44,$44,$4A,$44,$44
.byte $AA,$44,$44,$44,$44,$AA
.byte $AA,$A4,$44,$44,$44,$4A
.byte $AA,$4A,$AA,$44,$44,$44
.byte $AA,$A4,$AA,$AA,$AA,$AA
cross_sprite: ; @17,16
.byte 6,6
.byte $AA,$AA,$AA,$AA,$AA,$AA
.byte $AA,$AA,$A4,$44,$A4,$AA
.byte $AA,$4A,$AA,$44,$AA,$4A
.byte $AA,$44,$A4,$44,$A4,$44
.byte $AA,$AA,$AA,$44,$AA,$AA
.byte $AA,$AA,$A4,$A4,$A4,$AA
emu_sprite: ; @17,16
.byte 7,6
.byte $AA,$AA,$AA,$AA,$AA,$4A,$AA
.byte $AA,$AA,$AA,$AA,$AA,$44,$A4
.byte $AA,$4A,$44,$44,$44,$44,$AA
.byte $AA,$44,$44,$44,$44,$A4,$AA
.byte $AA,$44,$AA,$44,$AA,$AA,$AA
.byte $AA,$AA,$AA,$A4,$A4,$AA,$AA
tree2_pillars:
lda DIRECTION
cmp #DIRECTION_E
beq tree2_east
cmp #DIRECTION_W
beq tree2_west
; handle the pool marker switch
tree2_north:
lda CURSOR_X
cmp #25
bcc tree2_not_switch
cmp #32
bcs tree2_not_switch
lda CURSOR_Y
cmp #16
bcc tree2_not_switch
cmp #24
bcs tree2_not_switch
lda #MARKER_POOL
jmp click_marker_switch
tree2_not_switch:
; we have to fake going north
lda #MIST_TREE_CORRIDOR_1
sta LOCATION
jmp change_location
tree2_west:
lda CURSOR_X
cmp #22
bcs goto_bug_pillar
bcc goto_anchor_pillar
tree2_east:
lda CURSOR_X
cmp #18
bcs goto_arrow_pillar
bcc goto_leaf_pillar
pool_pillars:
lda DIRECTION
cmp #DIRECTION_E
beq pool_east
bne pool_west
pool_west:
lda CURSOR_X
cmp #28
bcs goto_eye_pillar
cmp #12
bcs goto_snake_pillar
bcc goto_bug_pillar
pool_east:
lda CURSOR_X
cmp #28
bcs goto_leaf_pillar
cmp #11
bcs goto_cross_pillar
bcc goto_emu_pillar
goto_eye_pillar:
lda #MIST_PILLAR_EYE
jmp done_pillar
goto_snake_pillar:
lda #MIST_PILLAR_SNAKE
jmp done_pillar
goto_bug_pillar:
lda #MIST_PILLAR_BUG
jmp done_pillar
goto_anchor_pillar:
lda #MIST_PILLAR_ANCHOR
jmp done_pillar
goto_emu_pillar:
lda #MIST_PILLAR_EMU
jmp done_pillar
goto_cross_pillar:
lda #MIST_PILLAR_CROSS
jmp done_pillar
goto_leaf_pillar:
lda #MIST_PILLAR_LEAF
jmp done_pillar
goto_arrow_pillar:
lda #MIST_PILLAR_ARROW
jmp done_pillar
done_pillar:
sta LOCATION
jmp change_location
draw_circuit_breaker:
lda ANIMATE_FRAME
beq done_draw_circuit_breaker
lda #18
sta XPOS
lda #12
sta YPOS
lda #<breaker_down_sprite
sta INL
lda #>breaker_down_sprite
sta INH
; jsr put_sprite_crop
lda FRAMEL
and #$1f
bne done_draw_circuit_breaker
dec ANIMATE_FRAME
done_draw_circuit_breaker:
rts
breaker_down_sprite:
.byte 4,3
.byte $00,$ff,$00,$ff
.byte $99,$77,$77,$99
.byte $69,$67,$67,$69
;=======================
; flip circuit breaker
; if room==MIST_TOWER2_TOP, and with #$fe
; if room==MIST_TOWER1_TOP, and with #$fd
circuit_breaker:
jsr click_speaker ; click speaker
lda #2
sta ANIMATE_FRAME
lda LOCATION
cmp #MIST_TOWER2_TOP
bne other_circuit_breaker
lda BREAKER_TRIPPED
and #$fe
jmp done_circuit_breaker
other_circuit_breaker:
lda BREAKER_TRIPPED
and #$fd
done_circuit_breaker:
sta BREAKER_TRIPPED
bne done_turn_on_breaker
turn_on_breaker:
lda GENERATOR_VOLTS
cmp #$60
bcs done_turn_on_breaker
sta ROCKET_VOLTS
sta ROCKET_VOLTS_DISP
done_turn_on_breaker:
rts
;======================
; open the spaceship door
open_ss_door:
; check if voltage is 59
lda ROCKET_VOLTS
cmp #$59
bne done_ss_door
; change to open door image
ldy #LOCATION_NORTH_BG
lda #<spaceship_door_open_n_lzsa
sta location26,Y ; MIST_ROCKET_CLOSE
lda #>spaceship_door_open_n_lzsa
sta location26+1,Y ; MIST_ROCKET_CLOSE
; change to load new level if through
ldy #LOCATION_SPECIAL_FUNC
lda #<(go_to_selena-1)
sta location26,Y ; MIST_ROCKET_CLOSE
lda #>(go_to_selena-1)
sta location26+1,Y ; MIST_ROCKET_CLOSE
jsr change_location
done_ss_door:
rts
;======================
; go to selena
;======================
go_to_selena:
lda #LOAD_SELENA ; Selena
sta WHICH_LOAD
lda #SELENA_INSIDE_SHIP
sta LOCATION
lda #DIRECTION_E
sta DIRECTION
lda #$ff
sta LEVEL_OVER
rts
;======================
; go to generator
;======================
go_to_generator:
lda CURSOR_X
cmp #27
bcs goto_tower
cmp #13
bcs goto_shack
marker_switch:
lda CURSOR_Y
cmp #24
bcc missed_switch
cmp #38
bcs missed_switch
lda #MARKER_GENERATOR
jmp click_marker_switch
missed_switch:
rts
goto_shack:
lda #GEN_GREEN_SHACK
jmp into_generator
goto_tower:
lda #GEN_TOWER1_TRAIL
into_generator:
sta LOCATION
lda #LOAD_GENERATOR ; Selena
sta WHICH_LOAD
lda #$ff
sta LEVEL_OVER
rts
;=================================
; marker switch compartment stuff
;=================================
draw_white_page:
lda DIRECTION
cmp #DIRECTION_N
bne no_white_page
lda COMPARTMENT_OPEN
beq no_white_page
lda WHITE_PAGE_TAKEN
bne no_white_page
lda #<white_page_sprite
sta INL
lda #>white_page_sprite
sta INH
lda #25
sta XPOS
lda #34
sta YPOS
; jsr put_sprite_crop
no_white_page:
rts
grab_white_page:
lda WHITE_PAGE_TAKEN
bne missing_page
jmp take_white_page
missing_page:
rts

View File

@ -657,12 +657,12 @@ draw_and_wait:
pha
stx getsrc_smc+1
sty getsrc_smc+2
lda #$c ; load to page $c00
lda #$8 ; load to page $800
jsr decompress_lzsa2_fast
lda #$0
sta VGIL
lda #$c
lda #$8
sta VGIH
jsr play_vgi

View File

@ -197,7 +197,7 @@ load_address_array:
.byte $08 ; FIRST_SECTOR
track_array:
.byte 3, 8, 1,21 ; MIST_TITLE,MIST,MECHE,SELENA
.byte 3, 9, 1,21 ; MIST_TITLE,MIST,MECHE,SELENA
.byte 18,31,11, 1 ; OCTAGON,VIEWER,STONEY,CHANNEL
.byte 27,26,10,20 ; CABIN,DENTIST,ARBOR,NIBEL
.byte 30,32,28,30 ; SHIP,GENERATOR,D'NI,SUB
@ -215,7 +215,7 @@ sector_array:
.byte 0 ; FIRST_SECTOR
length_array:
.byte 99,159,157,145 ; MIST_TITLE,MIST,MECHE,SELENA
.byte 99, 99,157,145 ; MIST_TITLE,MIST,MECHE,SELENA
.byte 128, 20,158,135 ; OCTAGON,VIEWER,STONEY,CHANNEL
.byte 61, 31,159,109 ; CABIN,DENTIST,ARBOR,NIBEL
.byte 20, 33, 27, 78 ; SHIP,GENERATOR,D'NI,SUB

View File

@ -0,0 +1,59 @@
;============================
; click the speaker
;============================
; FIXME: make it last longer?
click_speaker:
lda SOUND_STATUS
bmi done_click
bit $c030
done_click:
rts
long_beep:
ldy #235
bne do_beep
short_beep:
ldy #40
bne do_beep
;===========================
; BEEP (inlined)
;===========================
do_beep:
lda SOUND_STATUS
bmi done_beep
sty tone_smc+1
; BEEP
; repeat 30 times
lda #30 ; 2
tone1_loop:
tone_smc:
ldy #24 ; 2
loopC: ldx #6 ; 2
loopD: dex ; 1
bne loopD ; 2
dey ; 1
bne loopC ; 2
bit SPEAKER ; 3 ; click speaker
sec ; 1
sbc #1 ; 2
bne tone1_loop ; 2
; Try X=6 Y=21 cycles=757
; Try X=6 Y=24 cycles=865
; Try X=7 Y=235 cycles=9636
done_beep:
rts