GemRun Devlog


    My entry for ludum dare 42 is GemRun, a short game involving bouncy minecarts competing and racing their way to the exit before the bridge collapses underneath them.
    This game was originally intended to be a racing game with a thining road, but due to time constraints I decided to go for a simpler version that focuses on interaction between the racers rather than racing around a track. The course would have points that the road would follow and the width would be dynamically set during the course of the race. Underneath the track was going to be a void similar to rainbow road's, but if you fell off you only had limited chances to respawn. Instead, I made the void into acid to feel more immenent and made the game more arcade-like with a fixed arena.
    The goal in GemRun is to be the last one alive. What makes this difficult is the track slowly gets thinner and the other minecarts that may try to knock you off. Staying alive can be achieved by staying close to the center while avoiding other carts, or actively trying to push others into the acid. The bridge shrinks 100x over a period of 5 minutes. After those 5 minutes the bridge will just stop shrinking, though now I think I should have had it continue until it dissolved completely, since it is possible for multiple carts to just stay in the middle and the game will never end. This (and how when the player dies, the game doesn't end) is why I have the R key restart the game. The game ends when the second to last cart falls into the acid and if the player is the last cart then the player wins, otherwise a bot wins.
    If I had excess time somehow, like if I went for the Jam (which I can't because I'm working Monday), then I wanted to add local multiplayer. I don't think it wouldn't have been all that difficult, mainly the control configuration, character selection, and the victory screen would have to be updated to support this.
    The story is that a mining cave is being flooded by glowing green acid and you have to escape before the bridge dissolves in it. Why there can only be one, though, I don't know. There is a light on the bridge in the shape of an arched doorway that shows that the end is close, even though it never actually gets closer, it's just for effect. The wooden bridge and the surrounding acid dont actually move, I just scroll the uvs, so the bridge is actually quite short. I had to be careful to not show the ends in the camera's view.
    The camera moves around between 4 different positions in order to feel more dynamic. The way this works is the camera determines if all the players are on the right/left sides and if any players are on the right/left sides of the bridge. If all players are on the right or all are on the left then the camera will move to the most dynamic angles on the left and right sides of the road. If there are some players on both sides then the camera zooms out to give a full view. Otherwise, all players are in the middle and the camera zooms in a bit to show them closer. Some of the camera angles will allow a cart to hide off screen, and when the bridge thins then no one can be on the left/right sides and the other angles will not be used, even though this should be the most tense and when more dynamic angles will be cooler.
    There are 7 different gems that can go on your minecart. For bots the gem selection is completely random, so it is likely that multiple carts will have the same gem. The minecarts and each gem model were all modeled by me in Blender, it wasn't difficult to make the gems as I used some default blender add-ons to start the mesh. The gem designs are inspired by real world gems, but I didn't have enough time to make the gems based off of real ones, with accurate colors, models, sizes, or names, so I just gave them different colors and distinct shapes. It was originally intended that each gem had one AI type, but I decided to randomize it instead so multiple ais of the same type could play at the same time (and because it was easier).
    Your choice of gem makes no difference in gameplay, it is only to distinguish the carts. It was intended that different carts would have different stats like speed and handling (maybe based on the gems hardness or weight), but there wasn't time to implement that. Also, the gems aren't enough to distinguish the carts from a distance quickly so I added a short trail to the player cart so you always know which cart you are controlling. Well, as long as you move.
    Each game spawns the player and 5 minecarts with a random gem and a random ai to control it. There are 8 ai types for the minecarts: Center, Follower, Circler, Pusher, Bumper, Jumper, ZigZag, and Away. Center always tries to move toward the center line of the road. Follower picks a random target and follows them to a certain distance until the target dies. Circle picks a random target and tries to move in a circle around them until they collide with a cart and the target is changed to them. If the target is on the right side of the bridge, Circle will move clockwise and if the target is on the left will move counter-clockwise around them. Pusher tries to push carts off by following some steps: 1. pick a random target, 2. move to the center line at targets' vertical position, 3. move toward the target until it dies or we get to the end of the bridge. Bumper tries to bump into a random cart then chooses another target. Jumper picks a random spot on the road and goes to it and occasionally jumps. This is the only ai that can jump. ZigZag goes to the bottom left corner of the road then starts to move in a zig-zag pattern moving right and left to the ends of the road and up and down the road, it takes ~7 moves to reach the top and then they start going back down. Away moves away from the nearest cart if they are too close. Those are the ai types, and hopefully they are dynamic enough to bring out some interesting situations in the game. They do have some problems with how they are currently implemented though, such as how Away is really easy to knock off, how zigzag sometimes falls off by itself, and how pusher and circle like to do a never ending dance in the center that is hard to interrupt. There is also the problem of how difficult it is to push most of the ais off the edge, maybe they should move slower or be less accurate or something. I also could have them switch ai types dynamically, but that might have been too confusing.
    The jumping action was intended to let you squish other carts underneath, which would slow them down or move them unpredictably. But I ran out of time to complete that part of it, so it only moves the cart up and down. This can still be useful, like for getting around other carts or tricking someone into falling off, so I left it in. There are some other unfinished issues with the game like there is no volume controls in the UI, even though the code is ready for it.
    All in all, the game didn't turn out bad, but it feels a little unfinished. I hope you enjoy playing GemRun and have a happy Ludum Dare 42!

Get Gem Run

Leave a comment

Log in with itch.io to leave a comment.