Let’s start from the beginning
At first, when I heard about the competition from my friend I thought to myself:
It’s a perfect time!
Oh how mistaken I was…
You see, I was already thinking about setting up a devblog and had most of it prepared. It also seemed that I have a lot of free time in my day to day life.
Seems like I was going to have some kind of an easy start and an advantage to prepare in advance right?
Well, the truth is there never will be a perfect time for anything.
It turned out that I had a lot of issues that turned up just before the competition started and all my extra time advantage quickly disappeared.
Now, I decided on my project idea in a rush just a day or two before the competition started, I made some final touches to the blog’s layout and styling just the day before.
And just like that, my thoughts on being well prepared and having a blazing kick-start faded into nothingness.
Because there never will be a perfect time for any opportunity, it doesn’t mean you shouldn’t try anyway.
Nevertheless, be prepared that even when the time seems right things can quickly turn sideways.
Expect some good surprises
My initial idea of an full text-based game in a terminal-emulated environment was nothing new. Because of that I decided to look for some library for terminal emulation and, lo and behold, I found out that about Amaranth.
Amaranth was a project that Bob Nystrom open sourced along with his libraries for terminal emulation and utilities.
After a quick glance on the API of his Malison library I thought that it looks great and I’d love to use it!
The problem was, Bob didn’t maintain those libraries after open sourcing the code.
It could have been a non-issue but I had a hunch I would need to patch some things up sooner or later.
I typed a few words and asked Bob, if he would be kind enough to move the code to github (which he already used for a while but didn’t move the source code for this project there).
About a day later I received an answer that Bob imported the projects to github and gave me the links to those.
After a quick ‘Thanks’, I immediately forked his repositories and I suddenly realised that I kind of became the maintainer of these libraries.
I upgraded the solutions to latest Visual Studio versions, added a simple .gitignore, updated the tests and the libraries were ready to use for anyone out there that needed it.
Before the competition even started, I was sitting on two more repositories that I would work with in the months to come - and it was great!
Be warned of issues to come
As I hadn’t put a lot of thought into the general project idea, I was bound to run into the idea changing or evolving throughout the competition.
Many of my initial assumptions were wrong, and so, a lot of code refactoring happened.
- My technology stack changed.
- Player controls were switched from fully keyboard based to mouse based.
- My requirements for dependent libraries grew and I was the one who maintained them.
- The idea evolved from a farming simulator where the player controls a single character to a game of farm managing where player controls multiple units.
- I decided to implement my own game engine and code it on the fly alongside the game - which of course was put to the heaviest amount of changes.
Another reason for changes, and one that I was expecting to throw me off the course was my lack of knowledge in some of the lower-level aspects of game development.
For example, I had a general idea about how game loop looks and how it should be implemented but I didn’t have the experience of actually implementing one and experimenting with it to achieve desired results.
At one point I even had a working skeleton of a multi-threaded game loop to counter the performance issues, but it was scrambled as it brought even more issues with itself.
Teaching is learning
My lack of experience brought light to another realisation. When I tried to implement something I didn’t know very well and decided to write about it, explain it to potential readers I had to really know what the heck I’m actually writing about.
If you want to teach someone well, you have to know your shit well.
Because of that I had to do a very thorough research to know what I’m doing, explain the problem in an easy way and avoid shaming myself or being corrected.
But the result of such research and a blog post following it - is that I really understood the issue.
Whenever you want to try a new technology or framework, just hop on to it, try to make something and teach people about it. Blog about it.
Not only you will get to know the domain in question a lot more better but other people, like you and me, may read your post and learn from it too. It’s a win-win situation.
You probably experienced it too. You googled some issue and stumbled upon that one blog post that explained everything and made things crystal-clear. Or clearer at least. Be that person, and express your thanks to those who do this. Don’t worry if the post is 2 years old. If it helped you - it’s relevant.
Blogging takes time
What surprised me the most was my actual experience with writing blog posts.
I have never blogged in my entire life so I expected it to be something hard, time-consuming, and that I wouldn’t have a thing to write about after first two weeks of the competition.
I was surprised that it was way easier for me than I expected to express myself and write posts on a regular basis in spite of low amount of free time throughout the week.
At first, because I was a bit afraid, I wrote first two posts in preparation, with thorough spell checking and re-reading.
That took more time though and soon I had to ditch this idea because of my lack of time.
You see, I didn’t write posts that are a three- or five-minute read. I always wanted to put a lot of effort to create valuable and thorough content.
The consequence of this was that making a single post took a lot of time for me.
Averaging on more than 2 hours per post and more than 4 hours on the most challenging one, I have spent a little less than 50 hours total on only writing the posts.
While that may seem a lot, take into account that it took place in a little more than 10 weeks of actual work. That’s about 5 hours per week.
Trust me, even with a schedule as tight as mine you can find this amount of time and more.
Code by numbers
The numbers are not as high as I would love them to be, but a summary is a summary so here it goes.
Starting from my project repository.
- Total of 27 commits (I should definitely commit more often, I know)
- 7299 lines added
- 2849 lines removed
Next up, Malison - the terminal emulation library I now maintain.
- Total of 11 commits
- 1938 lines added
- 971 lines removed
And finally, Bramble - a small utility library.
- Total of 3 commits
- 4358 lines added
- 770 lines removed
While these numbers also include some configuration files and so on, I’m actually a little bit disappointed in myself personally, that those are numbers are not as high as I would wish to.
I didn’t really advertise myself anywhere else so I expected little to none interaction.
I have tweeted and posted on Facebook about most if not all of my posts and some of the tweets actually gained a little bit of attention!
I have no idea if these numbers are big or low but to me, a person who never socialized anything on twitter on facebook they seem very surprising.
Summary of my tweets throughout the competition
And, my the post that gained the most traction was the one I put the most effort to - the introduction and explanation of game loop and it’s issues.
Another positive surprise was the fact that I gained some followers!
17 followers to be exact. Not much, I know but 17 more than I expected!
In conclusion - use social media, you can be surprised with the outcome. Also, facebook is much less traffic generating unless you start to put money to advertise.
As some of you who actually follow my blog might have noticed, I started to post more rarely. That’s because I’m a little bit burned out on the project and putting myself to work on it is not as enjoyable as it was in the beginning.
Maybe that’s because of all the refactoring, maybe because I was constrained to constant pressure of working and writing posts for this period of time.
Still, I’m going to stop working on Praedium for now. Whether I come back to it again, or come back only to develop it’s engine further is something I cannot really give you a word for.
For now, treat it as abandoned until further notice.
If you are interested in the source code, it’s put on github under the MIT license so feel free to tackle with it if you want.
Wrapping up or TL;DR
Daj się Poznać was a very good experience to me. I wrote some code, discovered that I like to write blog posts and learned a lot throughout the competition.
I have 3 more repositories under my name and 2 libraries I now maintain which brings me a smile and hopefully someone will someday use them to create something interesting.
As of Praedium - my project, it is unfinished and definitely not much has been done in terms of gameplay, but in regard to engine and project architecture - I have learned a lot and improved based on that so maybe the code might prove to be useful for someone else too.
I’m definitely going to keep on blogging, but definitely not as much often - 2 posts a week really is tiring and sometimes I thought I’m going to give up.
Maybe I write too long posts? (Just like this one) I don’t know, but I’m happy and satisfied with the quality of posts I created.
I’m happy that it’s over because now I will have the time to actually read all the other participants’ posts!
Thanks for reading and see you next time!