I recently (roughly) finished creating a small demo for Godot 4 in order to demonstrate my skills of game development, asset creation in 3D and 2D, and primarily, game and general programming skills via C#.
To demonstate these skills, I created this demo of a fake in-game shop. While it's not connected to any real game functionality, a proper system that could be integrated into a game with scalability was implemented.
|
| Click for full image. |
|
|
|
| Click for full image. |
|
|
The shop system
The way I made the shop scalable was by utilizing two seperate JSON files that are configurable by the developer: one JSON file, "items.json", lists every item in the "game", which includes properties such as its name, a unique ID (duplicate IDs are checked for), the type of item, "points" that can go towards health, magic points, etc, the 3D model associated with it, etc.
The other JSON file lists the data for a given shop, "shop_data.json". Each item is referenced by ID and given an associated price. The price is handled this way so that various shops can have differing prices if the developer desires.
When the demo begins, the "ItemManager" ingests all items in the "items.json" and creates a Godot dictionary from them that is referenced by the "ShopManager", which itself creates a list of items from the "shop_data.json" and then uses that list and the "ItemManager" to pull other information for each item to create listings in the shop.
What I learned
If I had to list everything I learned, it would take paragraphs upon paragraphs, but I think the most important things I learned can be condensed into bullet points.
-
Overall knowledge of how Godot works: I have formerly had experience using Unity engine, so learning how Godot worked was a bit of an obstacle at first, but I was able to pick it up well.
-
Computer programming concepts I learned from when I took Java classes in university transferred over to here as well, primarily concepts of object-oriented programming.
-
3D modeling and asset creation: I had basic Blender experience prior, and my experience is still basic, but I learned about how to create assets and texture them with texture painting, as well as using textures found online.
-
Finishing projects: this project took me a while to finish, but it taught me more about how to see a project through the end, creating a vision and end goal for a project, as well as avoiding scope creep. I'm not sure I would consider this project 100% "finished", but I also think pouring more time than is needed is worse.
|
| Click for full image. |
|
|
What I could have improved
Since this was my first project in Godot, and my skills are still fairly basic, I did not worry much about keeping things absolutely organized and clean, but reviewing these things is important for future projects.
I think I'm still wrapping my head around making objects and functions of projects like these properly modular without unintentionally creating load-bearing classes or objects. If I could redo the code for this project, that would be my first focus.
I would also make my first step creating a proper vision for the project, specifically in its visual design. I ended up wasting some time because I created assets, which I then changed my mind on when I fully realized the style I wanted to go for. I think cementing a solid vision of how the demo should look would have been a vital first step, but I also did not know if I would be able to finish the project since I was learning as I went, so I give myself a bit of leniency in that regard.
Some assets designed for the demo are poorly optimized, with textures being larger than they need to be, having amateur texturing and UV work done as well. I think the assets made are presentable, but I definitely would want to improve the opimization on them, as well as how they actually look.




