We are currently working on new rules for what content should and shouldn't be allowed on this website, and are looking for feedback! See Esolang:2026 topicality proposal to view and give feedback on the current draft.
Tonk
- This is still a work in progress. It may be changed in the future.
Tonk is an esoteric programming language by user:raiseafloppafan7741 in 2026 based on the tank game Woomy-Arras.io.
Tonk is based on the 2TDM (Team Deathmatch) mode, with a 9750x6500 map ported from the game.
Program structure
Programs in Tonk are structured like this:
Red Team
Player Name
Player
1/1/1/1/1/1/1/1/1/1
1
Blue Team
[AI] Bot Name
AI
1/1/1/1/1/1/1/1/1/1
1
Leaderboard
Player Name - Annihilator - 59.21k
[AI] Bot Name - Mini Asteroid - 32.15k
Max Players: 100
Bot Amount: 100
Map ID: 1234abc
~~~~ ~~~~ .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... ==== ====
~~~~ ~~~~ .... .... .... OOOO .... .... .... OOOO OOOO .... .... .... OOOO .... .... .... ==== ====
~~~~ BBBB .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... RRRR ====
~~~~ .... .... .... .... .... .... .... .... OOOO OOOO .... .... .... .... .... .... .... .... ====
~~~~ .... .... .... OOOO .... .... .... .... .... .... .... .... .... .... OOOO .... .... .... ====
~~~~ .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... ====
BBBB .... .... .... .... .... .... .... .... """" """" .... .... .... .... .... .... .... .... RRRR
~~~~ .... .... .... .... .... .... OOOO """" """" """" """" OOOO .... .... .... .... .... .... ====
~~~~ .... .... .... .... .... .... """" """" """" """" """" """" .... .... .... .... .... .... ====
~~~~ .... .... OOOO .... .... """" """" """" OOOO .... """" """" """" .... .... OOOO .... .... ====
~~~~ .... .... OOOO .... .... """" """" """" .... OOOO """" """" """" .... .... OOOO .... .... ====
~~~~ .... .... .... .... .... .... """" """" """" """" """" """" .... .... .... .... .... .... ====
~~~~ .... .... .... .... .... .... OOOO """" """" """" """" OOOO .... .... .... .... .... .... ====
BBBB .... .... .... r..b .... .... .... .... """" """" .... .... .... .... .... .... .... .... RRRR
~~~~ .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... ====
~~~~ .... .... .... OOOO .... .... .... .... .... .... .... .... .... .... .... .... .... .... ====
~~~~ .... .... .... .... .... .... .... .... OOOO OOOO .... .... .... .... OOOO .... .... .... ====
~~~~ BBBB .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... RRRR ====
~~~~ ~~~~ .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... ==== ====
~~~~ ~~~~ .... .... .... OOOO .... .... .... OOOO OOOO .... .... .... OOOO .... .... .... ==== ====
Team players
At the top are the players for the red team and blue team. A team player may be specified like this:
[Player Name]
[Player|AI]
Body Damage/Max Health/Weapon Speed/Weapon Health/Weapon Penetration/Weapon Damage/Reload/Movement Speed/Shield Regeneration/Shield Capacity
[Spawn Order]
The first line is the player name. If the player is a "human", then this can be anything. If the player is a bot, then it must start with "[AI]" and begin with a name from the list of bot names, including the long removed one that goes something like "UWU OWO LMFAOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO".
The second line determines whether the player is a "human" or AI.
The third line determines the stats of the player's tank. The skill points spent must not be greater than 42, they must be valid (i.e. no greater than 9 or 12 or something else depending on the stat), and they must be according to the tank. For example, Orbital Strike would not have Weapon Speed, while Chinook would not have Weapon Speed, Weapon Health, Weapon Penetration, Weapon Damage, and Reload.
The fourth line determines the spawn order. Simply put, this refers to the index starting at one of the point on the map this will spawn at. In the small example map below, a tank on the red team with an index of 1 would spawn at the first r, while a tank with an index of 2 would spawn at the second r. Players may share the same index.
..b. .... .b..
.... ""r" ....
.... .... .r..
Leaderboard
The starting leaderboard determines the players' tanks. (even though they should've been up there) An example leaderboard could look like:
Leaderboard
[AI] bent boomer is bad - Bent Boomer - 91.73k
4NAX - Rocket Ball - 59.21k
AI tank restrictions
Some AI names have some restrictions to the tanks they can use, however. As of now, the restrictions are:
- [AI] bent boomer is bad can ONLY use Bent Boomer. Anything else results in an error.
Max players and bot amount
Max Players simply determines the maximum amount of "human" players. Currently, it does nothing other than error out when you have more "human" players than the limit.
Bot Amount determines the maximum amount of bots that can spawn. Since bots spawn randomly on a random team at a random position, this can be helpful to control program behavior a tiny bit for small programs utilizing few bots. This can be set to zero to have no bots.
Map
Map ID is a 9-digit hexadecimal number in lowercase. Currently, it does nothing.
The map is ASCII art of the 2TDM map in Woomy, with the spawn points for red team players being marked with r and blue team players being b.
Players' exact spawn positions are randomized within the sub-cell, with each cell of the map containing 4 sub-cells horizontally.
Commands
- This section is still a work in progress. It may be changed in the future.
Commands are based on the interactions between entities.
A Pounder killing another entity changes their score by an inputted byte instead of the other entity's score run through some formula.
An M-61 killing another entity prints out the entity's score as a byte modulo 256.
Examples
One Time Cat
Since Tonk programs never halt, this program does not halt as well and will produce unpredictable results after you input your byte. Also, a shape might spawn between any of these tanks, completely ruining the program.
Red Team
Kasane Teto
Player
2/6/3/4/6/8/6/2/0/1
1
Blue Team
[AI] Hatsune Miku
AI
2/6/7/4/6/8/6/2/0/1
1
[AI] Have you considered how many of us you killed
AI
0/0/0/0/0/0/0/0/0/0
2
Leaderboard
Kasane Teto - Annihilator - 65536
[AI] Hatsune Miku - M-61 - 59221
[AI] Have you considered how many of us you killed - Basic - 0
Max Players: 1
Bot Amount: 2
Map ID: 45fc91d
~~~~ ~~~~ .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... ==== ====
~~~~ ~~~~ .... .... .... OOOO .... .... .... OOOO OOOO .... .... .... OOOO .... .... .... ==== ====
~~~~ BBBB .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... RRRR ====
~~~~ .... .... .... .... .... .... .... .... OOOO OOOO .... .... .... .... .... .... .... .... ====
~~~~ .... .... .... OOOO .... .... .... .... .... .... .... .... .... .... OOOO .... .... .... ====
~~~~ .... .... .... .... b... .... .... .... .... .... .... .... .... .... .... .... .... .... ====
BBBB .... .... .... .... .... .... .... .... """" """" .... .... .... .... .... .... .... .... RRRR
~~~~ .... .... .... ..br .... .... OOOO """" """" """" """" OOOO .... .... .... .... .... .... ====
~~~~ .... .... .... .... .... .... """" """" """" """" """" """" .... .... .... .... .... .... ====
~~~~ .... .... OOOO .... .... """" """" """" OOOO .... """" """" """" .... .... OOOO .... .... ====
~~~~ .... .... OOOO .... .... """" """" """" .... OOOO """" """" """" .... .... OOOO .... .... ====
~~~~ .... .... .... .... .... .... """" """" """" """" """" """" .... .... .... .... .... .... ====
~~~~ .... .... .... .... .... .... OOOO """" """" """" """" OOOO .... .... .... .... .... .... ====
BBBB .... .... .... .... .... .... .... .... """" """" .... .... .... .... .... .... .... .... RRRR
~~~~ .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... ====
~~~~ .... .... .... OOOO .... .... .... .... .... .... .... .... .... .... .... .... .... .... ====
~~~~ .... .... .... .... .... .... .... .... OOOO OOOO .... .... .... .... OOOO .... .... .... ====
~~~~ BBBB .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... RRRR ====
~~~~ ~~~~ .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... ==== ====
~~~~ ~~~~ .... .... .... OOOO .... .... .... OOOO OOOO .... .... .... OOOO .... .... .... ==== ====
Implementing
Implementing Tonk would require remaking ALL of Woomy-Arras.io, re-engineering it into a zero-player game, and (even though this is a language specification issue on my end) figuring out what commands to assign to the over 2,000 tanks, around 10-50 minibosses and bosses that can appear in a normal 2TDM game, and all of the polygons that can appear in a 2TDM game.
The only real issue, which is implementing the base, is not as bad since Woomy-Arras.io (specifically, the latest woomy.online version although previous versions are available as well) is open-source and can be found here. However, that means that if you want to do the least amount of work, you'd have to stick with JavaScript. If you want to write an implementation in any other language, you'd have to port around 200,000 lines (around 15,000 for the server + 180,000 for the entity definitions as of the time of writing) to another language. Also, the game is very reliant on JavaScript's dynamic nature and functions such as setTimeout.