Thursday 18 December 2014

Games Design and RTS Games

Inspired by a much nicer-looking blog than mine, I decided to break from my (already-broken) blog plan and wax lyrical about games design (from my perspective, obviously, so your mileage will vary).

A lack of need for innovation seems to pervade successful RTS games, both currently and historically. Starcraft established a trend that Blizzard capitalised on with Brood War, making an expansion that defined multiplayer RTS gaming for a generation (or more, effectively). Nobody really even recalls Warcraft multiplayer outside of some truly memorable mapmods. At least, nobody on a scale compared with the heights that Brood War manages to reach even these days (complaints about how Blizzard have mishandled SC2 aside, for today). However, this very success warped a lot of perception around what a good RTS should be, from both the perspective of management (in the games industry) and from the consumers - the players themselves.

I did warn you that this was all my opinion, and not necessarily fact? Good. Worth repeating.

However, this lack of innovation is also due to two factors.

One, the "niche-ness" of the RTS genre. Nomatter how you cut it, or try to argue it, when compared against other major genres in video games, RTS is niche. RPGs are huge, and translate to the console markets well. FPS (and TPS) are, well, they speak for themselves. Halo defined a console generation. MMOs leverage a huge customer base (if successful, and you simply don't really hear about the failures), and a lot of the time also leverage the popularity of the RPG genre with regards to design (hence MMORPG: I'd argue the only majorly-successful MMO that isn't a strict RPG is probably EVE? Maybe). RTS games do not require a huge amount of people in order to sustain themselves. I can still play Warcraft 3 on my PC and have a good time. I can even play it with friends. But they're not huge. They don't translate well to consoles. They require a base skill level only really found in the up-and-coming MOBA genre (another one I'm actually heavily-invested in, funnily enough) - however the MOBA games leverage both an existing fanbase that grew out of nowhere and the attraction of a primarily-F2P-monetised genre.

On that note, an F2P RTS venture could be interesting if microtransactions were handled right - I feel EA cancelling Generals 2 was a bad move, but unfortunately made necessary by the extremely volatile reactions of the fanbase.


I'm sorry but this looked excellent. The Frostbite engine is remarkable.

Two is the success of existing behemoths. Much like how WoW dominates the fantasy MMORPG space (very effectively, and while I dislike what they've done with it personally you could never say that Blizzard don't put out good stuff on a number of levels), Starcraft is the go-to example for RTS games. You can't compete with it. There's no point even trying, because Blizzard let the community polish Brood Wars to a sparkling gem and then pushed out their specific brand of "sink a billion pounds sterling of polish into the sequel" because that's what Blizzard can afford to do. And yet companies try to. The focus on eSports for newer RTS games (the focus of which split Dawn of War II in half, even if I think the design goals at the time were visionary. But perhaps too visionary back in 2008 - 2009). The notion that games have to compete with Starcraft 2. The notion of capturing the SEA market.


All Blizzard had to do to revive WoW was to introduce time travel.

You combine these factors and not only do you have a mindset that is averse to change (the gamers won't accept it, and therefore management won't risk it) but given the nature of video games development favours making money (it's a business, I never judge developers or publishers for prioritising this, unlike other gamers I know - unless the company is explicitly taking the piss) new RTS games are therefore developed. So you get Grey Goo, which is a fantastic-looking game with a great pedigree behind it . . . but at the end of the day it's still a very typically-designed RTS. Planetary Annihilation breaks several moulds, but for me that's the exception that proves the rule, haha. Company of Heroes 2 is a great game (and I like it more than the original), but it's quite obvious that the backlash to Dawn of War II changing the traditional RTS formula caused Relic Entertainment (or THQ) to go back to vCoH and not really rock the barrel too much with regards to innovations. Which is a crying shame, because Relic are I feel excellent at making innovations. Absolutely excellent.


Sync kills are amazing. Sorry, this picture doesn't get any bigger.

My RTS knowledge, unfortunately, is lacking in some areas. I never played Ground Control. Or Earth 2150. Or a few others that are knocking around. But I have a good knowledge of Command & Conquer, Company of Heroes, Homeworld and obviously Dawn of War. I backed (and play) Planetary Annihilation. I definitely like the genre, but I feel there's a distinct lack of innovations driving it forwards.

However, this doesn't mean at the same time these innovations can magically happen. I was going to wax lyrical about how resource systems in RTS games haven't changed but I focused a lot on the business-side of things with this blog post, so maybe I'll get around to mechanical arguments next time. I'm a developer after all, making games on the side. The technical / mechanical side of things is what I love more than anything else.

Well, if I don't get sidetracked making more modifications for Firaxis' brilliant new Civilisation: Beyond Earth (sod the haters) :P

Tuesday 25 November 2014

Real Life

It hits hard, sometimes.

Busy at work these days (been taking on more responsibility, etc). Got a baby on the way as well (big news, aha!).

So, just checking in. I won't have anything here for a little bit, until I get some of the madness under control.

And then it'll all go nuts when my son (!) arrives in early April anyhow, haha.

Thursday 18 September 2014

Why Java Ain't Bad

So this got horrendously delayed. Real Life™ caught up with me, among other things. The Internet has been worse than usual of late, which never helps things.

This is probably going to be a short one, I'll be saving game talk for next time.

Why ain't Java all that bad? Well, for that we have to start with "why does it have a bad reputation". The reasons for this are numerous, and several of them are well-founded.

1. Java was slow.

And it was - pre-1.4 and even worse prior to 1.2. We're currently on Java 1.7 (also known as Java 7), with Java 8 around the corner (admittedly, late).

However, it isn't that slow anymore. And, as usual, programming techniques factor into this. It's very easy to program something badly and blame the language (some would argue that's the main fault of PHP, *cough cough*. But I digress!).

2. Java was really slow.

Yes, we get it. However, to this day, this seems to be the number one argument against programming anything in Java. Which is odd, considering that the Android OS is built on Java, and more besides . . .

3. Java had no uses that can't be done better in something like C++.

Or more recently, C#. I'm finding it hard to have counterarguments against C# which in general seems to be a very nice language to work with.

Partially-correct. C++ can be blindingly fast if you optimise it well and get a dedicated C++ programmer to work on your project. However, this applies to anything. C++ in general is probably faster for low-level tech, like game engines or the like. Java, however, excels at web deployments due to the supported frameworks that pervade the web (Tomcat being a popular example).

4. Java was bad for graphics.

And so it was. But again, this isn't exactly the case anymore. The object-oriented approach of Java also lends itself well to designing graphical programs.

5. Java is closed-source so therefore it's bad!

Yeah, I've had this argument thrown at me before, and I'm still not sure what to make of it. Just leaving that there for posterity.

Basically, your mileage will ultimately vary. There are uses for Java, and there are uses for a lot of other programming languages out there. Even if Java was objectively better than C++ for developing a game engine (odds are it isn't, even if you call garbage collection manually to optimise your runtime performance) . . . you still have a team of engineers who're proficient in C++ and not necessarily Java (and while good programmers can adapt between languages, you still run that adaption cost during an ongoing project, or delay between two projects. Never ideal).

The point of this ramble is simply to say that Java isn't bad. Not anymore, and not for a long while. You can use it to make decent, complex applications. You can use it to power a suite of web services and the deployment is incredibly straightforward (I'd know, I've done it). You can make graphical applications, though your experience with 3D in Java may vary. Everything works as well as you program it to.

There is one exception, that I feel obliged to point out. Java's Swing library (the main UI library used for creating visual applications - javax.swing) is a moderate pain in the arse most of the time. The remainder of the time it's a collossal pain in the arse because as soon as you deviate one inch from the prescribed behaviour of the library, it gets really messy, really quick.

And that's not even counting the quirks and outstanding bugs that have never been fixed, some of which are simply because Oracle (the parent company) like having hissy fits at Microsoft. But then again, a lot of people have beef with MS (not me personally), so I shouldn't blame them for that.

Until next time!

Tuesday 29 July 2014

How I Started My First Game

It wasn't even a video game!

Let's go back to the summertime of 2008, at least I'm pretty sure that's the year. A good six years ago now, at the very least. I was on holiday with my family in northern Portugal, somewhere I thoroughly recommend for both the cuisine, landscape and a very decent selection of beverages.

There were downsides though. My family likes walking. Hiking, even. Now, I'm not really opposed to it at all, and at the time I was very in shape, but it basically leaves my mind incredibly bored for several hours at a time as we trekked up a dusty trail, seemingly with no end. When I was a lot younger, my brother and I would invent fantasy scenarios and sometimes act them out, but by the age of 19 this was a bit . . . well I probably shouldn't even say childish. Not approved of by social conventions by our age? So I resorted to doing a similar thing in my head.

Spoiler: details of Avatar: The Legend of Aang follow. It's a great animated TV show with humour and panache for adults as well (at least, young adults). I recommend it!


I was thinking about The Legend of Aang (TLA, ATLA or A:TLA), and about how neat the concept of a set of elemental societies in their own cohesive world was. Unlike Pokemon, which restricts itself to a particular region at a time and didn't do a fantastic job of worldbuilding in general until the number of regions got excessive enough for them to realise they might want to connect the dots (there are only so many cruise ships in the world, yo). In TLA, there are four elements, Earth, Water, Wind and Fire, and each of these corresponds to a specific nation that the envoy of the World Spirit (or somesuch spirit) called the Avatar is destined to keep in check. Each nation has a specific style of shaping the elements (known as bending), inspired by certain classical forms of Real Life™ martial arts. It's set in a vaguely medieval period (late medieval into renaissance, as far as I can work out) and each of the individual cultures contrast fantastically (that's a lesson in itself) as the show is about building tolerance between these nations as well as averting a way/beating the Big Bad/doing awesome elemental stunts.

I was inspired thinking of a similar setting. Originally, I was simply wondering how the series would evolve into modern-day terms (something the sequel, The Legend of Korra, as worked on by advancing the setting into the industrial era), and then I got distracted thinking about if they could form proper weapons out of their elements (instead of just focusing it like a whip or blade), and then what our Earth would be like if people had similar abilities.

This is an opportune time to mention a good, recent Polygon article on stealing vs. re-inventing parts of another franchise - click here if you want to read it. The general gist, though obvious to some, is not to copy things wholesale, but to find the things that make that piece of media great and emulate that.

A pad of paper (once we'd gotten back from the hike), a pen and a few hours later, and I had a rough idea of this world, this parallel Earth (done to death, I know), but one where humans had the ability to harness core elements from the start. I modified some of them, at the time mainly in name only (but not theme) just to avoid direct comparisons. I later expanded on the reasoning for these changes and justified them. Even to this day I've been refining them, redrawing the base icons for each element and wondering if I could do something better. They are Fire, Ice (fire and ice have various links in mythologies, and I find it a better parallel than fire and water), Metal and Air (or Wind, I keep swapping them).

The main difference I had come up with was the ability to combine elements. Now, bear in mind this was before Magicka, or at the very least before I'd touched (or really heard of) that game. Probably not the first to do it, but I've played quite a bit of that game now and it's one of the first games that lets me combine elements in a neat and sensible (ish) manner. Open to suggestions if other games like it exist! This system went through years of revisions and updates, and isn't really relevant to this blog post, but I just wanted to mention it as the first major divergence from "The Legend of Aang in our world". A lot of the basic tenets, like the combining of elements, was thought up during this holiday to Portugal (it's amazing I found time to actually socialise and sunbathe, really) and I even starting on worldbuilding (as an avid reader and even amateur fiction writer, I've found the idea of a solid background setting extremely appealing when playing a game or even watching a movie or TV series), rewriting key areas of history from the point of humans having these newfound powers.

This continued for some time, undergoing at least one or two major lore revisions in the following year at university, before eventually it was something I shared with friends and acquaintances. In my final year I used the setting as a basis for my first actual game (in Unity 3.5) and this blossomed into a rough, unpolished but still high-scoring module. The general strengths were the character creation and the thought that had gone into the setting even considering it was a basic RPG template at the time. I look to continue this at some point, but I've gotten sidetracked by further work on this setting, or Phantasmagoria as I've come to call it. I've even been building a 2D sprite-based game based on the setting in Java to continue building my skills as both a programmer and a game designer. More on that in a later post :)

Games Development Project, Main Menu
Games Development Project, Main Menu

A random musing on a popular cartoon show turned into a project I've invested quite a bit of time into! It's taken several years to get to this point, but I don't mind that at all. I can't afford to work on it full-time, and I quite enjoy the relaxed pace at which I develop it.

Next time, the evolution of the Java project of Phantasmagoria, and why I struggle with Java even considering it's detractors in the world of programming!

Monday 14 July 2014

Building Game Tech

So, I said a week before a post on making games. For me, within a month is a pretty good deadline for a blog post. Fantastic, right?

Warning: this post contains a lot of specialist language and abbreviations. Familiarity with programming or project design is recommended.


I do everything from scratch. This is not wise, and unless you want to get a thorough understanding of everything that annoys you about your programming language of choice, I do not recommend it.

Why? I like building stuff. I like finding out how stuff works. While I often lose interest with the nitty-gritty parts of, say, the JVM (Java Virtual Machine), I take an almost perverse pleasure in exposing why a particular part of Java's Swing library is behaving like a spoilt child. Below is a case in point:


This was for something simple; organising a game's scoreboard into something that was more visually appealing than a simple text string. Got it working in the end, the result I'm quite happy with:

Score List for WarGames Offline
Score List for WarGames Offline

But it took me something close to half a day to track down (I do this in my spare time; my real job is web development). A lot of people (probably rightly, hah) would blame me for using Java. But to be fair, a lot of language have issues like this. Every language has a list of long-standing issues that haven't yet been fixed (this issue has been documented, as early as 2005, but still not fixed). Maybe Java has more than most, who knows. It's the language I work with at work, it was the one I was taught at university, and I'm too invested in my projects (in Java) to have the time to move even to something as similar as C# (even if Visual Studio is a beautiful, appealing piece of software).

Back to building game tech, which I'm loosely-defining as "anything you can regularly use to help build a game project". Finding these little idiosyncrasies in whatever programming language you use is critically important. I adhere to the adage of "get it working, then get it working nicely", but you do need to ensure that the basic stuff does, in fact, work, and won't fall over when you forget the code it contains and use it for something avant garde later on in your project. I have an IOCore class that I've used in pretty much every single project so far, and all it does it wrap file read/write operations in a single class for ease of use. I first made it four years ago now and it's still managed to go through numerous revisions, optimisations and feature creep (like adding support for read/write byte arrays for hex-editing file headers).

Documentation
Always document your classes. Every time, all the time.

You have to be sure it works. Otherwise you get fun stuff like your program creating a folder structure four levels deep in My Documents because you accidentally forced it to always create the folder structure if it didn't exist, instead of simply not creating the file in the first place.

  • Don't build things from scratch. Unless you really want to, or you're really bored.
  • Libraries are not bad things. They're usually made by very good people and do really handy things. Like Google's GSON project - invaluable and let me tell you writing an XML or JSON parser by hand is an awful lot of work. I'd know, I made an XML parser myself. Then I trashed it and rewrote the project to use JSON with GSON.
  • Thoroughly test the classes you're relying on.

A lot of this may seem like common sense (and is), but this is a cautionary tale. I've learned a lot from my mistakes, and I'm competent enough with Java that sometimes writing stuff from scratch is actually easier than sourcing an obscure library. I'm currently looking at hit detection, and the only source for convex hull generation I've found is written in C++. The guy didn't give his variable pretty names either (a common trait, I find, with C++ programmers!).

You'll know once you've made a useful class, or a useful piece of tech. Because you'll find yourself using it everywhere. I've got a simple ComboBoxRenderer that I use because the default renderer is ugly as sin. I've got a custom WindowSnapper class for JFrames that closely emulates the native Windows behaviour for it's components. Not sure how it plays out on Mac and Linux, mind. These things are games tech, and will feature in all three (or four) of the projects I'm working on. They're useful. Share them, plug them in blog posts (am I right?), because other people will find them useful as well!

At least, I hope they do. Next time, a showcase on one of my games projects.

Friday 20 June 2014

Radioactivity

Bit of an odd word to title a blog post with, but recent events inspired me.

I was going to do a games design/programming piece (with pictures!), but that'll have to wait a week or so. Instead I'm going to talk about a rather personal Internet-based story; that of making friends and losing them.

If you know me (and most people that bother reading this will to one extent or another, then you'll know I can be abrasive. I did a whole blog post on the trolling vs. attitude thing, and it's a thing I live by (however much you believe that is up to you!). This abrasiveness comes from a position of being invested in a subject. Be it a video game, a video game developer, or a moral outlook that shapes how I view the world. I have a set of facts that I know for sure, and I base my opinions off of that, like everyone else does.

Except when I disagree with someone, or someone disagrees with me. Then it comes down to "who knows more facts", or whose facts are more relevant. Kinda standard debating really, I mean, that's how Oxford scholars win actual debates instead of pretend ones on the Internet.

So something went down, some guy called me out on my experience in a couple of areas. One, playing a game (fair, I don't have a lot of time for games, and as such my "most played games" amount to 200 hours on Steam each, with dedicated community members hitting 1000+ hours easily in the same games), and two, games modifications. Now this I'm much less likely to agree on, being heavily involved in the modding scene for Dawn of War across a number of sites (and games). Things I regretted were said, I blocked him from my Steam because I wasn't able to put up with his behaviour anymore, and I'm sure he thought similar of me.

And this is the most important thing to realise. No-matter how bad you feel, you've evidently caused this reaction in the other guy (or gal). Whether or not it's justified is completely fecking irrelevant once offense has been caused, because it causes an aggressive spiral that gets out of hand amazingly quickly.

So where am I going with all of this? Radioactivity; the negative potential of relationships build online, lacking that personal touch where you're able to laugh disagreements off. Fallout; the thing that arises from the consequences of a radioactive situation going nuclear. I love science analogies.

You have to shrug it off. Bridges burned, whoever's fault they were, are burned. You can't go back anywhere near so easily, regardless of how right or wrong you think they are.

So writing this is a form of catharsis for me. I've dealt with more than one disintegration of an online friendship before, and it's never nice. But I thought myself old enough to handle them better these days. I was wrong. They always happen. They'll always happen. You can't always please everyone, and they can't always please you. All you can do is hope they have success in their lives, and get on with making that success in your own as well.

But, for the record. No-matter how much of an ass you think I am, I'm always available to PM, or contact through Steam. That's just the kinda guy I am. I find personal exchanges much better at sorting issues out than snipes over a forum thread or some similar stupid setting.

Next time, some actual games dev talk! Been wanting to do this for a while! :D

Tuesday 27 May 2014

Studying Games Development

I'm rather slow at updating this blog. Something something be more committed to deadlines, something something. Anyhow, onwards!

Games development isn't for everyone. It's a profession in a hobby, before you even get to the professional level. It's something you have to want to do. This may seem like common sense, but I see people not treating it seriously even in matters as small as games modification projects.

At least, that's how I view it. I welcome other opinions from those who're actually in the professional business, instead of floundering around in Amateurland like myself.

You have to immerse yourself in the field. Even if you're a genius, I'd imagine. Even if you've got a handle on a brilliant, simply fantastic idea that'll turn into an international hit. You'll encounter problems, be they technical or even social in nature. You have to learn to manage expectations, far more than you would at an ordinary job. The gamer/games fan is a loud beast, and not shy of giving you critique. Conversely, when you're starting out, you don't have anybody to manage. Getting any feedback at all is preferable to no feedback, even if that feedback is terrible and ain't indicative of your game.

You have to immerse yourself. Follow developers on Twitter, read up on GDC articles and slides. Gather as many resources as you can, because every piece written by someone in the industry is an education. I've read articles on neural nets, A* searches in pathfinding, rendering techniques . . . some things I don't understand fully, others I have enough of a background in the relevant areas to get what they're on about. It's a learning process.

It's also why it's possibly so difficult for people to keep at, especially in the amateur circles. All of this takes time, time you find eaten up maintaining things like Twitter, the web forums you invariably end up on, blog posts (har de har). You have to tie it all in, in order of relevant, to your own projects. You have to be disciplined. It's almost like a second job in itself, only you don't get paid for the pleasure. Thankfully, if you are invested in it, it can be rewarding in itself. It can be frustrating in equal measure, but that's something that comes with the gig. Nothing is free, even if there are days you feel like this trying to figure out a problem that turns out to be stupidly simple in hindsight:


Nothing in life comes for free. You don't have to be a genius to do games development (but, as with a lot of things, I figure it might help). That's enough of the generic life advice, mind.

Games development comes in many forms. The important part is - what do you want to be? 3D artists are generally (nearly always) artists of some description first. Career progression there is pretty simple, though sometimes a matter of luck (as a lot of job-seeking is). Programmers, ahh, we're the mad ones. But it's fun, fun I tell you. Then there are the games designers. The job people think is terribly easy and that developers suck so much that they can't see just how wrong they are! But it ain't easy, not one bit. A games designer has to immerse him-or-herself in as much information as programmers have to immerse themselves in APIs and third-party libraries.

Heaven forbid you attempt to do all of it at once, to make a game by yourself. But ultimately, that's the best way to get noticed.

Read everything. Understand that the people in the industry got there because they deserve to be there and because they worked for it (as with any job discipline, there will invariably be exceptions. That comes with being human). Learn from them. It's very easy to say someone sucks at their job. It's a lot harder to do their job for them.

Perseverance is a powerful human trait. Heck, it took me from:


To:


In a couple of weeks, coding an hour or so a day. Not a great achievement by anyone's yardstick, but an achievement for me in that it was my first working game (and evidence that the platform beneath it works). A culmination of everything I've read, by people still far, far better than I.

So, what're you waiting for? Get reading!

Friday 16 May 2014

Being An Ass Online

Being an ass on the Internet is incredibly easy. Even if you never wanted to be one.

When people say "watch out for the bad people on the Internet", one day you may eventually have a realisation akin to this:


Forums can be a toxic place to spend your spare time. Especially if it's your spare time, that time you usually spend to relax. Don't get me wrong, there are plenty of good, constructive forums out there. You meet great people - I've met great people.

But then there are the trolls. The people who literally have nothing better to do with their time than waste everyone elses. Often distinguished from people who are genuinely upset or confused because those people you can either convince, or understand their grievances. Trolls are the people that'll say one thing in one thread, because OUTRAGE, and say another thing in another thread because they don't want to agree with that specific brand of OUTRAGE. They're even easier to spot if they pull this kind of stunt in the same thread they started off in.

And this is why we have moderation. However, after so long, after several sites, after moderating web forums for over five years . . . you kinda end up like this:

 

Myself included.

The problem sets in when you believe that you are right, because you have this wealth of experience. That you couldn't possibly be wrong, because goddamnit you're so used to these trolls that you know that they're trolling.

But you've lost sight of something important. You've lost sight of that chance that you're meant to give all angry, confused people you meet, whether online or in Real Life (heaven forbid). There are often reasons for this; disillusionment with moderation, an increasingly-hostile community, a changing perspective that comes with age, less free time to deal with the online drama people love to create . . . but those reasons don't excuse the end result. You're potentially making the situation worse.

You're turning into a troll. Or an instigator at best. You've gotten so used to arguing against the same people all the time that you don't give them a chance anymore. Even worse, people have formed a similar image of you, because that's how you've rolled for a few years. Impressions stick around for far longer than the consequences of your actions do. Or perhaps those impressions are the most important consequence of your actions. Think about it.

Take a step back. Look back at who you once were, why you first contributed, got involved, helped people out. Is there anything you can do? Of course. Just sit back, and relax. Think twice before you hit that Post Reply button.

Take the time to think . . . how am I coming across?

It's never too late to address how people perceive you. And hopefully, like me, you'll realise it's all too easy to be an ass, and hopefully get your head around the necessary steps to change that.

It's a part of growing up. The Internet is with us, for better or worse. The best we can do is slow down how much it changes us.

 

This blog post was totally not an excuse to roll out some of my favourite image macros.