Hacker News new | past | comments | ask | show | jobs | submit login
Show HN: The full source code and assets for my custom game engine and game
128 points by mknsri on July 10, 2023 | hide | past | favorite | 35 comments
I always enjoy reading posts about indie game development and looking at the source code of games other people have built. So for any game I release I naturally I want to do the same.

https://github.com/Mknsri/HockeySlam

Hockey Slam is a hockey shootout game on Android which I built almost from scratch. Some of the engine features include 3D graphics with PBR materials, a rudimentary physics system, replays, a multithreaded job system and a hot-reload DLL platform for developing on Windows.

I detailed the creation of the game in it's own post, but now that time has passed I am releasing the source code and assets under the MIT license. You can still find the making of here: https://hockeyslam.com/makingof

I'm happy to answer any questions you might have.




You should probably give credit to Casey / Handmade Hero with regards to your windows platform code. Well its kinda scattered around, so probably just credit in general.


True, Casey/HH was a huge inspiration and the project started from following the first few days of Handmade Hero. I should mention it.


So... not from scratch?


Here 'from scratch' probably means 'from fundamentals', e.g. without a prefab game engine, as opposed to 'taking no inspiration or lessons from anyone else or using any library code written by other people'.

Though that would be one hell of a project.


I mentioned in a couple of places that I did use other people's file loading libraries (mainly Sean Barrett's excellent stb libs).

“If you wish to make an apple pie from scratch, you must first invent the universe” :)


> “If you wish to make an apple pie from scratch, you must first invent the universe” :)

This is something I posted on Casey's first handmade video, together with some counter arguments to his rant on the shortcomings of c++ and windows. He has since disabled comments.


I work in tools for game devs and it's great to see more open-source work like this it's very hard to find good modern open-source game examples.


Thanks, it's not the cleanest code and for example my immediate mode GUI is nowhere near IMGUI but theres still plenty to look at.


Any idea what you would have to do to get it running on iOS?

Did you release it? If so, how is it doing compared to your expectations? (I looked for it on the Play store but couldn't find it)


You would have to write the platform code for iOS similarly to how the Android and Windows is written. The initial idea was to release it on iOS as well but at the end I didn't want to invest in buying a Mac, the license and the time to port it.

Edit: As for the release, I think it barely broke a couple of hundred downloads. I didn't do any real marketing and had no real goal of really getting the game out there as it was a learning experience for me first and foremost.


Maybe compile it for Webassembly?


More of a general nooby question: what would be a good way to read through code like this? Where to start? How to understand what's going on and when? etc.


It depends a little bit on how comfortable you are with the platform and the technologies used in the codebase. Generally speaking you would look for the entrypoint into the application.

For Hockey Slam you can look for the entrypoint in Windows:

https://github.com/Mknsri/HockeySlam/blob/main/windows/win_m...

or Android:

https://github.com/Mknsri/HockeySlam/blob/main/android/app/s...

Then start tracing through, looking at any function calls that look like they contain anything interesting. Additionally in this project you can jump straight to the entrypoints of the game code:

https://github.com/Mknsri/HockeySlam/blob/main/game/game_mai...

Or the rendering code:

https://github.com/Mknsri/HockeySlam/blob/main/ogl/ogl_main....

Another way would be to look at the files and see if anything catches your interest, for example if you want to learn about the UI system, you could look at how a button is defined:

https://github.com/Mknsri/HockeySlam/blob/main/game/imui_sys...

Fabien Sanglard has great articles on studying classic video game engines, and could be used as a guide on how to approach codebases: https://fabiensanglard.net/quake2/index.php


Thank you very much! I appreciate you taking the time to provide these resources.


Congrats on finishing the game, it's an accomplishment


Thanks! Finishing such a large project feels great and you learn a lot when you have to implement so much you take for granted when using things other people have built


Yes, congratulations on finishing the game! Also, thank you very much for sharing the story of making it. I'm more inspired than ever to keep dev logs for the little side projects I work on. It's important to keep track of progress, reflect on where you were early on, and see how far you've come.


Exactly! Thanks for the kind words


I'm also making a game from scratch and reinventing wheels. What is the processing that you are doing for GLES? I see the GLSL_PREPROCESS in the GLSL.


I wanted to include common code for all shaders in a simple way, but I was too lazy write a proper parser. So instead I used the C++ preprocessor and macros to include things from common shader code and combine them in the build step.


FYI: https://docs.gl/es2/glShaderSource takes an array of strings and just internally appends them together. So, rather than trying to #include common code for all my shaders, I just pass a common_code_string and a shader_specific_code_string every time.


I could have definitely used that and I'm surprised I didn't realise it when researching how to include shader code. Luckily my setup required very little work and with my system I could share snippets between GLES and GL.


Why did it get deleted from Play Store?


The HTTPS certificate expired on my privacy policy page and Google delists the app when that happens. After you renew they require that you resubmit the app and I didn't bother since there were barely any downloads then.


Tedious


You wrote an Android app in C++.

...how!? How did you even learn how to do this? I've never seen a github repo or documentation or tutorials that even mentions doing this. Nothing on the developer.android website, nothing in any YouTube tutorials. I'm blown away.


https://developer.android.com/ndk/guides

you can use NDK to create an app with c++


Really cool that this is written entirely in CPP.

All the NDK demos/examples I've seen are usually using JNI in some fashion.


Yeah I remember that Android pretty good had documentation and tutorials about the native-activity. It was not really advertised, more of "do this if you really want to" kind of feature. But it worked perfectly.


if youre wondering why its not on the play store

> The game has been since delisted on the Play Store, however you can download the APK here.


Yeah the privacy policy page had an expired certificate and Google delists the app automatically when that happens.


Very cool. Can you point me to the main game loop? I usually start from there when reading source code for games, but I'm having trouble finding yours. Probably just my inexperience, but any links would be great.


The entry point into the game logic appears to be here in the Android side of things https://github.com/Mknsri/HockeySlam/blob/main/android/app/s...


Congratulations on releasing your game! Doing this all yourself is a major achievement.

Also, the graphics look great.


Thanks! I got help for the 3D models and they turned out great.




Consider applying for YC's Fall 2025 batch! Applications are open till Aug 4

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: