Desert Technician Breakdown
7DFPS is a pretty flexible jam with no set theme. Knowledge of this along with my own enthusiasm led me to coming up with an idea for the game before the start date. This may or may not have been a good idea.
My original concept would have you arriving via a train and unlocking a motorcycle, driving around a large desert to different jungle-gym-esqe radio towers, climbing those towers, and repairing them, all while engaging with different enemies. The resulting game has you walking around a small desert area repairing fuse boxes, no climbing, no motorcycle. So... slightly smaller ¯\_(ツ)_/¯
LEVEL DESIGN
The first big difficulty I found was wrangling with Unity's Terrain system. My original idea required large sweeping dunes to drive around on and I had difficulty achieving that. I'm sure its possible, but progress only rapidly sped up after I threw the idea out.
I started the level design process by sketching out the level in blender. My goal with the level design was to create a space that wasn't huge, but had enough space to engage enemies in while also having enough interesting features to pose small navigation puzzles when trying to travel from one broken fuse to the next. (should I go straight to the objective and face the enemies or take the bridge overhead that's clear? Should I jump this gap or take the long way and climb the stairs?)
Once I had something I was happy with I brought that into unity and used it as a guide, using a combination of the terrain system and probuilder to build out my level. I also used a set of free rock assets from the unity asset store.
From my work on prior game jams I decided to make all of the art in my game pixelated and grainy. This allows for a cohesive art style even when using assets from different sources. For instance, the sand texture was created from scratch in aseprite, but my rust texture was taken from a photo sample and the rocks from the asset store came with their own texture. By down sampling and simplifying the rust and rock textures they artistically matched the sand and I wasted no time creating textures by hand.
ENEMIES
The enemies in the game are bugs/wildlife native to the desert. There were 3 main enemies created with one being cut.
A basic, relevantly non-aggressive centipede that shrinks as he
takes damage. They are meant to be basic fodder and are
debatable the cutest. Inspired in some part by the multi teir robots from neir automata
An aggressive "crab" type bug that lunges at you, and squeals as they do so.
And an eyeball on a stalk that shoots at you. They only spawn later in the game to help put extra pressure on the player. That said, they don't move, so once you've identified where one is shooting from, you don't have to worry about it repositioning.
The cut enemy was a "macho" mantis (a… man-tis) that would jump in the air and slam on the ground, causing area of effect damage/knock-back. He didn't make it in because I ran short on time, but I loved his concept so I wanted to make sure to mention him <3
As I wasn't able to add the mantis, I created an additional "larger crab" enemy which was the same as the smaller crab... only larger 😎
For enemy art i created 2d sprites of each enemy. I've found this to be a fast and effective way to make characters for game jams, and it hearkens back to early fps like doom or duke nukem. This also meshed nicely with the "low res" "pixelated" aesthetic I had going with the environments.
Weapons
The weapons are interesting because I started work on them before I had decided to change the scope of the project, and so some of the original design of the game shows up in them. In particular, the charge pistol.
In the final game the charge pistol serves the purpose of being the backup/sharpshooter weapon for use when other ammo runs dry.
In the concept, you'd be climbing towers and I wanted to give players tools to help with these platforming sections. As such, the charge pistol has quite a bit of knock-back and can be used to double jump if aimed at the ground. In the final game this can be used to climb up platforms and navigate the map quickly, but its not required and I don't actually explain how it works. That said, I feel the knock-back effect (along with it being the only weapon that has to be "charged") does help sell it as a utility weapon, not as a pure damage output weapon.
The other two main weapons were a shotgun and a projectile assault rifle/missile launcher thing.
The shotgun is meant to be quick and easy to use, with the side effect of needing to be close to an enemy to be able to get the most damage out of it. So pretty much every shotgun you've ever seen in a video game.
The missile gun on the other hand is meant to be somewhat rarer and have a higher damage output. Its a rapid fire projectile weapon, allowing for high dps and ranged damage, but requires some skill to land shots.
Weapon ammo is dropped by enemies upon death, with different enemies having different drop rates.
SYSTEMS
The scenario of the game is you are a Technician who has to keep all the fuse boxes functioning within a day.
At the start of the game one fuse box on the map will fail and you have to use a repair tool (looks and sounds like a hammer) to fix it. after you fix it another one will break. the goal is to fix as many as possible within 300 seconds. enemies will spawn within this time and attempt to attack you.
I'm pretty happy with what I came up for the enemy spawn system. That said its not perfect.
Enemies spawn at random positions at rates according to an animation curve. Each enemy has a set cost and a budget curve is used to balance how many enemies can be in-map at any one time. The budget goes up over time but has some variance to allow for periods of more enemies/fewer enemies. As I said before, its not perfect, and if you understand how it works it can be easily manipulated. The spawn system wont spawn new enemies if the total spawned enemy cost is higher than the currently allotted budget. What does this mean? If you don't kill any enemies, it wont spawn any new ones (until the budget goes up). This along with the fact that you only get 1 point for killing any enemy (vs 10 for fixing a fuse box) means that avoiding enemies is a valid strategy.
Now, on the topic of spawning enemies, actually getting enemies to spawn was a bit of a pain. in particular, getting enemies to use the unity's navigation system after spawning was a pain.
A set of cubes in the air are used to define the valid positions that enemies could be spawned from. At first, I spawned enemies in these cubes and had them fall to the ground. BUT UNITY DIDN'T LIKE THAT. Spawning them that far away from the nav mesh caused the nav agent to throw its hands up and give up. Sooo.... the point within the cubes was then raycast downward to get a point directly on the ground. This time, unity was pleased. Now everything works, but I’m honestly so disappointed that it never occurred to me to also spawn a dust particle effect at the same time, to make it appear as if the bug was jumping out from underneath the sand. My regret for omitting this will be with me till the grave.
RECEPTION / LESSONS LEARNED
Unlike most of the projects I've worked on, I actually
finished a few people actually played this one! So I got to
hear some feedback.
- The biggest issue I noticed was people not realizing which fuse box was broken at the start. This was really disappointing, in part because I had considered adding a small picture of what a broken fuse box looked like on the start up screen but didn't end up doing it. The broken fuse box plays directional music and gives off bright sparks and I was counting on that being enough to guide players. Another thing I could have done was make the first broken fuse box always be in front of you at the start of the game, instead of having it randomly assigned. (and possibly far away from you)
- I did get some complaints from players who felt that it would be preferable to have multiple sprites for each enemy's various rotations instead of just the one. But I... really just didn't feel like doing that!Although I do understand the complaint. From my perspective, it would have taken more time to implement and the simple flat enemies did a good job at displaying their rotation.
- The charge pistol could have used more explanation. I described the charge pistol on the start up screen but that doesn't seem to have communicated all that well. It does more damage the longer you hold it, and can be used to move quickly around the map. I was hoping players discovered this on their own but, eh, that means most of them don't discover it.
- Players just pretty much ignored all of the UI. It wasn't obvious when they got score and the timer snuck up on them. The main way to fix these issues would be to add a whole bunch of juice/sound effects regarding the UI. Make the timer pulse and tick as it became later in the day, pulse the score counter when you got points. Stuff like that.
- There is an upper limit to the high score you can achieve, and its largely dependent on RNG. I set the timer for the game for 5 minutes because I figured it would be annoying to play for more than 5 minutes. That puts a limit on your score, but the order in which the fuses breaks also limits your score. If two fuses right next to each other go out one after another, you'll be able get a higher score than if two fuses far apart go out. This isn't really a major issue, but it is something to take note of if I want to make something more focused on, "getting the highest score possible" in the future.
Anyway, its been awhile since I released this game, but I wanted
to go ahead and release a post-mortem. If for no other reason, than
to just know that I can. And isn't that the spirit of a game jam? To
do so, just because we can? Anyway, have a nice day.
Leave a comment
Log in with itch.io to leave a comment.