My name is Alessandro Bonomo and I started programming this game at the beginning of the quarantine (early January 2020). The game is now free to play on Steam
The work behind the project
As of October 28, 2021, it has been 471 days since Dungeon Island was released on Steam. The game, which was developed during the quarantine period starting from March 2020, has now reached version 1.0.0, marking the completion of this programming project. While the user experience aspect of the game was not given as much attention, the technical side of the project was executed very well, resulting in a valuable exercise for programming skills. Dungeon Island boasts a variety of impressive features, including the procedural generation of worlds that consist of an overworld and caves, recipe spawning, a day-night cycle, and a monster spawn system that depends on light levels. The game also features an inventory system, throwing item system, crafting and furnace crafting systems, palm and bamboo canes cultivation system, player animation system, combat system, health, sleep and hunger, pathfinding system, minimap system, respawn system, lighting system, sound management system, battle system for the final boss, achievement and stats syncing with Steam, dialog box system for interaction with signs, and adaptive tiling system with animated sea and water cave tiles. Overcoming technical challenges such as creating a pathfinding system for monster behavior, implementing a lighting system, and syncing achievements and stats with Steam demonstrate the skill and dedication invested in the development of Dungeon Island.
For example, the inventory system requires careful management of the items' state and location within the game world, as well as the player's inventory. The throwing item system, which takes into account the weight of each item and its damage value, requires complex physics calculations for movement and impact. The crafting and furnace crafting systems require the creation of a recipe database and the ability to combine items in specific ways, while the palm and bamboo canes cultivation system requires the implementation of a growth system that takes into account environmental conditions. The player animation system involves creating a skeletal system for the player character and using it to animate the character's movement and interactions with objects, weapons, and armor. The combat system, which includes entity damage, dodging, and critical hits, must take into account the player's and monster's states, animations, and movement. The health, sleep, and hunger systems require tracking the player's status and taking into account the passage of time within the game world. The pathfinding system must be able to calculate the optimal route for monsters to move through the game world, taking into account obstacles and terrain. The minimap system requires the creation of an efficient map rendering system that updates in real-time, while the respawn system must keep track of the player's state and location after death. The lighting system must be able to create realistic and dynamic lighting effects in the game world, while the sound management system must be able to play and manage a variety of sound effects and music. The battle system for the final boss requires the creation of a unique set of gameplay mechanics and AI behavior, while the achievement and stats syncing with Steam require knowledge of Steam's API and the ability to interact with it programmatically. Finally, the dialog box system for interaction with signs and the adaptive tiling system with animated sea and water cave tiles require a high degree of attention to detail and the ability to create dynamic and visually pleasing effects.
The save and load system of the game world is another significant technical challenge that requires careful management of data and file systems. When the player exits the game or switches between worlds, the game must save the current state of the world to a file. When the player returns to the game, the game must be able to load the saved data and restore the game world to its previous state. This involves managing large amounts of data, including the locations and states of all objects, monsters, and the player character, as well as world-specific data such as the seed for the world's procedural generation. Speaking of procedural generation, the world generation using Perlin noise is another complex system to implement. Perlin noise is a mathematical function that can generate natural-looking random patterns that can be used to create terrain features such as mountains, caves, and bodies of water. However, generating these features requires careful tuning of the noise parameters, as well as the implementation of algorithms for placing objects and monsters within the generated terrain. Overall, the implementation of all these systems in a graphics engine using only primitive functions and without relying on external libraries is a testament to the developer's programming skills and dedication to creating a polished and engaging game experience for the player.
Thanks to everyone in the discord for supporting this work. For me it was very fun and I learned a lot of things