dos33fsprogs/games/mist/viewer_controls.s

528 lines
9.6 KiB
ArmAsm

display_viewer:
lda ANIMATE_FRAME
bne we_should_animate
rts
we_should_animate:
lda ANIMATE_FRAME
asl
tay
lda VIEWER_LATCHED
cmp #$08
beq display_atrus
cmp #$40
beq display_mountains
cmp #$67
beq display_water
cmp #$47
beq display_marker
display_nothing:
lda nothing_animation,Y
sta INL
lda nothing_animation+1,Y
sta INH
lda #12
sta XPOS
lda #20
sta YPOS
jsr put_sprite_crop
lda FRAMEL
and #$1f
bne done_animation
inc ANIMATE_FRAME
lda ANIMATE_FRAME
cmp #6
bne done_animation
done_nothing:
lda #0
sta ANIMATE_FRAME
done_animation:
rts
; display atrus
display_atrus:
jmp really_display_atrus
; display marker
display_marker:
jmp really_display_marker
; display water
display_water:
lda water_animation,Y
sta INL
lda water_animation+1,Y
sta INH
lda #12
sta XPOS
lda #20
sta YPOS
jsr put_sprite_crop
lda FRAMEL
and #$1f
bne done_water
inc ANIMATE_FRAME
lda ANIMATE_FRAME
cmp #5
bne done_water
lda #3
sta ANIMATE_FRAME
done_water:
rts
; display_mountains
display_mountains:
lda mountain_animation,Y
sta INL
lda mountain_animation+1,Y
sta INH
cpy #4
bne fancy_put
normal_put:
lda #12
sta XPOS
lda #20
bne done_put
fancy_put:
lda #14
sta XPOS
lda #16
done_put:
sta YPOS
jsr put_sprite_crop
lda FRAMEL
and #$1f
bne done_mountains
inc ANIMATE_FRAME
lda ANIMATE_FRAME
cmp #6
bne done_mountains
lda #5
sta ANIMATE_FRAME
done_mountains:
rts
really_display_marker:
lda marker_animation,Y
sta INL
lda marker_animation+1,Y
sta INH
lda #12
sta XPOS
lda #20
sta YPOS
jsr put_sprite_crop
lda FRAMEL
and #$1f
bne done_marker
inc ANIMATE_FRAME
lda ANIMATE_FRAME
cmp #4
bne done_marker
lda #3
sta ANIMATE_FRAME
done_marker:
rts
really_display_atrus:
; Y coming in is animate frame << 2
bit TEXTGR ; split screen
; less than 6, as typical
; otherwise special
cpy #6
bcc atrus_load_anim ; blt
tya ; xxxx xx00 / xxxx xx10
and #$03
clc
adc #$6
tay
atrus_load_anim:
lda atrus_animation,Y ; load animation
sta INL
lda atrus_animation+1,Y
sta INH
lda #12 ; x, y pos
sta XPOS
lda #20
sta YPOS
jsr put_sprite_crop ; put sprite
lda FRAMEL ; only slowly increment
and #$1f
bne done_atrus
inc ANIMATE_FRAME ; animate, but loop
lda ANIMATE_FRAME ; the talking part
cmp #255
bne done_atrus
; so we want 0,1,2,3,4,3,4,3,4
lda #3
sta ANIMATE_FRAME
done_atrus:
lda ANIMATE_FRAME
and #$10 ; cycle every 32 animation steps
beq do_atrus_message_1
lda #<atrus_message2
sta OUTL
lda #>atrus_message2
jmp do_atrus_message
do_atrus_message_1:
lda #<atrus_message1
sta OUTL
lda #>atrus_message1
do_atrus_message:
sta OUTH
jsr move_and_print
jsr move_and_print
jsr move_and_print
jsr move_and_print
rts
enter_viewer:
bit FULLGR
lda #0
sta CURSOR_VISIBLE
lda ANIMATE_FRAME
beq start_animation
stop_animation:
lda #0
sta ANIMATE_FRAME
rts
start_animation:
lda #1
sta ANIMATE_FRAME
rts
enter_control_panel:
lda #VIEWER_CONTROL_PANEL
sta LOCATION
lda #(DIRECTION_E|DIRECTION_ONLY_POINT|DIRECTION_SPLIT)
sta DIRECTION
jsr change_location
rts
control_panel_pressed:
lda CURSOR_Y
cmp #26 ; blt
bcc panel_inc
cmp #30 ; blt
bcc panel_dec
panel_latch:
lda VIEWER_CHANNEL
sta VIEWER_LATCHED ; latch value into pool state
lda #VIEWER_POOL
sta LOCATION
lda #DIRECTION_W
sta DIRECTION
jmp change_location
panel_inc:
lda CURSOR_X
cmp #18
bcs right_arrow_pressed
; 19-23 left arrow
lda VIEWER_CHANNEL
and #$f0
cmp #$90
bcs done_panel_press ; bge
lda VIEWER_CHANNEL
clc
adc #$10
sta VIEWER_CHANNEL
rts
right_arrow_pressed:
; 13-17 right arrow
lda VIEWER_CHANNEL
and #$f
cmp #9
bcs done_panel_press ; bge
inc VIEWER_CHANNEL
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
and #$f
beq done_panel_press
dec VIEWER_CHANNEL
done_panel_press:
rts
display_panel_code:
; ones digit
lda VIEWER_CHANNEL
and #$f
asl
tay
lda number_sprites,Y
sta INL
lda number_sprites+1,Y
sta INH
lda #21
sta XPOS
lda #8
sta YPOS
jsr put_sprite_crop
; tens digit
lda VIEWER_CHANNEL
and #$f0
lsr
lsr
lsr
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
rts
nothing_animation:
.word empty,empty,na_frame0,na_frame1,na_frame0,empty
atrus_animation:
.word empty,empty,na_frame0,atrus_frame1,atrus_frame2
marker_animation:
.word empty,empty,na_frame0,marker_frame1,marker_frame1
water_animation:
.word empty,empty,na_frame0,water_frame1,water_frame2
mountain_animation:
.word empty,empty,na_frame0,mountain_frame1,mountain_frame2,mountain_frame3
empty:
.byte 16,4
.byte $AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA
.byte $AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA
.byte $AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA
.byte $AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA
na_frame0:
.byte 16,4
.byte $FA,$7f,$5f,$57,$57,$57,$57,$57,$57,$57,$57,$57,$57,$7f,$7f,$fA
.byte $57,$55,$55,$55,$77,$55,$55,$55,$55,$55,$55,$77,$55,$55,$55,$57
.byte $55,$55,$55,$55,$77,$55,$5d,$57,$57,$5d,$55,$77,$55,$55,$55,$55
.byte $7f,$f5,$fd,$55,$77,$55,$5d,$57,$57,$5d,$55,$77,$55,$5d,$f5,$7f
na_frame1:
.byte 16,4
.byte $fA,$7f,$ff,$f7,$f7,$f7,$f7,$f7,$f7,$f7,$f7,$f7,$f7,$7f,$7f,$fa
.byte $f7,$ff,$ff,$ff,$77,$ff,$ff,$ff,$ff,$ff,$ff,$77,$ff,$ff,$ff,$f7
.byte $ff,$ff,$ff,$ff,$77,$ff,$fd,$f7,$f7,$fd,$ff,$77,$ff,$ff,$ff,$ff
.byte $7f,$ff,$fd,$ff,$77,$ff,$fd,$f7,$f7,$fd,$ff,$77,$ff,$fd,$ff,$7f
atrus_frame1:
.byte 16,4
.byte $AA,$AA,$AA,$AA,$05,$b8,$b8,$b8,$b8,$b8,$b8,$b8,$b8,$AA,$AA,$AA
.byte $AA,$AA,$AA,$AA,$2b,$2b,$2b,$2b,$2b,$2b,$2b,$2b,$2b,$88,$b0,$AA
.byte $AA,$AA,$AA,$AA,$22,$20,$2f,$bb,$b2,$20,$2f,$22,$bb,$88,$bb,$AA
.byte $AA,$AA,$AA,$AA,$bb,$8b,$38,$38,$38,$8b,$bb,$bb,$8b,$08,$70,$AA
atrus_frame2:
.byte 16,4
.byte $AA,$AA,$AA,$AA,$05,$b8,$b8,$b8,$b8,$b8,$b8,$b8,$b8,$AA,$AA,$AA
.byte $AA,$AA,$AA,$AA,$2b,$2b,$2b,$2b,$2b,$2b,$2b,$2b,$2b,$88,$b0,$AA
.byte $AA,$AA,$AA,$AA,$22,$20,$2f,$bb,$b2,$20,$2f,$22,$bb,$88,$bb,$AA
.byte $AA,$AA,$AA,$AA,$bb,$8b,$b8,$b8,$b8,$8b,$bb,$bb,$8b,$08,$70,$AA
water_frame1:
.byte 16,4
.byte $AA,$AA,$27,$25,$25,$65,$25,$25,$25,$25,$65,$25,$25,$AA,$AA,$AA
.byte $25,$22,$26,$62,$22,$62,$26,$26,$26,$26,$62,$22,$62,$26,$22,$2A
.byte $22,$22,$22,$62,$26,$62,$22,$26,$26,$22,$62,$26,$62,$22,$22,$22
.byte $AA,$A2,$76,$22,$22,$62,$26,$26,$26,$26,$62,$22,$22,$26,$72,$AA
water_frame2:
.byte 16,4
.byte $AA,$AA,$27,$25,$25,$65,$65,$65,$65,$65,$65,$25,$25,$AA,$AA,$AA
.byte $25,$22,$26,$22,$62,$26,$62,$62,$62,$62,$26,$62,$62,$26,$22,$2A
.byte $22,$22,$22,$66,$62,$26,$66,$62,$62,$66,$26,$62,$66,$22,$22,$22
.byte $AA,$A2,$76,$22,$22,$66,$62,$62,$62,$62,$66,$22,$22,$26,$72,$AA
marker_frame1:
.byte 16,4
.byte $AA,$AA,$07,$05,$05,$05,$05,$05,$05,$05,$05,$05,$05,$57,$57,$70
.byte $AA,$AA,$00,$55,$77,$dd,$8d,$8d,$8d,$dd,$88,$90,$66,$00,$00,$05
.byte $AA,$AA,$00,$55,$77,$dd,$88,$88,$88,$dd,$88,$98,$66,$00,$00,$00
.byte $AA,$AA,$70,$05,$07,$0d,$0d,$0d,$0d,$0d,$08,$00,$06,$00,$70,$57
mountain_frame1:
.byte 13,6
.byte $AA,$AA,$aa,$aa,$aa,$aa,$aa,$aa,$aa,$aa,$aa,$aa,$AA
.byte $AA,$AA,$aa,$fa,$af,$aa,$aa,$aa,$aa,$aa,$af,$aa,$aa
.byte $AA,$AA,$af,$fa,$af,$fa,$aa,$fa,$af,$fa,$af,$aa,$aa
.byte $AA,$f0,$7f,$fa,$af,$fa,$af,$fa,$af,$fa,$af,$aa,$aa
.byte $AA,$f0,$7f,$fa,$af,$f7,$af,$fd,$af,$f7,$af,$fa,$af
.byte $AD,$f0,$7f,$fa,$af,$f7,$af,$fd,$af,$f7,$af,$fa,$7f
mountain_frame2:
.byte 13,6
.byte $AA,$AA,$aa,$af,$fa,$aa,$aa,$aa,$aa,$aa,$fa,$aa,$AA
.byte $AA,$AA,$fa,$af,$fa,$af,$fa,$aa,$fa,$af,$fa,$aa,$aa
.byte $AA,$05,$fa,$af,$fa,$af,$fa,$af,$fa,$af,$fa,$aa,$aa
.byte $AA,$00,$f7,$af,$fa,$af,$fa,$af,$fa,$7f,$fa,$aa,$aa
.byte $AA,$0f,$f7,$af,$fd,$af,$f7,$af,$fa,$7f,$fa,$af,$fa
.byte $AD,$0f,$f7,$af,$fd,$af,$f7,$af,$fa,$7f,$fa,$af,$70
mountain_frame3:
.byte 13,6
.byte $AA,$AA,$aa,$f5,$5a,$aa,$aa,$aa,$aa,$7a,$77,$AA,$AA
.byte $AA,$AA,$f5,$55,$75,$55,$5a,$7a,$57,$55,$55,$aa,$aa
.byte $AA,$05,$55,$ff,$ff,$75,$55,$f7,$55,$55,$77,$57,$57
.byte $AA,$50,$55,$7f,$07,$00,$75,$75,$77,$77,$77,$00,$05
.byte $AA,$55,$75,$00,$00,$00,$00,$07,$f5,$f5,$ff,$ff,$70
.byte $FA,$ff,$07,$00,$00,$00,$00,$00,$ff,$ff,$ff,$75,$77
atrus_message1:
; 0123456789012345678901234567890123456789
.byte 0,20," CATHERINE, I MUST LEAVE QUICKLY. ",0
.byte 0,21," MY BOOKS HAVE BEEN DESTROYED. ",0
.byte 0,22,"IT'S ONE OF OUR SONS. I SUSPECT ACHENAR",0
.byte 0,23," BUT I SHOULDN'T LEAP TO CONCLUSIONS. ",0
atrus_message2:
.byte 0,20," I'VE REMOVED THE REMAINING BOOKS AND ",0
.byte 0,21,"PLACED THEM IN THE PLACES OF PROTECTION.",0
.byte 0,22," IF YOU'VE FORGOTTEN THE KEYS, ",0
.byte 0,23," ** REMEMBER THE TOWER ROTATION ** ",0
;.byte 0,20,"CATHERINE, SOMETHING IS UP WITH OUR SONS",0
;.byte 0,21,"THEY'VE BEEN MESSING WITH THE AGES. ",0
;.byte 0,22,"I'VE HIDDEN THE REMAINING LINKING BOOKS.",0
;.byte 0,23,"** HINT: REMEMBER THE TOWER ROTATION **",0
wall_text:
; 0AAA035449E73 DD 49D5E39FE1C 9D1752 0AAA
; AAAAADCDDCCCD AA CCCCCDCCCCC CCCCCD AAAA
;.byte " *** SETTINGS -- DIMENSIONAL IMAGER ***",0
; 4F0F72108931C 5842539FE 4534 DD 40
; DCDCCDCDCCCCC CDDDDDCCC DCDD AA BB
;.byte "TOPOGRAPHICAL EXTRUSION TEST -- 40",0
; 71452 45225C5E4 0FFC DD 67
; DCDCD DDDCDCCCD DCCC AA BB
;.byte "WATER TURBULENT POOL -- 67",0
; D12B52 379438 491721D DD 47
; CCDCCD DDCDCC CCCCDCC AA BB
;.byte "MARKER SWITCH DIAGRAM -- 47",0