GO BACK

About

Iron Diver began as a 2 month development sprint last May, built in C++ using the SFML framework. It was a challenging yet rewarding experience, where I led the team as both Developer and Project Manager. My role involved overseeing development, integrating features, and ensuring smooth collaboration. Our team worked tirelessly to refine mechanics and optimize performance, resulting in a polished final product

Project Info

  •  Role   :  Gameplay Programmer |Project Manager

  • Team Size   :  5  Programmers  | 5 Artists.>>>>>>...

  • Time Frame  :  8 Weeks

  • Engine  :   SFML | Using C++

Introduction

Iron Diver was a pivotal project in both my personal and professional development. As the team leader, I gained invaluable insights into team dynamics and leadership, while as a developer, I pushed my skills in unexpected ways. Each team member's dedication and our methodical approach to every phase of the development process were key in transforming a modest concept into a standout success, earning us the highest grade in our cohort. But the true achievement wasn’t the grade itself, it was our focus on quality over quantity

Initially, our vision encompassed two fully developed biomes. However, halfway through the process, we recognized that prioritizing quantity could compromise the game's quality. As a result, we made the strategic decision to concentrate our efforts on perfecting just one biome. This pivot proved to be one of our best decisions, significantly enhancing the final outcome of the game

I worked on :

One of my biggest personal challenges during Iron Diver was tackling map management. My goal was to allow external resources to edit the map without delving into the code itself. To achieve this, I integrated Tiled into the project and utilized the Tileson library for smooth implementation.Although unfamiliar at first, working with Tileson pushed me to read and adapt code with minimal documentation. I even modified parts of the library to suit our needs, which allowed the team to:

- Add entire map projects instead of individual maps
- Combine multiple tilesets in the same or different maps
- Incorporate objects and props with specific parametersHandle multiple layers of tiles for scene rendering
- Optimize tile rendering for maps with over 15,000 tiles

Tileson Reference

This approach streamlined the workflow for the team, giving them the flexibility to work on their own scenes and add them to the main scene with ease, without the usual manual asset creation process. While it was a useful feature at the time, looking back, it was more elaborate than necessary. Nonetheless, it provided a deep dive into managing maps and working with external tools, which significantly enhanced my problem-solving and coding capabilities

Github - Source Code
Example of editing with Tileson linked through code




Additionally, I explored shader development to enhance the game's visuals, though these features were ultimately not implemented, as they would have required a complete overhaul of the game's graphics pipeline, too risky with just one week left before the deadline

The shaders I worked on included:

-
Lighting effects for props to add depth and atmosphere
-
Dynamic player lighting to darken the surroundings and create a natural mining light effect, making the player stand out

Even though these shaders didn’t make it into the final build, I found the process incredibly rewarding. It challenged me to dive into color equations and blending techniques, using Photoshop’s color blending formulas and interpolation methods to create smooth and natural lighting effects. Experimenting with these visual enhancements was both a technical challenge and a creative thrill!

Light Shader - Source Code

What I learned

Iron Diver provided numerous learning opportunities that deepened my technical and organizational skills. One of the key lessons was in map management and integrating external tools like Tiled and the Tileson library. Although initially challenging, this process taught me how to adapt and extend existing code with minimal documentation, as well as how to create more flexible workflows for the team. In the end, this enhanced my problem-solving abilities and gave me practical experience working with external resources

I also honed my ability to manage game logic in a modular and maintainable way. By simplifying complex systems and breaking them down into smaller, more manageable components, I was able to make the codebase more intuitive and easier to iterate on. This reinforced the importance of writing clear, well-structured code to avoid issues during future updates or debugging

Additionally, I learned valuable lessons about working with large-scale projects and the importance of prioritizing quality over quantity. While we initially aimed for multiple biomes, narrowing our focus allowed us to perfect one biome and deliver a more polished experience. This taught me the importance of adapting plans and making strategic decisions for the greater success of the project

Most notably, I learned to balance flexibility with practicality in my coding approach. I previously focused on creating overly abstract, flexible systems in anticipation of future features, but through this project, I realized the value of coding only what is necessary and refactoring as required. This shift made my workflow more efficient and enjoyable, helping me keep the project manageable while focusing on delivering a polished final product

Offical School Project Showcase