24_7 Post Mortem
Initial Concepts/Plans
Going into this jam I knew I wanted to do something movement or traversal based.
Originally I had some idea of a delivery game centered around fall damage, where what you were carrying would modulate your fall speed/fall damage. I decided this was a terrible idea.
What i really wanted to do was to remake (demake?) [fr0g] clan official server 24/7 zk map (for stranger) in 2d. I was on the fence about this idea - I was concerned with creating a sufficiently rich 2d space. Someone in Paradise suggested using slopes to add some variety. (I had forgotten about slopes!)
Main Inspirations
I have been watching a lot of rock/mountain climbing documentaries lately, and I have really wanted to make something that captures some of the interesting bits from these documentaries. Climbing is basically trying to not fall so I saw a strong connection with the theme there...
Climbing Tangent:
I am still trying to distill my thoughts about climbing/mountaineering videos. The gist of it is that they are an interesting combination of:
The drama that comes from achievement via technical virtuosity. (On a knife edge, if you will).
AND
The drama (or maybe romance?) of surviving an arduous journey.
(plus being high is sick)
I think, on some level most people would like to get lost in the woods and triumphantly wander back into civilization, and maybe mountaineering touches on that a little bit. (This is how I feel about longer bike rides, and being outside in terrible weather)
Ice Axe Self Arrest Videos:
I have been watching these videos of how to stop yourself from sliding down a mountain with an ice ax. Such a cool action!
1.
2.
Picture of the Eiger North Face Route:
I love the names! I will get into this more a bit later.
Vibes
The feeling of exposure? Vulnerability? That one might experience on a large mountain. An environment rich for gaming. Getting lost and then getting un-lost.
Final Idea:
2d rendition of [fr0g] clan official server 24/7 zk map (for stranger). Make it to the bottom of a big map, while avoiding fall damage. Explore to find the safe(est) route and execute. Eat food and place checkpoints.
Key Points:
Large intricate map
GOAL: This is a critical feature. This is what makes the glorious trainwrecks game good. Exploration is no fun when there is nothing to explore.
RESULT: I feel okay about this. I think for the time allotted I made a map that offers 6 or 7 routes. It feels large but was pretty manageable to make.
Nuanced movement mechanics:
GOAL: A good platformer needs some kind of nuanced movement. The original version has b-hopping and strafe jumping and this weird wall bouncing thing. Some jumps are not possible without taking advantage of these.
RESULT: I ended up with: normal jumping, crouch jumping, crouching to self arrest on steep slopes, and you can infinitely jump if you push against a wall on your right side (unintentional). Fairly binary choices compared to the original, this is something that should be improved.
Harsh environment:
GOAL: Map is constructed as if by nature. Minimal game-ifying, there should be many non viable routes that appear viable. The failure state of the game should not be dying, but soft locking. There is an amazing quote from the comments section of: [fr0g] clan official server 24/7 zk map (for stranger)
There aren't really any author-intended routes all the way through. My process for making the levels was to scatter geometry more or less randomly and then try to traverse it. There are some segments that are a bit more authored than others (the big marble structure in zk_volcano is an obvious one), but none that stretch an entire map. Sometimes when I was going down a map if I thought that an area shouldn't be a dead end I'd add some more stuff to it, but that's about as far as it went.
RESULT: Kind of achieved this, I think this one is hard given the time frame. I added some intentionally unreachable areas, and didn't test that much, which is in the spirit of the original i guess.
North Face of Eiger Map Inspo:
Goal: Different areas should have different “personalities”. Either graphically or in terms of the challenge they present. In theory if someone were to spend a lot of time playing this game, I want them to come up with their own names for each area, without realizing that I wanted them to.
Result: I had grand visions for most sections, and I think I squeezed all I could out of that tileset. Again, given the scope I think this is fine.
Here is what I ended up with, the red circle shows the starting point.
Technical Bits:
Character Controller:
-Slopes are a pain in the ass to deal with. Largely solved the slope issue with a capsule collider for collision, two ray casts down from each foot to check if you are on the ground. (I hate godot’s is_on_floor() function).
One raycast down in the center to get the normal of the slope you are on.
Compare the dot product of the slope normal with the Up Vector against max slope angle to determine if you slide on the slope or not. Horizontal movement should be rotated such that it is perpendicular with the floor normal.
I think there is a probably an elegant way to handle this but my vector math is no bueno.
Tiles:
-I started hand making tiles for different slopes and realized it would take too long.
Solution was 4 tilemaps with different rotations:
-0 rotation, 45 rotation, 70 rotation, -70 rotation.
I had to use the same layering of tilemaps for the entire map, which made things look awkward in a few places. Otherwise this worked fine. I would like more options for angles but this felt like a good compromise of speed and variety.
Color Swapping
I used a color replace shader for the custom player and flag colors. This conflicted with my outline shader. I fixed this by having two character sprites that sit on top of each other. The "lower" sprite uses the outline shader. The "upper" sprite uses the color replace shader. The upper sprite covers the lower one so that only the outline is visible
Fall Damage Calculations
I spend a long time thinking of terrible systems like storing a jump apex height and comparing it with your current height when you land… I ended up just uncapping vertical movement speed.
Pseudo Code: When you land on the ground If speed is above some threshold: health -= (falling speed - threshold) / someMultiplier
Checkpoint self trolling:
The details of how checkpoints/resetting is handled is a little more interesting than I thought
Good:
- When you die your position resets to checkpoint
- When you die your health resets to what it was when you created the checkpoint
Strange
- When you die your current stash of food does not change.
- This allows for interesting things like going into dangerous spots to try and collect food with no risk (as long as you don't use any of it)\
- This also makes it a lot easier to get stuck if the player is not aware of this mechanic.
- A stated goal was that soft locking = good but it still feels wrong.
Big Lessons Learned
The little things matter a lot. The game felt terrible until I added sound and custom player colors. Making the players flag match the players color really tied everything together. I honestly believe a tiny screenshake and little particle effect on hard landings would make the whole thing 10% better.
Further:
I would like to flesh this idea out a lot more. I think adding maybe one additional traversal/movement mechanic would open things up a lot. I have some ideas for a more interesting method of handling checkpoints that might spice things up some as well. Making the map felt very chill and meditative. So I wouldn't mind making a few more.
Most runs seems to be under 5 minutes which is about perfect for a jam game. I think for a larger version something closer to 10 minutes to play through each map would be better. I am not sure if it should be harder or longer (or both!)
Files
[G4B] clan official server 24/7 gk_falling
a 2d rendition of [fr0g] clan official server 24/7 zk map (for stranger)
Status | Released |
Author | MatthewLacker |
Genre | Platformer |
Tags | climbing, falling, gameaweek2022, Pixel Art |
Leave a comment
Log in with itch.io to leave a comment.