Snakey Monster - Research

This page covers some of the work I did that Aylina copied that goes beyond code, such as ideas and algorithms. And, things that she did not copy... because I did not give it to her.

Aylina is like a master forger of artwork. She can copy things quite well, but has severe problems coming up with her own original work (her paper.io game in slither.io is the one exception, although even that borrows a lot of my work).

A big part of the smear campaign against me was lies, mostly by Aylina and Eiriker.

Concept: Inedible Food

Until I created my server, food in slither.io came in many sizes and colors, but it was all otherwise the same. A piece of food had 3 attributes: size, color, and location.

From before I let anyone else use my server, I added flags to food, including an "inedible" flag to designate food that would appear on the screen that snakes could see, but not eat. I originally used this for a "Hello" message, and then as a staple in many unique worlds I created.

I also added a flag for deadly food (e.g. in the maze world, that causes you to die if you hit it), a flag for food that never despawns.

Aylina sent me some code she used for her copy of my battledome. It is a perfect example of her "unique" work: where I had a flag "FOODFLAG_EDIBLE", she had a flag "FOOD_INEDIBLE". This is a common theme: she thinks that if she makes a few changes like that, even if the code compiles exactly the same way as mine, it is code that she "wrote from scratch."

Concept: Sending a Different Leaderboard/Map to NTL's Bots

The official slither.io servers do not appear to handle NTL's bots differently than other snakes.

After NTL automatically added my server to their leaderboards, I realized that it would be useful to send a different leaderboard to the NTL bots for displaying in their leaderboards. Specifically, I sent "www.snakey.monster" and "unofficial/beta" to make it clear that these were not official slither.io servers.

For the battledome, I sent NTL a #1 player of "BATTLE DOME!" with a score of 50,000. Aylina's knock-off of my battledome sent NTL a #1 player of "BATTLE DOME NEW YORK" with a score of 50,000. Here, she did not display her "unique" work and change the score to 60,000. But, there's a good reason: she wanted to trick people into thinking it was mine (she put it online before making any public announcements).


(Aylina's knock-off on the left, mine on the right)

Concept: Score Table

slither.io uses a complex formula to determine a snake's score, based on the snake's "sct" value (how many body parts it has) and "fam" value (how close it is to having a new one, from 0 to 1, or 0 to 16,777,215 when transmitted to the client).

The official servers have no need to convert a score back into sct and fam.

However, the worlds I created often will display a score on the leaderboard that is different from the actual score of the snake (e.g. rank for the battledome). Rather than spend time coming up with a formula to determine sct and fam from the target score, I came up with an algorithm to generate a score lookup table:

  • Loop through from the lowest value in the table to the highest, and for each:
  • Start from the lowest possible sct value, and increment by 1 until the target score is reached or exceeded. Use that as the sct value.
  • Start from a fam of 0, increment by 50/16777216, until the target score is reached or exceeded. Use that as the fam value.
The code I sent Aylina included a line "tempfam+=0.0000029802322387695" (she likely had no idea, but that number is 50/16777216). Aylina sent me her code for this calculation. Hers has a line "fFood += 0.000003;". Again, a prime example of her "unique" work: she took my number and rounded it so she could claim it as "hers".

I asked her about it, and being a very quick liar, she said she had tried 0.000002 and that it didn't work, she tried 0.0000025 and it still didn't work, but 0.000003 did. For months, I believed her. But then a few days ago, I tested it out. Using a value as high as 0.01 will produce the same results. So 0.000002 and 0.0000025 would have worked just fine. She wanted to quickly make me think that it was her own work, so she lied.

Algorithm: Challenge and Response

The official servers send a 162-byte encoded JavaScript challenge that the client needs to decode and run in order to generate a 24-byte response. The challenge contains a random 24-character string when properly decoded. In theory, it should never be the same twice.

The very first version of my server, before others used it, I had a much simpler algorithm. I took the challenge an official server sent about 2 years ago, and the response the client sent, and used those. So rather than all clients getting a unique challenge, they all got the exact same one, and I used a hard-coded response rather than a dynamically generated one store per snake. It was a quick and simple way to get started.

The source code I gave Aylina did this, as well. And guess what? Her server used the exact same algorithm as me: not only did it just send a single challenge to all clients, it used the exact same challenge that I did.

She probably assumed that the offical servers always sent the same challenge, and that if she changed it, it would break something... so she didn't change it. But, that is further proof that she was simply copying my work.

Not Copied: Limiting Food Density

The official servers limit the "density" of food. The best example is that if a snake dies in a curled-up ball, it generates less food than if it is stretched out.

The source code I sent Aylina did not yet include limiting food density. And Aylina's server did not include that, either.

So did she really do all the research herself, see that the official servers limited food density, but choose not to add it? Or did she not add it because she didn't know about it and I didn't give her the source code?

Not Copied: IP:80/ptc

The official servers listen on TCP port 80, and respond to a WebSocket query of "/ptc" with ping responses. This is how the dropdown box shows you the ping time, and how the official client determines which server to connect you to.

When Numerous asked me to give Aylina the code, I had not yet implemented this (I later did).

Aylina's server also did not implement the IP:80/ptc pings.

Again, did she really do all the research herself, see that the official servers do this, but choose not to add it? Or did she not add it because she didn't know about it and I didn't give her the source code?

Algorithm: Target Number of Bots

The official servers have "server bots" on them: snakes controlled by the server. If you've ever been in an empty world, you've seen them wiggling around.

The official servers have a target number of bots to have.

The source code that I gave to Aylina had a very simple algorithm for the target number of bots: each world has its own target, but the target does not change (e.g. one world might have 300 server bots, and another might have 3,000).

Aylina's server handled this using the exact same algorithm: with hers, each world could have a different number of target bots, but the target does not change.

[Since I gave Aylina the code, I updated mine to use an algorithm much closer to the official servers]

Algorithm: Snake IDs

Each snake in slither.io is assigned an ID, that can be anywhere from 0 to 65,535.

The source code I gave to Aylina used a basic algorithm to assign the snake ID: the world had a current id starting at 0. When a new snake arrived, it would use that value if no other snake was (and if another snake was using it, the next free ID was used).

Aylina's server assigned snake IDs using the exact same algorithm that I had used.

The official servers actually appear to assign the IDs randomly (I have since upgraded my code to do this as well).

Bot Names

I used a number of methods to collect the names of server bots on the official servers. I recorded the data from many games on bot servers and recorded many NTL leaderboards.

I wanted to include as many bot names as possible, while not including any non-bots. This isn't as easy as it sounds. If you go to an "empty" server that is just bots, how do you know if a snake "johnny" is a server bot or live player?

To determine this, I first ruled out any snakes with skins other than 0-8, as I had determined that server bots only used those skins. Next, I had to look at a combination of how frequently the names occurred, and whether they occurred on most servers or not.

Before I had opened my servers to others, I came up with a list of 596 bot names. I included these in a supplement file that I gave Aylina along with the source code.

Guess what? Using her unique "I did it all from scratch! Nothing in there is from you!" style, her server would send those 596 names for server bots... every single one from that file, and none that were not in that file.

A smart person may read this and assume that both Aylina and I found a way of getting all the official server bot names. But no. I did more research, looking at over 1,000,000 snake names, and found that I had missed about 20. Statistically, it is impossible for Aylina to have gotten her list of official server bot snake names anywhere but from me.

Yes, it seems silly to talk about: the slither.io developer came up with all the names. I don't take credit for that! This is simply proof that Aylina copied the work that I had done, which she always tries to deny.

Not Copied: Prey

One of my major "to-do's" was to add prey (the "orbs" of food that move away from you as you approach them).

I had not coded this... and Aylina's servers did not have them either. Months later, she did add them... but long after she claimed that she used no work of mine.

So if she really did all the research and coding herself, why didn't her original version have this (or the other things that she did not have source code for)?

Not Copied: Straightlining

The official servers will "straightline" people who kiosk for about 30 minutes. They will be unable to change the angle of their snake for about 5 or 10 seconds.

I had not coded this... and Aylina's servers did not have them either.

So if she really did all the research and coding herself, why didn't her original version have this (or the other things that she did not have source code for)?

Not Copied: 'origin' HTTP header check

Web browsers send an "origin:" HTTP header that lets the server know what website the user came from. This is useful in detecting, for example, images that other websites link directly to without permission. The official servers check the websocket connection to make sure that the connection came from http://slither.io.

I had not coded this... and Aylina's servers did not have them either.

So if she really did all the research and coding herself, why didn't her original version have this (or the other things that she did not have source code for)?

Algorithm: Map Encoding

The official servers send a minimap, and encode the data using a unique algorithm. The algorithm was documented by the ClitherProject.

An algorithm was given for decoding the minimap (which the client does), but not encoding it (which the server does). So I had to come up with my own method of encoding the map in a way that would still follow the protocol.

Without access to Aylina's source code, there is no way to know whether she cut-and-paste my map code or re-wrote it. But she did use my code.

There was a flaw in my methodology that caused the map packets to work, but be bigger than they needed to be. Specifically, I ended up sending certain "useless" bytes (e.g. 0x81 and 0x82). The official servers never send these... yet Aylina's does, and therefore has the exact same flaw as mine.

Concept: One-Way Barrier

When I came up with the original idea for the battledome, I came up with the idea of having a line that you could cross one way (to enter the battledome), but would die if you tried crossing the other way. That was necessary to prevent bots from spawning inside the battledome close to players.

Aylina copied that concept when she created her knock-off battledome.

Concept: NTL Bots Invisible

As far as I can tell, NTL bots are treated the same as other snakes on the official servers.

When I created unique worlds, having NTL bots visible was undesirable (e.g. in mazes or the battledome). So I came up with the idea of "hiding" them (either placing them on an unused section of the map, or making them invisible to other snakes).

When Aylina copied my battledome, she of course did this as well.

Concept: Messages in Leaderboard

The official slither.io server just use the leaderboard to show the top 10 snake names and scores.

When I first created the battledome, I came up with the idea of having a message in the leaderboard, explaining how the dome worked (e.g. "Game starts when others join").

Aylina uses this concept I created in her one unique world ("Paper Slither"), where it tells you your team name, and the game status ("Waiting for players...").

Concept: No Naturally Spawning Food

The official servers spawn food around snakes that have not yet reached a certain size.

At some point, I decided that was undesirable for one of my unique worlds, so I created a flag for worlds so that they would not spawn food around a snake.

Aylina uses this concept that I created in her Paper Slither world.

Concept: Maximum Score

The official slither.io server effectively has an unlimited high score... there is a limit, but I've never seen it reached even in custom worlds.

At some point while programming the server, I decided to implement a maximum score... once reached, you cannot go past it. This is used, for example, in the maze and battledome worlds.

Aylina uses this concept in her copy of my battledome.

Concept: Free Boosting

On the official slither.io servers, snakes can only boost if they have a minimum score, and always lose mass when boosting.

When creating custom worlds, I decided to implement "free boosting", let you boost all the time. This was very useful for the maze world, where it would be very tedious to go through at the normal speed all the time. I also used this in the battledome.

Aylina uses this concept in her copy of my battledome.

Concept: Server Bots Following Player

On the official slither.io servers, server bots just move on their own and avoid nearby snakes.

On one of my earliest servers, I had server bots follow a specific player.

Although I did not in any way "create" this concept (botstormers have been around for a long time, using outside bots to do this), Aylina cannot in any way claim that she created this concept either.