diff --git a/games/mist_hgr/Makefile b/games/mist_hgr/Makefile index 5437c96c..f7468540 100644 --- a/games/mist_hgr/Makefile +++ b/games/mist_hgr/Makefile @@ -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 \ diff --git a/games/mist_hgr/clock_bridge_puzzle.s b/games/mist_hgr/clock_bridge_puzzle.s new file mode 100644 index 00000000..d107d441 --- /dev/null +++ b/games/mist_hgr/clock_bridge_puzzle.s @@ -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 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+1,Y ; MIST_GEAR + + ldy #LOCATION_SOUTH_BG + 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+1,Y ; MIST_GEAR + + ldy #LOCATION_SOUTH_BG + 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+1,Y ; MIST_CLOCK_PUZZLE + + ; draw it on other too + 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+1,Y ; MIST_CLOCK_PUZZLE + + ; lower on other too + + 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 INH + lda #12 + sta XPOS + lda #6 + jmp draw_gear_delete + +gear_look2: + lda #gear_block_sprite2 + sta INH + lda #9 + sta XPOS + lda #6 + jmp draw_gear_delete + +gear_look3: + 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 diff --git a/games/mist_hgr/graphics_mist/Makefile b/games/mist_hgr/graphics_mist/Makefile new file mode 100644 index 00000000..811e8eb1 --- /dev/null +++ b/games/mist_hgr/graphics_mist/Makefile @@ -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 diff --git a/games/mist_hgr/graphics_mist/todo.vgi b/games/mist_hgr/graphics_mist/todo.vgi new file mode 100644 index 00000000..3afe9c33 --- /dev/null +++ b/games/mist_hgr/graphics_mist/todo.vgi @@ -0,0 +1,3 @@ +; TODO +CLS 0xff ; white2 background +END diff --git a/games/mist_hgr/handle_pages.s b/games/mist_hgr/handle_pages.s new file mode 100644 index 00000000..59e68b0e --- /dev/null +++ b/games/mist_hgr/handle_pages.s @@ -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 + + diff --git a/games/mist_hgr/leveldata_mist.inc b/games/mist_hgr/leveldata_mist.inc new file mode 100644 index 00000000..9339f8cf --- /dev/null +++ b/games/mist_hgr/leveldata_mist.inc @@ -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 diff --git a/games/mist_hgr/link_book_mist_dock.s b/games/mist_hgr/link_book_mist_dock.s index 39835c3a..a70e1e97 100644 --- a/games/mist_hgr/link_book_mist_dock.s +++ b/games/mist_hgr/link_book_mist_dock.s @@ -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 diff --git a/games/mist_hgr/marker_switch.s b/games/mist_hgr/marker_switch.s new file mode 100644 index 00000000..e038bc82 --- /dev/null +++ b/games/mist_hgr/marker_switch.s @@ -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 + + diff --git a/games/mist_hgr/mist_island.s b/games/mist_hgr/mist_island.s index 84a4dd4b..b77bfe6d 100644 --- a/games/mist_hgr/mist_island.s +++ b/games/mist_hgr/mist_island.s @@ -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 ;================= diff --git a/games/mist_hgr/mist_puzzles.s b/games/mist_hgr/mist_puzzles.s new file mode 100644 index 00000000..93b14e38 --- /dev/null +++ b/games/mist_hgr/mist_puzzles.s @@ -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+1,Y ; MIST_POOL + + lda #gear_shipup_s_lzsa + sta location15+1,Y ; MIST_GEAR + + lda #dock_switch_shipup_s_lzsa + sta location1+1,Y ; MIST_DOCK_SWITCH + + 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+1,Y ; MIST_TREE_CORRIDOR_1 + + 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+1,Y ; MIST_OUTSIDE_TEMPLE + + lda #step_land3_shipup_e_lzsa + sta location8+1,Y ; MIST_STEPS_4TH_LANDING + + lda #step_dentist_shipup_e_lzsa + sta location7+1,Y ; MIST_STEPS_DENTIST + + lda #step_land2_shipup_e_lzsa + sta location6+1,Y ; MIST_STEPS_2ND_LANDING + + lda #step_land1_shipup_e_lzsa + sta location5+1,Y ; MIST_STEPS_1ST_LANDING + + 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+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+1,Y ; MIST_POOL + + lda #gear_s_lzsa + sta location15+1,Y ; MIST_GEAR + + lda #dock_switch_s_lzsa + sta location1+1,Y ; MIST_DOCK_SWITCH + + 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+1,Y ; MIST_TREE_CORRIDOR_1 + + 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+1,Y ; MIST_OUTSIDE_TEMPLE + + lda #step_land3_e_lzsa + sta location8+1,Y ; MIST_STEPS_4TH_LANDING + + lda #step_dentist_e_lzsa + sta location7+1,Y ; MIST_STEPS_DENTIST + + lda #step_land2_e_lzsa + sta location6+1,Y ; MIST_STEPS_2ND_LANDING + + lda #step_land1_e_lzsa + sta location5+1,Y ; MIST_STEPS_1ST_LANDING + + 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+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 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+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 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 + diff --git a/games/mist_hgr/mist_title.s b/games/mist_hgr/mist_title.s index 91937de9..6882719c 100644 --- a/games/mist_hgr/mist_title.s +++ b/games/mist_hgr/mist_title.s @@ -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 diff --git a/games/mist_hgr/qload.s b/games/mist_hgr/qload.s index 5bb7494e..92efee85 100644 --- a/games/mist_hgr/qload.s +++ b/games/mist_hgr/qload.s @@ -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 diff --git a/games/mist_hgr/simple_sounds.s b/games/mist_hgr/simple_sounds.s new file mode 100644 index 00000000..e64572ae --- /dev/null +++ b/games/mist_hgr/simple_sounds.s @@ -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 + + +