re: big reply, game mock up drafts (warning, long)
PASTURE (OATS) PHASE
REM # PASTURE PHASE
PRINT "XXXXXXXXXXXXXXX"
PRINT "X.............X"
PRINT "X......T......X"
PRINT "X.............X"
PRINT "X.............X"
PRINT "X.............X"
PRINT "X..F..........X"
PRINT "X.........I...X"
PRINT "X.............X"
PRINT "X.............X"
PRINT "X.............X"
PRINT "X......@......X"
PRINT "X..........QL.X"
PRINT "X..M..........X"
PRINT "XXXXXXXXXXXXXXX"
REM # PET PHASE
REM ## PET GRAPHICS
REM ***** EGG *****
"."
"。"
"ₒ"
"o"
"O"
REM ***** BABY *****
"( .◎. )"
"(。◎。 )"
"( 。◎。)"
"(_ 。◎。)_"
"_(。◎。 _)"
"~:0"
"o:~"
"~:o"
"~:v"
"c:~"
REM ***** CHILD *****
"(^▽^)"
"(^▽^ )"
"( ^▽^)"
"(>^▽^)>"
"<(^▽^<)"
"(✿^‿^✿)"
"(^‿^✿ )"
"( ✿^‿^)"
"(>✿^‿^)>"
"<(^‿^✿<)")
"( 。v ° )"
"(。v ° )☆"
"☆( 。v °)"
"☆( >。v °)>"
"<(。v °< )☆"
"( o v o )"
"(o v o )"
"( o v o)"
"( ┘o v o)┘"
"┌(o v o┌ )")
REM ***** TEEN *****
"(°□°)" ;; forward
"(°□° )" ;; left-facing
"( °□°)" ;; right-facing
"(╯°□°)╯" ;; right-moving
"╰(°□°╰)") ;; left-moving
"(>.<)" ;; forward
"(<.<)" ;; left-facing
"(>.>)" ;; right-facing
"(>.>)//" ;; right-moving
"\\(<.<)") ;; left-moving
" ¯\(°_o)/¯" ;; forward
"(°_o )" ;; left-facing
"( o_°)" ;; right-facing
" (/¯o_°)/¯" ;; right-moving
" ¯\(°_o¯\)") ;; left-moving
" (•̀_•́)" ;; forward
" (•̀_•́ )" ;; left-facing
" ( •̀_•́)" ;; right-facing
" (ง •̀_•́)ง" ;; right-moving
" ლ(•̀_•́ლ)") ;; left-moving
"( *°▽°* )" ;; forward
"(*°▽°* )" ;; left-facing
"( *°▽°*)" ;; right-facing
"(>*°▽°*)>" ;; right-moving
"<(*°▽°*<)") ;; left-moving
"(u w u)" ;; forward
"(u w u )" ;; left-facing
"( u w u)" ;; right-facing
"(> u w u)>" ;; right-moving
"<( u w u <)") ;; left-moving
"(•˘v˘•)" ;; forward
"(•˘v˘n )" ;; left-facing
"( ˘v˘•)" ;; right-facing
"(n˘v˘•)¬" ;; right-moving
"~(•˘v˘n)") ;; left-moving
"(o w o)" ;; forward
"(o w o )" ;; left-facing
"( o w o)" ;; right-facing
"(> o w o)>" ;; right-moving
"<( o w o <)") ;; left-moving
"\(´◓ Д ◔)/" ;; forward
"(´◓ Д ◔ )" ;; left-facing
"( ´◔ Д ◓)" ;; right-facing
"(/ ´◔ Д ◓)/" ;; right-moving
"\(´◓ Д ◔ \)") ;; left-moving
"(`▽´)" ;; forward
"(`▽´ )" ;; left-facing
"( `▽´)" ;; right-facing
"(o `▽´ )oΨ" ;; right-moving
"Ψo(`▽´ o)");; left-moving
"(゚ Д ゚)" ;; forward
"(゚ Д ゚ )" ;; left-facing
"( ゚ Д ゚)" ;; right-facing
"(> ゚ Д ゚)>" ;; right-moving
"<(゚ Д ゚ <)");; left-moving
"(⌐■_■¬)" ;; forward
"(■_■¬ )" ;; left-facing
"( ⌐■_■)" ;; right-facing
"(>⌐■_■)>" ;; right-moving
"<(■_■¬<)");; left-moving
"(▼皿▼)" ;; forward
"(▼皿▼。 )" ;; left-facing
"( 。▼皿▼)" ;; right-facing
"(- 。▼皿▼)-" ;; right-moving
"-(▼皿▼。 -)");; left-moving
"(*Φ ω Φ*)" ;; forward
"(*Φ ω Φ* )" ;; left-facing
"( *Φ ω Φ*)" ;; right-facing
"(∿*Φ ω Φ*)∿" ;; right-moving
"∿(*Φ ω Φ*∿)");; left-moving
"('ڡ')" ;; forward
"('ڡ' )" ;; left-facing
"( 'ڡ')" ;; right-facing
"(ง 'ڡ')ง" ;; right-moving
"ლ('ڡ'ლ)");; left-moving
"(`▽´)" ;; forward
"(`▽´ )" ;; left-facing
"( `▽´)" ;; right-facing
"(o `▽´ )oΨ" ;; right-moving
"Ψo(`▽´ o)");; left-moving
"(⊙_◎)" ;; forward
"(⊙_◎ )" ;; left-facing
"( ⊙_◎)" ;; right-facing
"(> ⊙_◎)>" ;; right-moving
"<(⊙_◎ <)");; left-moving
"(Φ‿Φ)" ;; forward
"(Φ‿Φ )" ;; left-facing
"( Φ‿Φ)" ;; right-facing
"Ψ( ;Φ‿Φ)_↑" ;; right-moving
"↑_(Φ‿Φ;)Ψ");; left-moving
"(ʘ∀ʘ)" ;; forward
"(๑ʘ∀ʘ )" ;; left-facing
"( ๑ʘ∀ʘ)" ;; right-facing
"ε=┌(๑ʘ∀ʘ)┘" ;; right-moving
"┗(ʘ∀ʘ๑)┐┘=3");; left-moving
"(ì_í)" ;; forward
"(ì_í )" ;; left-facing
"( ì_í)" ;; right-facing
"(ó ì_í)=ó" ;; right-moving
"ò=(ì_í ò)");; left-moving
"(≧∇≦)" ;; forward
"(≧∇≦ )" ;; left-facing
"( ≧∇≦)" ;; right-facing
"(~ ≧∇≦)~" ;; right-moving
"~(≧∇≦ ~)");; left-moving
"(▼∀▼)" ;; forward
"(▼∀▼ )" ;; left-facing
"( ▼∀▼)" ;; right-facing
"( >▼∀▼)>" ;; right-moving
"<(▼∀▼< )");; left-moving
"(。々°)" ;; forward
"(。々° )" ;; left-facing
"( 。々°)" ;; right-facing
"(> 。々°)>" ;; right-moving
"<(。々° <)");; left-moving
"(◕ヮ◕)" ;; forward
"(◕ヮ◕ )" ;; left-facing
"( ◕ヮ◕)" ;; right-facing
"(/◕ヮ◕)/" ;; right-moving
"\\(◕ヮ◕\\)");; left-moving
"(´◡‿|◡`)" ;; forward
"(´◡/‿◡` )" ;; left-facing
"( ´◡‿|◡`)" ;; right-facing
"(>´◡‿|◡`)>" ;; right-moving
"<(´◡/‿◡`<)");; left-moving
"@(・ω・)@" ;; forward
"@(・ω・o )@" ;; left-facing
"@( o・ω・)@" ;; right-facing
"@( >o・ω・)@>" ;; right-moving
"<@(・ω・o< )@");; left-moving
"(●ᴥ●)" ;; forward
"(●ᴥ● )" ;; left-facing
"( ●ᴥ●)" ;; right-facing
"(> ●ᴥ●)>" ;; right-moving
"<(●ᴥ● <)") ;; left-moving
"(๑ÒωÓ๑)" ;; forward
"(๑ÒωÓ๑ )" ;; left-facing
"( ๑ÒωÓ๑)" ;; right-facing
"( >๑ÒωÓ๑)>" ;; right-moving
"<(๑ÒωÓ๑< )");; left-moving
"(≧∀≦)" ;; forward
"(≧∀≦ )" ;; left-facing
"( ≧∀≦)" ;; right-facing
"(/≧∀≦)/" ;; right-moving
"\\(≧∀≦\\)");; left-moving
"(•̀◡•́)" ;; forward
"✧(-◡•́。)" ;; left-facing
"(。•̀◡-)✧" ;; right-facing
"(> 。•̀◡-)>✧" ;; right-moving
"✧<(-◡•́。 <)") ;; left-moving
"(° ͜ʖ °)" ;; forward
"(° c͜ ° )" ;; left-facing
"( ° ͜ʖ °)" ;; right-facing
"(☞ ° ͜ʖ °)☞" ;; right-moving
"☜( ° c͜ °☜)");; left-moving
"(ˆ⌣ˆ)" ;; forward
"(ˆ⌣ˆc)" ;; left-facing
"(ↄˆ⌣ˆ)" ;; right-facing
"(>ↄˆ⌣ˆ)>" ;; right-moving
"<(ˆ⌣ˆc<)");; left-moving
This thing is still on.
This project is no longer trying to recreate a Tamagotchi in BASIC or Lisp.
First complete program run! WOO!
And it's usable on the
CYBER HOLE
https://cyberhole.online/
![HN TinyBasicWeb 0.1
READY
1'Testing
1:':Testing
2 REM a test program for TinyBasicWeb
2:REM:a test program for TinyBasicWeb
3 ?"Hello, world!"
3:?:"Hello, world!"
4 PRINT 1,2,3,"easy as ABC"
4:PRINT:1:,:2:,:3:,: "easy as ABC"
9 END
9: END
RUN
RUN
Hello, world!
1, 2 3 easy as ABC
READY
[]
HN TinyBasicWeb 0.1
READY
1'Testing
1:':Testing
2 REM a test program for TinyBasicWeb
2:REM:a test program for TinyBasicWeb
3 ?"Hello, world!"
3:?:"Hello, world!"
4 PRINT 1,2,3,"easy as ABC"
4:PRINT:1:,:2:,:3:,: "easy as ABC"
9 END
9: END
RUN
RUN
Hello, world!
1, 2 3 easy as ABC
READY
[]](https://cdn.masto.host/appdotnet/media_attachments/files/114/868/250/360/308/371/original/fae9f4ed90f2e9e1.jpg)
The original focus of the Tamagotchi rewrite in BASIC was to write and explore mini games.
There is a whack-a-mole mini game in "it takes two", the idea is one player must hit the other, who is hiding.
I think something entertaining could also be written for two players on one keyboard in BASIC.
Web dev protip:
console.log("foo: ", p);
displays p in console as a live object. If it updates, every console entry of it updates.
console.log("foo: "+JSON.stringify(p) );
dumps the current state to console so you can figure out what changed over time.
In related news, my little BASIC parser now parses at least a couple tokens correctly (the colon lines are parsed tokens)

Thank you very much for your response, it lets me know if I stick little code snippets here, that people will take an interest ( :
I have been thinking a lot about the project.
The one of the other components of the project is called "uwu.el". It is a Tamagotchi written in Emacs Lisp.
Version 2 of the project contained many different evolutions of the pet. I think there are far too many in that version to carry over into the BASIC rewrite of the program. It will become far too long, and, really, be almost impossible to type in.
I am not sure how many kaomoji pet evolutions will be able to fit into the BASIC rewrite.
In some ways it makes my life easier, because I do not have to spend a long time figuring out the different evolution pathways of the large number of different pets.
Perhaps what I will do is make a "Pocket Pikachu", and not a "Tamagotchi"?
5 DATA "(u w u)","(u w u )","( u w u)","(> u w u)>","<( u w u <)"
10 FOR I=1 TO 100
15 DELAY 1000
20 F=INT(RND(1)*5)+1
30 RESTORE F
40 READ P$:PRINT P$
50 NEXT I
( :
it is my hope i can fit all the kaomoji into memory (:
for some reason i was worried, quite anxious, about writing a timer in such a simple way.
but after doing a quick calculation, i can see fifteen minutes is only 900 seconds.
this gives me quite a bit of relief.
i think a simple FOR loop can be written:
FOR H=1 TO 900
REM DUTIES PERFORMED EVERY SECOND
DELAY 1000
NEXT H
REM WE FALL INTO THIS CODE HERE
REM DUTIES PERFORMED EVERY 15 MIN
Been thinking a lot about the project.
The BASIC rewrite is going to improve on the Emacs Lisp version.
All improvements made to the BASIC version will be reflected into the version 4 rewrite of the Emacs Lisp version.
The timer mechanism will be very simple this time. It will be structured around a loop that counts the seconds up to fifteen minutes. The one second 'strobe' will be called the "heartbeat". The fifteen minute strobe will be called the "tick".
Every tick, hunger will increase, and other biorhythm logic will be assessed.
This has been a project that I have worked on for a few years now.
I got very stuck about 18 months ago on uwu.el version 4.
Many people have asked -- why BASIC? There are two reasons: first, I want the program to be typed in. It is my hope that the joy I feel when I code this toy carries over to others.
Second, this is a project I started as a child, on a computer running BASIC. I have always wanted to see if I could do a job that satisfied me.
BASIC tamagotchi devlog
it's gotten to the point where i cannot write a mini game without having some general concept first of what the structure of the program should look like in BASIC
so, here we go. time to start drafting the tamagotchi in BASIC.
i will have a look at what the most common BASIC-enabled pocket calculator is, because i want this to be able to run on them. there is a facebook group full of people who would be very interested to have a virtual pet on their device.
laying down the code is going to be easy, and i imagine the thing will all fit into one .BAS file.
these are the mini games i'm going to draft for the tamagotchi:
- bump
tap buttons to avoid obstacles.
- flag
remember a sequence of flags.
- heading
control the tamagotchi to head a ball.
- memory
memorise and repeat button presses.
- sprint
control the tamagotchi to run and collect items.
- higher or lower
guess if next number is higher or lower.
- piano
tap buttons to play musical notes.
- balloon
pop balloons by pressing buttons.
- apple
catch apples in a basket.
UWU.BAS design document
UWU.BAS
vidak.
2025
Main loop handles:
- Time progression
- User input
- Pet behavior (based on hunger, mood, etc.)
- Display logic
High level structure
Global pet state
Store the core state in variables:
AGE
HUNGER
HAPPINESS
SICKNESS
LAST ACTION TIME
EVOLUTION STAGE
IS ALIVE
Main loop
- Initialise pet
- Main menu or startup
- Main loop
- Alive?
- Time passes
- Check for events or needs
- Display pet
- Get player input (if any)
- Return to top of loop
Main loop structure
Subroutines
- Time passing
Aging Hunger increasing Mood changing
- Logic and branching
Pet evolves Pet dies Gets sick
- Display
Idle animation, status, etc.
- Input
Feed Play Heal
Event timing
Use time counters.
Every N cycles or ticks, age increases or hunger changes.
Structuring view as a mode
VIEW MODE="IDLE"
IF NEEDS ATTENTION THEN VIEW MODE="CRY"
IF USER SELECTS FEED THEN VIEW MODE = "EAT"
Dislay subroutine renders based on VIEW MODE. Detaches display from behaviour.