Hi, its Aleks.
This is my post mortem of making my first game from start to finish and publishing the game.
Game Page: https://zerohbeat.itch.io/zerohbeat-adventure
The game is built using:
- C++ and SDL (for rendering, window events)
- Chrome Music Labs for making the music
- Audacity for music / battle effects. (for the most part me making sound effects and playing around with the sound)
- Davinci Resolve for the game trailer
When I started the project, I set myself these goals:
- Make something very (very) (vey) short and simple and finish it
- Be feature complete
- Have menus
- Have sound
- Have translations
- Publish the game (and charge money, even 1$ )
These goals were very important for me. I didn’t program much or at all for the last 6 years. In a way, this game was make or forget about programming forever situation for me.
I feel like I am starting again from zero. Making a 2D adventure game is better than making a console style game. I though it would be fairly simple, right? There would be no / little moving parts. I should just concentrate on showing (rendering) textures on the screen. Initially I though I should do TicTacToe, but I though making a visual novel / adventure style game would be even easier…. (except my art is awful :D ).
I chose to use, C++ and SDL as I have used them in the past. My idea is to make complete games and over time build myself a framework or set of libraries. Ie game engine.
There is one true path through the game for a reason. In a way, I wanted to tell myself that one has to move on and get on life. Today is what is important. Ie don't let fear rule, be passionate, give your all and make games or whatever you want to do and see what happens.
The process: Start 24th February End 29th March
I started on 24th February. In the first week, I got the game states working and had a simple options screen and main menu working. I played around how to set up my Event System and game state management.
Next I got the first 3 chapters done of the game.
I got really happy with my progress and instead of polishing my code and fixing some bugs, I designed the rest of the chapters / images and implemented them in the game. That was a really bad idea as my code was really messy and this decision just made things worse for me later on. I should have polished my code and reduced my technical dept as much as possible before continuing.
After about 2 weeks, I had a rough idea of the 10 or so chapters / choices, I started to build the battle system….Thankfully the battle system is just one class and then I instance it in 3 places. Again, I went for simplicity over long term usability.
After I had the basic game “done”, I added the effects system for the monster biting and player hitting the monster. Unfortunately, the way, these systems work, it makes it really hard if not impossible to fight two enemies at the same time. Ohh well. Maybe in the future, I will make a sequel. Also, I didn’t really thing about button position and size….
After nearly a week of effects and initial polish, I spend my final week or so on polishing and improving the game performance a bit.
The final objective was translations, I wanted the game to be translated in Japanese and Bulgarian.
This is really bad but, the way I do the translations is by changing the GUI texture image to the set language.
That’s not great but hey it works!
//get a game event related to option state
switch (pevent->m_iActualEvent)
{
case enumOptionsEvents::oe_Exit:
//go through the states and stop options , active main menu
ChangeToStates(gsn_OptionsState, gsn_MainMenuState);
m_PlayButtonPress = true;
break;
case enumOptionsEvents::oe_SelectJapanse: //change to Japanese
ChangeLanguage(trn_GuiMenuImage_Japanese);
break;
case enumOptionsEvents::oe_SelectEnglish: //change to English
ChangeLanguage(trn_GuiMenuImage);
break;
case enumOptionsEvents::oe_SelectBulgarian:
ChangeLanguage(trn_GuiMenuImage_Bulgarian);
break;
----
}
//Telling ALL the game states that a new image is used. Yup its really bad :( but it works !!!!!!
void advAmelia::ChangeLanguage(int iLanguageTextureImage)
{
m_pOptionsMenu->m_GuiTexture = m_ResourceSystem.GetTexture(iLanguageTextureImage);
m_pMainMenu->m_GuiTexture = m_ResourceSystem.GetTexture(iLanguageTextureImage);
m_pOptionsMenu->m_GuiTexture = m_ResourceSystem.GetTexture(iLanguageTextureImage);
m_pChapter1State->m_GuiTexture = m_ResourceSystem.GetTexture(iLanguageTextureImage);
m_pChapter2State->m_GuiTexture = m_ResourceSystem.GetTexture(iLanguageTextureImage);
m_pChapter3State->m_GuiTexture = m_ResourceSystem.GetTexture(iLanguageTextureImage);
m_pChapter4State->m_GuiTexture = m_ResourceSystem.GetTexture(iLanguageTextureImage);
m_pChapter5State->m_GuiTexture = m_ResourceSystem.GetTexture(iLanguageTextureImage);
m_pChapter6State->m_GuiTexture = m_ResourceSystem.GetTexture(iLanguageTextureImage);
m_pChapter7State->m_GuiTexture = m_ResourceSystem.GetTexture(iLanguageTextureImage);
m_pChapter8State->m_GuiTexture = m_ResourceSystem.GetTexture(iLanguageTextureImage);
m_pChapter9State->m_GuiTexture = m_ResourceSystem.GetTexture(iLanguageTextureImage);
m_pChapter10State->m_GuiTexture = m_ResourceSystem.GetTexture(iLanguageTextureImage);
m_pEndingState->m_GuiTexture = m_ResourceSystem.GetTexture(iLanguageTextureImage);
m_pOnDeathState->m_GuiTexture = m_ResourceSystem.GetTexture(iLanguageTextureImage);
}
Sound was implemented last and again its just if statements in the main game loop checking if a specific sound should be played…. Not very modular……… I hope the sound is not annoying… most of it is just me recording myself and using Audacity to change the effects.
To be honest, one thing that really shocked me, was how much time it takes to polish the game. I really didn’t anticipate this.
- Sounds
- More bugs
- Just making sure everything functions well
- Testing the game on different computers
- Game logo
- Game description
- Publishing the game online
- Game trailer (took time too) about a day for 1 minute video
When the actual game was done, I made a short trailer for my game…. That was an experience too as it was my first time… Plus setting the itch.io website was interesting too. One part that I am really skipping is marketing, I did write a post on Facebook, Twitter and Instagram but that it, really. Not great.
I published the game on itch.io on 29th March.
When I was making the game, the main objective me was to get it done as fast as possible and have everything working. Hopefully for my next project, I will spend a short amount building the game infrastructure like 2D Renderer. That way the code will be able to better support the game features.
I know that the game is not something special, for one its way too short probably. BUT I did. I made a complete game and I published it. I played it a bit with one child and that kid really liked it and it made an impression. I was really touched…. I had that experience before (I made a 2D space shooter 6 years ago and some kids played it for 4+ hours non stop…) but still wow…..
I achieved what I set out to do, now I should probably start the next project :D
Thank you for reading!
My profiles:
Facebook: https://www.facebook.com/ZerohBeat
Instagram: https://www.instagram.com/aszerohbeat
Twitter: https://twitter.com/ZerohBeat
Pinterest: https://www.pinterest.co.uk/zerohbeat
Twitch: https://www.twitch.tv/zerohbeat
Itch.io ZerohBeat: https://zerohbeat.itch.io/
Video Verson: