( mouse ) &Screen { width 2 height 2 pad 4 y 2 x 2 color 1 } &Sprite { pad 8 x 2 y 2 addr 2 color 1 } &Mouse { x 2 y 2 state 1 chord 1 } &Point2d { x 2 y 2 } ;cat Point2d ;mouse Point2d ;timer 1 |0100 @RESET ( position cat ) ~dev/screen.width #0002 DIV2 =cat.x ~dev/screen.height #0038 SUB2 =cat.y ( draw polycat ) ,draw-polycat JSR BRK |c000 @FRAME ( clear last cursor ) #10 ,clear_icn ~mouse.x ~mouse.y ,draw-sprite JSR ( record mouse positions ) ~dev/mouse.x =mouse.x ~dev/mouse.y =mouse.y ( detect click ) ~dev/mouse.state #01 NEQ ,no-click ROT JMP? POP2 #50 =timer @no-click ( draw mouse ) ~dev/mouse.state #11 ADD ,cursor_icn ~mouse.x ~mouse.y ,draw-sprite JSR ( animate ) ,animate-polycat JSR ( update last pos ) ~timer #01 ADD =timer BRK @draw-polycat ( ears ) ,polycat ~cat.x ~cat.y ,draw-sprite-chr JSR ,polycat #0010 ADD2 ~cat.x #0008 ADD2 ~cat.y ,draw-sprite-chr JSR ( eye ) ,polycat #0020 ADD2 ~cat.x ~cat.y #0008 ADD2 ,draw-sprite-chr JSR ,polycat #0030 ADD2 ~cat.x #0008 ADD2 ~cat.y #0008 ADD2 ,draw-sprite-chr JSR ( body ) ,polycat #00a0 ADD2 ~cat.x ~cat.y #0010 ADD2 ,draw-sprite-chr JSR ,polycat #00b0 ADD2 ~cat.x #0008 ADD2 ~cat.y #0010 ADD2 ,draw-sprite-chr JSR RTS @animate-polycat ( tail ) ~timer #50 NEQ ,animate-polycat-tail-next0 ROT JMP? POP2 ,polycat #00c0 ADD2 ~cat.x #0008 ADD2 ~cat.y #0010 ADD2 ,draw-sprite-chr JSR @animate-polycat-tail-next0 ~timer #58 NEQ ,animate-polycat-tail-next1 ROT JMP? POP2 ,polycat #00d0 ADD2 ~cat.x #0008 ADD2 ~cat.y #0010 ADD2 ,draw-sprite-chr JSR @animate-polycat-tail-next1 ~timer #60 NEQ ,animate-polycat-tail-next2 ROT JMP? POP2 ,polycat #00b0 ADD2 ~cat.x #0008 ADD2 ~cat.y #0010 ADD2 ,draw-sprite-chr JSR @animate-polycat-tail-next2 ( look-at ) ~mouse.x ~cat.x #0008 ADD2 GTH2 ,animate-polycat-right ROT JMP? POP2 @animate-polycat-left ~mouse.y ~cat.y #0008 ADD2 GTH2 ,animate-polycat-left-down ROT JMP? POP2 @animate-polycat-left-up ,polycat #0040 ADD2 ~cat.x ~cat.y #0008 ADD2 ,draw-sprite-chr JSR ,polycat #0050 ADD2 ~cat.x #0008 ADD2 ~cat.y #0008 ADD2 ,draw-sprite-chr JSR RTS @animate-polycat-left-down ,polycat #0020 ADD2 ~cat.x ~cat.y #0008 ADD2 ,draw-sprite-chr JSR ,polycat #0030 ADD2 ~cat.x #0008 ADD2 ~cat.y #0008 ADD2 ,draw-sprite-chr JSR RTS @animate-polycat-right ~mouse.y ~cat.y #0008 ADD2 GTH2 ,animate-polycat-right-down ROT JMP? POP2 @animate-polycat-right-up ,polycat #0060 ADD2 ~cat.x ~cat.y #0008 ADD2 ,draw-sprite-chr JSR ,polycat #0070 ADD2 ~cat.x #0008 ADD2 ~cat.y #0008 ADD2 ,draw-sprite-chr JSR RTS @animate-polycat-right-down ,polycat #0080 ADD2 ~cat.x ~cat.y #0008 ADD2 ,draw-sprite-chr JSR ,polycat #0090 ADD2 ~cat.x #0008 ADD2 ~cat.y #0008 ADD2 ,draw-sprite-chr JSR RTS RTS @draw-sprite =dev/sprite.y =dev/sprite.x =dev/sprite.addr =dev/sprite.color RTS @draw-sprite-chr =dev/sprite.y =dev/sprite.x =dev/sprite.addr #20 =dev/sprite.color RTS @clear_icn [ 0000 0000 0000 0000 ] @cursor_icn [ 80c0 e0f0 f8e0 1000 ] @polycat [ 081c 3e3e 7f7f ffff 081c 3e3e 7f7f fffc 081c 3c3e 7e7e ffff 081c 3c3e 7e7e ff1f ffff ffff ff7f 3f0f f0e7 cfef f77c 3f0f ffff ffff fffe fcf0 0783 c1c3 871e fcf0 ffff ffff ff7f 3f0f f7ef cfe7 f07c 3f0f ffff ffff fffe fcf0 87c3 c183 071e fcf0 ffff ffff ff7f 3f0f f0e1 c1e0 f07c 3f0f ffff ffff fffe fcf0 f7fb f9f3 071e fcf0 ffff ffff ff7f 3f0f f0e0 c1e1 f07c 3f0f ffff ffff fffe fcf0 07f3 f9fb f71e fcf0 0307 0707 0302 0200 0307 0707 0300 0000 c0f0 f0e0 e080 8000 c0f2 f9f9 fef8 b000 c0f0 f0e0 e080 8000 c0f2 faf9 fef8 b000 c0f0 f0e0 e080 8000 c0f1 faf9 fef8 b000 ] |FF10 ;dev/screen Screen |FF20 ;dev/sprite Sprite |FF50 ;dev/mouse Mouse |d000 @ERROR BRK |FFF0 [ 0f85 0fd5 0fb5 ] ( palette ) |FFFA .RESET .FRAME .ERROR