mist: inside clock puzzle

This commit is contained in:
Vince Weaver 2020-03-07 15:21:16 -05:00
parent 6d0211f1bb
commit 4a4b0b0255
7 changed files with 262 additions and 31 deletions

View File

@ -3,20 +3,42 @@
+ allow turning around
+ adjust grab window on letter
+ only grab when facing object
+ add missing red book step
+ LOADING screen
Make game winnable:
+ Allow access to all marker switches
+ Track state of marker switches (draw them properly?)
+ Allow looking at green book on shelf
+ allow getting in the fireplace
+ Allow grabbing white page
+ allow entering code
Ending:
+ Turning
+ Allow looking at green book on shelf
+ Atrus at end -- hires?
Add one of the other ages/puzzles:
+ ??
MIST island:
+ Tunnel to generator
+ Generator puzzle
+ Dentist chair
+ Raise ship
MECHE age:
+ Linking book animation
+ Implement
SPACESHIP age:
+ Keyboard
+ Linking book
Tree age:
+ Tree puzzle
Stoneship age:
+ ?
Move sound to language card (meaning no sound on II+ w/o language card)
@ -35,8 +57,6 @@ Marker Switches (8):
Fireplace:
+ 8x6 grid
more pictures?
+ open gear
+ gear linking book

View File

@ -1,8 +1,161 @@
;======================
; reset the puzzle inside the clock
clock_inside_reset:
lda #0
sta CLOCK_TOP
sta CLOCK_MIDDLE
sta CLOCK_BOTTOM
sta CLOCK_COUNT
rts
;======================
; handle the clock iside 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
inc CLOCK_BOTTOM
inc CLOCK_COUNT
jmp wrap_wheels
inside_right:
inc CLOCK_MIDDLE
inc CLOCK_TOP
inc CLOCK_COUNT
wrap_wheels:
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
inside_done:
rts
;======================
; draw the clock inside
draw_clock_inside:
; draw weight
lda #<clock_weight_sprite
sta INL
lda #>clock_weight_sprite
sta INH
lda #9
sta XPOS
lda CLOCK_COUNT
asl
asl
clc
adc #6
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
rts
;======================
; open the gear
open_the_gear:
; FIXME
; replace gear bg 1
; re-route click to MECHE age
; replace gear bg 2
; replace gear sprite inside clock
rts
;======================
; raise bridge
raise_bridge:
lda CLOCK_BRIDGE
beq lower_bridge
ldy #LOCATION_SOUTH_EXIT
lda #26
sta location25,Y
@ -17,6 +170,26 @@ raise_bridge:
lda #>clock_puzzle_bridge_lzsa
sta location25+1,Y
jmp done_clock_bridge
lower_bridge:
ldy #LOCATION_SOUTH_EXIT
lda #18
sta location25,Y
ldy #LOCATION_SOUTH_EXIT_DIR
lda #DIRECTION_N
sta location25,Y
ldy #LOCATION_SOUTH_BG
lda #<clock_puzzle_s_lzsa
sta location25,Y
lda #>clock_puzzle_s_lzsa
sta location25+1,Y
done_clock_bridge:
jsr change_location
rts

View File

@ -1,3 +1,28 @@
clock_gear_sprites:
.word clock_gear_3_sprite,clock_gear_1_sprite,clock_gear_2_sprite
clock_gear_3_sprite:
.byte 5,2
.byte $11,$22,$11,$22,$11
.byte $A1,$A2,$A1,$A2,$A1
clock_gear_2_sprite:
.byte 5,2
.byte $22,$11,$22,$11,$22
.byte $A2,$A1,$A2,$A1,$A2
clock_gear_1_sprite:
.byte 5,2
.byte $22,$22,$11,$22,$22
.byte $A2,$A2,$A1,$A2,$A2
clock_weight_sprite:
.byte 1,3
.byte $22
.byte $22
.byte $22
clock_hour_sprites:
.word hour12_sprite, hour1_sprite, hour2_sprite
@ -100,8 +125,8 @@ minute10_sprite:
minute11_sprite:
.byte 3,5
.byte $00,$aa,$aa
.byte $aa,$0a,$aa
.byte $0a,$aa,$aa
.byte $a0,$0a,$aa
.byte $aa,$00,$aa
.byte $aa,$aa,$aa
.byte $aa,$aa,$aa
@ -199,8 +224,8 @@ hour10_sprite:
hour11_sprite:
.byte 3,5
.byte $5d,$fd,$fd
.byte $ff,$5f,$ff
.byte $fd,$fd,$fd
.byte $f5,$5f,$ff
.byte $ff,$55,$ff
.byte $ff,$ff,$ff
.byte $ff,$ff,$ff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 523 B

After

Width:  |  Height:  |  Size: 9.0 KiB

View File

@ -187,7 +187,7 @@ location7:
.word step_land2_e_lzsa ; east bg
.word step_land2_w_lzsa ; west bg
.byte BG_WEST | BG_EAST
.byte DIRECTION_N ; special exit
.byte DIRECTION_W ; special exit (letter)
.byte 29,32 ; special x
.byte 38,45 ; special y
.word read_letter-1
@ -412,11 +412,11 @@ location19:
location20:
.byte 19 ; north exit
.byte $ff ; south exit
.byte 3 ; east exit
.byte 2 ; east exit
.byte $ff ; west exit
.byte DIRECTION_N ; north exit_dir
.byte $ff ; south exit_dir
.byte DIRECTION_E ; east exit_dir
.byte DIRECTION_S ; east exit_dir
.byte $ff ; west exit_dir
.word gear_base_n_lzsa ; north bg
.word $0000 ; south bg
@ -545,7 +545,10 @@ location27:
.word $0000 ; east bg
.word $0000 ; west bg
.byte BG_SOUTH
.byte $ff ; special exit
.byte DIRECTION_S ; special exit
.byte 12,30 ; special x
.byte 8,42 ; special y
.word clock_inside_puzzle-1 ; special function
; fireplace
location28:

View File

@ -49,6 +49,7 @@ mist_start:
lda #0
sta CLOCK_MINUTE
sta CLOCK_HOUR
jsr clock_inside_reset
not_first_time:
@ -84,10 +85,16 @@ game_loop:
lda LOCATION
cmp #25 ; clock puzzle
beq location_clock
cmp #27
beq location_inside_clock
bne nothing_special
location_clock:
jsr draw_clock_face
jmp nothing_special
location_inside_clock:
jsr draw_clock_inside
nothing_special:

View File

@ -49,21 +49,24 @@ IN_RIGHT = $6D
BTC_L = $6E
BTC_H = $6F
HOLDING_PAGE = $70
CLOCK_BRIDGE = $71
GEAR_OPEN = $72
MARKER_SWITCHES = $73
CLOCK_HOUR = $74
CLOCK_MINUTE = $75
GENERATOR_ON = $76
TREE_FURNACE_ON = $77
FIREPLACE_GRID0 = $78
FIREPLACE_GRID1 = $79
FIREPLACE_GRID2 = $7A
FIREPLACE_GRID3 = $7B
FIREPLACE_GRID4 = $7C
FIREPLACE_GRID5 = $7D
HOLDING_PAGE = $80
CLOCK_BRIDGE = $81
GEAR_OPEN = $82
MARKER_SWITCHES = $83
CLOCK_HOUR = $84
CLOCK_MINUTE = $85
GENERATOR_ON = $86
TREE_FURNACE_ON = $87
FIREPLACE_GRID0 = $88
FIREPLACE_GRID1 = $89
FIREPLACE_GRID2 = $8A
FIREPLACE_GRID3 = $8B
FIREPLACE_GRID4 = $8C
FIREPLACE_GRID5 = $8D
CLOCK_COUNT = $8E
CLOCK_TOP = $8F
CLOCK_MIDDLE = $90
CLOCK_BOTTOM = $91
DISP_PAGE = $ED ; ALL