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 jmp do_atrus_message do_atrus_message_1: 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