Devlog (What to improve on, and functionality)


Hey all, I hope you enjoyed playing my game! I had a ton of fun while making it (and stress too) so I'll share what I think I could've improved on a bit and also a bit about how I made the game.

----- WHAT I COULD IMPROVE ON -----

TIME

So first of all, the biggest roadblock I had while making my game was time. I overestimated how much I could do within the time limit and ended up having some trouble because of that. My biggest recommendation is to make sure the scope of your game fits the time limit you have. Originally, I planned on making a much bigger map where you could explore buildings and such, but after around 3 days of developing it I found out the hard way that it was NOT gonna happen like that. The first few days I didn't work on it as much as I should have, and by day 3 all I had was a somewhat working flying enemy and no story, no gameplay, and almost no visuals. After that, I put much more time into it to make up for the lack of development that happened in the first few days, and ended up staying up until 3 am multiple days in a row just working on the game. So yeah, make sure you plan out your games and your schedule before you make them.

PLANNING

Secondly, other than time, I had trouble with the game idea itself. I'm not the best at coming up with ideas, so I ended up completely changing the goal of my game a few times. Because of this I wasn't making steady progress, and I would have to sit and think for a while to come up with what else I could even do to make the game more fun. In the end, I think it turned out alright but that's only because I consulted friends, bounced ideas off of them and that really helped me gain more insight on what I should do to make my game more fun and a better experience overall. So I would recommend bouncing ideas off of or having a few friends or family test the game, because it really helps to get a better idea of how people play it and what they think could be better. Also, before starting to program anything, make sure you have a solid game idea and functionality planned out beforehand as it really helps when you have a set goal to work towards.

----- FUNCTIONALITY -----

ENEMIES

Now the fun part; how I made some of the features of the game. I'll go over how the enemies work first. I have an abstract "Enemy" class that all of my enemies and even "The Diseased" NPC run off of. In there I have all of the inner working for sensing where the player is (I used Raycasts and LayerMasks), and running different abstract functions based on a state machine inside of the enemy. For example, when the distance between the player and the enemy is less than its "sense distance", I have it switch from the "Idle" state to "Attack" state, which runs the "Attack" function in the Update loop. Another example, I have a function that runs only once when it gets damaged, which I use on the flying monsters to switch the state to "MoveToPlayer" and on the cannons I have it switch to "Attack". Finally, when you see the flying monsters just wandering around, that is their "Idle" state, in which they pick a random location on the map and move towards it and then change the location if they get too close / 20 seconds elapses. That's pretty much all the enemy AI are doing, they are pretty simple-minded and can really only follow the player, aimlessly wander and shoot.

DIALOGUE

I'll also talk about how my dialogue system works. So for that I have two classes; Response and Conversation. The Conversation class has an array of Response classes that you assign in the editor. It also contains a string Name (very important) and string Content. In the Content area of the class is what is displayed on the bottom as what "The Diseased" is saying. The Name is what is used to locate the next Conversation that is needed, and I'll talk more about that in a second. So back to the Response class. Each response correlates to one of the speech options you have in the game, for example "Who are you?" or "What is essence?". When switching to a new conversation, I simply instantiate button prefabs and change the text to match it's related Response class's content. To find which conversation is needed next, inside of each Response class is a "Next Conversation" string, which stores the name of the next conversation it needs to switch to (that's why I said it was important before). Then when you click on a response, it loops through every conversation in the component and if the "Next Conversation" name of that response and the Conversation name in the loop match, it switches to that conversation.

ROCKET UPGRADE

This is probably one of the simplest systems I made for the game, all I did for this was have an int named "currentUpgrade", and then when you upgrade the rocket that increases by one. When it increases, it just instantiates a prefab for each stage of the rocket.

SHOOTING

For the shooting in my game, I have ScriptableObjects for each gun type. I have one for the guardian cannons, the smaller cannons, the flying monsters and the player, and each one has slightly different values. I store the fire speed, shot damage, shot cost (in Essence), and a few other things that never ended up getting used sadly, like the descriptions of what each gun is. The bullets that get shot out of the gun are really simple; they check using Physics.OverlapSphere to see if there is an enemy/player (depending on who shot) within it's range and if there is, it sticks to it (it changes it's parent object to whatever it hits) and takes away however much damage the gun does. To make them move, I am simply increasing their transform.position.y by a certain amount per frame (and compensating for frame rate differences) and then stopping that when it hits something.

VISUALS

For the visuals I am using Unity's HDRP (High Definition Render Pipeline), and their Physically Based Sky to make a realistic planet skybox, fog and lighting realtime. For all of the textures in my game, I downloaded free textures off of my favorite texture website (textures.com), and then scaled them down to be 128x128 pixels. That's what gave them that pixelated look. For the 3D models, I made all of them myself in Blender, blocked them out into rough shapes, subdivided them, and then used the sculpting tool to shape them more how I wanted.

MUSIC & SFX

I made all of the music myself using FLStudio. When making each track, I tried to use similar melodies so that all of the tracks sounded like they were related. For the sound effects, I would either search online at freesound.org (I only used Creative Commons 0 licensed sounds) or I would use the Soundly desktop app to get sounds and combine multiple together to get what I wanted. For example, the player gun shooting sound is (if I remember correctly) a combination of a kick drum, a steam hissing noise, some mechanical noise I found, and a few other things.


That's pretty much the gist of my game. Thanks for reading!

Files

CrashLanding.zip 43 MB
Jan 16, 2022

Get Crash Landing

Leave a comment

Log in with itch.io to leave a comment.