mist: split generator room to own level

need the 8k to finish mist
This commit is contained in:
Vince Weaver 2020-07-08 13:53:46 -04:00
parent 30f2bd508d
commit 54659a573d
34 changed files with 386 additions and 455 deletions

View File

@ -12,7 +12,7 @@ zip: mist.dsk mist_side2.dsk mist_side3.dsk
zip mist.zip mist.dsk mist_side2.dsk mist_side3.dsk
mist.dsk: HELLO LOADER MIST_TITLE MIST OCTAGON VIEWER \
MECHE SELENA CABIN CHANNEL STONEY DENTIST SAVE0
MECHE SELENA CABIN CHANNEL STONEY DENTIST GENERATOR SAVE0
cp empty.dsk mist.dsk
$(DOS33) -y mist.dsk SAVE A HELLO
$(DOS33) -y mist.dsk BSAVE -a 0x1000 LOADER
@ -21,6 +21,7 @@ mist.dsk: HELLO LOADER MIST_TITLE MIST OCTAGON VIEWER \
$(DOS33) -y mist.dsk BSAVE -a 0x2000 OCTAGON
$(DOS33) -y mist.dsk BSAVE -a 0x2000 CABIN
$(DOS33) -y mist.dsk BSAVE -a 0x2000 DENTIST
$(DOS33) -y mist.dsk BSAVE -a 0x2000 GENERATOR
$(DOS33) -y mist.dsk BSAVE -a 0xe00 SAVE0
$(DOS33) -y mist.dsk BSAVE -a 0x9000 ./audio/link_noise.btc LINK_NOISE.BTC
@ -108,17 +109,29 @@ mist.o: mist.s zp.inc hardware.inc common_defines.inc common_routines.inc \
common_sprites.inc \
leveldata_mist.inc \
clock_bridge_puzzle.s clock_sprites.inc \
letter_cat.s \
marker_switch.s \
keyboard.s \
draw_pointer.s \
end_level.s \
generator_puzzle.s \
mist_puzzles.s \
gr_copy.s audio.s text_print.s decompress_fast_v2.s
ca65 -o mist.o mist.s -l mist.lst
####
GENERATOR: generator.o
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 \
graphics_mist/mist_graphics.inc \
leveldata_generator.inc \
generator_puzzle.s
ca65 -o generator.o generator.s -l generator.lst
####
OCTAGON: octagon.o
ld65 -o OCTAGON octagon.o -C ../linker_scripts/apple2_2000.inc

View File

@ -47,11 +47,10 @@ LOAD_CHANNEL = 7
LOAD_CABIN = 8
LOAD_DENTIST = 9
LOAD_ARBOR = 10
LOAD_SHIPUP = 11
LOAD_NIBEL = 12
LOAD_ENDING = 13
LOAD_NIBEL = 11
LOAD_SHIP = 12
LOAD_GENERATOR = 13
LOAD_ENDING = 14
;================================
; Level definitions
@ -87,23 +86,25 @@ MIST_CLOCK_PUZZLE = 21
MIST_CLOCK_ISLAND = 22
MIST_CLOCK_INSIDE = 23
MIST_OPEN_GEAR = 24
;MIST_CHAIR_VIEW = 25
MIST_GREEN_SHACK = 26
MIST_GREEN_STEPS1 = 27
MIST_GREEN_STEPS6 = 28
MIST_GENERATOR_DOOR = 29
MIST_GENERATOR_ROOM = 30
MIST_ROCKET_PATH_PAD = 31
MIST_ROCKET_CLOSE = 32
MIST_TOWER2_PATH = 33
MIST_TOWER2_BASE = 34
MIST_TOWER2_TOP = 35
MIST_TOWER1_TRAIL = 36
MIST_TOWER1_TRAIL2 = 37
MIST_TOWER1_BOTTOM = 38
MIST_TOWER1_TOP = 39
MIST_VIEWER_DOOR = 40
; re-use 20,25
MIST_ROCKET_PATH_PAD = 25
MIST_ROCKET_CLOSE = 26
MIST_TOWER2_PATH = 27
MIST_TOWER2_BASE = 28
MIST_TOWER2_TOP = 29
MIST_VIEWER_DOOR = 30
; Mist Generator Building
GEN_GREEN_SHACK = 0
GEN_GREEN_STEPS1 = 1
GEN_GREEN_STEPS6 = 2
GEN_GENERATOR_DOOR = 3
GEN_GENERATOR_ROOM = 4
GEN_TOWER1_TRAIL = 5
GEN_TOWER1_TRAIL2 = 6
GEN_TOWER1_BOTTOM = 7
GEN_TOWER1_TOP = 8
; Mist Octagon Building

View File

@ -5,51 +5,51 @@
opendir_filename =$1039
; audio.c
play_audio =$1346
play_audio =$1350
; decompress_fast_v2.s
decompress_lzsa2_fast =$1457
getsrc_smc =$154d
decompress_lzsa2_fast =$1461
getsrc_smc =$1557
; draw_pointer.s
draw_pointer =$155a
draw_pointer =$1564
; end_level.s
end_level =$169d
end_level =$16a7
; gr_copy.s
gr_copy_to_current =$16bf
gr_copy_to_current =$16c9
; gr_fast_clear.s
clear_bottom =$17e5
clear_all =$1823
clear_all_color =$1848
clear_bottom =$17ef
clear_all =$182d
clear_all_color =$1852
; gr_offsets.s
gr_offsets =$1866
gr_offsets =$1870
; gr_page_flip.s
page_flip =$1896
page_flip =$18a0
; gr_putsprite_crop.s
put_sprite_crop =$18b0
psc_smc1 =$18d3
psc_smc2 =$196b
put_sprite_crop =$18ba
psc_smc1 =$18dd
psc_smc2 =$1975
; keyboard.s
handle_keypress =$19ec
change_location =$1acd
handle_keypress =$19f6
change_location =$1ad7
; text_print.s
move_and_print =$1b65
ps_smc1 =$1b92
move_and_print =$1b6f
ps_smc1 =$1b9c
; page_sprites.inc
blue_page_sprite =$1c7a
red_page_sprite =$1c90
white_page_sprite =$1ca6
blue_page_small_sprite =$1cbc
red_page_small_sprite =$1cc4
blue_page_sprite =$1c84
red_page_sprite =$1c9a
white_page_sprite =$1cb0
blue_page_small_sprite =$1cc6
red_page_small_sprite =$1cce
; audio files
linking_noise = $9000

137
mist/generator.s Normal file
View File

@ -0,0 +1,137 @@
; Generator, deep under Myst Island
; by deater (Vince Weaver) <vince@deater.net>
; Zero Page
.include "zp.inc"
.include "hardware.inc"
.include "common_defines.inc"
.include "common_routines.inc"
generator_start:
;===================
; init screen
;===================
jsr TEXT
jsr HOME
bit KEYRESET
bit SET_GR
bit PAGE0
bit LORES
bit FULLGR
;=================
; set up location
;=================
lda #<locations
sta LOCATIONS_L
lda #>locations
sta LOCATIONS_H
lda #0
sta DRAW_PAGE
sta LEVEL_OVER
; init cursor
lda #20
sta CURSOR_X
sta CURSOR_Y
; set up initial location
jsr change_location
lda #1
sta CURSOR_VISIBLE ; visible at first
game_loop:
;=================
; reset things
;=================
lda #0
sta IN_SPECIAL
sta IN_RIGHT
sta IN_LEFT
;====================================
; copy background to current page
;====================================
jsr gr_copy_to_current
;====================================
; handle special-case forground logic
;====================================
; handle generator puzzle
location_generator:
cmp #GEN_GENERATOR_ROOM
bne nothing_special
lda DIRECTION
and #$f
cmp #DIRECTION_N
bne nothing_special
jsr generator_update_volts
jsr generator_draw_buttons
jmp nothing_special
nothing_special:
;====================================
; draw pointer
;====================================
jsr draw_pointer
;====================================
; page flip
;====================================
jsr page_flip
;====================================
; handle keypress/joystick
;====================================
jsr handle_keypress
;====================================
; inc frame count
;====================================
inc FRAMEL
bne room_frame_no_oflo
inc FRAMEH
room_frame_no_oflo:
;====================================
; check level over
;====================================
lda LEVEL_OVER
bne really_exit
jmp game_loop
really_exit:
jmp end_level
;==========================
; includes
;==========================
; graphics data
.include "graphics_generator/generator_graphics.inc"
; puzzles
.include "generator_puzzle.s"
; level data
.include "leveldata_generator.inc"

View File

@ -1,8 +1,22 @@
leave_tower1:
lda #GEN_TOWER1_TOP
sta LOCATION
lda #DIRECTION_E
sta DIRECTION
jsr change_location
rts
;=======================
; flip circuit breaker
; if room==MIST_TOWER2_TOP, and with #$fe
; if room==MIST_TOWER1_TOP, and with #$fd
; if room==GEN_TOWER1_TOP, and with #$fd
circuit_breaker:
@ -40,69 +54,24 @@ 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 location32,Y ; MIST_ROCKET_CLOSE
lda #>spaceship_door_open_n_lzsa
sta location32+1,Y ; MIST_ROCKET_CLOSE
; change to load new level if through
ldy #LOCATION_SPECIAL_FUNC
lda #<(go_to_selena-1)
sta location32,Y ; MIST_ROCKET_CLOSE
lda #>(go_to_selena-1)
sta location32+1,Y ; MIST_ROCKET_CLOSE
jsr change_location
done_ss_door:
rts
;======================
; go to selena
go_to_selena:
lda #3 ; Selena
sta WHICH_LOAD
lda #$ff
sta LEVEL_OVER
rts
;======================
; open the generator_door
open_gen_door:
ldy #LOCATION_NORTH_EXIT
lda #MIST_GENERATOR_ROOM
sta location29,Y ; MIST_GENERATOR_DOOR
lda #GEN_GENERATOR_ROOM
sta location3,Y ; GEN_GENERATOR_DOOR
ldy #LOCATION_NORTH_EXIT_DIR
lda #(DIRECTION_N | DIRECTION_SPLIT | DIRECTION_ONLY_POINT)
sta location29,Y ; MIST_GENERATOR_DOOR
sta location3,Y ; GEN_GENERATOR_DOOR
ldy #LOCATION_NORTH_BG
lda #<gen_door_open_n_lzsa
sta location29,Y ; MIST_GENERATOR_DOOR
sta location3,Y ; GEN_GENERATOR_DOOR
lda #>gen_door_open_n_lzsa
sta location29+1,Y ; MIST_GENERATOR_DOOR
sta location3+1,Y ; GEN_GENERATOR_DOOR
jsr change_location

View File

@ -0,0 +1,50 @@
#include ../Makefile.inc
PNG2RLE = ../../gr-utils/png2rle
PNG2GR = ../../gr-utils/png2gr
LZSA = ~/research/lzsa/lzsa/lzsa
all: generator_graphics.inc
####
generator_graphics.inc: \
generator_n.lzsa generator_s.lzsa \
green_house_w.lzsa green_house_e.lzsa \
green_steps1_n.lzsa green_steps1_s.lzsa \
gen_door_closed_n.lzsa gen_door_open_n.lzsa gen_door_s.lzsa \
green_steps6_n.lzsa green_steps6_w.lzsa \
tower1_trail_w.lzsa tower1_trail_e.lzsa \
tower1_trail2_n.lzsa tower1_trail2_s.lzsa tower1_trail2_w.lzsa \
tower1_base_e.lzsa \
tower1_top_e.lzsa
echo "generator_n_lzsa: .incbin \"generator_n.lzsa\"" > generator_graphics.inc
echo "generator_s_lzsa: .incbin \"generator_s.lzsa\"" >> generator_graphics.inc
echo "green_house_w_lzsa: .incbin \"green_house_w.lzsa\"" >> generator_graphics.inc
echo "green_house_e_lzsa: .incbin \"green_house_e.lzsa\"" >> generator_graphics.inc
echo "green_steps1_n_lzsa: .incbin \"green_steps1_n.lzsa\"" >> generator_graphics.inc
echo "green_steps1_s_lzsa: .incbin \"green_steps1_s.lzsa\"" >> generator_graphics.inc
echo "gen_door_closed_n_lzsa: .incbin \"gen_door_closed_n.lzsa\"" >> generator_graphics.inc
echo "gen_door_open_n_lzsa: .incbin \"gen_door_open_n.lzsa\"" >> generator_graphics.inc
echo "gen_door_s_lzsa: .incbin \"gen_door_s.lzsa\"" >> generator_graphics.inc
echo "green_steps6_n_lzsa: .incbin \"green_steps6_n.lzsa\"" >> generator_graphics.inc
echo "green_steps6_w_lzsa: .incbin \"green_steps6_w.lzsa\"" >> generator_graphics.inc
echo "tower1_trail_w_lzsa: .incbin \"tower1_trail_w.lzsa\"" >> generator_graphics.inc
echo "tower1_trail_e_lzsa: .incbin \"tower1_trail_e.lzsa\"" >> generator_graphics.inc
echo "tower1_trail2_n_lzsa: .incbin \"tower1_trail2_n.lzsa\"" >> generator_graphics.inc
echo "tower1_trail2_w_lzsa: .incbin \"tower1_trail2_w.lzsa\"" >> generator_graphics.inc
echo "tower1_trail2_s_lzsa: .incbin \"tower1_trail2_s.lzsa\"" >> generator_graphics.inc
echo "tower1_base_e_lzsa: .incbin \"tower1_base_e.lzsa\"" >> generator_graphics.inc
echo "tower1_top_e_lzsa: .incbin \"tower1_top_e.lzsa\"" >> generator_graphics.inc
%.gr: %.png
$(PNG2GR) $< $@
%.lzsa: %.gr
$(LZSA) -r -f2 $< $@
####
clean:
rm -f *~ *.o *.lst *.gr *.lzsa generator_graphics.inc

View File

Before

Width:  |  Height:  |  Size: 425 B

After

Width:  |  Height:  |  Size: 425 B

View File

Before

Width:  |  Height:  |  Size: 494 B

After

Width:  |  Height:  |  Size: 494 B

View File

Before

Width:  |  Height:  |  Size: 465 B

After

Width:  |  Height:  |  Size: 465 B

View File

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

View File

Before

Width:  |  Height:  |  Size: 400 B

After

Width:  |  Height:  |  Size: 400 B

View File

Before

Width:  |  Height:  |  Size: 648 B

After

Width:  |  Height:  |  Size: 648 B

View File

Before

Width:  |  Height:  |  Size: 659 B

After

Width:  |  Height:  |  Size: 659 B

View File

Before

Width:  |  Height:  |  Size: 707 B

After

Width:  |  Height:  |  Size: 707 B

View File

Before

Width:  |  Height:  |  Size: 412 B

After

Width:  |  Height:  |  Size: 412 B

View File

Before

Width:  |  Height:  |  Size: 458 B

After

Width:  |  Height:  |  Size: 458 B

View File

Before

Width:  |  Height:  |  Size: 473 B

After

Width:  |  Height:  |  Size: 473 B

View File

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 928 B

View File

Before

Width:  |  Height:  |  Size: 996 B

After

Width:  |  Height:  |  Size: 996 B

View File

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -35,19 +35,12 @@ mist_graphics.inc: \
clock_puzzle_s.lzsa clock_puzzle_bridge.lzsa \
clock_inside_s.lzsa clock_inside_open.lzsa \
gear_open_e.lzsa \
generator_n.lzsa generator_s.lzsa \
green_house_w.lzsa green_house_e.lzsa \
green_steps1_n.lzsa green_steps1_s.lzsa \
gen_door_closed_n.lzsa gen_door_open_n.lzsa gen_door_s.lzsa \
green_steps6_n.lzsa green_steps6_w.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 \
tower1_trail_w.lzsa tower1_trail_e.lzsa \
tower1_trail2_n.lzsa tower1_trail2_w.lzsa tower1_trail2_s.lzsa \
tower1_base_e.lzsa \
tower1_top_e.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 \"dock_n.lzsa\"" > mist_graphics.inc
echo "dock_s_lzsa: .incbin \"dock_s.lzsa\"" >> mist_graphics.inc
echo "dock_e_lzsa: .incbin \"dock_e.lzsa\"" >> mist_graphics.inc
@ -111,17 +104,6 @@ mist_graphics.inc: \
echo "clock_inside_s_lzsa: .incbin \"clock_inside_s.lzsa\"" >> mist_graphics.inc
echo "clock_inside_open_lzsa: .incbin \"clock_inside_open.lzsa\"" >> mist_graphics.inc
echo "gear_open_e_lzsa: .incbin \"gear_open_e.lzsa\"" >> mist_graphics.inc
echo "generator_n_lzsa: .incbin \"generator_n.lzsa\"" >> mist_graphics.inc
echo "generator_s_lzsa: .incbin \"generator_s.lzsa\"" >> mist_graphics.inc
echo "green_house_w_lzsa: .incbin \"green_house_w.lzsa\"" >> mist_graphics.inc
echo "green_house_e_lzsa: .incbin \"green_house_e.lzsa\"" >> mist_graphics.inc
echo "green_steps1_n_lzsa: .incbin \"green_steps1_n.lzsa\"" >> mist_graphics.inc
echo "green_steps1_s_lzsa: .incbin \"green_steps1_s.lzsa\"" >> mist_graphics.inc
echo "gen_door_closed_n_lzsa: .incbin \"gen_door_closed_n.lzsa\"" >> mist_graphics.inc
echo "gen_door_open_n_lzsa: .incbin \"gen_door_open_n.lzsa\"" >> mist_graphics.inc
echo "gen_door_s_lzsa: .incbin \"gen_door_s.lzsa\"" >> mist_graphics.inc
echo "green_steps6_n_lzsa: .incbin \"green_steps6_n.lzsa\"" >> mist_graphics.inc
echo "green_steps6_w_lzsa: .incbin \"green_steps6_w.lzsa\"" >> mist_graphics.inc
echo "pad_n_lzsa: .incbin \"pad_n.lzsa\"" >> mist_graphics.inc
echo "pad_e_lzsa: .incbin \"pad_e.lzsa\"" >> mist_graphics.inc
echo "spaceship_door_n_lzsa: .incbin \"spaceship_door_n.lzsa\"" >> mist_graphics.inc
@ -130,14 +112,14 @@ mist_graphics.inc: \
echo "tower2_top_w_lzsa: .incbin \"tower2_top_w.lzsa\"" >> mist_graphics.inc
echo "tower2_path_e_lzsa: .incbin \"tower2_path_e.lzsa\"" >> mist_graphics.inc
echo "tower2_path_n_lzsa: .incbin \"tower2_path_n.lzsa\"" >> mist_graphics.inc
echo "tower1_trail_w_lzsa: .incbin \"tower1_trail_w.lzsa\"" >> mist_graphics.inc
echo "tower1_trail_e_lzsa: .incbin \"tower1_trail_e.lzsa\"" >> mist_graphics.inc
echo "tower1_trail2_n_lzsa: .incbin \"tower1_trail2_n.lzsa\"" >> mist_graphics.inc
echo "tower1_trail2_w_lzsa: .incbin \"tower1_trail2_w.lzsa\"" >> mist_graphics.inc
echo "tower1_trail2_s_lzsa: .incbin \"tower1_trail2_s.lzsa\"" >> mist_graphics.inc
echo "tower1_base_e_lzsa: .incbin \"tower1_base_e.lzsa\"" >> mist_graphics.inc
echo "tower1_top_e_lzsa: .incbin \"tower1_top_e.lzsa\"" >> mist_graphics.inc
echo "pillar_cross_lzsa: .incbin \"pillar_cross.lzsa\"" >> mist_graphics.inc
echo "pillar_eye_lzsa: .incbin \"pillar_eye.lzsa\"" >> mist_graphics.inc
echo "pillar_snake_lzsa: .incbin \"pillar_snake.lzsa\"" >> mist_graphics.inc
echo "pillar_emu_lzsa: .incbin \"pillar_emu.lzsa\"" >> mist_graphics.inc
echo "pillar_bug_lzsa: .incbin \"pillar_bug.lzsa\"" >> mist_graphics.inc
echo "pillar_anchor_lzsa: .incbin \"pillar_anchor.lzsa\"" >> mist_graphics.inc
echo "pillar_arrow_lzsa: .incbin \"pillar_arrow.lzsa\"" >> mist_graphics.inc
echo "pillar_leaf_lzsa: .incbin \"pillar_leaf.lzsa\"" >> mist_graphics.inc
%.gr: %.png
$(PNG2GR) $< $@

View File

@ -1,89 +0,0 @@
dock_n_lzsa: .incbin "dock_n.lzsa"
dock_s_lzsa: .incbin "dock_s.lzsa"
dock_e_lzsa: .incbin "dock_e.lzsa"
dock_w_lzsa: .incbin "dock_w.lzsa"
dock_w_open_lzsa: .incbin "dock_w_open.lzsa"
dock_switch_n_lzsa: .incbin "dock_switch_n.lzsa"
dock_switch_s_lzsa: .incbin "dock_switch_s.lzsa"
dock_steps_w_lzsa: .incbin "dock_steps_w.lzsa"
cat_letter_lzsa: .incbin "cat_letter.lzsa"
above_dock_e_lzsa: .incbin "above_dock_e.lzsa"
above_dock_s_lzsa: .incbin "above_dock_s.lzsa"
above_dock_n_lzsa: .incbin "above_dock_n.lzsa"
step_base_n_lzsa: .incbin "step_base_n.lzsa"
step_base_s_lzsa: .incbin "step_base_s.lzsa"
step_land1_w_lzsa: .incbin "step_land1_w.lzsa"
step_land1_e_lzsa: .incbin "step_land1_e.lzsa"
step_land2_w_lzsa: .incbin "step_land2_w.lzsa"
step_land2_e_lzsa: .incbin "step_land2_e.lzsa"
step_dentist_n_lzsa: .incbin "step_dentist_n.lzsa"
step_dentist_w_lzsa: .incbin "step_dentist_w.lzsa"
step_dentist_e_lzsa: .incbin "step_dentist_e.lzsa"
step_land3_w_lzsa: .incbin "step_land3_w.lzsa"
step_land3_e_lzsa: .incbin "step_land3_e.lzsa"
step_top_e_lzsa: .incbin "step_top_e.lzsa"
step_top_w_lzsa: .incbin "step_top_w.lzsa"
step_top_n_lzsa: .incbin "step_top_n.lzsa"
step_top_s_lzsa: .incbin "step_top_s.lzsa"
pool_n_lzsa: .incbin "pool_n.lzsa"
pool_s_lzsa: .incbin "pool_s.lzsa"
pool_e_lzsa: .incbin "pool_e.lzsa"
pool_w_lzsa: .incbin "pool_w.lzsa"
clock_s_lzsa: .incbin "clock_s.lzsa"
clock_n_lzsa: .incbin "clock_n.lzsa"
clock_e_lzsa: .incbin "clock_e.lzsa"
clock_bridge_lzsa: .incbin "clock_bridge.lzsa"
spaceship_far_n_lzsa: .incbin "spaceship_far_n.lzsa"
spaceship_far_e_lzsa: .incbin "spaceship_far_e.lzsa"
tree1_n_lzsa: .incbin "tree1_n.lzsa"
tree1_s_lzsa: .incbin "tree1_s.lzsa"
tree2_n_lzsa: .incbin "tree2_n.lzsa"
tree2_s_lzsa: .incbin "tree2_s.lzsa"
tree2_e_lzsa: .incbin "tree2_e.lzsa"
tree2_w_lzsa: .incbin "tree2_w.lzsa"
tree5_n_lzsa: .incbin "tree5_n.lzsa"
tree5_s_lzsa: .incbin "tree5_s.lzsa"
tree5_e_lzsa: .incbin "tree5_e.lzsa"
gear_n_lzsa: .incbin "gear_n.lzsa"
gear_s_lzsa: .incbin "gear_s.lzsa"
gear_w_lzsa: .incbin "gear_w.lzsa"
gear_open_n_lzsa: .incbin "gear_open_n.lzsa"
gear_base_n_lzsa: .incbin "gear_base_n.lzsa"
spaceship_switch_n_lzsa: .incbin "spaceship_switch_n.lzsa"
tree4_n_lzsa: .incbin "tree4_n.lzsa"
tree4_s_lzsa: .incbin "tree4_s.lzsa"
tree4_w_lzsa: .incbin "tree4_w.lzsa"
tree4_e_lzsa: .incbin "tree4_e.lzsa"
clock_island_s_lzsa: .incbin "clock_island_s.lzsa"
clock_island_n_lzsa: .incbin "clock_island_n.lzsa"
clock_puzzle_s_lzsa: .incbin "clock_puzzle_s.lzsa"
clock_puzzle_bridge_lzsa: .incbin "clock_puzzle_bridge.lzsa"
clock_inside_s_lzsa: .incbin "clock_inside_s.lzsa"
clock_inside_open_lzsa: .incbin "clock_inside_open.lzsa"
gear_open_e_lzsa: .incbin "gear_open_e.lzsa"
generator_n_lzsa: .incbin "generator_n.lzsa"
generator_s_lzsa: .incbin "generator_s.lzsa"
green_house_w_lzsa: .incbin "green_house_w.lzsa"
green_house_e_lzsa: .incbin "green_house_e.lzsa"
green_steps1_n_lzsa: .incbin "green_steps1_n.lzsa"
green_steps1_s_lzsa: .incbin "green_steps1_s.lzsa"
gen_door_closed_n_lzsa: .incbin "gen_door_closed_n.lzsa"
gen_door_open_n_lzsa: .incbin "gen_door_open_n.lzsa"
gen_door_s_lzsa: .incbin "gen_door_s.lzsa"
green_steps6_n_lzsa: .incbin "green_steps6_n.lzsa"
green_steps6_w_lzsa: .incbin "green_steps6_w.lzsa"
pad_n_lzsa: .incbin "pad_n.lzsa"
pad_e_lzsa: .incbin "pad_e.lzsa"
spaceship_door_n_lzsa: .incbin "spaceship_door_n.lzsa"
spaceship_door_open_n_lzsa: .incbin "spaceship_door_open_n.lzsa"
tower2_base_w_lzsa: .incbin "tower2_base_w.lzsa"
tower2_top_w_lzsa: .incbin "tower2_top_w.lzsa"
tower2_path_e_lzsa: .incbin "tower2_path_e.lzsa"
tower2_path_n_lzsa: .incbin "tower2_path_n.lzsa"
tower1_trail_w_lzsa: .incbin "tower1_trail_w.lzsa"
tower1_trail_e_lzsa: .incbin "tower1_trail_e.lzsa"
tower1_trail2_n_lzsa: .incbin "tower1_trail2_n.lzsa"
tower1_trail2_w_lzsa: .incbin "tower1_trail2_w.lzsa"
tower1_trail2_s_lzsa: .incbin "tower1_trail2_s.lzsa"
tower1_base_e_lzsa: .incbin "tower1_base_e.lzsa"
tower1_top_e_lzsa: .incbin "tower1_top_e.lzsa"

Binary file not shown.

After

Width:  |  Height:  |  Size: 950 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 941 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 888 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 874 B

View File

@ -11,10 +11,7 @@ locations:
.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
.word location40
.word location28,location29,location30
; MIST_ARRIVAL_DOCK -- dock
location0:
@ -74,8 +71,6 @@ location2:
.byte BG_WEST|BG_NORTH
.byte $ff ; special exit
; MIST_ABOVE_DOCK -- above dock path
location3:
.byte MIST_GEAR_BASE ; north exit
@ -147,7 +142,6 @@ location6:
.byte 36,45 ; special y
.word read_letter-1
; MIST_STEPS_DENTIST -- steps outside dentist chair branch
location7:
.byte $ff ; north exit
@ -209,7 +203,6 @@ location9:
.byte 0,46 ; special y
.word enter_octagon-1
; MIST_POOL -- pool
location10:
.byte MIST_OUTSIDE_TEMPLE ; north exit
@ -324,7 +317,6 @@ location15:
.byte 29,35 ; special y
.word click_switch-1 ; special function
; MIST_GEAR_BASE -- gear base
location16:
.byte MIST_GEAR ; north exit
@ -381,7 +373,7 @@ location19:
.byte MIST_TREE_CORRIDOR_2 ; north exit
.byte MIST_TREE_CORRIDOR_5 ; south exit
.byte $ff ; east exit
.byte MIST_TOWER1_TRAIL ; west exit
.byte $ff ; west exit
.byte DIRECTION_N ; north exit_dir
.byte DIRECTION_S ; south exit_dir
.byte $ff ; east exit_dir
@ -470,7 +462,6 @@ location23:
.byte 8,32 ; special y
.word clock_inside_puzzle-1 ; special function
; MIST_OPEN_GEAR -- open_gear (?)
location24:
.byte $ff ; north exit
@ -491,117 +482,8 @@ location24:
.byte 14,24 ; special y
.word go_to_meche-1 ; special function
; MIST_CHAIR_VIEW (unused) -- chair view
location25:
.byte $ff ; north exit
.byte $ff ; south exit
.byte $ff ; east exit
.byte $ff ; west exit
.byte $ff ; north exit_dir
.byte $ff ; south exit_dir
.byte $ff ; east exit_dir
.byte $ff ; west exit_dir
.word $0000 ; north bg
.word $0000 ; south bg
.word $0000 ; east bg
.word $0000 ; west bg
.byte BG_NORTH | BG_SOUTH
.byte $ff ; TODO: lightswitch
; MIST_GREEN_SHACK
location26:
.byte $ff ; north exit
.byte $ff ; south exit
.byte MIST_TREE_CORRIDOR_4 ; east exit
.byte MIST_GREEN_STEPS1 ; west exit
.byte $ff ; north exit_dir
.byte $ff ; south exit_dir
.byte DIRECTION_E ; east exit_dir
.byte DIRECTION_N ; west exit_dir
.word $0000 ; north bg
.word $0000 ; south bg
.word green_house_e_lzsa ; east bg
.word green_house_w_lzsa ; west bg
.byte BG_EAST | BG_WEST
.byte $ff
; MIST_GREEN_STEPS1 -- green shack steps 1
location27:
.byte MIST_GREEN_STEPS6 ; north exit
.byte MIST_GREEN_SHACK ; 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 green_steps1_n_lzsa ; north bg
.word green_steps1_s_lzsa ; south bg
.word $0000 ; east bg
.word $0000 ; west bg
.byte BG_NORTH | BG_SOUTH
.byte $ff
; MIST_GREEN_STEPS6 -- green shack steps 6
location28:
.byte MIST_GENERATOR_DOOR ; north exit
.byte $ff ; south exit
.byte $ff ; east exit
.byte MIST_GREEN_STEPS1 ; west exit
.byte DIRECTION_N ; north exit_dir
.byte $ff ; south exit_dir
.byte $ff ; east exit_dir
.byte DIRECTION_S ; west exit_dir
.word green_steps6_n_lzsa ; north bg
.word $0000 ; south bg
.word $0000 ; east bg
.word green_steps6_w_lzsa ; west bg
.byte BG_NORTH | BG_WEST
.byte $ff
; MIST_GENERATOR_DOOR -- generator room door
location29:
.byte MIST_GENERATOR_DOOR ; north exit
.byte MIST_GREEN_STEPS6 ; south exit
.byte $ff ; east exit
.byte $ff ; west exit
.byte DIRECTION_S ; north exit_dir
.byte DIRECTION_W ; south exit_dir
.byte $ff ; east exit_dir
.byte $ff ; west exit_dir
.word gen_door_closed_n_lzsa ; north bg
.word gen_door_s_lzsa ; south bg
.word $0000 ; east bg
.word $0000 ; west bg
.byte BG_NORTH | BG_SOUTH
.byte DIRECTION_N ; special exit
.byte 27,32 ; special x
.byte 26,32 ; special y
.word open_gen_door-1 ; special function
; MIST_GENERATOR_ROOM -- generator room
location30:
.byte $ff ; north exit
.byte MIST_GENERATOR_DOOR ; 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 generator_n_lzsa ; north bg
.word generator_s_lzsa ; south bg
.word $0000 ; east bg
.word $0000 ; west bg
.byte BG_NORTH | BG_SOUTH
.byte DIRECTION_N
.byte 24,36 ; special x
.byte 34,40 ; special y
.word generator_button_press-1 ; special function
; MIST_ROCKET_PATH_PAD -- pad on way to rocket
location31:
location25:
.byte MIST_SPACESHIP_FAR ; north exit
.byte $ff ; south exit
.byte MIST_OUTSIDE_TEMPLE ; east exit
@ -621,7 +503,7 @@ location31:
.word pad_special-1 ; special function
; MIST_ROCKET_CLOSE -- rocket close in
location32:
location26:
.byte MIST_SPACESHIP_FAR ; north exit
.byte $ff ; south exit
.byte $ff ; east exit
@ -640,9 +522,8 @@ location32:
.byte 8,46 ; special y
.word open_ss_door-1 ; special function
; MIST_TOWER2_PATH -- tower2 path
location33:
location27:
.byte MIST_TOWER2_BASE ; north exit
.byte $ff ; south exit
.byte MIST_ROCKET_PATH_PAD ; east exit
@ -659,7 +540,7 @@ location33:
.byte $ff
; MIST_TOWER2_BASE -- tower2 base
location34:
location28:
.byte $ff ; north exit
.byte $ff ; south exit
.byte $ff ; east exit
@ -679,7 +560,7 @@ location34:
.word leave_tower2-1 ; special function
; MIST_TOWER2_TOP -- tower2 top
location35:
location29:
.byte $ff ; north exit
.byte $ff ; south exit
.byte $ff ; east exit
@ -698,83 +579,8 @@ location35:
.byte 10,18 ; special y
.word circuit_breaker-1 ; special function
; MIST_TOWER1_TRAIL -- tower1 trail
location36:
.byte $ff ; north exit
.byte $ff ; south exit
.byte MIST_TREE_CORRIDOR_4 ; east exit
.byte MIST_TOWER1_TRAIL2 ; west exit
.byte $ff ; north exit_dir
.byte $ff ; south exit_dir
.byte DIRECTION_E ; east exit_dir
.byte DIRECTION_N ; west exit_dir
.word $0000 ; north bg
.word $0000 ; south bg
.word tower1_trail_e_lzsa ; east bg
.word tower1_trail_w_lzsa ; west bg
.byte BG_WEST|BG_EAST
.byte $ff
; MIST_TOWER1_TRAIL2 -- tower1 trail2
location37:
.byte MIST_TOWER1_BOTTOM ; north exit
.byte MIST_TOWER1_TRAIL ; south exit
.byte $ff ; east exit
.byte $ff ; west exit
.byte DIRECTION_E|DIRECTION_ONLY_POINT ; north exit_dir
.byte DIRECTION_E ; south exit_dir
.byte $ff ; east exit_dir
.byte $ff ; west exit_dir
.word tower1_trail2_n_lzsa ; north bg
.word tower1_trail2_s_lzsa ; south bg
.word $0000 ; east bg
.word tower1_trail2_w_lzsa ; west bg
.byte BG_NORTH|BG_SOUTH|BG_WEST
.byte $ff
; MIST_TOWER1_BOTTOM -- tower1 bottom
location38:
.byte $ff ; north exit
.byte $ff ; south exit
.byte MIST_TOWER1_TRAIL2 ; 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 tower1_base_e_lzsa ; east bg
.word $0000 ; west bg
.byte BG_EAST
.byte DIRECTION_E ; special exit
.byte 10,26 ; special x
.byte 0,46 ; special y
.word leave_tower1-1 ; special function
; MIST_TOWER1_TOP -- tower1 top
location39:
.byte $ff ; north exit
.byte $ff ; south exit
.byte MIST_TOWER1_BOTTOM ; east exit
.byte $ff ; west exit
.byte $ff ; north exit_dir
.byte $ff ; south exit_dir
.byte DIRECTION_E|DIRECTION_ONLY_POINT ; east exit_dir
.byte $ff ; west exit_dir
.word $0000 ; north bg
.word $0000 ; south bg
.word tower1_top_e_lzsa ; east bg
.word $0000 ; west bg
.byte BG_EAST
.byte DIRECTION_E ; special exit
.byte 16,22 ; special x
.byte 10,18 ; special y
.word circuit_breaker-1 ; special function
; MIST_VIEWER_DOOR -- viewer door
location40:
location30:
.byte MIST_DOCK_SWITCH ; north exit
.byte $ff ; south exit
.byte $ff ; east exit

View File

@ -144,8 +144,8 @@ filenames:
.word intro_filename
.word mist_filename,meche_filename,selena_filename,octagon_filename
.word viewer_filename,stoney_filename,channel_filename,cabin_filename
.word dentist_filename,arbor_filename,shipup_filename,nibel_filename
.word ending_filename
.word dentist_filename,arbor_filename,nibel_filename,ship_filename
.word generator_filename,ending_filename
intro_filename:
.byte "MIST_TITLE",0
@ -169,10 +169,12 @@ dentist_filename:
.byte "DENTIST",0
arbor_filename:
.byte "ARBOR",0
shipup_filename:
.byte "SHIPUP",0
nibel_filename:
.byte "NIBEL",0
ship_filename:
.byte "SHIP",0
generator_filename:
.byte "GENERATOR",0
ending_filename:
.byte "ENDING",0

View File

@ -93,7 +93,7 @@ not_gear_related:
beq location_clock
cmp #MIST_CLOCK_INSIDE
beq location_inside_clock
bne location_generator
bne nothing_special
location_clock:
jsr draw_clock_face
@ -102,19 +102,6 @@ location_inside_clock:
jsr draw_clock_inside
jmp nothing_special
; handle generator puzzle
location_generator:
cmp #MIST_GENERATOR_ROOM
bne nothing_special
lda DIRECTION
and #$f
cmp #DIRECTION_N
bne nothing_special
jsr generator_update_volts
jsr generator_draw_buttons
jmp nothing_special
nothing_special:
;====================================
@ -189,24 +176,13 @@ leave_tower2:
rts
leave_tower1:
lda #MIST_TOWER1_TOP
sta LOCATION
lda #DIRECTION_E
sta DIRECTION
jsr change_location
rts
green_house:
; FIXME: handle switch separately
lda #MIST_GREEN_SHACK
sta LOCATION
; lda #MIST_GREEN_SHACK
; sta LOCATION
jmp change_location
@ -323,12 +299,7 @@ read_letter:
; puzzles
.include "clock_bridge_puzzle.s"
.include "marker_switch.s"
.include "generator_puzzle.s"
; linking books
; letters
; .include "letter_cat.s"
.include "mist_puzzles.s"
; level data
.include "leveldata_mist.inc"

89
mist/mist_puzzles.s Normal file
View File

@ -0,0 +1,89 @@
;=======================
; flip circuit breaker
; if room==MIST_TOWER2_TOP, and with #$fe
; if room==MIST_TOWER1_TOP, and with #$fd
circuit_breaker:
bit $C030 ; click speaker
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 #3 ; Selena
sta WHICH_LOAD
lda #$ff
sta LEVEL_OVER
rts