Hockey Manager RPG banner

Hockey Manager RPG

7 devlogs
88h 17m 6s

A C++23 hockey game entirely built from scratch with a custom OpenGL game engine. Coach the Czech Republic to Olympic gold with a deterministic, thorough match simulation, player stats tracking, and full tournament progression. Luxuriate y…

A C++23 hockey game entirely built from scratch with a custom OpenGL game engine. Coach the Czech Republic to Olympic gold with a deterministic, thorough match simulation, player stats tracking, and full tournament progression. Luxuriate yourself with neat UI as you progress through the game.

This project uses AI

Used AI for research and quality checking; AI never wrote any code.

Demo Repository

Loading README...

robkoo

Shipped this project!

Hours: 21.11
Cookies: 🍪 414
Multiplier: 19.61 cookies/hr

Intro

Comparing this ship to the original Alpha v0.1 one, there are quite a few huge changes in the game. I will go through each version since the first ship one by one to familiarize you with how the game evolved since.

Fun fact

Since Alpha v0.1, 56 files have been changed, 5543 lines were added and 1121 removed. Substantial progress has been made.

(Checked via git diff v0.1..v0.1.3 --stat)


Alpha v0.1.1

This version brought a HUGE UI overhaul. Alpha v0.1 featured (mostly) basic white-on-black UI, while in this update, visual chrome was added to each scene, giving them some depth. There is also a neat animation in the main menu. The tournament info scene for play-offs had also been revamped, now featuring a bracket style UI, instead of the old, simple text. Honorable mention goes to: being able to have 3 save slots instead of 1 :)

Internally, I added files for storing standardized UI elements and UI values (ui::tokens, ui::prefabs). Biggest example of this is the scene chrome, which is standardized across all scenes from this. Button interaction APIs were also massively expanded.

There’s a ton of changes to go over, mostly tiny compared to the UI overhaul, so I won’t go into too much detail over here. Feel free to read the CHANGELOG entry here for more info.


Alpha v0.1.2

This update focused on usability. Biggest changes include the addition of persistent helper bars to the roster selection scene and training scene. It also included changing resolution, so you could finally enjoy the game at a higher resolution, if you wish to do so.

The simulation was also touched on a tad. Now, the selected shooter on ice is selected via weighted random sampling (based on shooting stat), rather than picking a player with the highest shooting stat (currently on the ice).

If you need more detailed changes, you can find the CHANGELOG’s entry here.


Alpha v0.1.3

And last, but definitely not the least - Alpha v0.1.3. A brand new UI component was added - the Modal. Now, modals can pop up if you try to do a destructive action, such as reset tournament data, as to confirm your action. They are also used for info, which can be seen on first entry to Game Main Menu.

Internally, modals required a rewrite of how the Scene class handles components. Previously, it just iterated over its internal arrays of components and components groups and simply rendered them. This wouldn’t have worked with the new modal, so I added support for nested component trees. Now there’s a neat method to serialize the UI components into a single array, which is then easily able to be iterated over, and the method ensures correct order for rendering modals, modals’ components and the rest of the scene.

Another quite notable change is the addition of a player statistics scene. Ever since the early days of this project, players had a ton of statistics tracked, such as goals, time on ice, penalty minutes and so on, but no way to showcase them. The scene features a neat paginated table, ordered from the player with the most points, to the least.

Last big change of this update was the addition of a line swap scene. This required me to extract the line rendering code from roster selection, so I could reuse it in this scene. You can edit your lines via swapping compatible positions (e.g. C<->C, LD<->LD).

If you wish to read more, check out this version’s entry here.


Outro

If you made it all the way here, thanks for reading this message! The game has come a long way since the original release, and I hope you will enjoy it:) The most challenging part of this ship was definitely all the UI stuff, as I’m not that well versed with UI. I’m proud of how the game has improved, including simulation, UI, more scenes to explore and such, and I’d definitely like to keep working on it. Let me know in your votings’ reviews what I could improve, I would greatly appreciate the feedback.

robkoo

I finished up work on the Alpha v0.1.3 update and recorded a demo video for anyone to look at. It showcases (nearly) all of the functionality of the game. What isn’t obvious at a first glance is the save system, but if you look closely, once I click on “Preview & simulate”, you can see match-up number 2 waiting for me, therefore confirming saving and loading data works. I hope you all can enjoy my game, and I apologize for not writing enough devlogs. That one huge 65hr one was me frantically coding this as a school project.

0
robkoo

[!NOTE]
For more info about the changes, please consult the changelog for this update.


Generally, this is a small update whose contents were based on the feedback of my dear girlfriend. It took a while as I tried to not repeat myself, thus I refactored/extracted the line rendering from rosterSelectionScene so I could use it in the lineSwappingScene. I also came across a nasty bug that wiped my forwards from the save, so I tried to mitigate it by changing how the SaveHandler saves players.


Alpha v0.1.3-dev.3

Added

  • Lineup editing via LineSwapScene and shared lineup helpers
  • INFO log level in Logger
  • Shared startup resolution handling in WindowHandler

Changed

  • GameMainMenuScene expanded with CHANGE LINEUP and HELP / HOW TO PLAY menu items
  • MatchPreviewScene and MatchResultScene received UI/layout refresh
  • RosterSelectionScene heavily refactored around shared lineup builders

Fixed

  • Save-load roster integrity
Attachment
Attachment
Attachment
Attachment
Attachment
0
robkoo

For thorough info about the changes, please refer to the version’s changelog entry that can be found right below the version label.


This devlog focuses on the last two commits to the alpha branch. These commits contain additions and changes that will then make up the Alpha v0.1.3 update when it’s ready. I came up with this versioning, for the alpha branch commits (Alpha v0.1.3»-dev.x«) just now, so that’s why there’s two commits in this one devlog. From now on, it will be a single commit per devlog.


Alpha v0.1.3-dev.2

changelog entry

Added

  • a player performance scene which, as of right now, shows your team’s skaters’ career stats (not limited to the current tournament)

Fixed

  • a bug where your game wouldn’t be saved if you clicked BACK TO MAIN MENU in either the winner screen or loser screen

Alpha v0.1.3-dev.1

changelog entry

Added

  • a Modal UI component, which inherits from Rectangle

Changed

  • scene rendering and bounds checking now support component trees (e.g., Modal with internal Rectangle components)
  • scene rendering and bounds checking now flatten all renderable components into an ordered std::vector, then traverse it for rendering/hit checks
Attachment
Attachment
0
robkoo

This devlog only contains the most important of this update. For all the technical details, please refer to the changelog


Overall, this update was meant to improve stability (by fixing some nasty bugs) and increase usability (by adding the helper text).


Alpha v0.1.2

Added

  • resolution switching in Settings (cycling through 4:3 presets)
  • tutorial/helper text for:
    • roster selection
    • training

Changed

  • standardized back button across scenes

Fixed

  • roster clear/load edge cases that could leave stale assignments
  • simulation safety around invalid team lookup and coach dereference paths
  • shooter selection and shot consistency issues in match simulation
  • player runtime/energy edge-case handling
Attachment
Attachment
0
robkoo

Alpha v0.1.1

[!NOTE]
(The full changelog can be found here)


This update is mostly a polish + stability update - same core game loop, but better UI, better save handling, and fewer edge-case crashes/weird states.
Fun fact: because of my UI framework, the actual UI didn’t take that long to implement. I had to come up with the shared UI layer, and the initial UI, but then it was smooth as butter.


Added

  • credits scene with repo link + new credits navigation from main menu/settings
  • save system expanded to 3 slots
  • slot-aware stats persistence (slot1/slot2/slot3) via GameState save token helpers
  • shared UI layer (ui::tokens + ui::prefabs) and richer component interaction states

Changed

  • broad visual/UI improvement across almost all scenes (layout, hierarchy, button patterns, consistency)
  • startup/shutdown flow now respects selected save slot for both saves and stats
  • playoff tab reworked from text list into a visual bracket with connectors and score boxes
  • saves/settings scenes now rebuild on enter to prevent stale state

Fixed

  • playoff progression bugs around direct QF byes / reseeding collisions
  • invalid “next game” detection caused by placeholder matchups
  • scene-transition safety during clicks (deferred callback execution)
  • save safety: empty roster no longer overwrites existing save files
Attachment
0
robkoo

Shipped this project!

Hours: 67.18
Cookies: 🍪 907
Multiplier: 13.5 cookies/hr

I built this game in C++ as a kind of challenge; I am a hardcore C developer and I had to create a C++ game as a school project. I decided to try and make a proper game to understand C++ and I think I did pretty good, but I’m sure there’s tons of C++ paradigms and features I missed out on. I also practiced OpenGL a bit.

robkoo

I updated the makefile, prepared release archives and finished up the release of alpha v0.1

Attachment
0
robkoo

Very early alpha release of the game. Features saving your progress, saving players’ and teams’ statistics (separately from the save file), deterministic game results (if you input the same seed, you get the same result), custom rendering pipeline for text and UI. Game is cross-platform. Your goal, as the coach of the Czech national hockey team, is to win the Olympics. The hockey game rules are following the IIHF rule book, and the Olympics’ groups are based on 2026 Milano-Cortina Winter Olympic games. The full changelog can be found in the repository’s docs/ folder. (Alpha branch)

Attachment
0