Coding

I do a lot of coding, it's kind of like eating and breathing for me. These days though, I'm trying to step back a bit and do other things with my life. Some coding is hugely rewarding which is of course why we do this work, but as you'd expect, some very much isn't. Most coders have experiences of sufferance and pain as it's not always the challenging, creative experience that we entered into the industry for. So here I thought I'd write about some of the good, and indeed some of the bad that we face in this binary world of ours. That is of course when I get the time, coding itself is a big enough time-pit as it is, as most of my coder friends (and their wives) I'm sure would attest.

GRIP, the whole nine yards

So I thought to myself why am I taking all this time to dig into the code behind GRIP when so few people would ever encounter this very much backwater web site? It seemed like a lot of effort that would benefit very few, if any at all. Common sense prevailed, and I developed an online course instead, using GRIP as the centrepiece and unearthing all of its secrets. You can catch it at Udemy, here Pro, Unreal Engine, Game Coding Unlike the original series of blog entries here which was relatively limited in scope, this is a complete course about professional Unreal Engine programming, the first half of which is setting all of the groundwork that you need before it delves properly into GRIP itself.
[read more]

GRIP, AI bot design part I

One of the key problems with developing GRIP was creating AI bots that offered a challenge to the player when in such a challenging driving environment. We've already briefly covered the difficulties and some of the solutions in this field when talking about the public perception of cheating AI, and here in this article we'll dive into the this more deeply to uncover more of the detail involved in developing such a system. We'll start with the fundamentals to establish the bedrock, then follow up a little later with some of the more interesting aspects of the AI design that we arrived at.
[read more]

GRIP, spline dependency

In another in the series of AI articles related to the game GRIP, we will today examine the use of pathways, or splines within the game. Not anything you can see, I'm referring to the invisible splines that bring it all together in realising some pretty core functions without which the game would be nothing. Jumping right in, the obvious example is how the bots traverse each of the tracks in GRIP and this is largely governed by a series of splines that are laid out by level designers during their production. This is pretty standard fare for racing games, ever since the original Rollcage every racing game that I've worked on has featured these kinds of spline in one form or another and as far as I know, no superior alternative has been developed during all of that time.
[read more]

GRIP, cheating AI

Cheating AI. The amount of times I've read this about our game in public forums is beyond frustrating. I am so over having this accusation levelled at us when it holds literally zero truth. Time and time again players blame their losses on our code being unfair, when the reality is we just worked bloody hard to ensure the AI bots provided a solid challenge to players at all levels and always kept you on your toes. And it wasn't easy. It was far from easy. In fact it was some the best work I've ever produced. Yet still, publicly our game keeps being labelled as having lazy, cheating AI.
[read more]

Mathematics, the bedrock of game coding

I used to be pretty poor at math. It's not that I couldn't understand it, it's just that I'm a very visual kind of guy, and visualising the mechanics behind mathematics can sometimes be difficult or even impossible at times. I had to try very hard to understand exactly what was going on behind all of those numbers and symbols, and indeed still do to a smaller extent. Mathematics is core to the whole discipline of 3D games programming, so when entering the games industry I really did have to learn how to level up, and fast. It was a sheer vertical rock face of a learning curve, but eventually I managed to beat it.
[read more]

The Demo Scene, where science and art collide

The demo scene. Almost unheard of for most. For me, the final catalyst that launched me into a career of video game programming. Twenty years ago, it opened my eyes to what could be done with these computing machines of ours. It wasn't about computing any more. It was about art. For a demo was just that, an artful demonstration of what your machine was capable of. Some more than others, granted, but I'd see nothing in a real-world gallery that would impress me more than a high-quality demo. Nothing. Give me a Kewlers over a Klimt any time. But more than art, demos were about skill, for getting those machines to produce these pieces at real-time frame rates was no mean feat.
[read more]

Colour, subjectivity in action

I've known for a long time that colour is a confusing subject. Study colour in any physics-related way and you come to realise that it's just an illusion and not the concrete absolute that we often take it to be. Recently, having written some pretty heavyweight image editing software, I've learned again just how confounding the whole subject can be. Let's take a brief look at why. Back in the day, I would just take a pixel from a bitmap, do some straight linear mathematics upon it, then store it back into the bitmap. Lots of people still do this today, but this is a very, very naïve and destructive approach to image manipulation.
[read more]

Foreign languages, and the art of pain

I've been pretty lucky in my coding career so far, in that I've pretty much managed to avoid writing code that has had to work in foreign languages. Well, actually, that's not strictly true, but some languages are more foreign than others when it comes to storing and manipulating text within a program. Ever since I can remember, with only minor exceptions text has been stored in ASCII or ANSI form within all of the programs that I've worked upon. This uses a single byte for each character stored within a string of text. This is so simple and has been the way of things since time immemorial.
[read more]

Web programming, unnecessary evil

I started doing a lot a web programming recently. I've done some before on and off, but never really in anger. I never fully appreciated the concentrated evil that awaits the unwary web programmer, until now. How many bloody languages do you need to learn to pull off a decent web site? In my day, C++ was enough for any man to do any thing. In the web world, you need to know HTML, CSS, Javascript, MySQL, PHP and AJAX in order to produce anything more than a standard templated site. The brainache is ridiculous. This site in particular caused many headaches with a lot of hard work going into the production of the clean lines that greet you at the front end.
[read more]