• Advertisement
  • entries
  • comments
  • views

Entries in this blog


[Tangling with the game episode 1] Cleaning up the mess, refactoring, completing documents

[font="arial, verdana, tahoma, sans-serif"] [/font][font="arial, verdana, tahoma, sans-serif"][size="2"][font="arial, verdana, tahoma, sans-serif"][size="2"][font="arial, verdana, tahoma, sans-serif"][size="2"][font="arial, verdana, tahoma, sans-serif"][size="2"][font="arial, verdana, tahoma, sans-serif"][size="2"]I started by gathering every bit of document/email/jabber talk and smoke signal that was related to game concepts and mechanics. This took a while since I have neglected it for about a year so it was all around the place. Some documents were on my mail, some were on my google wave, some on google docs, some in other weird places you do not want to know about. After 4 painful hours I ended having nice 43 pages long document that contains general ideas about every aspect of the game which means that there are no specifics there like "every-ship-detailed-that-will-be-in-the-god-damn-game", instead there are general ideas how ships should be constructed, how for example, combat should look and so on. This is a bit horrifying when I think how big will be this document in final version when all details will be put in there.
[/font]After that and a bit of valium I started to do the same with source code. This was a lot easier to collect, everything is either on my backup servers or local git repositories so this took maybe 15 minutes. Problems started later when I started porting stuff from old framework to current one (it evolved over time, take that creationists!). It did work but it was unclean, full of hacks and messy. With nothing better to do, I started working on it which resulted in some re-factoring, cleaning and bug-stomping. Which resulted in about 12 commits for just damn bug-fixes (granted that those were small, but catching this nasty pests took time) and 4 big uns (refactoring).
[/font]I had most fun when I took at look at old test suit wrote for the client. It was one big mess, to the point that test functions were launching in random order and it was unable to control. I decided to not bother to fix it and simply rewrote it from scratch + import payloads from earlier versions. It's simple and it works.[/font]
def exec_tests(self, test_list):[/font]
Test runner functions.
@param test_list:[/font]
run_lst = []
for func_name, func in test_list.items():
if func_name != 'self':
run_lst.append((func_name, func))

t = 0
speed_factor = 0.2

for t, func in enumerate(run_lst, 1):
reactor.callLater(t * speed_factor, func[1])

self.test_mode = False
reactor.callLater(t + 1, self.listen)

I've also came to a decision how to progress with my project. Decided to go with many small milestones approach with focus on "develop one thing - test it hard and then expand it". This should keep me motivated as I will see constant progress and at the same time, with constant testing, I won't be left with some annoying bug lurking to pop out later.



Hell breaks loose

Years ago there was a game. A game which was online, browser based, action paced, required proper teamwork and was generally fun. It was hardcore and unforgiving, in mere seconds you could've lost weeks worth of turn-saving (and hours worth of game-play). The game was TDZK. Some of you may remember it, most don't because they either got faulty memory or never played it (which is where Linus rule comes in - you are ugly, fat and stupid).



Yup, those were times when most people were using dial-up connections with laughtable speed and latency so voice comms were impossible for most part hence in order to communicate in real-time we had to use irc (on top of that AJAX didn't exist and later on it was "just born and nowhere used 'technology'" so another YAY for OOG chat). It was glitchy and buggy, servers used to die more often that you would like but we still loved it for the trill and deep mechanics together with twitchy combat system and awesome community.

Years passed, hi-speed internet connections became common. Because of that, more "new agy" games become available for broad market which started stealing players from said game (i blame EVE for most part as it managed to steal my heart too). To make long story short, the game died in a year because of lacking player base and new version being a total crap instead of revolution. Finally servers were shut down and we all felt that something inside us just died. There were many petitons to authors to release the code so we can host it ourself and just have fun but admins refused any of offered solution. TDZK never saw daylight again.
nostalgia block>

When it became obvious that we will never see TDZK again, in my spare time I've started to re-write the game (i have all the sources I've ever written so I will post some of them later in the series). Soon I realized that this will not work as it is too big of a project for one man to handle and currently I don't have a lot of money I can just dump on a project that will never pay itself back. Project was scrapped. Couple years later I picked back on it, but this time from another side. I decided to write an online-gaming framework.
[size="2"][color="#1c2837"][/color](C)[font="Arial"][size="2"][color="#1c2837"]) that was working on mechanics for game (which would be used as engine demo to potential investors/clients). After 2,5 months I had a working tech-demo that was even sorta playable (there was a map, ships, weapons, asteroids and so on. Heck you could even move around and shoot) so I rushed off to hunt for money.[/color][/font]
[font="Arial"][size="2"][color="#1c2837"]I found an investor quite fast, everything was going great for couple months when we parted ways (for reasons I won't mention here). I was left with a good net framework (that was almost complete) that sadly didn't have any actual game functionality, just supporting libraries that provide you with structures you need.[/color][/font]
[font="Arial"][size="2"][color="#1c2837"]Essentially I could take current product, spend about 2-3 months of my spare time (80-90h/month) and get a game rolling as all I had to write is logic and not bother with other crap. Problem was that I would also have to develop a client for said game (engine had set of dev clients that were handy with testing and development but useless for a player). Since I hate to develop front-ends and currently didn't have much money (yet-again) to push it to someone, I decided to use this assets in a way that can bring me instant gratification. I simply moved this framework from games to just-a-network-framework and started to use it with my clients.[/color][/font]
[font="Arial"][size="2"][color="#1c2837"]I simply was developing everything with it - blogs, shops, auction systems. Almost anything that came from my hand was based of that framework and it was great, I got to play with my tool, expand it's functionality and only interface I ever had to work with was to define packets container (the dude that was working on a client recieved protocol spec [for web it was just JSON] and worked with it). Perfect isolation[/color][/font]
of this project block>

TL;DR starts here>
Why am I bothering you with all this details ? Because now, after so many years of struggling I've decided to do what was my intention in the first place and write the damn online game of my dreams. It will be hardcore, it will be fun and it will be done. As we speak I've cleaned up the code and started worknig on game logic. When I feel that there is enough in there to name it "playable" I will start looking for a team to develop a proper game client [the one I'm developing is command line and in no way someone will try a game where he has to type commands] for it (be it web or stand-alone). Those will either be paid jobs or volunteers or mix of both (most likely) but that's for later.

In later episodes of this journal I will cover my progress, issues, release notes and some funzies too. I will also publish some of the game concepts as they are implemented. Wish me luck as this will be a rocky journey.


  • Advertisement