( 54K . Yufo ) |00 @System/vector $2 &expansion $2 &wst $1 &rst $1 &metadata $2 &r $2 &g $2 &b $2 &debug $1 &state $1 |10 @Console &vector $2 &read $1 &pad $5 &write $1 &error $1 |20 @Screen/vector $2 &width $2 &height $2 &auto $1 &pad $1 &x $2 &y $2 &addr $2 &pixel $1 &sprite $1 |30 @Audio0 &vector $2 &position $2 &output $1 &pad $3 &adsr $2 &length $2 &addr $2 &volume $1 &pitch $1 |80 @Controller/vector $2 &button $1 &key $1 |90 @Mouse/vector $2 &x $2 &y $2 &state $1 &pad $3 &scrollx $2 &scrolly $2 |c0 @DateTime &year $2 &month $1 &day $1 &hour $1 &minute $1 &second $1 &dotw $1 &doty $2 &isdst $1 ( @|Enums ) |0050 @Varvara/version |0040 @timeout/born |0038 @timeout/hatch |0800 @timeout/saucer |0000 @timeout/newage |00a8 @timeout/logo |0010 @timeout/rate |000 @sel/id $1 &mode $1 @ufo/hygiene $1 &happiness $1 &energy $1 &hunger $1 &toilet $1 ( ) &age $2 &x $2 &y $2 ( ) &asleep $1 &pooped $1 &sick $1 &death $1 ( ) &evo-a $1 &evo-b $1 &evo-c $1 @rps/choice $1 &against $1 @scene/light $1 |100 @on-reset ( -> ) ;meta #06 DEO2 ( | theme ) #960f .System/r DEO2 #9e0f .System/g DEO2 #980f .System/b DEO2 ( | size ) #0050 .Screen/width DEO2 #0058 .Screen/height DEO2 ( | setup synth ) #0100 .Audio0/adsr DEO2 ;tri-pcm .Audio0/addr DEO2 #0100 .Audio0/length DEO2 [ LIT2 dd -Audio0/volume ] DEO ufo/ logo/ BRK @meta 00 ( ) "Yufo 0a ( ) "A 20 "Virtual 20 "Pet 0a ( ) "By 20 "Hundred 20 "Rabbits 0a ( ) "10 20 "Jul 20 "2026 00 ( . ) 03 ( - ) 56 =Varvara/version ( - ) 83 =appicon ( - ) a0 =manifest/dat @manifest/dat ( . ) _{ =dict/yufo ( - ) 01 00 =sel/ =dict/select ( - ) 02 00 =sel/ =dict/right ( - ) 10 00 =sel/ =dict/up ( - ) 20 00 =sel/ =dict/down ( - ) 40 00 =sel/ =dict/left ( - ) 80 00 =sel/ =dict/right } 00 %u8/mod { DIVk MUL SUB } %u16/mod { DIV2k MUL2 SUB2 } %Screen/ ( x* y* -- ) { .Screen/y DEO2 .Screen/x DEO2 } ( @|Ufo ) %ufo/is-born { .ufo/age LDZ2 ;timeout/born GTH2 } %ufo/is-awake { [ LIT2 00 -ufo/asleep ] LDZ EQU } %ufo/is-clean { [ LIT2 00 -ufo/pooped ] LDZ EQU } %ufo/is-sick { [ LIT2 00 -ufo/sick ] LDZ NEQ } %ufo/is-alive { [ LIT2 00 -ufo/death ] LDZ EQU } %ufo/is-hungry { .ufo/hunger LDZ #f0 LTH } %ufo/is-starving { .ufo/hunger LDZ #10 LTH } %ufo/is-home { .ufo/age LDZ2 ;timeout/saucer LTH2 } @ufo/ ( -- ) [ LIT2 ff -&hygiene ] STZ [ LIT2 80 -&happiness ] STZ [ LIT2 ff -&energy ] STZ [ LIT2 80 -&hunger ] STZ [ LIT2 ff -&toilet ] STZ [ LIT2 00 -&pooped ] STZ [ LIT2 00 -&death ] STZ ;timeout/newage .&age STZ2 #001c .&x STZ2 #0025 .&y STZ2 JMP2r @ufo/ ( -- ) ;ufo-special-icns/saucer .Screen/addr DEO2 .&x LDZ2 .&y LDZ2 Screen/ [ LIT2 26 -Screen/auto ] DEO [ LIT2 85 -Screen/sprite ] DEOk DEOk DEO JMP2r @ufo/ ( -- ) .&x LDZ2 #0008 ADD2 .&y LDZ2 #0008 ADD2 Screen/ ;ufo-special-icns/tomb .Screen/addr DEO2 [ LIT2 16 -Screen/auto ] DEO [ LIT2 85 -Screen/sprite ] DEOk DEO JMP2r @ufo/ ( hatch -- ) .&x LDZ2 #0008 ADD2 .&y LDZ2 #0008 ADD2 Screen/ #00 SWP #60 SFT2 ;ufo-special-icns/egg ADD2 .Screen/addr DEO2 [ LIT2 16 -Screen/auto ] DEO [ LIT2 85 -Screen/sprite ] DEOk DEO JMP2r @ufo/ ( a* b* -- ) [ LIT2 00 &f2 $1 ] EQU DUP ,&f2 STR [ JMP SWP2 ] POP2 !/ @ufo/ ( -- ) /is-born ?{ #00 !/ } /is-home ?{ !/ } /is-alive ?{ !/ } /get-face ( >> ) @ufo/ ( addr* -- ) [ LIT2 05 -Screen/auto ] DEO .&x LDZ2 .&y LDZ2 Screen/ [ LIT2r 85 -Screen/sprite ] ( | .. ) [ LIT2 00 -&evo-a ] LDZ #30 MUL ;ufo-icns/ears ADD2 .Screen/addr DEO2 DEOkr DEOkr DEOkr .&x LDZ2 .&y LDZ2 #0008 ADD2 Screen/ [ LIT2 00 -&evo-b ] LDZ #30 MUL ;ufo-icns/heads ADD2 .Screen/addr DEO2 DEOkr DEOkr DEOkr .&x LDZ2 .&y LDZ2 #0010 ADD2 Screen/ [ LIT2 00 -&evo-c ] LDZ #30 MUL ;ufo-icns/legs ADD2 .Screen/addr DEO2 DEOkr DEOkr DEOkr ( | face ) .&x LDZ2 #0008 ADD2 .&y LDZ2 #0008 ADD2 Screen/ .Screen/addr DEO2 DEOr JMP2r @ufo/get-face ( -- addr* ) [ LIT2 00 -&sick ] LDZ EQU ?{ ;ufo-faces/sad JMP2r } [ LIT2 00 -&asleep ] LDZ EQU ?{ ;ufo-faces/sleep JMP2r } .&happiness LDZ #30 GTH ?{ ;ufo-faces/sad JMP2r } .&energy LDZ #20 GTH ?{ ;ufo-faces/sleep JMP2r } .&hunger LDZ #30 GTH ?{ ;ufo-faces/sleep JMP2r } .&happiness LDZ #80 LTH ?{ ;ufo-faces/joy JMP2r } ;ufo-faces/neutral JMP2r @ufo/ ( -- ) /is-awake ?{ ( | sleeping ) / .scene/light LDZ ?{ / } / [ LIT2 ff -&energy ] LDZ NEQ ?{ !/ } JMP2r } ( | awake ) / [ LIT2 00 -scene/light ] LDZ EQU ?{ .&energy LDZ #60 GTH ?{ / } } [ LIT2 00 -&energy ] LDZ NEQ ?{ !/ } JMP2r @ufo/ ( -- ) .&energy LDZ INC ( clamp ) DUP ?{ POP JMP2r } .&energy STZ JMP2r @ufo/ ( mod -- ) [ LIT2 ff -&energy ] LDZ ADD INCk ?{ POP JMP2r } .&energy STZ JMP2r @ufo/ ( -- ) [ LIT2 ff -&hunger ] LDZ ADD INCk ?{ POP JMP2r } .&hunger STZ JMP2r @ufo/ ( -- ) [ LIT2 ff -&toilet ] LDZ ADD INCk ?{ POP JMP2r } .&toilet STZ JMP2r @ufo/ ( -- ) [ LIT2 ff -&hygiene ] LDZ ADD INCk ?{ POP JMP2r } .&hygiene STZ JMP2r @ufo/ ( -- ) [ LIT2 ff -&happiness ] LDZ ADD INCk ?{ POP JMP2r } .&happiness STZ JMP2r @ufo/ ( -- ) .&happiness LDZ INC ( clamp ) DUP ?{ POP JMP2r } .&happiness STZ JMP2r @ufo/ ( -- ) .&hunger LDZ INC ( clamp ) DUP ?{ POP JMP2r } .&hunger STZ JMP2r @ufo/ ( -- ) .&asleep LDZ ?{ JMP2r } [ LIT2 00 -&asleep ] STZ JMP2r @ufo/ ( -- ) [ LIT2 01 -ufo/sick ] STZ [ LIT2 68 -Audio0/pitch ] DEO ( >> ) @ufo/ ( -- ) .&asleep LDZ ?{ [ LIT2 01 -&asleep ] STZ } JMP2r @ufo/ ( -- ) /is-awake ?{ JMP2r } [ LIT2 00 &f 80 ] INCk ,&f STR ;tri-pcm ADD2 LDA #00 SWP #04 SFT2 #0014 ADD2 .&x STZ2 / .&energy LDZ ?{ !/ } .scene/light LDZ ?/ JMP2r @ufo/ ( -- ) / .&toilet LDZ ?{ [ LIT2 01 -&pooped ] STZ [ LIT2 ff -&toilet ] STZ [ LIT2 68 -Audio0/pitch ] DEO } [ LIT2 00 -&pooped ] LDZ EQU ?{ / / } .&hygiene LDZ #80 GTH ?{ / } / .&happiness LDZ ?{ / } /is-starving ?{ !/ } [ LIT2 68 -Audio0/pitch ] DEO [ LIT2 00 -&happiness ] STZ !/ @ufo/ ( -- ) .&age LDZ2 ( | handlers ) DUP2 #0200 NEQ2 ?{ / } DUP2 #0400 NEQ2 ?{ / } #0600 NEQ2 ?{ !/ } JMP2r @ufo/ ( -- ) .DateTime/second DEI .&happiness LDZ ADD #03 AND INC .&evo-a STZ [ LIT2 62 -Audio0/pitch ] DEO JMP2r @ufo/ ( -- ) .DateTime/second DEI .&energy LDZ ADD #03 AND INC .&evo-b STZ [ LIT2 62 -Audio0/pitch ] DEO JMP2r @ufo/ ( -- ) .DateTime/second DEI .&hunger LDZ ADD #03 AND INC .&evo-c STZ [ LIT2 62 -Audio0/pitch ] DEO JMP2r @ufo/ ( -- ) [ LIT2 68 -Audio0/pitch ] DEO [ LIT2 01 -ufo/death ] STZ [ LIT2 00 -ufo/happiness ] STZ [ LIT2 00 -ufo/energy ] STZ [ LIT2 00 -ufo/hygiene ] STZ [ LIT2 00 -ufo/hunger ] STZ JMP2r @hatch/ ( -- ) ;&on-frame .Screen/vector DEO2 scene/ JMP2r @hatch/on-frame ( -> ) [ LIT2 07 &f 10 ] INCk ,&f STR ANDk ?{ scene/ DUP #03 SFT #01 AND ufo/ } ?{ scene/ #02 ufo/ ;&on-frame-b .Screen/vector DEO2 } POP BRK @hatch/on-frame-b ( -> ) [ LIT &fb c0 ] INCk ,&fb STR ?{ time/ scene/ scene/ scene/ } BRK ( @|Time ) @time/ ( -- ) ufo/is-alive ?{ JMP2r } ufo/is-home ?{ JMP2r } !/ @time/ ( -- ) .ufo/age LDZ2 INC2 .ufo/age STZ2 ufo/is-born ?{ .ufo/age LDZ2 ;timeout/born NEQ2 ?{ !hatch/ } JMP2r } ufo/is-alive ?{ JMP2r } ufo/ ufo/ !ufo/ @sel/ ( -- ) .&id LDZ INC !/ @sel/ ( -- ) [ LIT2 fc -&id ] LDZ ADD !/ @sel/ ( -- ) .&id LDZ DUP .&mode STZ [ LIT2 40 -Audio0/pitch ] DEO DUP ?{ food/ } DUP #01 NEQ ?{ scene/ } DUP #02 NEQ ?{ rps/ } DUP #03 NEQ ?{ medicine/ } DUP #04 NEQ ?{ wash/ } DUP #05 NEQ ?{ status/ } DUP #06 NEQ ?{ discipline/ } DUP #07 NEQ ?{ POP menu/ BRK } POP !menu/ @sel/