Less than 3 min Showcase
ÅR
2022
GENRE
Adventure
PLATTFORM
PC
UI/UX and Gameplay Programmer
Description
This was the last project of the first year at The Game Assembly, it was an 8-week, 50% long project and the reference game was "Adventure".
My Main focus on this project was the state stack system and using it for my UI.
We had a "unique" approach this time by not having a main menu and instead letting the player start out in a hub in the world, and through the NPCs access the Menu.
Keep reading if you wanna know more about my specific tasks on this project.
Quest system
![](https://static.wixstatic.com/media/c5350e_591f0ae357ae40028fc1b44123b311cff000.jpg/v1/fill/w_471,h_265,al_c,q_80,usm_0.66_1.00_0.01,enc_auto/c5350e_591f0ae357ae40028fc1b44123b311cff000.jpg)
Most of the time on this Project I spent on building a Quest and dialog system, the game has over 25 NPCs in it with different dialogs some to drive a questline forward, others just random dialog to bring life to the world. This was a lot of fun and a bit of a challenge. I ended up with an approach that would be best described as a Decision tree dialog system where we trigger different dialogs based on where we are in the questline and what level we are at.
Ingame Menus
We decided to go with a little different approach when it came to how the player interacts with the in-game menus with this game, so instead of having a main menu, we decided to have different "menu NPCs" in the game to trigger for example settings or level select.
the challenging part here was how to have the Engine present this to the player. the solution I went with was a state stack system, where u can add and remove different "layers" that should be rendered.
![](https://static.wixstatic.com/media/c5350e_b9513880a547478eaee20a0e761415a7~mv2.png/v1/fill/w_443,h_263,al_c,q_85,usm_0.66_1.00_0.01,enc_auto/c5350e_b9513880a547478eaee20a0e761415a7~mv2.png)
Ingame HuD
![](https://static.wixstatic.com/media/c5350e_801290906ec94e6f9aa14f46fcd1798e~mv2.png/v1/fill/w_468,h_263,al_c,q_85,usm_0.66_1.00_0.01,enc_auto/c5350e_801290906ec94e6f9aa14f46fcd1798e~mv2.png)
We wanted to have a questline, and also an "inventory" for quest items. Together with a "Level system" where u grow stronger when completing a quest.
at the same time we wanted to present the player with feedback when it was possible to interact with an NPC, I think we made it work really well and also managed to make the Interact feedback change based on what input you used (On the image you play with a keyboard)
​
Postmaster system
A colleague on this project named Joakim added an ECS to the engine, which was awesome, but we were all kinda new to working with Entities, components, and systems. one issue we stumbled across kinda early was a way to have all systems able to interact with each other. That was when I implemented a Postmaster where each Entity or system could Subscribe to information they wanted, and then the Postmaster made sure everyone got what they wanted
![](https://static.wixstatic.com/media/c5350e_6be072d8ba0841308e760dab393cb65a~mv2.png/v1/fill/w_443,h_263,al_c,q_85,usm_0.66_1.00_0.01,enc_auto/c5350e_6be072d8ba0841308e760dab393cb65a~mv2.png)
Input Mapper
![](https://static.wixstatic.com/media/c5350e_855e103785d64064bb5074c6d18a2c5c~mv2.png/v1/fill/w_443,h_263,al_c,q_85,usm_0.66_1.00_0.01,enc_auto/c5350e_855e103785d64064bb5074c6d18a2c5c~mv2.png)
I also managed to implement an Input mapper, which in turn made it simple to add support for both Keyboard and Xbox controls. This was a nice feature that we had just learned in class and I really like using it.
​
to be honest, the project was a little too small for this kind of feature, but it is always nice to take what we learn in class, and actually implement it in a game environment, that way I get a lot better understanding of the concept.
Threading
When the game Grow and we got more and more entities and assets added to the game, we soon noticed a bit of a frame drop, so I added threading on the update loop and also on the scene loading.
​
this was another "feature" we had been talking about in class and had some minor assignments on, so once again it was nice to implement it in a real game environment.
​
This was something I later used in a lot of games and assignments
![](https://static.wixstatic.com/media/c5350e_8d64809f61774a8cad061b55492fd04e~mv2.png/v1/fill/w_443,h_263,al_c,q_85,usm_0.66_1.00_0.01,enc_auto/c5350e_8d64809f61774a8cad061b55492fd04e~mv2.png)