Postmortem


Design

Old

The design is roughly based on a previous game of mine called DonkBass Drifter. In it you also collect items in order and are mostly limited by time. I quite liked how it came out but couldn’t stop thinking about the general concept. The general premise is that you have 2 pairs of items that you need to collect in sequence but could carry both with you at the same time. That meant that you had these combinations to consider:

  • aAbB
  • abAB
  • abBA
  • bBaA
  • baBA
  • baAB

that is 6 options per level, they are not equal in length and some of them are obviously much faster. What i liked about it was the fact that you had to do some fast mental math and then execute it using the tricky controls. The thing that stopped you from taking the shortest path in it were the walls. Another thing i added which attempted to make things more interesting were destructible objects. After you go through an area once - they are no longer there so you need to find alternative routes. The problem with this was that the items were extremely low value compared to delivery rewards, and they were not very noticeable, which made them have no real influence on behaviour.

New

This version was initially considered for a movement game that me and Brin wanted to collaborate on during the winter holidays. The game was supposed to fulfill the Mirrors Edge fantasy of running deliveries in an area that you know by heart while being pursued by the cops. The idea was that the map is small and familiar. However the pursuers already expect you to show up in the places you have just been in, making the optimal strategy to choose paths you have not yet travelled or to go across and not along your previous path as quickly as possible. The randomized pick-up and drop-off spots + random patrols were supposed to add extra variety to where you would go encouraging quick on the spot decision making. That collaboration did not work out because both of us had a lot of stuff to do at the time. (We both later joined the Game A Week course and collaborated on radio bubble for week 2)

Well, the collab didn’t work out but the game idea was still there, unfinished, waiting. Come the first week of the course the theme is 10 seconds so i though huh, funky, and subconsciously remade that thing.

Instead of being pursued by real entities you are pursued by an abstract snake which simply records your past positions and moves there (with a buffer in between). And instead of having pick-up and drop-off points you just have pairs of stars you can collect in any order. In this version you usually have 6 options to consider (any of the 6 stars to start and the 1 of the same color to end). To improve the flow the level no longer resets after all deliveries are done, instead keeping your options alternating between 6 and 1, creating a rhythm between the thinking and execution parts. That plus the player now generates their own obstacles, and as a result they can alter their behaviour to make the obstacles easier at the cost of time. Also snake don’t have collisions.(collisions are an outdated game design concept, also turning a rapidly changing multi segment line into a collision shape would be painful)

Aesthetics

I love shaders, making them, looking at them. Adding more of them to my game is a way to make the development process more fun for myself.

Snake

The snake is simply a red line with rounded caps at each end. One layer of shaders looks at the screen, takes all pixels that are close enough to pure red, and applies diagonal scrolling rainbow stripes. The reason it looks like that is because the stripes are scrolling on top of the screenUV distorted by a perlin noise.

Fun fact: idk why but the bits between the lines didn’t want to connect properly and had wedge shaped holes. When i added some randomness to the positions the snake received from you - they went away. When i removed it - they returned. I didn’t give enough of a shit at the time to properly fix it so the snake just samples your positions with a random offset of max distance of 1 pixel. Not enough to look any different but enough to fix the mystery bug.

Noise

After that comes the noise that closes in around you when you loose hp. Hp is lost when the distance between you and the snake is too small. It starts at 0 damage at the edge and grows to its maximum when the distance is zero. The thing is also time dependent making fast dashes across a viable strategy. The distance is calculated by getting the smallest distance between player and each segment and then choosing the smallest one out of those. God bless Godots lightning fast Geometry functions. Wouldn’t have been able to do this or the NUKEHECK screen cracking effect without it.

Wait that wasn’t aesthetics i was just talking about. Anyway, the noise shader is made this way:

  • take the objects UVs and a perlin noise
  • turn UVs into radial UVs where one axis is distance from centre and the other is the angle
  • apply perlin noise to those UVs, you now have radially stretched rays
  • you can also do something like pow(radialUV.y, number) to make the bottom less or more scrunched up.
  • Stretch the new UVs along the distance to centre axis and scroll them along it by sampling points at UV + vec2(0,1.0)*TIME.
  • lower the perlin noise values you sampled far from centre using something like value - distance to centre * thing - other thing
  • cut off the values that are above or below something to get a sharp edge
  • where they are cut off render a color with alpha of 0
  • where they are not - render white noise

(idk how to make white noise, copied and modified a tutorial online, you basically just take UVs + TIME(if you want it to change over time) and then you repeatedly multiply it by big and non simple numbers and then take mod 1 from the result, after a few repeats of that the patterns in the noise disappear)

Stars

These are from the HyperScript font given to me by folks at strangest.io . I can’t find it anywhere online so idk where they got it. Anyway, it has a huge variety of stars instead of the punctuation symbols, i just tried to find some distinct ones. There’s 5 types of stars simply because colorwrangler was set up for black, white and 6 colors at the time, and the red was already being replaced with the trippy snake color(which is why you never see magenta stars).

Color wrangler

That thing i made a long time ago and have used ever since in numerous projects. I keep forgetting to make a decent tutorial for it, will fix when i have time (which is never lmao)(upd: since writing this i found time, made it easier to use and wrote an explanation of how to do that). Anyway, it has a reference palette and a replacement palette. In this case it turns ff 00 colors into a pleasant grey, an off white and ff 80 00 colors.

Sound

Been a long time since i wanted to try doing something funky with Godots powerful audio effects and buses system. Well now’s the time. There’s 3 buses: distort -> lowpass -> output.

There are 2 music players playing in sync, one enters through distort and follows the chain, the other enters lowpass and follows the chain. Lowpass effect is disabled when alive. The proportion of how loud each of the music players is depends on hp (full hp - clean is loud distort is quiet, you get the idea). The sound effects play directly into output.

The music n sounds are creative commons and allows commercial use. According to their creators the sounds are made by hitting a candle holder with a spoon, and the other 2 are different sawblades vibrating while secured in a vise. I love weird sounds taken out of their context so this is right up my alley.

Conclusion

Loved the project, loved the reception, loved plaing it, loved the development process (though i did have to pull a caffeine fuelled all-nighter at the end, but still). Overall a real joy to make.

Get Snake Acid

Download NowName your own price

Leave a comment

Log in with itch.io to leave a comment.