( teatimer ) |00 @System &vector $2 &expansion $2 &wst $1 &rst $1 &metadata $2 &r $2 &g $2 &b $2 &debug $1 &state $1 |20 @Screen &vector $2 &width $2 &height $2 &auto $1 &pad $1 &x $2 &y $2 &addr $2 &pixel $1 &sprite $1 |80 @Controller &vector $2 &button $1 &key $1 |90 @Mouse &vector $2 &x $2 &y $2 &state $1 &chord $1 &pad $4 &scrolly &scrolly-hb $1 &scrolly-lb $1 |c0 @DateTime &year $2 &month $1 &day $1 &hour $1 &minute $1 &second $1 &dotw $1 &doty $2 &isdst $1 |000 @cursor &x $2 &y $2 @bar &height $1 @remaining-seconds $2 @last-second $1 |100 @on-reset ( -> ) ( | meta ) ;meta #06 DEO2 ( | theme ) #05ff .System/r DEO2 #0bdf .System/g DEO2 #0abf .System/b DEO2 ( | vector ) ;on-frame .Screen/vector DEO2 ;on-mouse .Mouse/vector DEO2 ( | screen size ) #0048 .Screen/width DEO2 #0100 .Screen/height DEO2 .DateTime/second DEI .last-second STZ BRK @on-frame ( -> ) .Mouse/state DEI ?{ .remaining-seconds LDZ2 #0000 EQU2 ?{ .DateTime/second DEI DUP .last-second LDZ EQU ?{ .last-second STZ .remaining-seconds LDZ2 #0001 SUB2 DUP2 .remaining-seconds STZ2 #0007 DIV2 NIP .bar/height STZ JMP2r } POP } } BRK @on-mouse ( -> ) ( clear old cursor ) .cursor/x LDZ2 .Screen/x DEO2 .cursor/y LDZ2 .Screen/y DEO2 #00 .Screen/auto DEO #40 .Screen/sprite DEO .Mouse/x DEI2 DUP2 .cursor/x STZ2 .Screen/x DEO2 .Mouse/y DEI2 DUP2 .cursor/y STZ2 .Screen/y DEO2 ;arrow .Screen/addr DEO2 #42 .Screen/sprite DEO .Mouse/state DEI #00 EQU ?{ .Mouse/y DEI2 NIP #08 SUB DUP #f0 GTH ?{ #f0 OVRk SUB DUP .bar/height STZ #00 SWP #0007 MUL2 ( very rough! should be 7.5 ) .remaining-seconds STZ2 } POP } BRK @meta 00 ( name ) "Tea 20 "Timer 0a ( details ) "Null ( author ) "By 20 "Dave 20 "Van 20 "Ee 0a ( date ) "12 20 "Jan 20 "2024 $1 ( elements ) 00 ( @|helpers ) ( @|drawing ) @ ( -- ) #0008 DUP2 .Screen/x DEO2 .Screen/y DEO2 ;fill-icn .Screen/addr DEO2 #32 .Screen/auto DEO .bar/height LDZ #f0 OVRk SUB &w DUP #08 LTH ?{ #01 .Screen/sprite DEO #08 SUB !&w } DUP #00 EQU ?{ ( partial row ) DUP #00 SWP ;fill-icn SWP2 SUB2 .Screen/addr DEO2 #07 .Screen/sprite DEO } POP #00f8 .Screen/y DEI2 NEQ2 ?{ JMP2r } ;fill-icn .Screen/addr DEO2 &w2 #03 .Screen/sprite DEO .Screen/y DEI2 #00f8 NEQ2 ?&w2 POP JMP2r @ ( -- ) #0000 DUP2 .Screen/x DEO2 .Screen/y DEO2 #82 .Screen/pixel DEO ;tick .Screen/addr DEO2 #e1 .Screen/auto DEO #0028 .Screen/x DEO2 #0008 .Screen/y DEO2 #08 .Screen/sprite DEOk #f1 .Screen/auto DEO #0028 .Screen/x DEO2 #0080 .Screen/y DEO2 DEO ( labels ) #0030 .Screen/x DEO2 #0004 .Screen/y DEO2 #02 .Screen/auto DEO LIT2r [ =label-tilemap ] #1f00 &w LDAkr #00 STHr INC2r ;digits ADD2 .Screen/addr DEO2 #08 .Screen/sprite DEO INC GTHk ?&w POP2 #0038 .Screen/x DEO2 #0004 .Screen/y DEO2 #1f00 &w2 LDAkr #00 STHr INC2r ;digits ADD2 .Screen/addr DEO2 #08 .Screen/sprite DEO INC GTHk ?&w2 JMP2r ( @|assets ) @arrow [ 80c0 e0f0 f8fc f0c0 ] @tick [ f000 0000 0000 0000 ] @blank-icn [ 0000 0000 0000 0000 ] @fill-icn [ ffff ffff ffff ffff ] @digits ( Emmaline by damieng ) [ 0000 0000 0000 0000 ] [ 3864 e2e2 e264 3800 0c3c 5c1c 1c1c 1c00 ] [ 7c8e 8e1c 3870 fe00 fe8e 0c3c 8e8e 7c00 ] [ 0c1c 3c5c 9cfe 1c00 3e40 7c0e 8e8e 7c00 ] [ 3c62 e0ec e262 3c00 fe0e 0e1c 3870 7000 ] [ 7ce2 f27c 9e8e 7c00 788c 8e6e 0e8c 7800 ] @label-tilemap [ 20 00 00 00 00 18 00 00 00 00 18 00 00 00 00 10 00 00 00 00 10 00 00 00 00 30 00 00 00 00 08 ] [ 08 00 00 00 00 30 00 00 00 00 08 00 00 00 00 30 00 00 00 00 08 00 00 00 00 00 00 00 00 00 00 ]