diff --git a/mist/Makefile b/mist/Makefile index 8eee2a14..7a0c8032 100644 --- a/mist/Makefile +++ b/mist/Makefile @@ -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 diff --git a/mist/common_defines.inc b/mist/common_defines.inc index c7b0a20f..bfe463e1 100644 --- a/mist/common_defines.inc +++ b/mist/common_defines.inc @@ -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 diff --git a/mist/common_routines.inc b/mist/common_routines.inc index ef71dd06..2c2b5617 100644 --- a/mist/common_routines.inc +++ b/mist/common_routines.inc @@ -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 diff --git a/mist/generator.s b/mist/generator.s new file mode 100644 index 00000000..3eeb1f0b --- /dev/null +++ b/mist/generator.s @@ -0,0 +1,137 @@ +; Generator, deep under Myst Island + +; by deater (Vince Weaver) + +; 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_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" diff --git a/mist/generator_puzzle.s b/mist/generator_puzzle.s index 2a0725ba..b672fbe3 100644 --- a/mist/generator_puzzle.s +++ b/mist/generator_puzzle.s @@ -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+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+1,Y ; MIST_GENERATOR_DOOR + sta location3+1,Y ; GEN_GENERATOR_DOOR jsr change_location diff --git a/mist/graphics_generator/Makefile b/mist/graphics_generator/Makefile new file mode 100644 index 00000000..70177c7a --- /dev/null +++ b/mist/graphics_generator/Makefile @@ -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 diff --git a/mist/graphics_mist/gen_door_closed_n.png b/mist/graphics_generator/gen_door_closed_n.png similarity index 100% rename from mist/graphics_mist/gen_door_closed_n.png rename to mist/graphics_generator/gen_door_closed_n.png diff --git a/mist/graphics_mist/gen_door_open_n.png b/mist/graphics_generator/gen_door_open_n.png similarity index 100% rename from mist/graphics_mist/gen_door_open_n.png rename to mist/graphics_generator/gen_door_open_n.png diff --git a/mist/graphics_mist/gen_door_s.png b/mist/graphics_generator/gen_door_s.png similarity index 100% rename from mist/graphics_mist/gen_door_s.png rename to mist/graphics_generator/gen_door_s.png diff --git a/mist/graphics_mist/generator_n.png b/mist/graphics_generator/generator_n.png similarity index 100% rename from mist/graphics_mist/generator_n.png rename to mist/graphics_generator/generator_n.png diff --git a/mist/graphics_mist/generator_s.png b/mist/graphics_generator/generator_s.png similarity index 100% rename from mist/graphics_mist/generator_s.png rename to mist/graphics_generator/generator_s.png diff --git a/mist/graphics_mist/green_house_e.png b/mist/graphics_generator/green_house_e.png similarity index 100% rename from mist/graphics_mist/green_house_e.png rename to mist/graphics_generator/green_house_e.png diff --git a/mist/graphics_mist/green_house_w.png b/mist/graphics_generator/green_house_w.png similarity index 100% rename from mist/graphics_mist/green_house_w.png rename to mist/graphics_generator/green_house_w.png diff --git a/mist/graphics_mist/green_steps1_n.png b/mist/graphics_generator/green_steps1_n.png similarity index 100% rename from mist/graphics_mist/green_steps1_n.png rename to mist/graphics_generator/green_steps1_n.png diff --git a/mist/graphics_mist/green_steps1_s.png b/mist/graphics_generator/green_steps1_s.png similarity index 100% rename from mist/graphics_mist/green_steps1_s.png rename to mist/graphics_generator/green_steps1_s.png diff --git a/mist/graphics_mist/green_steps6_n.png b/mist/graphics_generator/green_steps6_n.png similarity index 100% rename from mist/graphics_mist/green_steps6_n.png rename to mist/graphics_generator/green_steps6_n.png diff --git a/mist/graphics_mist/green_steps6_w.png b/mist/graphics_generator/green_steps6_w.png similarity index 100% rename from mist/graphics_mist/green_steps6_w.png rename to mist/graphics_generator/green_steps6_w.png diff --git a/mist/graphics_mist/tower1_base_e.png b/mist/graphics_generator/tower1_base_e.png similarity index 100% rename from mist/graphics_mist/tower1_base_e.png rename to mist/graphics_generator/tower1_base_e.png diff --git a/mist/graphics_mist/tower1_top_e.png b/mist/graphics_generator/tower1_top_e.png similarity index 100% rename from mist/graphics_mist/tower1_top_e.png rename to mist/graphics_generator/tower1_top_e.png diff --git a/mist/graphics_mist/tower1_trail2_n.png b/mist/graphics_generator/tower1_trail2_n.png similarity index 100% rename from mist/graphics_mist/tower1_trail2_n.png rename to mist/graphics_generator/tower1_trail2_n.png diff --git a/mist/graphics_mist/tower1_trail2_s.png b/mist/graphics_generator/tower1_trail2_s.png similarity index 100% rename from mist/graphics_mist/tower1_trail2_s.png rename to mist/graphics_generator/tower1_trail2_s.png diff --git a/mist/graphics_generator/tower1_trail2_w.png b/mist/graphics_generator/tower1_trail2_w.png new file mode 100644 index 00000000..2a924bf7 Binary files /dev/null and b/mist/graphics_generator/tower1_trail2_w.png differ diff --git a/mist/graphics_mist/tower1_trail_e.png b/mist/graphics_generator/tower1_trail_e.png similarity index 100% rename from mist/graphics_mist/tower1_trail_e.png rename to mist/graphics_generator/tower1_trail_e.png diff --git a/mist/graphics_mist/tower1_trail_w.png b/mist/graphics_generator/tower1_trail_w.png similarity index 100% rename from mist/graphics_mist/tower1_trail_w.png rename to mist/graphics_generator/tower1_trail_w.png diff --git a/mist/graphics_mist/Makefile b/mist/graphics_mist/Makefile index 70f59a3e..c05371a4 100644 --- a/mist/graphics_mist/Makefile +++ b/mist/graphics_mist/Makefile @@ -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) $< $@ diff --git a/mist/graphics_mist/mist_graphics.inc b/mist/graphics_mist/mist_graphics.inc deleted file mode 100644 index 678a9949..00000000 --- a/mist/graphics_mist/mist_graphics.inc +++ /dev/null @@ -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" diff --git a/mist/graphics_mist/pillar_anchor.png b/mist/graphics_mist/pillar_anchor.png new file mode 100644 index 00000000..ac71d2e2 Binary files /dev/null and b/mist/graphics_mist/pillar_anchor.png differ diff --git a/mist/graphics_mist/pillar_arrow.png b/mist/graphics_mist/pillar_arrow.png new file mode 100644 index 00000000..447083c3 Binary files /dev/null and b/mist/graphics_mist/pillar_arrow.png differ diff --git a/mist/graphics_mist/pillar_bug.png b/mist/graphics_mist/pillar_bug.png new file mode 100644 index 00000000..30372a25 Binary files /dev/null and b/mist/graphics_mist/pillar_bug.png differ diff --git a/mist/graphics_mist/pillar_leaf.png b/mist/graphics_mist/pillar_leaf.png new file mode 100644 index 00000000..79bb9c2e Binary files /dev/null and b/mist/graphics_mist/pillar_leaf.png differ diff --git a/mist/leveldata_mist.inc b/mist/leveldata_mist.inc index 7cb1cacc..973799b5 100644 --- a/mist/leveldata_mist.inc +++ b/mist/leveldata_mist.inc @@ -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 diff --git a/mist/loader.s b/mist/loader.s index d1a457cb..db390496 100644 --- a/mist/loader.s +++ b/mist/loader.s @@ -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 diff --git a/mist/mist.s b/mist/mist.s index 52248578..0964b33f 100644 --- a/mist/mist.s +++ b/mist/mist.s @@ -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" diff --git a/mist/mist_puzzles.s b/mist/mist_puzzles.s new file mode 100644 index 00000000..33be6d72 --- /dev/null +++ b/mist/mist_puzzles.s @@ -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+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 + + + + +