uxn

Varvara Ordinator, written in ANSI C(SDL2)
git clone https://git.eamoncaddigan.net/uxn.git
Log | Files | Refs | README | LICENSE

commit c4746c26012ce493127e72f6adb6ab5a1b32906b
parent 416389bcf4cf6f95de388be207cc3270ca8a232f
Author: neauoire <aliceffekt@gmail.com>
Date:   Mon,  3 Jan 2022 10:19:08 -0800

(polycat) Rewrote

Diffstat:
Mprojects/examples/demos/polycat.tal | 181+++++++++++++++++++++++++++++++++++++++----------------------------------------
1 file changed, 89 insertions(+), 92 deletions(-)

diff --git a/projects/examples/demos/polycat.tal b/projects/examples/demos/polycat.tal @@ -1,22 +1,23 @@ ( polycat ) -%RTN { JMP2r } %2// { #01 SFT2 } -%4// { #02 SFT2 } -%!~ { NEQk NIP } +%!~ { NEQk NIP } +%AUTO-XADDR { #05 .Screen/auto DEO } ( devices ) -|00 @System [ &vector $2 &wst $1 &rst $1 &pad $4 &r $2 &g $2 &b $2 ] -|20 @Screen [ &vector $2 &width $2 &height $2 &pad $2 &x $2 &y $2 &addr $2 &pixel $1 &sprite $1 ] -|90 @Mouse [ &vector $2 &x $2 &y $2 &state $1 &wheel $1 ] +|00 @System &vector $2 &wst $1 &rst $1 &pad $4 &r $2 &g $2 &b $2 &debug $1 &halt $1 +|20 @Screen &vector $2 &width $2 &height $2 &auto $1 &pad $1 &x $2 &y $2 &addr $2 &pixel $1 &sprite $1 +|90 @Mouse &vector $2 &x $2 &y $2 &state $1 &pad $3 &scrollx $2 &scrolly $2 ( variables ) |0000 -@cat [ &x $2 &y $2 &timer $1 ] -@pointer [ &x $2 &y $2 ] +@cat + &x $2 &y $2 &timer $1 +@pointer + &x $2 &y $2 ( program ) @@ -26,124 +27,121 @@ #0a3f .System/r DEO2 #05df .System/g DEO2 #0caf .System/b DEO2 - - ( find center ) - .Screen/width DEI2 2// #0008 SUB2 .cat/x STZ2 - .Screen/height DEI2 4// DUP2k ADD2 ADD2 #0018 SUB2 .cat/y STZ2 - + ( DOS resolution ) + #0140 .Screen/width DEO2 + #00c8 .Screen/height DEO2 ( vectors ) ;on-mouse .Mouse/vector DEO2 - ;on-frame .Screen/vector DEO2 - - ;draw-polycat JSR2 - ;draw-ground JSR2 - -BRK - -@on-mouse ( -> ) - - ;draw-cursor JSR2 - - .Mouse/x DEI2 .cat/x LDZ2 GTH2 #50 SFT - .Mouse/y DEI2 .cat/y LDZ2 GTH2 #60 SFT - ADD #00 SWP ;draw-eye JSR2 + ( find center ) + .Screen/width DEI2 2// .cat/x STZ2 + .Screen/height DEI2 2// .cat/y STZ2 + ( set screen mode ) + AUTO-XADDR + ( init ) + #ff ;draw-eye/last STA + #ff ;draw-tail/last STA + ,draw-polycat JSR + ,draw-ground JSR BRK -@on-frame ( -> ) +@draw-ground ( -- ) - .cat/timer LDZ INC [ DUP ] .cat/timer STZ - DUP ,&skip0 JCN #0000 ;draw-tail JSR2 &skip0 - [ #10 ] !~ ,&skip1 JCN #0001 ;draw-tail JSR2 &skip1 - [ #20 ] !~ ,&skip2 JCN #0002 ;draw-tail JSR2 &skip2 - [ #30 ] !~ ,&skip3 JCN #0003 ;draw-tail JSR2 &skip3 - [ #40 ] !~ ,&skip4 JCN #0002 ;draw-tail JSR2 &skip4 - [ #50 ] !~ ,&skip5 JCN #0001 ;draw-tail JSR2 &skip5 - POP + .cat/y LDZ2 #0018 ADD2 .Screen/y DEO2 + .cat/x LDZ2 #0010 SUB2 .Screen/x DEO2 + ;ground .Screen/addr DEO2 + #1000 + &loop + #01 .Screen/sprite DEO + INC GTHk ,&loop JCN + POP2 -BRK +JMP2r @draw-polycat ( -- ) ( ears ) .cat/y LDZ2 .Screen/y DEO2 - .cat/x LDZ2 STH2k #0008 SUB2 .Screen/x DEO2 + .cat/x LDZ2 #0008 SUB2 .Screen/x DEO2 ;ears .Screen/addr DEO2 + #81 .Screen/sprite DEOk DEO + ( body ) + .cat/y LDZ2 #0010 ADD2 .Screen/y DEO2 + .cat/x LDZ2 #0008 SUB2 .Screen/x DEO2 + ;body .Screen/addr DEO2 #81 .Screen/sprite DEO - STH2r .Screen/x DEO2 - ;ears #0010 ADD2 .Screen/addr DEO2 - #81 .Screen/sprite DEO - - #0000 ,draw-eye JSR - #0000 ,draw-tail JSR + ( eye/tail ) + #00 ,draw-eye JSR + #00 ,draw-tail JSR -RTN +JMP2r -@draw-eye ( quad* -- ) +@on-mouse ( -> ) - .cat/y LDZ2 #0008 ADD2 .Screen/y DEO2 - .cat/x LDZ2 STH2k #0008 SUB2 .Screen/x DEO2 - DUP2 ;eye ADD2 .Screen/addr DEO2 - ( draw ) #81 .Screen/sprite DEO - STH2r .Screen/x DEO2 - ;eye #0010 ADD2 ADD2 .Screen/addr DEO2 - ( draw ) #81 .Screen/sprite DEO - -RTN + .Mouse/x DEI2 .cat/x LDZ2 GTH2 #50 SFT + .Mouse/y DEI2 .cat/y LDZ2 GTH2 #60 SFT + ADD ,draw-eye JSR + .cat/timer LDZ INC [ DUP ] .cat/timer STZ + #04 SFT ,draw-tail JSR + ,draw-cursor JSR -@draw-tail ( frame* -- ) +BRK +@draw-eye ( quad -- ) + + DUP ,&last LDR NEQ ,&changed JCN + POP JMP2r &changed + ( only redraw on change ) + DUP + #00 SWP ;eye ADD2 .Screen/addr DEO2 + .cat/y LDZ2 #0008 ADD2 .Screen/y DEO2 + .cat/x LDZ2 #0008 SUB2 .Screen/x DEO2 + #81 .Screen/sprite DEOk DEO + ,&last STR + +JMP2r + &last $1 + +@draw-tail ( frame -- ) + + DUP ,&last LDR NEQ ,&changed JCN + POP JMP2r &changed + ( only redraw on change ) + DUP + ;frames ROT #00 SWP ADD2 LDA + #00 SWP #40 SFT2 ;body/tail ADD2 + .Screen/addr DEO2 + .cat/x LDZ2 .Screen/x DEO2 .cat/y LDZ2 #0010 ADD2 .Screen/y DEO2 - .cat/x LDZ2 STH2k #0008 SUB2 .Screen/x DEO2 - ;body .Screen/addr DEO2 - ( draw ) #81 .Screen/sprite DEO - STH2r .Screen/x DEO2 - #40 SFT2 ;body #0010 ADD2 ADD2 .Screen/addr DEO2 - ( draw ) #81 .Screen/sprite DEO + #81 .Screen/sprite DEO + ,&last STR -RTN +JMP2r + &last $1 @draw-cursor ( -- ) - ( clear last cursor ) - ;cursor .Screen/addr DEO2 + ( last cursor ) + ;cursor STH2k .Screen/addr DEO2 .pointer/x LDZ2 .Screen/x DEO2 .pointer/y LDZ2 .Screen/y DEO2 #40 .Screen/sprite DEO - - ( record pointer positions ) + ( new cursor ) + STH2r .Screen/addr DEO2 .Mouse/x DEI2 DUP2 .pointer/x STZ2 .Screen/x DEO2 .Mouse/y DEI2 DUP2 .pointer/y STZ2 .Screen/y DEO2 + #41 .Mouse/state DEI #00 NEQ ADD .Screen/sprite DEO - ( colorize on state ) - #41 [ .Mouse/state DEI #00 NEQ ] ADD .Screen/sprite DEO - -RTN - -@draw-ground ( -- ) - - .cat/y LDZ2 #0018 ADD2 .Screen/y DEO2 - .cat/x LDZ2 #0010 SUB2 .Screen/x DEO2 - ;ground .Screen/addr DEO2 - - #10 #00 - &loop - ( draw ) #01 .Screen/sprite DEO - ( sety ) .Screen/addr DEI2 #0008 ADD2 .Screen/addr DEO2 - ( setx ) .Screen/x DEI2 #0008 ADD2 .Screen/x DEO2 - ( incr ) INC - GTHk ,&loop JCN - POP2 - -RTN +JMP2r @cursor 80c0 e0f0 f8e0 1000 - +@frames + 00 01 02 03 02 01 00 00 + 00 00 00 00 00 00 00 00 @ears 081c 3e3e 7f7f ffff 081c 3e3e 7f7f fffc 081c 3c3e 7e7e ffff 081c 3c3e 7e7e ff1f - @eye ffff ffff ff7f 3f0f f7ef cfe7 f07c 3f0f ffff ffff fffe fcf0 87c3 c183 071e fcf0 @@ -153,16 +151,15 @@ RTN ffff ffff fffe fcf0 0783 c1c3 871e fcf0 ffff ffff ff7f 3f0f f0e0 c1e1 f07c 3f0f ffff ffff fffe fcf0 07f3 f9fb f71e fcf0 - @body 0707 0707 0302 0200 0107 0707 0300 0000 + &tail e0f0 f0e0 e080 8000 c0f2 f9f9 fef8 b000 e0f0 f0e0 e080 8000 c0f2 f9f9 fef8 b000 e0f0 f0e0 e080 8000 c0f2 faf9 fef8 b000 e0f0 f0e0 e080 8000 c0f1 faf9 fef8 b000 0707 0707 0f08 1000 0307 0707 0f00 0000 e0e0 e0e0 e080 8000 f2f9 f9fe b884 8400 - @ground bf00 5c02 0202 020c ef10 6f90 8080 8074 ff00 fe01 0100 0116 fd00 3c40 4040 4028