dos33fsprogs/mist/clock_bridge_puzzle.s

294 lines
3.4 KiB
ArmAsm
Raw Normal View History

2020-03-07 20:21:16 +00:00
;======================
; 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
2020-03-07 18:42:04 +00:00
;======================
; raise bridge
raise_bridge:
2020-03-07 20:21:16 +00:00
lda CLOCK_BRIDGE
beq lower_bridge
2020-03-07 18:42:04 +00:00
ldy #LOCATION_SOUTH_EXIT
lda #26
sta location25,Y
ldy #LOCATION_SOUTH_EXIT_DIR
lda #DIRECTION_S
sta location25,Y
2020-03-07 16:06:29 +00:00
2020-03-07 18:42:04 +00:00
ldy #LOCATION_SOUTH_BG
lda #<clock_puzzle_bridge_lzsa
sta location25,Y
lda #>clock_puzzle_bridge_lzsa
sta location25+1,Y
2020-03-07 20:21:16 +00:00
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:
2020-03-07 18:42:04 +00:00
jsr change_location
rts
2020-03-07 16:06:29 +00:00
;======================
; draw the clock face
draw_clock_face:
lda CLOCK_HOUR
asl
tay
lda clock_hour_sprites,Y
sta INL
lda clock_hour_sprites+1,Y
sta INH
lda #20
sta XPOS
lda #6
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 #20
sta XPOS
lda #6
sta YPOS
jsr put_sprite_crop
rts
2020-03-07 18:07:42 +00:00
;======================
; clock puzzle
clock_puzzle:
lda CURSOR_X
cmp #19
bcc clock_puzzle_hours ; blt
cmp #24
bcc clock_puzzle_minutes ; 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
2020-03-07 16:06:29 +00:00
2020-03-07 18:07:42 +00:00
bridge_down:
lda #0
bridge_adjust:
sta CLOCK_BRIDGE
bit $C030 ; click speaker
2020-03-07 18:42:04 +00:00
jsr raise_bridge
2020-03-07 18:07:42 +00:00
clock_puzzle_done:
rts
2020-03-07 16:06:29 +00:00
.include "clock_sprites.inc"