These are projects I never end up finishing on. I might touch them once in a while, but I'll probably not work with them too often.
You'll see recurring things like failure to plan/compile, projects being too ambitious, projects that have no resolution, laziness, etc.
These are some of my many esolangs or esolang ideas that I never finished.
CLICKY is a programming language designed to mimic the events from the (moderately buggy) mobile game Calculator: The Game (in fact, that's the source of my many references of Clicky). Its source code represents almost like a script from the game:
SAY "Hi!"
PRESS "Hi!"
SAY "My name is CLICKY."
PRESS "Hi CLICKY!"
SAY "Want to play a game?"
PRESS "Why not?"
SAY "Alright, let's begin!"
PRESS "Let's go!"
SET X TO 1 // (not mentioned on the docs)
LEVEL 1 // A new level!
ARRANGE "+1" "+1"
INITIAL X // You can use a number if you want.
PRESS "+1"
PRESS "+1"
LEVEL COMPLETE
SET X TO SCREEN // (variable not mentioned on the docs)
LEVEL 2 // Another level!
JUMP 1
LEVEL COMPLETE
However, I've ran out of ideas as soon as I write the documentation of CLICKY. It's supposed to have a way to connect to other computers via sockets (because of the whole virus thing), but I can't imagine how I will implement that, or how I will send and receive stuff from there. (since variables only store numbers)
I did actually made two prototypes of this. It's severely unfinished though, with pretty much all of them not being able to parse codes, and I never thought of finishing it.
Instancia is an "object-based" programming language, designed to transform 2D (square) grid games into code. You might call it a very crude game engine.
The development got surprisingly far, but it ended because the code is so messy that I don't even know when I will restart my work.
It's supposed to have a natural syntax that's transpiled into a more computer-readable code.
createInstance:"yes";
createInstance:"test";
moveInstance:"yes";
moveInstance:"test":UP;
rotateClockwise:"yes";
rotateCounterClockwise:"test";
comment:out:{posY:"test"};
comment:out:({posY:"test"}+1);
label:"loop";
moveInstance:"test";
out:{posX:"test"};
if:(10>{posX:"test"}):{goto:"loop"};
JawaSkrip is a translation of JavaScript to Indonesian/Malay. It uses a natural syntax, because this is at the time when I just do a "find and replace" when I'm translating a programming language into another (human) language (making this kinda a form of me showing off)
Diketahui x bernilai 2 ditambah 2,5.
Katakan x.
Ketika x kurang dari 12,
x bernilai x ditambah 2.
Katakan x.
Bagaimana?
The problem is I haven't quite mastered NLP yet. I think I've made a parser in PEG.js, but I kinda stopped after something got wrong.
Javascript is a programming language that uses the Javanese script.
... That explains it all.
꧁ꦠꦸꦭꦝꦲꦏ꧀ꦱꦫ꧂
꧋꧃ꦲꦏꦸꦢꦸꦮꦺ꧊ꦲꦭꦺꦴ꧈ꦗꦒꦢ꧀ꦫꦪ꧊꧉ꦔꦺꦴꦩꦺꦴꦁꦏꦪꦱꦶꦁꦢꦶꦏꦤꦤ꧀ꦝꦏꦏꦶ꧉ꦩꦸꦁꦏꦱꦶꦥꦼꦱꦼꦤ꧀ꦲꦤꦤ꧀ꦚ꧉
꧉꧆꧉
Like JawaSkrip, the problem is the fact that this uses a natural syntax.
These are projects I've shelved for the far future, when I know more on how do I do this.
pytrds is my implementation of the TRDS fingerprint from Funge-98 for Python. tl;dr: it's a module that allows some sort of time-travelling on Python. It works like this:
You can use pytrds by importing it:
import tardis
a = 5
print("Hello, world!")
a -= 1
if a > 0:
tardis.jump(space=-3)
To run it, you have to use its interpreter:
$ python -m pytrds main.py
Hello, world!
Hello, world!
Hello, world!
Hello, world!
Hello, world!
$
In this case, the IP is jumped 3 lines back, resulting in a loop, a la BASIC.
Note that you can't run programs using pytrds normally:
$ python main.py
Traceback (most recent call last):
File "main.py", line 1, in <module>
import tardis
File "???/pytrds/__init__.py", line ???, in <module>
raise RuntimeError("Invalid environment,"
RuntimeError: Invalid environment, try starting this code within the pytrds module.
$
Like TARDIS, you can also jump through time:
import tardis
a = 1
print("Variable initially:", a)
a += 1
print("Variable before time travel:", a)
if tardis.ipid == 0:
tardis.jump(time=-3)
a += 1
print("Variable after time travel:", a)
$ python -m pytrds main.py
Variable initially: 1
Variable before time travel: 2
Variable after time travel: 3
Variable before time travel: 3
Variable after time travel: 4
$
Notice that there is repeating lines. That's actually two IPs printing the same lines, one from the past, and one from the present. You can see who's printing them by the tardis.ipid variable:
import tardis
a = 1
print("Variable initially (IP #{tardis.ipid}):", a)
a += 1
print(f"Variable before time travel (IP #{tardis.ipid}):", a)
if tardis.ipid == 0:
tardis.jump(time=-3)
a += 1
print(f"Variable after time travel: (IP #{tardis.ipid})", a)
$ python -m pytrds main.py
Variable initially (IP #0): 1
Variable before time travel (IP #0): 2
Variable after time travel (IP #0): 3
Variable before time travel (IP #1): 3
Variable after time travel (IP #1): 4
$
In the end though, it didn't work out. At the present time I had no idea how to evaluate Python code fully given its syntax tree. I can parse codes, but can't use the result.
If I use a language that uses curly brackets that's as "lazy" as Python, it would make things a lot easier, but I think the alternatives (*cough* JavaScript *cough*) just didn't fit the theme well.
stsh, or Speech to Shell, is a silly concept for a shell that's only driven by voice commands. While I've made the mockup just as a joke, I actually think this would be a cool and useful idea. Imagine getting a fortune just by saying "run fortune". Or for disabled people that want to run shell commands.
The main problem is I don't know when will I have the cash to use Google's SST engine to use for this project. Also NLP problems.
In the meantime, enjoy this mockup I made:
Touché is a text-based Scratch compiler. Unlike other text-based Scratch implementations like tosh or TaBS, Touché compiles source code not unlike how C compilers does it (i.e, it compiles files into object-like files which gets linked combined into a Scratch project).
It accepts scratchblocks-like syntax:
sprite Sprite1
get costume [frame1 v] from [frame1.png]
get costume [frame2 v] from [frame2.png]
get costume [frame3 v] from [frame3.png]
define dance (speed)
set [dist v] to ((speed) * (distance to (mouse-pointer v)))
repeat until <(timer) > (10)>
move (dist) steps
next costume
play note (pick random (40) to (100)) for (0.5) beats
say [Wow! It's Touché!]
end
when green flag clicked
dance (10)
end
It also supports importing assets from either inside or outside the script.
sprite Sprite1
get costume [frame1 v] from [something.tch]
get costume [frame2 v] from [frame2.png]
get costume [frame3 v] from [frame3.png]
define dance (speed)
set [dist v] to ((speed) * (distance to (mouse-pointer v)))
repeat until <(timer) > (10)>
move (dist) steps
next costume
play note (pick random (40) to (100)) for (0.5) beats
say [Wow! It's Touché!]
end
when green flag clicked
dance (10)
end
get sprite Sprite2 from [this.sb3]
It also supposed to be multi-lingual, in that it compiles not only into Scratch, but also its derivatives.
I actually had a project for this, but I just kinda left it since it's proven to be a super hard project, since I have to make the parser myself. Also, I've just find out a really nasty bug that will either give me headaches to fix it or led me to scrap the idea of using the scratchblocks-like syntax.
Actually, I can just merge booleans with reporters, right?