Jani_Nykanen

Last Login:
April 24, 2017
Warn:

Rank:
Member



User Profile
Follow

Hits: 56,157
Joined March 07, 2014
Games (5)

A Journey to Eternity
July 24, 2016
Operation Fungus
December 14, 2015
The Last Minute Dungeon
December 12, 2016
Project Spooky
November 02, 2014
Mr. Spooky's Snowy Tower of Winter
December 23, 2014


A "short" blog on game development
Posted on December 30, 2016 at 10:34

(This blog is partially a writing exercise I wrote to improve my English writing skills. Or to get more experience in writing long pieces of text in English. If I had written this thing in Finnish, it would probably be twice as long and had taken much less time…

Note that I did no proofreading, so there might be typing errors, poor sentences, bad, incorrect English and other things that rape you eyeballs and make them pop out of your head, burning. So you are warned: here be dragons typos!)


The year is coming to the end soon, so I decided it’s time to write about one of the most significant things in my life: game development. No, I didn’t say it’s the most significant, there are many things that are more important to me than game development. Nevertheless, game development has shaped my life, and it will shape my life, it’s a thing that I think almost every day. I would be a liar if I said “No, game developer is just another hobby”. Because it’s not: if a thing is a “just another hobby”, then you wouldn’t be sad if doctor said you cannot do that thing anymore. “Oh well, I can find another thing”, you would think. But if doctor told me I must stop making games forever, I would probably first kill the doctor, then myself, and then ask what does he – or she – mean.

In this blog I’ll quickly – or less quickly, but I’m not going to write an entire novel about if – go through the year 2016 and then tell my “new year resolutions” in game development. I tell only the most important things in 2016, I won’t introduce all my canceled projects. If you followed this site – and if you didn’t, then, my friend, you are a boring person – you should have pretty good idea what I have been doing – “gamedev-wise”, of course. Just open “What are you working on” blog, I posted a screenshot of my every project there. I finished only three projects – of which one was started on 2015, but I finished it on January –, but started several, at least over a dozen.

Anyway, let’s get started. Or like nano-boosted Reinhardt in Overwatch… “Are you ready? Here I come!”

2016


In January 2016 I finished Operation Fungus, my first completed C++ project since 2013. I’m not exaggerating if I say it’s one of the most significant – I always misspell that word – in my life. It was my most polished game that far. Before that, I rarely tried to beat my games, so they were possible to be completed only in theory. That wasn’t a very good way to develop games, I know, but once I got a game finished, I moved to the next one without thinking of my previous product too much. Before Fungus, my motivation to finish a game was to be able to move on to the next project. It didn’t guarantee quality. Most of my Html5 games were “pure shit”, and they were actually worse than my earlier C++ games I had spent more time on. My goal was not to make good games, but to make as many games as possible. If the game took longer than a few weeks, I got bored, and tried to finish my current project as soon as I could.

Fungus changed everything. It took two and a half months to finish. I didn’t rush, not even near the end. Yes, there were a few game breaking bugs in the final version, but those were Windows-only, and since I developed the whole game on Linux, that’s understandable. During the development of Fungus I noticed that my programming skills weren’t good enough for big projects, but I knew that I must finish Fungus, otherwise my programming skills never get better. The code quality was horrible, I did a lot of mistakes. And that was entirely a good thing: you learn from your mistakes. No mistakes, no learning, that’s pretty much true.

The biggest mistake I made – programming-wise – was dumping almost all the game logic -related code to a single file called “game.cpp”. HUD, stage rendering, game object handling, controls etc. were all in the same file, inside the same class. Also, the asset loading was hard-coded: if I wanted to load a new bitmap or maybe change a bitmap path – or even change the price of some skill –, I had to recompile the whole project, and that took a while since it had got pretty big. If I wanted to change one button, I had to edit the code in multiple places. Not very wise, but when I started Operation Fungus I lacked of experience in big, desktop game projects – in Html5 games it wasn’t a problem since all the code were in JavaScript and interpreted in real-time.

In my next project I tried to fix all this things. I never finished that game – it was supposed to be a platformer sequel to Operation Fungus – but it helped me to improve my code. Now the stage and HUD rendering were in different classes – I still used classes for everything, later I learned that not everything in C++ code must be in classes –, controls were more dynamic and changing one value in key config changed the behavior in every game component, game objects were not part of the main class, many routines were shorter and divided to more, smaller functions to make the code more readable.

If we forget the code, there was also one another significant mistake I made. The music. No no, the music was good, but the way my composer and I worked wasn’t. First, he wanted to make the music before he hadn’t even seen the stages. I gave him a list of stages, and he made music, but if you know me, I changed my mind a few times and the final stage list was a bit different. And my composer made the music according the old stage list. The result was there were songs that were good for no stage, so what did I do? I opened AudaCity and edited these songs, without asking my composer, of course. He didn’t see – well, hear – the result until the game was finished and out. He wasn’t that happy, no no, but fortunately he told me this, so in the next projects, I asked him to slow the songs down if needed, I didn’t use AudaCity for that any more – except in The Last Minute Dungeon’s “Victory Theme”, which is a faster version of “Game Over” theme, but that was because the composer didn’t have a working internet connection and I wanted to release the game. That theme was only supposed to be a placeholder.

I started several projects before I had enough skills to start my next big project, “A Journey To Eternity”. I started it by writing a game-engine that uses Allegro for graphics, music, input and other similar stuff, and Lua for scripting. Writing a whole game in C++ didn’t sound very appealing any more, and I can admit that without Lua this project would never have happened. Header files? No need! Types? Dynamic! Memory allocation? No need! Memory leaking? Okay, a bit. I could have chosen any other scripting language like Squirrel, AngelScript, JavaScript/ECMAScript, but Lua had the easiest C API, the best documentation and good support.

I started working on the engine on late March, and I tested it in the next Ludum Dare that took place in early April. I never finished that entry, but it helped me to finish the engine and add the missing features.

First the development of Journey was pretty straight-forward. The code was more logical and clear this time. But only first. When the project got bigger, the code started to resemble spaghetti more and more. I didn’t have much experience in Lua before, so there is a lot of too complex code that could have been simpler if I had known the existence of some features. The clumsiness of the code slowed me down in the later stage of development. Adding new moves to the player character was very painful, and later almost impossible. I had to remove a lot of planned features because of this. However, it’s not only a bad thing: in the original plan – there was no design document, everything was in my head – the game was much longer, had multiple areas and bosses. In other words: too big, too complex for my skills. Having to simplify the concept was very useful and made the game much better.

However, it was still a bit too big for my current “experience level”. The game has poor balancing, a lot of game-breaking bugs I failed to fix, story that makes no sense. It never reached version 1.0, I never managed to find enough energy to add the missing features. They were pretty minor, fortunately, like missing icons in inventory. I didn’t want to work on that project anymore, I had started to hate the whole game. I almost canceled it numerous time, I even had to take a week-long break before I was able to continue the project. I don’t regret making it, but if I could move back in time, I wouldn’t do it. It wasn’t very pleasant experience, shall we say. I don’t know why, but I just didn’t enjoy making it after the start.

However, the project was useful. It improved my code a lot, once again. There are always new mistakes to be made, and I’m glad I made a lot of them, again. Just like Operation Fungus, A Journey to Eternity got featured on Game Jolt. I just regret I didn’t release the game earlier. Some feedback would have been good to make the game better. I had a reason not to release it too early: I had got a wonderful thought to make the game world first, then add objectives, then enemies. That wasn’t a very good idea, it prevented me to release the game until it was almost finished. But like I said, one more mistake made, one more lesson learned.

After “A Journey to Eternity” I started numerous projects, once again. I tried to do 3D stuff with OpenGL, but it turned out my math skills were limited – despite being the second year math student – for too many critical concepts, like lighting, so I gave up and moved back to 2D. Journey took over three months to get finished, so this time I wanted to make something much smaller. Too bad I didn’t know what this “much smaller” was. I started projects, I canceled projects, I abandoned projects. Finally, in late October or early November, I wrote an updated version of the game engine that run Journey. The new version had much better code, but hardly any new features – not that I even needed them.

My goal was to make something smaller. Something much, much smaller. I thought, “Why not to make a Zelda-like dungeon crawler roguelike action arcade game?” Why not indeed? Like my previous accomplished projects, this one started with graphics, too. I never have early prototypes with boxes. The development of The Last Minute Dungeon wasn’t particularly interesting. It took max two months to finish, so it was a pretty small project. But also more enjoyable than Journey. In the original concept the game was much bigger, had 2-3 rounds – the finished game has only one – and multiple boss battles. When I had implemented the “first final boss”, I realized this game doesn’t need other rounds. Almost no one would ever see them! I wanted to keep the game small, so I added the ending scene, fixed some bugs and published the game. Don’t try to reach the stars if you haven’t been on the Moon yet!

Compared to my previous big projects – Fungus and Journey – TLMD had much less bugs, hardly any, at least not anything I’m aware of. It was fun to play, even though the gameplay would have needed more polishing, and the perspective is quite weird. Nonetheless, TLMD was a good little project and a great way to end a year. Like Journey and Fungus, TLMD got featured on Game Jolt, although when it was still in devlog state without a playable build, so not many people have played it. But I don’t care, at least I made it.

However, compared to Fungus and Journey, TLMD hardly thought me anything new – maybe a better way to handly object depth buffering and some other minor things – and it didn’t improve my code quality that much. It was like routine. I usually avoid game projects that are purely routine since they are rarely interesting. Yes, they have a bigger chance to get finished, but is it worth it, is routine what I want?

After TLMD, I had no idea what to do next. I decided to learn something new. Why not SDL? SDL 2, in this case. I made a small application that opened a window, took key input and drew simple things. However, for some reason I got idea to port this C++ application to C! Not a good idea, but at least I learned some C – and learned to hate it. I went back to C++ and wrote a better SDL 2 framework that I later used to port my game engine I had used in Journey and TLMD from Allegro to SDL. That work is now done, although I wouldn’t call it “a port” even though the API is similar, but the new engine lacks of some features that aren’t possible on SDL without OpenGL – and I avoid using external graphics APIs – and some features were dropped since I had no need for them, but the new engine also have features that were not possible on Allegro without heavy work, like switching between windowed and fullscreen mode without having to destroy the window.

I still have no idea what to do with this engine. I did start a few test projects that I rejected later in the same day. Maybe I should try to do a story-driven game for a change? I like telling stories and making games, so why not combine these things? Very likely I’ll just end up making just another arcade game with no or very little story.

On January 2016, I was still a bad programmer. I knew my weaknesses, and now, almost a year later, I’m no longer a bad programmer, but now I’m an average (hobbyist) programmer! Hooray! Maybe one day I’ll be a good (hobbyist) programmer. Not especially good, but slightly better than the average. I’ll never be an excellent or even very good programmer, I don’t care about programming that much, nor do I want to study it or do it for living. It’s a harmless hobby, a free-time activity, that’s all.

During this year I have noticed something. Something, that could be worrying. I’m not sure if I enjoy game development, not like I enjoyed it before. It starts to feel like work, something I have to do. I spend less time on my game projects than before, not because I have less time, but because I just cannot spend so much time on it any longer. I don’t know why. Lately, I have had to take a week-long breaks before being able to write a line of code.

This could be worrying, but I know what causes this: too much work, too few breaks. I should, let’s say, have a day without game programming once a week, and maybe a longer breaks every now and then. Burning out is a serious issue. Sometimes I just feel like I haven’t done enough game development a day, that I must do more. The funny thing is, there is no “enough”. You can always do more. The problem is in my head, but if I could change the way I think, change my attitude and stop “stressing”, maybe I could learn to love the game development like I loved it before. I wonder how many times I have told myself now I’ll stop making games. But not now, one more project and then! There is always the good ol’ “one more project”.

Anyway, let’s move to the next year. I’ll reveal all my game development related plans for the year 2017, so I can forget them next week and do things without much or any planning. Like before.

2017

Magnum Opus. I know you know that word. Apparently it means “masterpiece” or “great work”. I want to do my magnum opus one day. If I could, I would do it later, when I’m older and more experienced. But there is one but(t): time. When I’m older, I might have a job, own family (wife, kids, pets etc.), a house, friends to meet and other things that prevent me making games. But now, now I have hardly anything else than time. I do lack of experience, though, if I did my magnum opus now, it would probably be much worse than if I did it ten years later. However, no one said that I can do only one magnum opus per life. Sure, only one piece of art – I call games art in this context, whether they were art or not, but making a game is a similar process than making art – can be one’s magnum opus at a time, but what if I make one masterpiece now, and another one ten years later, if I have time? The old masterpiece will lose its “magnum opus” status, sure, but then the new work will get that status. This feels like cheating, but who are you going to complain to?

What else? Well, it could be fun to release a commercial game, but to be serious, I rather not. Sure, money is fun, it keeps you alive – coins have a lot of minerals, I have heard – but making a commercial game requires more effort, it requires a polished product and a lot of marketing if I wish someone to play it. And I don’t have time for that – marketing, I mean. I’m not willing to spend so many hours in front of a shiny PC monitor that kills my eyes only to get my game a few more followers. I’m already trying to minimize my computer usage to max three hours a day, and I really should reduce that amount a little more to improve the quality of my sleep – or then stop using other monitor-devices.

Now I forgot what I was trying to say with that argument. Oh well. But I mentioned improving the quality of my sleep, what did I mean? Well, those monitors, they are killing my eyes, especially in winter when the air is so dry. My eyes get tired too easily, so I don’t have too much extra monitor time, and next year I might have more school-related things to do on computer. Also, computer makes my back ache – not exactly back, but I don’t know an English word for that area “below” my neck. That problem might be possible to fix simply by improving my working position, so not all hope is lost.

Now I fully lost my point. Let’s just say I won’t be making a commercial game, so if I make my magnum opus next year, it will be free, like all my previous games. Money is for poor.

I try to get at least one game made next year. That should be an easy goal since I made 2½ games in 2016 (½ because one of them was started in the previous year). It might no be any better than my previous games, but who cares? I do, so I try to make it at least a bit better. Or then I make a horde of shitty games, that could be fun, too, and then release them under an artist name or some kind of alter ego. Because, why not?

Maybe next year I’ll learn to make music. That would be helpful since my composer’s workflow is a bit different than mine. He has another project to worry about, so maybe that’s acceptable. By being able to make my own music would also help in jams and compos were teams are not allowed, not that I want to join these things any way.

Well, I have nothing else to say on the year 2017. Whatever happens then, shall be a mystery. I cannot foretell the future, but neither do I want to. Surprising events are the salt of a human life.




Well, this blog turned out to be longer than I had estimated, but I’m pretty sure no one would have read it even if it was twice as short.

EDIT: But still too short. I wanted this to crash your computer, but apparently it doesn't do that. Now I'm sad.


Heh, your plans for 2017 are quite similar to mine. (Start making Magnum Opus, start making music...)
Posted by Zuurix December 30, 2016 12:26 - 3.8 months ago
| [#1]

Quote
Heh, your plans for 2017 are quite similar to mine. (Start making Magnum Opus, start making music...)

And I can expect the result to be pretty much the same: "Maybe next year..."
Posted by Jani_Nykanen December 30, 2016 12:34 - 3.8 months ago
| [#2]

Recent Activity
 
Active Users (0)