From 6704aa582e3f684dacb04c9c78fca3ab97fe7600 Mon Sep 17 00:00:00 2001 From: Vince Weaver Date: Tue, 14 Jul 2020 11:15:40 -0400 Subject: [PATCH] mist: cabin: can now enter combination on the safe --- mist/cabin.s | 7 ++ mist/cabin_boiler_puzzle.s | 154 +++++++++++++++++++-------------- mist/default_save.s | 4 + mist/graphics_cabin/safe_w.png | Bin 860 -> 7983 bytes mist/leveldata_cabin.inc | 5 +- mist/zp.inc | 9 +- 6 files changed, 110 insertions(+), 69 deletions(-) diff --git a/mist/cabin.s b/mist/cabin.s index 7ebecf22..fb313252 100644 --- a/mist/cabin.s +++ b/mist/cabin.s @@ -76,6 +76,13 @@ game_loop: cmp #CABIN_TREE_BOOK_OPEN beq animate_channel_book + cmp #CABIN_SAFE + bne check_next + jsr draw_safe_combination + jmp nothing_special + +check_next: + jmp nothing_special animate_channel_book: diff --git a/mist/cabin_boiler_puzzle.s b/mist/cabin_boiler_puzzle.s index 49894ae8..4a65b2c9 100644 --- a/mist/cabin_boiler_puzzle.s +++ b/mist/cabin_boiler_puzzle.s @@ -1,92 +1,114 @@ ; this is a painful one + ; mostly because the tree puzzle is sort of obscure in the original + + + ;==================== + ; safe was clicked + ;==================== goto_safe: lda #CABIN_SAFE sta LOCATION jmp change_location - - -control_panel_pressed: + ;==================== + ; safe was touched + ;==================== +touch_safe: lda CURSOR_Y + + ; check if buttons cmp #26 ; blt - bcc panel_inc - cmp #30 ; blt - bcc panel_dec + bcc safe_buttons -panel_latch: + ; check if handle + cmp #34 + bcs pull_handle ; bge - lda VIEWER_CHANNEL - sta VIEWER_LATCHED ; latch value into pool state + ; else do nothing + rts - lda #VIEWER_POOL - sta LOCATION - lda #DIRECTION_W - sta DIRECTION - jmp change_location +pull_handle: + ; FIXME + rts -panel_inc: +safe_buttons: lda CURSOR_X - cmp #18 - bcs right_arrow_pressed + cmp #13 ; not a button + bcc no_button + cmp #19 + bcc hundreds_inc + cmp #25 + bcc tens_inc + bcs ones_inc - ; 19-23 left arrow +no_button: + rts - lda VIEWER_CHANNEL - and #$f0 - cmp #$90 - bcs done_panel_press ; bge - lda VIEWER_CHANNEL +hundreds_inc: + sed + lda SAFE_HUNDREDS clc - adc #$10 - sta VIEWER_CHANNEL - rts - -right_arrow_pressed: - ; 13-17 right arrow - - lda VIEWER_CHANNEL + adc #$1 + cld and #$f - cmp #9 - bcs done_panel_press ; bge - inc VIEWER_CHANNEL + sta SAFE_HUNDREDS + rts -panel_dec: - lda CURSOR_X - cmp #18 - bcs right_arrow_pressed_dec - - ; 19-23 left arrow - - lda VIEWER_CHANNEL - and #$f0 - beq done_panel_press - lda VIEWER_CHANNEL - sec - sbc #$10 - sta VIEWER_CHANNEL - rts - -right_arrow_pressed_dec: - ; 13-17 right arrow - - lda VIEWER_CHANNEL +tens_inc: + sed + lda SAFE_TENS + clc + adc #$1 + cld and #$f - beq done_panel_press - dec VIEWER_CHANNEL + sta SAFE_TENS + + rts + +ones_inc: + sed + lda SAFE_ONES + clc + adc #$1 + cld + and #$f + sta SAFE_ONES -done_panel_press: rts -display_panel_code: - ; ones digit + ;============================== + ; draw the numbers on the safe + ;============================== +draw_safe_combination: - lda VIEWER_CHANNEL + ; hundreds digit + + lda SAFE_HUNDREDS + and #$f + asl + tay + + lda number_sprites,Y + sta INL + lda number_sprites+1,Y + sta INH + + lda #15 + sta XPOS + lda #8 + sta YPOS + + jsr put_sprite_crop + + ; tens digit + + lda SAFE_TENS and #$f asl tay @@ -103,13 +125,11 @@ display_panel_code: jsr put_sprite_crop - ; tens digit + ; ones digit - lda VIEWER_CHANNEL - and #$f0 - lsr - lsr - lsr + lda SAFE_ONES + and #$f + asl tay lda number_sprites,Y @@ -117,7 +137,7 @@ display_panel_code: lda number_sprites+1,Y sta INH - lda #15 + lda #27 sta XPOS lda #8 sta YPOS diff --git a/mist/default_save.s b/mist/default_save.s index 23abbade..7bcd6fa4 100644 --- a/mist/default_save.s +++ b/mist/default_save.s @@ -74,3 +74,7 @@ .byte $00 ; COMPARTMENT_OPEN = $C1 .byte $00 ; GAME_COMPLETED = $C2 +.byte $00 ; SAFE_HUNDREDS = $C3 +.byte $00 ; SAFE_TENS = $C4 +.byte $00 ; SAFE_ONES = $C5 +.byte $00 ; SAFE_OPEN = $C6 diff --git a/mist/graphics_cabin/safe_w.png b/mist/graphics_cabin/safe_w.png index 5e78f9455f7c7822297a80ff737aef07b3d184fc..7d52efef2447b9f11ccadce6734fe31a5201135f 100644 GIT binary patch delta 7893 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 delta 714 zcmV;*0yX`wKHLV7BYy#fX+uL$Nkc;*aB^>EX>4Tx04R}tkv&MmKpe$i(~4Cpf_4yb z$WR5rf~bh2R-p(LO0CeUgUO{|(4-+rad8w}3l4rPRvlcNb#-tR1i=pwCr2km7b)?7 zNufoI2gm(*ckglc4iM^Prka6qK-DZG6_1IT?5f!LiU7LMhksE7C1&b#$z%eaF%XPItT#2duZo0iUbpE%5ll0tk=JZ8`Zi66NxyZpwv;IP0m z!$vwaPaGx|3vDd7F)JD>@f2}HQ8mgJGA=8ew>YciDr?@8zc7^3R+hO=a|m%PVhKrz zkWobmWmt&Ps(+DUB1QW#5C5R!Pm)U}R|$+93#dSa2l0~gmVP2K}8cYuK>T{0v`^3xRZ zdEotwz9|dz-vZrhZg0(foIU_)>MC&q92^281q@LJd?qOlduLJCNA`6qV#U zI)O_TQ5&V~76$x>Z$Mk?Ol#9JTT65Avah0>KX5bNCAI zQI~ZnGqAr@T)=vN0D$c&4FSsa69$}D?MM~ybE_E36-fnL2AZ>szcWdcTp%B>p& wl!hgb#x4(DCm?WKs%ah_*1tS3pjL3;7c!w!b;N@XzW@LL07*qoM6N<$f<8Js*#H0l diff --git a/mist/leveldata_cabin.inc b/mist/leveldata_cabin.inc index cb562575..dcda0b2d 100644 --- a/mist/leveldata_cabin.inc +++ b/mist/leveldata_cabin.inc @@ -105,7 +105,10 @@ location4: .word $000 ; east bg .word safe_w_lzsa ; west bg .byte BG_WEST - .byte $ff + .byte DIRECTION_W ; special exit + .byte 3,31 ; special x + .byte 16,44 ; special y + .word touch_safe-1 ; CABIN_CLOCK_PATH -- path to clock location5: diff --git a/mist/zp.inc b/mist/zp.inc index 5066a36f..75cddd7c 100644 --- a/mist/zp.inc +++ b/mist/zp.inc @@ -189,7 +189,14 @@ COMPARTMENT_OPEN = $C1 ; dock marker switch compartment GAME_COMPLETE = $C2 ; game has been completed -END_OF_SAVE = $C3 +SAFE_HUNDREDS = $C3 ; safe combination, hundreds +SAFE_TENS = $C4 ; safe combination, tens +SAFE_ONES = $C5 ; safe combination, ones + +SAFE_OPEN = $C6 + + +END_OF_SAVE = $C7 ; done game puzzle state