Hi all,
This will be my first indie game dev log. It would be nice to put down all my notes and thoughts while working on these projects and all the things I have learned. Essentially, this is mostly for myself, to remind me of what I have learned and the thoughts and designs I might come up with.
To start, for the past 3-4 weeks I have been learning the Godot 4.2 game engine with the help of GameDev.tv. I’ve been making multiple small projects to get used to the interface and controls, understand how the engine works, and become familiar with the workflow. This is still an ongoing process as I try out projects in different genres. Now I’m here writing my first dev log post about Machine World Salvage, a project that I plan on developing further.
GameDev.tv
The tutorial that I was watching from GamDev.tv was “Complete Godot 3D: Code your Own 3D Games In Godot 4!” By Bramwell Williams. Went through the course and specifically the last section ‘Robo Rampage’ is the basis of the Machine World Salvage project. Robo Rampage is a simple 3D-level shooter game that is more similar to the classic Doom style. Once I finished the tutorial I started tinkering around and wanted to continue with the project.
Initial Game Design Choices
From the start I didn't just want to refine it, I also wanted to add more mechanics and put my spin on it. Starting with the plan to follow a similar gameplay style to “Vampire Survivors”. Thinking about creating time-constrained individual playthroughs of 30 minutes and implementing a leveling system that will prop up some random weapon choices, having a rouge-like system. Focusing on replayability for the project. Another design implementation is the classic wave spawn system which I have closely based on the “Call of Duty: Black Ops” Zombies game mode. The reason I chose a wave spawn system is that I thought it would fit more into the style of a 3D shooter instead of the constant mob spawn from “Vampire Survivors”. Due to the wave spawn system, I would not implement an instant death mechanic like “Vampire Survivours” once you reach 30 minutes. For the 30-minute marker, I will implement an enemy boss-like character. However, the design for the enemy boss would have to wait for a long while as I would like to base it on the state of the gameplay and environmental level design.
Wave Spawn System
As mentioned before the wave spawn system would be Similar to “COD: Black Ops Zombies”. I have created 2 scripts where one being the SpawnSystem and the other being the AISystem(I Sort of wished I named it AIManager first). As the names suggest the SpawnSystem handles all the spawning stuff such as the spawn_time_rate which is 3 seconds, wave tracker, and getting all the available spawn positions. While communicating with the AISystem which tracks and manages all enemies. From seeing how many have spawned, limiting active spawned enemies, how many are left, and increasing difficulty rating. The current state of the mechanics is a good foundational start as in the future all I need is to tweak the current functions a bit to slowly increase difficulty, and spawn different challenging enemies or bosses.
Level Design
I already thought out a theme for the entire game of being a low-level corporate worker tasked with salvaging an abandoned machine world. Inspired by “The Outer Worlds”, “Borderlands” and “Portal”. “Portal” is in there because of Glados. Glados and Claptrap because I wish there was a corporate managing AI in the game just to annoy the player character with its remarks. Of course, it is a low priority and something that can be added at the end.

With that theme in mind, the first-level design is centered around the first mission given to the player character of scouting an area to establish a ground-forward base of operations. Which is an underground ruined hanger that also looks like an evacuation shelter for possibly the original inhabitants before it turns into a machine world (“Stellaris nightmare”). A simple design with 3 main areas, allowing the player to be able to kite around
Audio Manager
It took a long time to sort and organize all the audio files I have brought over the years and even longer to select which audio to use first. Selected a few that could be great placeholders for the prototype which created a bit of a “Doom” play feel for me. Definitely would need more fine-tuning and tweaking around to create the right atmosphere and nothing immersion-breaking. But all of that would be low priority and be part of the quality of life update.

A new thing I learned is how to use Godots default bus layout system when I was searching for an audio slider control tutorial. https://www.youtube.com/watch?v=aFkRmtGiZCw This tutorial was very clear and direct with the information it provided. As well as with a bit of look around with the system and look around in Godots documentation I was surprised at how simple the system is. Even before using Godot, I didn’t have much experience with utilizing a master audio bus control with Unity or Unreal Engine.
3D Assets Work Flow
Filling the level with some objects. Had some polygon assets brought from Synty Studio and this would be my first time trying to move multiple art assets to Godot. After some research, looking around, and trial and error. Godot works best with GLTF file formats compared to FBX. First had to port the original assets to Blender. Had to use Distribute Objects add-on to help automate placing numerous objects into a grid so that I could have a good closer look at each object.

A tedious part of all this is when importing to Godot. With all the duplicated Texture it starts becoming a problem with the amount and future. For the current 4.2 version, there's not much help to automate the process of selecting a texture to use. After turning the import with textures off. For each object, I have to reimport with the right external path selection for materials to point at the texture material that was prepared beforehand. A very long and monotone process that takes up too much time. Next time to lessen the amount of objects that need to be imported and used, I would be doing most of the level designing in Blender itself, grouping up objects in their area and with others, especially with the small decors to save the amount of time needed to import objects and retexturing everything. Hopefully improving the workflow between Blender and Godot.
Another consideration with assets is importing them as OBJ files for certain dynamic objects that just need meshes compared to how Godot imports as a whole Node3D scene. Texture wise the objects themselves can be freely manipulated with the material shaders.
Conclusion
Overall I have reached my goal of completing a foundation and game loop for the project and uploaded it to https://amateurll.itch.io/machine-world-salvage. The next steps for the project will be to implement the core game mechanic of the leveling system and the rouge-like weapons. The first step will be to revamp the current weapon system, the second weapon loadout would be a pistol with infinite ammo. While the primary weapon would be an automatic rifle weapon. The rouge-like system would be modifying the primary weapon from different kinds of ammunition, firing speed, spread, and other modifications to consider. Another checklist is creating a player and enemy model. The player model would be in a battle/work suit and the enemy model would be a simple droid based on the Star Wars battle droids.
Those will be the goal for the next 0.2 update. There will be a pause for a week as I will focus on this dev log and learning another course on GameDev.tv