On benefits of primitive games for developers


This post may be useful for beginner devs like myself. Developing games is a thing many gamers think of from time to time and I was not an exception. In recent three years I tried to create my own game several times and I failed completing every single project I began, so about a month ago I decided to take a step back and make something really simple not to say primitive. 

My currently developed game called Pongus is a modified version of famous arcade Pong released in 70-s. The original game is comparably easy to handle with a game engine, so I gave it a try. My game engine choice this time was Godot engine with which I worked before on some of my incomplete games. Not expecting much from this kind of project I began creating the classic mode that is just 1v1 ping-pong-like game. However, my expectations were exceeded. Many people say that you should start low with your projects while you are getting started, but I think mostly they talk about overall purpose of this and not specifics. With this post I want to share my experience with it and what I learned from 25 hours spent on Pongus development. I guess it's easier to start from something simple when you know exactly why this is necessary.

Firstly, about engine I chose. It's Godot. For this reason I can use specific terminology that applies to it. I met with Godot while scrolling my Youtube page when I stumbled upon a video about it. I decided to try it. I discovered that Godot at least from my perspective is perfect for single devs like me as it is not as heavy as Unity, but still powerful enough to handle decent projects especially in 2D. It is lightweight, so you can develop games comfortably with slow PCs and you can write code in GDScript which is basically Python. It means that you can make things fast and synthex is easy to remember. Also, Godot has a good built-in set of nodes that are easy to work with and offer good functionality. For these reasons I think this engine is nice for single developers.

Now about experience I got from creating a copy of Pong.

First thing that comes to mind is working with vectors. This project taught me a lot about vector math and functions I can apply to vectors in engine. For example, you start to percieve them better and feel how they will behave when you apply certain operations. In my case I had to discover how to make a ball reflect from walls and after that how to change trajectory of it if player's racket is moving while deflecting. As when developing a game we have to deal with vectors extensively it is a must to learn their properties and for example how they affect movement direction.

Furthermore, you learn how to actually move objects in engine. Different ways of doing so. Like you can have a KinematicBody which has a specified function for movement that can be useful for player's character or you might like to modify position directly by adding and subtracting vectors. If you want some proper physics you can use RigidBody which moves by applying force to it or StaticBody if object doesn't need to move a lot, by the way who wants to make a game where something moves. Bad idea. Lots of stuff to deal with. 

While doing that you discover input system and ways to read if player is holding keyboard/mouse keys and where to add new controll keys. 

Don't forget to implement gates to score goals. Here you will want to see what collisions or areas are. What is their power and how to deal with it. This stuff is needed everywhere and again you will want to master them.

Continuing with development you have to meet with user interface. At least you have to learn how to count points players get for goals. At this point you can explore Godot's signal system and how to send values to other objects or you can find out how to refer to a specific node in level. Creating UI requires you to learn "control" nodes. How they are placed on screen, what kinds of them exist, what built-in values do they have and so on. This is useful even if you are into text-based games because they are basically all about UI.

After finishing the classic part you can proceed to how to put game on pause or create a main menu. Here you learn how to change scenes, in which way nodes process their code and find out basic buttons functionality.

Adding sound to your game is another question. Looking how balls bounce off walls in vacuum is not exactly fun.

In a wish to upgrade your game you start to looking for ways to create settings menu and make the game fullscreen or change game's language. Meet with bars, sliders, popups, translation system and other stuff. How to make global variables and functions that can be accessed by nodes within any scene. In which ways I can add other languages. How to change volume of music or effects from code. These are not the questions you usually ask yourself when just starting out, but at some moments they appear and need to be answered. In addition, save system is learned from here. How to save stuff to avoid a reset of settings on scene change or quiting.

You'll want to add new gamemodes, post-processing effects, particles,  etc. And all of this can be learned by making your recreation of Pong or other similar classic arcade game. 

The reason behind simple projects is that they are simple in core, but require learning a lot of basic stuff that beginner doesn't know. When you don't know how something works doing a task can take a lot of time. In my case bringing Pongus to 0.1.0 version took 25 hours. It's because I needed to find out things at each step. Now I think that I would do similar stuff in at least half the time because I now know how do it and do it more effectively by using more effective coding practices, shortcuts and other tricks to reduce time spent on implementing something. Not to mention reusing things you've already created which is a very common technique in game dev. For example, I wrote code that makes a ball bounce off objects. Why would I want to rewrite it from scratch for other game if I already have it? 

The strong advantage of simple games is that you can find out how to use a lot of stuff in a comparably small amount of time. It's easier to create a save system to keep highscore of a gamemode that one which holds player's inventory, party members and their equipment in some JRPG or action-adventure game. You spend time to actually learn stuff and not cracking your head when implementing something complex. Learned how the thing works - proceed to another. It's more productive than first learning and then spending 3 hours trying to create a bigger system based on it when you are so inexperienced.

I guess there is another thing to mention. Pongus has a main menu track which was created by my friend Danil. It was also some experience connected with working with other people on the same project. Cooperating with a friend can help a lot when you are not good at something. For example, you can ask someone to draw stuff or as in my case make music. Also, it's much more fun to make something together and there's someone interested in your creation and willing to play and give feedback which is really important to stay motivated and keep improving.

This experience helped me a lot and I hope someone finds this useful too.

Get Pongus

Leave a comment

Log in with itch.io to leave a comment.