Featured

What is this dev log about ?

do I look familiar ?

I have been developing my first game, Dead Clones (more on the name later), for height months now. I am a solo – hobbyist – newbee game developer and I want to share my story in case it can help anyone out there


Retro-Game-Development-Log

So yeah, I have been making this game for 8 months using Game Maker Studio 2, as a hobby, during nights and weekends. Given the fact that I have very limited amount of free time, I have tried to stay focused on priorities, so I have been building the game and I have almost not shown anything so far. Still, having started from the ground, I feel I have learnt a lot during the process and want to share. I know my little journey will not help the experienced programmers and designers but it may bring some value for beginners to intermediate game developers. 

My plan for the coming months is to go back in time to simply describe the steps I went through, explain how I have achieved those and share the useful resources I found on the web. At the end of the day, I am by no point an expert in programming, nor designing, nor drawing, so I will not give tutorials and I let this to the great folks that are doing this so well. This will be the opportunity for me to credit the great individuals who share and thank them for what they bring to the community. I owe them a lot. I also have no clue how to promote a game – to be honest this log is one of my attempt to do it. So I will not say much on this topic. (and…you have noticed: I am not english-native.)

In a nutshell, this is the story of a guy trying to finalize a game. I hope it can help someone out there. Why not… unless you think this is weird to go back in time to start my story from zero?

I am building a Dead Cells clone… or not


A game as a guide

I decided to build a Dead Cells like… Now let me be clear, by no means would my #deadclones game be close to the quality of Dead Cells. This was to be a small free fan game I would build  alone. What I had in mind was using Dead Cells as a strong guide for my project. Now, I want to tell you why I did this and how it helped me. 

As many around here, I have lot of idea for games. In my dream world, I could combine all my best idea in terms of settings, story, game play and visual styles in one game…It would be a story-rich platformer metroidvania with RPG mechanisms…but this will not happen in this life. So, I have been going for a small but proper game, for people to have some fun playing.

With limited time on the project and everything to learn, I had to be efficient in everything: programming, drawing and game designing (is it english 😛 ?). Having Dead Cells in mind, I have saved a lot of time on defining the game mechanisms. Without it, I would have maybe assembled concepts from various game that would have asked me for a lot of testing, a lot of tweaking and at the end of the day may not have been consistent all together. I could not afford a lot of mistakes (even so I still have done a lot). Designing is a lot of fun but I did not have time to do it for everything in my game. So I took inspiration for many mechanics.

My second point comes from who I am. I am a creative and a dreamer. I find everything inspiring and I easily change my mind. I lack the strong-vision skill you would expect from a game lead. And due to the few time I have, I work and stop on my game, so the idea and feelings I have when coming back to the game are not the same as 3 months ago. The risk of that is inconsistency and for an indie game to be good you need your concept to be very sharp. So in that sense, Dead Cells also helped me to stay on the track of a consistent vision and gave me a direction of what I needed to achieve.

Now, having saved time on some of the design, I kept some fun for me. I had organized the design for this game as two concentric circles. The core engine deals with the platformer movements, the basic fighting actions and the enemies behaviors. This I have really built with Dead Cells in mind. The higher-level engine deals with ROGUE-like mechanisms: how the levels are built, how challenges are defined and how the player can improve to face them. This I built with my own ideas. I took inspiration in the melting-pot of boards games I played. Inspirations again.

Now, I think we all build from everything we ran into: games, books, movies. I think mixing idea gives strength to your concept. It also make the project more challenging as you need to maitain consistency to your vision. At least this is the case for me. I don’t know for others… ?

Personal organization for game dev

“I still have so much to do”

Methodology-1 – High-level features log

I have been using the concept of product backlog to build my game and this was the most useful organization tool for me. The benefits were numerous: it gave me a framework for my design decisions, it was an handy tool for planning and estimating workload but the key to me was that it helped me stick with my actual priorities. As always, I am not saying this is best practice… not even good practice… so I can say it is a practice that worked from me. Can it help you?

What is a high-level features log?

Here is the link to my Features Log if someone feels it can help. I have defined it based on my professional experience.
The concept of my feature log is quite obvious. I have listed in rows every features the game should have and I have used one column for each milestone for the project. This way I can list what is needed for the prototype milestone and then what I should add to my game to release a playable demo etc…
For instance, you can see below, I need to find and set a ‘hurt sound’ and a ‘die sound’ for my player before releasing a first “T3STR” demo. I have found a basic pickup sound which is ok for this first step, but I will need to come back to it and adjust it before releasing my second demo.

Illustration on 3 ‘sound’ features

I have tried to keep my features log simple (=high-level) but as a beginner I needed some granularity to really appreciate the remaining workload. Hopefully, others could go for higher level log. You will find in there, the menu, the GUI, the player, the enemies, the pickups… I have separated programming and all the assets needed for arts, sounds… because I like programming and I can spend all my time on code and lose track on what needs to be done for art… at the end of the day, you cannot release your game without proper sounds and fx. 
It ends with a simple reporting, which counts what is done and what is left for each milestone. This is to help with planning and understanding your productivity.

The log and scoping

The main value out of my features log really came from one preliminary exercise I did 2 weeks after I started my game: the scoping. This is when I decided what my game will include and the steps for me to get there. Back then, I sat, fully dedicated to the task of selecting the most important features of my game, to  draw the path that I would follow for the next 9 to 12 months. Why is that so important ? Well it is to me to keep focus on priorities.
Let me explain. I love programming. I love cool stuff. And this is very dangerous when you build a game alone and want it to actually hit the market. It goes like this: you have programmed 75% of your game and you are now dedicating time to art, you suck at pixel art and you are getting crazy spending hours on a sprite for it to just look like a pile of …potatoes. To get some inspiration you wander on pinterest, twitter, forums, and find a discussion on blurring shaders for background, you look to the code to understand… and the next thing you know you have programmed it in your project. It felt great, seeing the shader actually work gives you a sense of achievements…but you have just spent one hour on developing a nice-looking feature and have not done any progress on what your game actually needs. And if you only have 1 hour per day on this, and if this occurs several times… well you could lose a considerable amount of time. And as you all know, time is our most limited resource. So in that sense, having a log wil give you a clear view on what your game needs… For the rest you should not spend time on it.

Now this is a candid vision, because when you are stuck in a project or are sick with it, it could be a solution for some of you, to gain energy and motivation before working again on the project. On my side, I feel it is better to stop for a while and play other games or even better show your game to friends or family.

So, for me, with my objective to only focus on what matters, the feature log was the best tool. I just had to be very rigorous when defining features and setting priorities (because yes it lives and evolves), be bold when taking decisions, and cut as much as possible, focus on the core of my game, and then I had my road set and ‘just’ had to follow it. Does other have difficulty to stick to their priority, manage their time and schedule ?

50 shaders of grey

Playing around with various styles for enemies

Retro-Progress-10 – Shaders

A short one, to note that I brought some shaders to my game. Shaders are more or less another world. You can easily live without them but this would be a shame not to steal some basic shaders even if you do not learn them. At least the super famous white flashing shader or greyscale shader.

This is an opportunity for me to bring two great contributors from the Game Maker community. XOR and the Reverend Greg who share tons of materials on shaders. This is not my strong foot to say the least but I managed to include nice effects thanks to them

https://www.youtube.com/channel/UC7fkptPD1FHQyDc9Fnm9S_A 

https://xorshaders.weebly.com/

Pickups

Killing is more fun when you get something out of it

Retro-Progress-9 – Pickups and UI

So having started to kill some enemies my guy felt very disappointed. No matter how hard he search the warm remains of the slain monsters, no magical helmet, no flaming weapons  was there to be found… not even a little rusty coin. What is the point in killing without looting.

Always be kind to your main character they say. So I have obeyed, and I have programmed a pickup class that will be fit for all the loots to come. I have also draw the health bar… not much to say there.

You can find many tutorials that will bring you half the way to a proper pickup object. As always, the other half is the hardest part. My advice would be: yes you can watch some of those if you need to learn the concepts but then pause for a time. Plan your code thoroughly and think all your design before starting programming.

It is likely your pickup will need state machine or phases to specify its behavior while appearing, disappearing or being collected. You will need this at least for animation purpose, your object moving from a state to another. You may also need it because you want movements to differ while appearing and once it’s there. Build properly your class/parent and then you can define a lot of different pickups variations.

Pickup is a good exercice to practice design as it is not too complex. Also pickups are always usefull and you will be able to re-use it in many projects. It also easily comply to separation of concern as it only interacts with the player(s) picking it and your collision/movement system. So you can work on this early on your project even if you are still learning programming.

Code Bank

Hello there. Here are GMS2.2 scripts I found useful

Animation management

Scripts that I used for animating my sprite and managing my state.

audio_animation_hit_frame(_end_frame_index)
Returns true if an animation hits the end of a specific _end_frame – it returns true just before changing to the next frame.

animation_end(stop_animation_true_false)
Returns true if an animation hits the last frame – it returns true just before cycling back. It will freeze the animation if arg0 is true.

animation_loop_between(first_frame_index, last_frame_index)
Loops current sprite animation between first_frame and last_frame.

Audio volume/gain management

Scripts that I used to keep the volume settings from the audio editor (otherwise overriden when manipulating gain)

audio_save_base_gains()
Saves the gain settings for all audio assets. Intended to be used once on game start to save the gains as defined in the IDE in the audio editor.

audio_update_gains(gain_value_0_1, base_gains_array)
Updates the gain settings for all audio assets. It takes into account the base settings saved at game start and multiply them by an overall gain setting passed as arg0. Itended to be used when changing the gain setting while the game is running.

Nasty Enemies

“Do I know you ?” … now the name Dead Clones makes more sense

Retro-Progress-8 – Enemies

With his brand new ability to deal damages, our little adventurer could not wait anymore to slash at living (more or less) things. So here it is, DSh3R, the first enemy you will face in dead clones. This first one  took me a bit of time as I did plan 9 monsters before starting to code a single line. I have built a framework for artificial intelligence, I can now create various behaviors using variables. So I have a big bunch of parameters for detection options, decision options and possible actions.

I want a simple behavior because I need the player to know exactly how enemies will react to his actions so that he can focus on timings. Also, I have grown old and I have lost all my reflexes, I value strategy over finger-agility. This is what my game will reward: a proper management of pace during the run. I want readable mechanisms, I want the ‘rules’ of the game to be clear to the player so that he can be smart about it.

I really think this is the strong foot of pixel art game. Making the game easier to read, giving strong feedack to the player and… hopefuly making it fun to play.

Dealing damages

Hacking and dealing damages
Run for it !

Retro-Progress-7 – Hit boxes

Slashing with a sword is fun but it is even better when you can actually deal damage. So I created a hitbox system, with specific children objects for swords attacks, hazard blocks, explosions and projectiles. It might be overkill for my game, but I have a full set of features ready to define who can be hit by who (to manage friendly fire), track who has hit who (to credit experience for instance), decide if attack go through wall or not etc… So everything within my game will rely on this system to deal damages.

To credit someone I discovered only recently, I would name Nathan Ranney; I had great fun reading his posts on amazon developer blog, and the fact that his codes work like a charm does not hurt. Here is the link to find his article on hit boxes and combos. https://developer.amazon.com/fr/blogs/appstore/post/9a4ded48-625a-42aa-8f15-ac608155b8aa/gamemaker-basics-combo-setup1.

Give me something to slash

Run for it !

Retro-Progress-6 – Fight moves

My character learnt to slash. This was time for Finite State Machine. This went so wrong at first. I mean it was robust and working without bug but it was so complicated it was started again from scratch.

Just for the story: I began with a lot of motivation, mapping states with pen and paper, thinking it through properly and came up with something that used, what I called ‘hierarchical states’ with sub-states imbricated in macro-states, and orthogonal states  so the player have one state for how he is moving (running, jumping…), one state for what he is doing (attacking, casting…) and one state for his health condition (hurt, stun, dying…). I thought this was very smart, it was just over-complicated… at least for my brain. So I came back to one state system, and did not bother anymore on questions such as “does it really deserve a specific state or just a sprite”, I have moved on. It is not perfect but it gives structure.

So long story short, I can point you out to two great resources for finite state machine:

The TrueState asset from Pixelated Pope, ready to use: https://pixelatedpope.itch.io/

The articles from Stargrove faux-operative blog : http://fauxoperativegames.com/essential_function_guide/

About Me

yeah tha’s not me

Not that I think that this REALLY interests anyone…still, one of my objectives is to show how one guy can come up with a decent game… and I feel giving a sense of who I am will help you appreciate if the choices I made could also be relevant to you. Does it make any sense ?


Beginner programmer, can draw a bit, wannabe game designer… other lives aside from this project

#limitedtime – So my name is Michel I am 38 (when I write this), married, two kids (7-10), living near Paris with a daily job that takes me away from 8 am to 7pm. 

#beginner – I am not a developer. I have experienced programming for the first time at 10, copying arkanoid source codes of my brand new amstrad cpc 6128, then I learnt turbo pascal at 14 (I was not familiar with the ‘align your ambition to your resources’ and I started developing a game inspired by Blood Bowl board game). Then during my engineering  degree I learnt C, C++, java. So I would say I was advanced beginner with maybe 6 months of experience in Game Maker Studio when I started this project.

#creator I like and need to create… I draw, not an artist though. I wrote novels, for me and friends. I do woodwork (not sure this is proper english). I have created basic board games and tabletop rpg. So I need to get this out of my system in a way or another. 

When I ran into Game Maker Studio, it was a eye-opener and I knew I will have a game of my own out there… even if only 10 people ever play it.

So that is me. A hobbyist game developer without all the skills required, without the time required, with no proper experience of building a game, but still very motivated. Aware of my limitations, I decided to align my level of ambition with the one of my resources and I have been going for a simple fan-game project. Also, I had to be very rigorous about this and manage it like a proper project. I gave myself a simple objective: finish a game. I am sure this sounds familiar to some of you ?

Platformers floors are dusty

Run for it !

Retro-Progress-5 – Dust FX

For the smoke effects, I have used custom particles for fast prototyping. This is a simple object that fades away or disappear after a short animation. I have spawned thousands of them with no performance issues. I actually kept this principle so far.

Remember smoke is there for esthetic but it is also a key feedback to player so that he knows the character has landed for instance. So before fine-tuning the look make sure it conveys the right input to the player. Also, game can have feedbacks for running and jumping but also for colliding, striking, being hurt, dying, droping pickups etc.. What is key is to prioritize all feedbacks depending on what seems more important to match the desired gameplay.

Now that I look back, I have spent way too much time playing with this FX when I see how basic the results is. 

I first started to use a simple sprite, like a small cloud, with a single frame that I would ‘animate’ with fade-in and scale-up for appearance before the classical scale-down disparition. It was ok and I am not sure drawing FX was worth the time it has required me…  Anyway, I drew my own frames and I also added some speed behaviors to my smoke based on the player movement…. but it is hardly noticeable… Sometime simple is better.

When drawing FX, I learnt a lot from Jason. You can find him here:

https://jasontomlee.itch.io/

Create your website at WordPress.com
Get started