mirror of
https://github.com/deater/dos33fsprogs.git
synced 2024-07-06 07:28:58 +00:00
297 lines
7.9 KiB
ArmAsm
297 lines
7.9 KiB
ArmAsm
|
; The interminable sub puzzle
|
||
|
|
||
|
; "We all live in a ramming submarine.." -- K. Boykin
|
||
|
|
||
|
; by deater (Vince Weaver) <vince@deater.net>
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
sub_selena_open:
|
||
|
lda #SUB_CLOSE_OPEN
|
||
|
sta LOCATION
|
||
|
|
||
|
jmp change_location
|
||
|
|
||
|
sub_selena_close:
|
||
|
lda #SUB_CLOSE
|
||
|
sta LOCATION
|
||
|
|
||
|
jmp change_location
|
||
|
|
||
|
sub_door_selena_open:
|
||
|
lda #SUB_INSIDE_BACK_OPEN
|
||
|
sta LOCATION
|
||
|
|
||
|
jmp change_location
|
||
|
|
||
|
sub_door_close:
|
||
|
lda #SUB_INSIDE_BACK
|
||
|
sta LOCATION
|
||
|
|
||
|
jmp change_location
|
||
|
|
||
|
|
||
|
;=====================
|
||
|
; sub controls
|
||
|
;=====================
|
||
|
|
||
|
|
||
|
;====================
|
||
|
; toward_book
|
||
|
sub_controls_move_toward_book:
|
||
|
|
||
|
; disable exit button
|
||
|
ldy #LOCATION_SPECIAL_EXIT
|
||
|
lda #$ff
|
||
|
sta location6,Y ; SUB_INSIDE_BACK
|
||
|
|
||
|
; change so we use split mode when looking E
|
||
|
ldy #LOCATION_EAST_EXIT_DIR
|
||
|
lda #DIRECTION_E|DIRECTION_SPLIT
|
||
|
sta location6,Y ; SUB INSIDE_BACK
|
||
|
; any controls take us to moving
|
||
|
sta DIRECTION
|
||
|
|
||
|
lda #SUB_INSIDE_FRONT_MOVING
|
||
|
sta LOCATION
|
||
|
jmp change_location
|
||
|
|
||
|
;====================
|
||
|
; toward_selena
|
||
|
sub_controls_move_toward_selena:
|
||
|
|
||
|
; disable exit button
|
||
|
ldy #LOCATION_SPECIAL_EXIT
|
||
|
lda #$ff
|
||
|
sta location6,Y ; SUB_INSIDE_BACK
|
||
|
|
||
|
; change so we use split mode when looking E
|
||
|
ldy #LOCATION_EAST_EXIT_DIR
|
||
|
lda #DIRECTION_E|DIRECTION_SPLIT
|
||
|
sta location6,Y ; SUB INSIDE_BACK
|
||
|
|
||
|
; any controls take us to moving
|
||
|
sta DIRECTION
|
||
|
|
||
|
; change destination of front of sub
|
||
|
ldy #LOCATION_EAST_EXIT
|
||
|
lda #SUB_INSIDE_FRONT_MOVING
|
||
|
sta location7,Y ; SUB_INSIDE_BACK_OPEN
|
||
|
sta location6,Y ; SUN_INSIDE_BACK
|
||
|
|
||
|
lda #SUB_INSIDE_FRONT_MOVING
|
||
|
sta LOCATION
|
||
|
jmp change_location
|
||
|
|
||
|
|
||
|
;===============================
|
||
|
; moving
|
||
|
sub_controls_moving:
|
||
|
|
||
|
; re-enable exit button
|
||
|
ldy #LOCATION_SPECIAL_EXIT
|
||
|
lda #DIRECTION_S
|
||
|
sta location6,Y ; SUB_INSIDE_BACK
|
||
|
|
||
|
; change so we use normal (not split) mode when looking forward
|
||
|
ldy #LOCATION_EAST_EXIT_DIR
|
||
|
lda #DIRECTION_E
|
||
|
sta location6,Y ; SUB INSIDE_BACK
|
||
|
sta DIRECTION
|
||
|
|
||
|
lda CURSOR_Y
|
||
|
cmp #32
|
||
|
bcc sub_forward ; blt
|
||
|
|
||
|
; "backward" taks us back to selena
|
||
|
sub_backward:
|
||
|
|
||
|
; change destination of open door
|
||
|
ldy #LOCATION_SOUTH_EXIT
|
||
|
lda #SUB_CLOSE_OPEN
|
||
|
sta location7,Y ; SUB_INSIDE_BACK_OPEN
|
||
|
|
||
|
ldy #LOCATION_SOUTH_EXIT_DIR
|
||
|
lda #DIRECTION_N
|
||
|
sta location7,Y ; SUB_INSIDE_BACK_OPEN
|
||
|
|
||
|
; change destination of front of sub
|
||
|
ldy #LOCATION_EAST_EXIT
|
||
|
lda #SUB_INSIDE_FRONT_SELENA
|
||
|
sta location7,Y ; SUB_INSIDE_BACK_OPEN
|
||
|
sta location6,Y ; SUN_INSIDE_BACK
|
||
|
|
||
|
; change background of open door
|
||
|
ldy #LOCATION_SOUTH_BG
|
||
|
lda #<inside_sub_back_selena_s_lzsa
|
||
|
sta location7,Y
|
||
|
lda #>inside_sub_back_selena_s_lzsa
|
||
|
sta location7+1,Y ; SUB_INSIDE_BACK_OPEN
|
||
|
|
||
|
lda #SUB_INSIDE_FRONT_SELENA
|
||
|
sta LOCATION
|
||
|
jmp change_location
|
||
|
|
||
|
; "forward" takes us to book
|
||
|
sub_forward:
|
||
|
|
||
|
; change destination of open door
|
||
|
ldy #LOCATION_SOUTH_EXIT
|
||
|
lda #SUB_OUTSIDE_BOOK
|
||
|
sta location7,Y ; SUB_INSIDE_BACK_OPEN
|
||
|
|
||
|
ldy #LOCATION_SOUTH_EXIT_DIR
|
||
|
lda #DIRECTION_S
|
||
|
sta location7,Y ; SUB_INSIDE_BACK_OPEN
|
||
|
|
||
|
; change destination of front of sub
|
||
|
ldy #LOCATION_EAST_EXIT
|
||
|
lda #SUB_INSIDE_FRONT_BOOK
|
||
|
sta location7,Y ; SUB_INSIDE_BACK_OPEN
|
||
|
sta location6,Y ; SUN_INSIDE_BACK
|
||
|
|
||
|
; change background of open door
|
||
|
ldy #LOCATION_SOUTH_BG
|
||
|
lda #<inside_sub_back_book_s_lzsa
|
||
|
sta location7,Y
|
||
|
lda #>inside_sub_back_book_s_lzsa
|
||
|
sta location7+1,Y ; SUB_INSIDE_BACK_OPEN
|
||
|
|
||
|
lda #SUB_INSIDE_FRONT_BOOK
|
||
|
sta LOCATION
|
||
|
jmp change_location
|
||
|
|
||
|
|
||
|
; further research shows that the re-use of directions in mechanical
|
||
|
; was sort of co-incidental and they always intended for the sub
|
||
|
; puzzle to be stand-alone
|
||
|
;
|
||
|
; 1 2 3
|
||
|
;123456789012345678901234567890123456789
|
||
|
; FOR THE SAKE OF ARGUMENT IMAGINE YOU
|
||
|
; JUST SPENT 45 MINUTES NAVIGATING AN
|
||
|
; OBSCURE MAZE BASED ON A CLUE YOU WERE
|
||
|
; SUPPOSED TO NOTICE IN MECHANICAL AGE
|
||
|
|
||
|
|
||
|
; sub solution
|
||
|
; N, W, N, E, E
|
||
|
; S, S, W, SW, W
|
||
|
; NW, NE, N, SE
|
||
|
|
||
|
; N -- PLINK
|
||
|
; S -- BONK
|
||
|
; E -- PWING
|
||
|
; W -- BREETT
|
||
|
|
||
|
; PLINK means you are there?
|
||
|
|
||
|
; forward goes forward
|
||
|
; backtrack takes you to previous locations? has a stack?
|
||
|
|
||
|
; 37 locations in maze?
|
||
|
|
||
|
; red button plays noise again
|
||
|
; red barrier if you can't go a direction, plays burrrrrrrrr
|
||
|
; noise if you can't go
|
||
|
; if on wrong path, plays no noise at all?
|
||
|
; some paths take you to a direction not the one you left in
|
||
|
; let's not do that to keep things simple
|
||
|
|
||
|
; buttons dark if can't press them
|
||
|
|
||
|
NOISE_NONE = $00
|
||
|
NOISE_N = $01
|
||
|
|
||
|
; each location
|
||
|
; 8 exits, 1 sound, 1 backtrack
|
||
|
; 39 locations = 390 bytes???
|
||
|
;
|
||
|
|
||
|
sub_loc0: ; entrance
|
||
|
sub_loc1: ; N(loc2) [backtrack takes us to entrance][N ]
|
||
|
; N NE E SE S SW W NW backtrack noise
|
||
|
.byte 2,$FF,$FF,$FF, $FF,$FF,$FF,$FF, 0, NOISE_N
|
||
|
sub_loc2: ; W(loc3) S(loc1) [W ]
|
||
|
.byte $FF,$FF,$FF,$FF, $FF,$FF,$FF,$FF, 0, NOISE_NONE
|
||
|
sub_loc3: ; N(loc4) E(loc2) [N ]
|
||
|
.byte $FF,$FF,$FF,$FF, $FF,$FF,$FF,$FF, 0, NOISE_NONE
|
||
|
sub_loc4: ; E(loc5) S(loc3) N(loc16) [E ]
|
||
|
.byte $FF,$FF,$FF,$FF, $FF,$FF,$FF,$FF, 0, NOISE_NONE
|
||
|
sub_loc5: ; E(loc6) W(loc4) N(loc17) [E ]
|
||
|
.byte $FF,$FF,$FF,$FF, $FF,$FF,$FF,$FF, 0, NOISE_NONE
|
||
|
sub_loc6: ; S(loc7) W(loc5) NE(loc18) [S bonk]
|
||
|
.byte $FF,$FF,$FF,$FF, $FF,$FF,$FF,$FF, 0, NOISE_NONE
|
||
|
sub_loc7: ; S(loc8) N(loc6) E(loc20) [S bonk]
|
||
|
.byte $FF,$FF,$FF,$FF, $FF,$FF,$FF,$FF, 0, NOISE_NONE
|
||
|
sub_loc8: ; W(loc9) N(loc7) SE(loc22) [W]
|
||
|
.byte $FF,$FF,$FF,$FF, $FF,$FF,$FF,$FF, 0, NOISE_NONE
|
||
|
sub_loc9: ; SW(loc10) N(loc8) [SW]
|
||
|
.byte $FF,$FF,$FF,$FF, $FF,$FF,$FF,$FF, 0, NOISE_NONE
|
||
|
sub_loc10: ; W(loc11) NE(loc9) E(loc25) S(loc26) [W]
|
||
|
.byte $FF,$FF,$FF,$FF, $FF,$FF,$FF,$FF, 0, NOISE_NONE
|
||
|
sub_loc11: ; NW(loc12) E(loc10) S(loc27) SW(loc29) [NW]
|
||
|
.byte $FF,$FF,$FF,$FF, $FF,$FF,$FF,$FF, 0, NOISE_NONE
|
||
|
sub_loc12: ; NE(loc13) SE(loc11) W(loc32) [NE]
|
||
|
.byte $FF,$FF,$FF,$FF, $FF,$FF,$FF,$FF, 0, NOISE_NONE
|
||
|
sub_loc13: ; N(loc14) SW(loc12) NW(loc35) [N]
|
||
|
.byte $FF,$FF,$FF,$FF, $FF,$FF,$FF,$FF, 0, NOISE_NONE
|
||
|
sub_loc14: ; SE(loc15) S(loc13) [SE]
|
||
|
.byte $FF,$FF,$FF,$FF, $FF,$FF,$FF,$FF, 0, NOISE_NONE
|
||
|
sub_loc15: ; exit
|
||
|
.byte $FF,$FF,$FF,$FF, $FF,$FF,$FF,$FF, 0, NOISE_NONE
|
||
|
|
||
|
sub_loc16: ; S(loc4) [ no noise ]
|
||
|
.byte $FF,$FF,$FF,$FF, $FF,$FF,$FF,$FF, 0, NOISE_NONE
|
||
|
sub_loc17: ; S(loc5) [ no noise ]
|
||
|
.byte $FF,$FF,$FF,$FF, $FF,$FF,$FF,$FF, 0, NOISE_NONE
|
||
|
sub_loc18: ; SE[SW](loc6) N (loc19) [N plink]
|
||
|
.byte $FF,$FF,$FF,$FF, $FF,$FF,$FF,$FF, 0, NOISE_NONE
|
||
|
sub_loc19: ; S(loc18) [ no noise]
|
||
|
.byte $FF,$FF,$FF,$FF, $FF,$FF,$FF,$FF, 0, NOISE_NONE
|
||
|
sub_loc20: ; W(loc7) SW(loc21) [SW]
|
||
|
.byte $FF,$FF,$FF,$FF, $FF,$FF,$FF,$FF, 0, NOISE_NONE
|
||
|
sub_loc21: ; NE(loc20) [ no noise ]
|
||
|
.byte $FF,$FF,$FF,$FF, $FF,$FF,$FF,$FF, 0, NOISE_NONE
|
||
|
sub_loc22: ; NW(loc8) SW(loc24) N(loc23) [SW]
|
||
|
.byte $FF,$FF,$FF,$FF, $FF,$FF,$FF,$FF, 0, NOISE_NONE
|
||
|
sub_loc23: ; S(loc22) [ no noise ]
|
||
|
.byte $FF,$FF,$FF,$FF, $FF,$FF,$FF,$FF, 0, NOISE_NONE
|
||
|
sub_loc24: ; NE(loc22) [ no noise ]
|
||
|
.byte $FF,$FF,$FF,$FF, $FF,$FF,$FF,$FF, 0, NOISE_NONE
|
||
|
sub_loc25: ; W(loc10) [ no noise ]
|
||
|
.byte $FF,$FF,$FF,$FF, $FF,$FF,$FF,$FF, 0, NOISE_NONE
|
||
|
sub_loc26: ; N(loc10) [ no noise ]
|
||
|
.byte $FF,$FF,$FF,$FF, $FF,$FF,$FF,$FF, 0, NOISE_NONE
|
||
|
sub_loc27: ; N(loc11) S(loc28) [S]
|
||
|
.byte $FF,$FF,$FF,$FF, $FF,$FF,$FF,$FF, 0, NOISE_NONE
|
||
|
sub_loc28: ; W(loc27) [ no noise ]
|
||
|
.byte $FF,$FF,$FF,$FF, $FF,$FF,$FF,$FF, 0, NOISE_NONE
|
||
|
sub_loc29: ; NE(loc11) S(loc30) W(loc31) [S]
|
||
|
.byte $FF,$FF,$FF,$FF, $FF,$FF,$FF,$FF, 0, NOISE_NONE
|
||
|
sub_loc30: ; N(loc29) [ no noise ]
|
||
|
.byte $FF,$FF,$FF,$FF, $FF,$FF,$FF,$FF, 0, NOISE_NONE
|
||
|
sub_loc31: ; E(loc29) [ no noise ]
|
||
|
.byte $FF,$FF,$FF,$FF, $FF,$FF,$FF,$FF, 0, NOISE_NONE
|
||
|
sub_loc32: ; E(loc12) S(loc33) N(loc34) [S]
|
||
|
.byte $FF,$FF,$FF,$FF, $FF,$FF,$FF,$FF, 0, NOISE_NONE
|
||
|
sub_loc33: ; N(loc32) [ no noise ]
|
||
|
.byte $FF,$FF,$FF,$FF, $FF,$FF,$FF,$FF, 0, NOISE_NONE
|
||
|
sub_loc34: ; S(loc32) [ no noise ]
|
||
|
.byte $FF,$FF,$FF,$FF, $FF,$FF,$FF,$FF, 0, NOISE_NONE
|
||
|
sub_loc35: ; SE(loc13) N(loc36) W(loc37) [W]
|
||
|
.byte $FF,$FF,$FF,$FF, $FF,$FF,$FF,$FF, 0, NOISE_NONE
|
||
|
sub_loc36: ; S(loc35) [ no noise ]
|
||
|
.byte $FF,$FF,$FF,$FF, $FF,$FF,$FF,$FF, 0, NOISE_NONE
|
||
|
sub_loc37: ; E(loc35) [ no noise ]
|
||
|
.byte $FF,$FF,$FF,$FF, $FF,$FF,$FF,$FF, 0, NOISE_NONE
|
||
|
|
||
|
; N, W, N, E, E
|
||
|
; S, S, W, SW, W
|
||
|
; NW, NE, N, SE
|
||
|
|
||
|
|
||
|
|
||
|
|