Barebones

An email from my VPS provider this week notified me that they are ceasing to offer that service, which means that all my download links, self-hosted flash games, and other pages dependant upon it would cease to work come August 22nd.

That prompted me to take a closer look at the wider state of this site than I have in a long time, and to realise how little it is now representative of where I’m at or who I am. Rather than comb through all of the pages in the ‘Projects’ section in order to update all the download links, etc., and all the while cringing and wishing I had the time to rewrite every last syllable of every page, I’ve elected to remove the entire section for the foreseeable future, leaving just the main, blog post display, and the ‘About’ page. Links from previous posts will likely remain, but shouldn’t work anymore, and if you find yourself in that old, boarded up segment of the site, there’s no guarantee it’ll function as once intended.

Moving forwards, while I’d like to carve out some space to promote my past projects, because I am proud of what I have accomplished, and I think there are some genuinely fun and interesting ideas there, I’d prefer to keep a more minimalist space where I can post my more up-to-date ramblings, and about whatever future projects I pick up. Whether that means transferring to another service, or continuing here, I’m not certain – I haven’t really paid much attention to what the popular blogging or social networking type sites are in recent years, so I’m not sure where to look.

Advertisements

Drakengard – A Futile Struggle

In a previous post here I explained my plan for a series of articles exploring each of the games in the NieR/Drakengard series. If you’re looking for a review of the first game in the series, Drakengard, then you may want to look elsewhere, but if you’d rather read a rambling, self-indulgent over-analysis of its mechanics and narrative structure, then this is the start of that.

Originally I intended to write only one piece per game, but working through my notes for the first game I found that there are just too many disparate parts deserving discussion to easily organise into something digestible. So, the aim now is to divide Drakengard into two meandering incoherent walls of text: the first, this one, exploring the unusual delivery and nature of its narrative, and a second examining what’s remarkable about its dated and awkward gameplay.

Taken As a Whole

There are a lot of obstacles in the way of actually enjoying Drakengard. First, you’ll have to get over the archaic camera controls, locate some enemies using the minimap because their draw distance is terrible, and then persevere with the ground combat long enough to find its virtues (tune in next time). You’ll also need to be okay with it looking like a PS2 game – and an ugly, bland one at that, despite some very interesting quirks here and there. If you stick it out for long enough you’ll likely notice that the music is cacophonous, repetitive, and unpleasant, but hopefully come to appreciate the frantic, violent atmosphere it creates. Then you’ll have to come to terms with the cast of characters offered up, which includes a mute, psychopathic protagonist, a feeble goddess, a cynical, human-hating dragon, a paedophile, a cannibalistic elf, and a fatalistic, cowardly priest.

So what’s the deal then? Why is Drakengard still worth playing – worth writing about, even? Well for one thing, whether by fluke or deliberate design, I do think that there’s a lot of depth and enjoyment to be found in the game’s ground and aerial combat mechanics. But Drakengard also offers up surprisingly offbeat narrative and world-building for a Japanese RPG, with compelling voice acting throughout (a minor miracle for an English-dub), and hints of the kind of social commentary and philosophy which becomes far more blatant by the time we get to Drakengard 3 and NieR: Automata. But by far the main reason I want to write about the original Drakengard is the innovative ways in which its narrative delivery exploits the interactive medium – something I’m not aware has been replicated in the decade and a half since its release.

World-building

Although narratively connected the Drakengard games take place in a whole other world to that where the NieR games are set – though not a different fictional ‘universe’. We’ll call this other world the ‘Dragon Sphere’ henceforth, since that’s what the ultimate ending of the first game calls it.

Despite a fairly generic high-fantasy foundation with knights and dragons, swords and sorcery, goblins, ogres, golems and fairies, Drakengard does a lot with its tone and laser focus to distinguish itself from contemporary Japanese RPGs. On the surface we see the old tropes: warring Union and Empire forces, the mortal goddess Furiae who is no only kidnapped, but is also one of the ‘Seals’ of the world, which, of course, the enemy is trying to break for… reasons? But the game doesn’t dwell on lore at all – instead it puts us behind the blade of bloodthirsty Caim, to whom the Empire soldiers are nothing more than enemies to be cut down, and the Goddess merely his sister – perhaps even just an excuse him to go on a rampage. Caim doesn’t give a damn about history, religion, or anything else, and I for one appreciate that being reflected in what we’re shown.

The majority of the game is a grim trudge through fields, forests, ruins, and thousands of human soldiers, brightened somewhat by the voice-acted musings of your grim companions playing out during gameplay – primarily spoken by the aforementioned misanthropic dragon and the fatalistic priest, Verdelet. It’s only in the final chapters that things become suddenly hellish and bizarre. Somehow the Dragon Sphere manages to be a high-magic fantasy setting with the tone of a low-magic one: It feels more akin to Berserk (the Golden Age arc of the 1997 anime) than, say Warhammer, despite having human factions operating squadrons of airships, wyverns (stupid wyverns!), and ‘gargoyle cubes’ that fire lasers at you. Verdelet and the rest of the cast help in that regard because they don’t even seem to understand anything about the ‘Watchers’, the ‘Seals’, or the ‘Seeds of Resurrection’. The dragon even indicates that the legends passed down by man are incorrect: “These are not the Seeds of Resurrection. They are the Seeds of Destruction.” “Man bends the truth for any convenience.”

Also noteworthy is the strangely modern-looking, ruined imperial capital, with its tall, square buildings resembling modern skyscrapers. I could try and break down why that may be based on what I know from the other games in the series, but it’s not worth dwelling on right now.

Caim.png

Better Branching

Describing NieR: Automata as having numerous ‘endings’ is inaccurate – explaining to people that they need to get at least five of them to see the big picture is discouraging, and trying to explain why it shouldn’t be without spoiling the experience is a difficult task. In the case of some games with branching narratives it isn’t only the repetition of gameplay that’s off-putting, but the need to uncover often obtuse and illogical branching points.  While unlocking the final chapters of NieR: Automata does indeed involve playing the prior part of the game through twice – kind of – it doesn’t really require the player to figure out how to reach different endings, instead guiding them effortlessly from one to the next, and this lead-by-the-hand approach is something that the series hit upon in its first entry.

Reaching endings B to D in Drakengard requires only that you replay missions where the story branches, meet the objective for that branch, and complete the additional missions unlocked as a result. You can skip ahead through the story, playing only the additional missions unlocked rather than retreading unaltered ground. Tooltips on locked missions tell you exactly what is required in order to unlock them, but not the reason, and though many such requirements are a simple matter of ‘complete mission n in less than x seconds’, usually a narrative reason for this becomes clear after the fact. For example, reaching Drakengard’s ending C requires that you beat ending B’s penultimate boss so quickly as to trigger a change of heart in one particular character, preventing the creation of B’s final boss, which otherwise keeps our anti-hero so preoccupied that he doesn’t notice the world falling apart around him.

In another example, after having satisfied all the other conditions to unlock Drakengard’s penultimate ending, the game still lets you fail if you don’t manage to defeat an enemy armada quickly enough at a critical moment. Not only that, but it does so subtly, and even goes so far as to insert two additional, pointless missions, before (presumably) branching back to a previous ending where you arrive too late to save Furiae. The second of these missions is a truly disconcerting trek through a level devoid of enemies, who have already evacuated while you were outside fending off a wave of reinforcements. Here we see that even when you’ve fought hard for a reward, the game is not only happy to let you fail, but also to taunt and toy with you for it. While we’re not dealing with procedural or emergent storytelling here, and the mechanics by which the story branches may not be interesting taken out of context, these examples should begin to illustrate how they might integrate meaningfully with the narrative and the interactive experience.

Most early branching leads to the acquisition of new companion characters that are useful in gameplay, and side missions which do little to flesh out the world or events within it – though the last companion’s, Seere’s, does give a good insight into the backstory of his twin sister Manah, high priestess of the Cult of the Watchers, and main antagonist of the game. It’s only in the final chapters of the game where the branches become truly significant.

With the exception of endings B and C, I believe, endings A to E of Drakengard must be unlocked in alphabetic order. A standard trope followed by many games would see these endings, each unlocked by extra work, by extra % completion of the game’s content, grow steadily more positive or crowd-pleasing, to varying levels of actual narrative significance. In most cases we’re simply treated to a little bit of extra dialogue or a different cutscene, and you can count on some players working through a whole, near-identical game multiple times just to see that difference. Not only does it take less work to unlock the alternative endings of Drakengard, but in doing so you unlock whole chapters – new places and events which give the player fleeting glimpses into the minds of characters who might otherwise seem fully one-dimensional, and a growing understanding of just what is unfolding as their continued effort results in increasingly calamitous conclusions.

seed.png

Every End’s a Bad End

Ending A, which you’ll see on first completion of Drakengard, is bittersweet: the seals are broken and the goddess sacrificed to plunge the world into chaos; Caim and the dragon fight through a menagerie of monsters, legions of fanatic soldiers, and a giant infant girl to save the Dragon Sphere; Caim even redeems some of his humanity as he refuses to give Manah the mercy of death, and weeps for a dragon – a creature he once despised with good reason  – as his partner sacrifices herself to become the new seal.

Reaching Ending B will net you a few more hours of hack-and-slash fun, a pretty horrific cutscene, and an conclusion which is essentially apocalyptic. Ending C is no brighter, really. This joke is carried right through to ending E, where it seems that events culminate in the wholesale termination of the Dragon Sphere and, as we learn from the continuity of the game in NieR and NieR: Automata, a magical blight upon our own universe, leading to the ruin of the Earth, and the downfall of humanity here.

If you were hoping to at least succeed in saving Furiae in one of these eventualities, you’ll be disappointed, and mocked for you naivety: In the branches where you do eventually manage to reach her before she is ritually sacrificed, her romantic feelings towards her brother are tauntingly revealed by the by mind-reading high-priestess, Manah. Our player character, Caim, proves too emotionally inert to even appear sympathetic – a facet of his character reflected in the blood of the thousands of soldiers he slew to get here, ostensibly to save her – so she plunges a dagger into her breast, this time instigating the apocalypse by her own hand.

Having progressively more miserable conclusions, although unique and interesting, isn’t especially meritorious on its own. Punishing players for their hard work and time investment with bad endings, whether you really see them as less desirable or not, seems like a strange decision at best. In a video released on YouTube through official channels, director Taro Yoko commented on his thought process during the creation of the original Drakengard:

“I was looking at a lot of games back then, and I saw these messages like ‘You’ve defeated 100 enemies!’ or ‘Eradicated 100 enemy soldiers!’ in an almost gloating manner. But when I thought about it in an extremely calm state of mind, it hit me that gloating about killing a hundred people is strange. I mean, you’re a serial killer if you killed a hundred people. It just struck me as insane. That’s why I decided to have the army of the protagonist in Drakengard be one where everyone’s insane.”

From the director’s comments, and the more direct approach of later games in the series, it seems clear that his philosophy runs thick in the blood of Drakengard, and that its quirks deserve closer inspection. At the very least we can be sure that the growing unpleasantness of each ending was a very deliberate choice; in another interview, Taro reportedly comments: “any game that centres on slaughtering hundreds in war shouldn’t deserve a happy ending.”

death02

Mechanics Matter

Structuring the characters and the conclusion of the game game around this philosophy may be interesting, but the integration into the game’s mechanics is what’s exceptional. While the obvious approach may be to provide a pacifistic or non-lethal option, as a number of more recent games have done, Drakengard embraces violence in order to critique it within the framework of a what is strictly a hack-and-slash action game.

Caim and the dragon each has a character level which, as in many videogames, is tied to the number of enemies they have killed. Not only that, but weapons in Drakengard also level up based on the number of enemies that have been killed with them, and new weapons are often found in hidden chests which appear only when all of the enemies in an area are dead. In this way the game’s systems encourage you to kill as many soldiers as you possibly can, rather than just the marked objectives, then to return and kill them all over again in search of hidden loot. Need some friends to help you slaughter all those soldiers, and to unlock the last two endings of the game? Well, finding those companion characters will mean killing more, killing faster, and completing additional missions based around killing. One of these missions sees you hacking apart hundreds of child soldiers while listening to the protests of a particular companion (the paedophile).

The important fact is that all of this killing is ultimately pointless. Endings B and C see the world plunged into Armageddon even after the trauma of fighting bastardised versions of Caim’s nearest and dearest. After going to the trouble of finding all the companion characters to unlock ending D, they prove to be too weak-willed or deranged to be of any help – with the exception perhaps of Seere, who is appropriately the most sympathetic of the crooked bunch. But the real gut punch comes in the fifth and final ending, E, for which you must acquire every last one of the game’s 65 weapons.

Ending E branches off of the same part of the narrative as ending D, wherein all your companions but Seere and the dragon have proven worthless in the face giant demon sky babies. It is the most important, and perhaps the most divisive part of the entire experience. Some have accused the unlock condition of this ending of being just a cheap way to lengthen the game, which seems like a strange criticism given that the game is already long enough and developers of that era had no micro-transactions or DLC with which to profit from your extended playtime. More importantly, the extra gameplay unlocked for ending E, the final boss, uses wholly different mechanics from the rest of the game. This is a pet peeve of mine – a thing that the likes of Lost Planet, Dark Void, and the entire Sonic the Hedgehog series are guilty of; its unfair, unfun, disregards everything that the you have learned in the playing the rest of the game, and in doing so, is uniquely appropriate for Drakengard.

The final boss fight takes place in the sky above modern-day Tokyo (don’t ask), which means you’ll be riding the dragon, which means that all of those weapons you grinded for are worthless. What’s more, because the final boss takes the form of a rhythm game (don’t ask), all the offensive and defensive modifiers gained by levelling up the dragon are also worthless. All that is left at your disposal is patience and perseverance – you’ve at least demonstrated those in coming this far. But even if you grit your teeth and overcome what is by all accounts an unreasonable challenge, or if you do what I did and find ending E on YouTube rather than even bother to collect the weapons, then what you’re rewarded with is the annihilation of the two remaining characters by a pair of fighter jets, the implication that the Dragon Sphere is destroyed outright, and a roll of credits over the sounds of city traffic.

Violence Solves Nothing

What happens in each of Drakengard’s endings is, to some extent, Caim’s fault, and the player’s fault; it happens because the only way that Caim knows of interacting with the world is through violence, because the player only came for that violence, and because of these two things, violence was the only means of interaction we were provided. With that approach, Ending A was the best we could have hoped for. With only violence Caim is unable to reconcile with his wayward friend, is unable to attract worthwhile allies, and in being unable to console his sister, is unable to save her and thereby the world, even when doing so is inches from his grasp.

Thus, Drakengard adheres to one the virtues you might expect a protagonist in a typical video game to espouse, but thereafter completely disregard because gameplay: Violence solves nothing.  To put words in the game’s mouth: “What? Did you really think murdering more soldiers, gathering a party of nut jobs, and collecting weapons would make things turn out better? How?”

Year of the… Dragon?

This year’s off to an interesting start: I have a new job (kinda – new company, tech, and projects, but same old faces and spaces), I’ve made a fairly consistent effort to pick up drawing and painting again, completed a short spell on jury duty back in January, I’ve been warming up to start running again in the spring, and now I’m writing here – something I intended to do a month ago.

The way things went at the end of last year left me with a lot of time on my hands. Besides a few job interviews, some scraps of work, brushing up on some technical areas that’d been left at the wayside, and a lot of tabletop roleplaying games, I was finally able to fiddle with a few long-standing ideas for personal projects. Between dabbling in Unity and Unreal I put together a bunch of weird game prototypes and experiments which I’d like to show off and muse upon here – I’ve been intending to since Christmas, but y’know – life.

There are other things I’d like to put into writing too, but writing takes a lot of time for someone as self-concious as me. Still, I’ve had the bug for it lately – strangely I’ve missed all of the essay writing and documentation that comes along with university projects. I think that writing can do a lot to help you put your thoughts in order, to take a step back and think about things more logically, and maybe even cement things in your memory. Moreover, I have a constant glut of ideas in my head – things I want to do and express but don’t have the time or skill to follow up on. It might be worthwhile putting those ideas into writing I suppose, however irregularly I manage it. And I might as well keep that record somewhere public, just in case it peaks someone else’s interests.

But it’s the Year of the Horse!

I’ve also gone off the deep end this year – gone off the deep end for a series of videogames in a way that I think I’ve only done once before. The first time I remember doing this was for Ys, a rather niche series of action/role-playing games by Japanese developer Nihon Falcom Corporation, dating back to the late 80s. After picking up Ys: Origin on Steam sometime in 2012 I struggled my way through its ‘Nightmare’ difficulty three times – once for each playable character. I fell so in love with that game that I proceeded to pick up every previous entry in the series, and a number of vaguely similar Falcom titles; I began with the games that played similarly to Origins – Oath in Felghana and Ark of Napishtim, then Ys I & II Chronicles+, Ys 7, Xanadu: Next, and the latest in the series that I’ve played, Memories of Celceta.

I loved Ys for its unusual mix of platforming, bullet hell, roleplaying, and hack-and-slash gameplay, for its tight controls, hardcore difficulty, and generally firm emphasis of gameplay over graphics and narrative. The characters and story in Ys games is typically cliche, simple, bright, colourful, and all you really need to support great gameplay. Only as I write this I’m remembering how the first gameplay footage I saw from NieR: Automata reminded me of Ys and its strange hybrid of genres – bullet hell, action, platformer, rpg – but that’s one aspect that’s not reflected in the majority of its lineage, the series I’m currently obsessed with.

My Current Obsession: Drakengard

Since Christmas I have played and completed (with some caveats) all three games in the Drakengard series, which likely has garnered a lot of attention of late through its frankly bizarre relation to the successful and brilliant NieR: Automata.

This bears some explanation for those who, like myself, weren’t paying attention until just recently: NieR: Automata released in 2017, developed by renowned Japanese game studio studio Platinum Games,  and is a sequel to the 2010 release NieR, set many thousands of years in the future, ostensibly (I haven’t played NieR yet) following from its Ending E. Likewise, NieR itself was a spin-off or sequel to Ending E of a the original 2003 release, Drakengard, set about a thousand years later on. Multiple ‘endings’ are a staple of the series, and their implementation is one of its most interesting facets. Drakengard saw two other ‘sequels’ in Drakengard 2 (2005) and Drakengard 3 (2013).

Unlike NieR: Automata, NieR and the three Drakengard games were not developed by a studio so respected for their stellar combat systems, and were not, by all accounts, well regarded either technically or from a gameplay perspective, even at the time of their release. Certainly, unlike the Ys series, the gameplay takes a back seat here, and that’s not the only difference. In every NieR and Drakengard game the characters are deeply flawed, damaged, difficult to read, and the story is a dark, complex mess that barely manages to make sense even when its not dabbling in social commentary or well-restrained fourth wall breaking. It’s not even the story necessarily that’s had me so captivated, but rather the manner of its delivery.

Despite all their rough edges (some would say near-unplayability by modern standards) I believe there is a lot worth discussing in these old games – as a game designer, as a storyteller, and as a human. I’ve been taking notes and thinking thoughts as I’ve played, and hope to write some of that chaos up into something palatable in the coming weeks – or perhaps a series of rambling articles like this one.

I still haven’t played Nier, and I’m going to take a break from the series as I ruminate on the journey so far, so it’ll be conspicuously absent from anything I write initially. I had considered continuing to play games focussed on dragons for the rest of the year, hence the title, but quickly realised that there are surprisingly few, and the obvious choices – the likes of Skyrim and Dragon Age – would eat up a lot of my time. I am going to dabble in some other games in the meantime though; I just started up Shadow of the Colossus this weekend, on the PS3, because I live in the past and the PS2 version is too expensive.

There’ll probably also be a conspicuous lack of an article dedicated to NieR: Automata, for a multitude of reasons: Nier: Automata is likely to get plenty of mentions as I cover the other games in the series, and desperately struggle to avoid mentioning any connections which might be considered spoilers for it. I’m happy to discuss the Drakengard series in depth not only because its age and flawed nature will likely prevent many people from experiencing it first-hand anyway, but because I simply don’t think ithat the nteresting parts of the other games is tied to the personal experience in the same way it is with NieR: Automata. It’s entirely possible, however, that I simply played NieR: Automata at a time when I was feeling particularly sentimental, and so was affected by it to a greater extent than is usual, but I know I’m not alone in having strong feelings about that game. And besides, lots of people are already over-hyping NieR: Automata; while I love it, I don’t want to contribute to that. Just go play it, and don’t stop till Ending E.

Status Update 2017

I’ve been quiet here for a while now, having been officially admitted into the UK games industry after the summer of my graduation. That summer I was offered a position as a Junior Programmer at Radiant Worlds to work on their then-secret project SkySaga: Infinite Isles, which has since seen announcement, and extensive Closed Alpha Testing. Years later, having seen this project go through many changes and come so far since the time when I joined, this week brought the sad news that development is being placed on hold indefinitely.

During my time with Radiant Worlds I’ve had the opportunity to work in a wide variety of systems in a beautiful 3D game with real-time action, and great creative scope for players. It’s more than I had hoped for as a graduate programmer; I feel very lucky to have had the scope of experience I have within this project, and to have worked with such a friendly and talented team. Direct, player-facing gameplay systems have always been my favourite part of game development, and here I have had ample opportunities to work with those systems, including in character control, combat, animation and UI; but I have also worked closely with designers, ensuring that they have the knobs and levers they need, and lending a technical insight where required.

SkySaga may be on hold, but right now the company lives on, and in this time of uncertainty I, like many others here, am taking the opportunity to stretch my technical-legs a little – to investigate current technologies, and consider what skills I may need for future projects. I intend to stay on the road that I have started, remaining within the games industry come rain or shine. The team here is talented, and even if we are divided, I know that we will cross paths frequently in our professional lives.

Check out the videos below for an impression of what we have achieved over the last few years.

B2D2: Box2D Time Dilation Experiment

Hello.

For the last few weeks, amongst many other things, I’ve been toying with the idea of adding time dilation mechanics to the 2D physics engine Box2D (B2D). I honestly can’t recall what first moved me to think about this, and while I have ideas for game mechanics featuring similar time manipulation, I have none which would require physics simulation. Nevertheless, it’s been an interesting problem, and given me a reason to dig into and understand the internals of a physics engine. You can see a video demonstrating my progress so far below, and scroll down further for more information.


Implementation
Although the implementation isn’t very far along, a lot of time has gone into exploring the B2D code, thinking about potential problems, and finding the ideal place to apply temporal forces. I am not a physicist (theoretical or otherwise), so my model of time dilation is based upon intuition and practicality of implementation:

The idea is that each object has it’s own temporal velocity (TV) which functions as a multiplier for its passage of time. Therefore, a body with a TV of 2.0 will accelerate twice as quickly, move twice as fast; a motored constraint with a TV of 0.5 will output half as much force. A time dilation field (TDF) is a physical space defined by a B2D body, for which a temporal velocity may be specified separately to the ambient temporal velocity. Bodies are affected by temporal drag (TD) based upon standard fluid dynamics drag calculations, considering their velocity relative to contacted TDFs. Thus a body will gradually adjust TV to match it’s environment.

The drag model is intended as a graceful way to handle overlapping TDFs. I had previously considered a multiplicative model, where the area overlapped by two TDFs (a & b) has a TV of TVa*TVb, but this didn’t seem to make much sense to me, physically, and requires a more complex implementation. Instead, I use the analogy of sticks drifting in a river: the river (TDF) flows at a certain speed (TV), which pushes the stick (body) according to a drag function and a collection of variables. In the case where TDFs overlap, I treat it as the ‘river’ having other currents running through it: the body is affected by drag from both currents, so it’s TV should approach their average.

Issues
There is, however, an awkward case in my implementation currently, the logic behind which has become apparent to me as I type this: Two overlapping TDFs, both with a higher TV than a body within will cause the body to experience a positive force from each, accelerating faster than it should. This is true for two fields slower than the body too. This would not be an issue if drag was applied directly to the TV, as the current (relative) TV is part of the drag equation, but as it stands both forces are combined in a temporalForce variable to be applied later in the step.

Another significant obstacle in improving the ‘accuracy’ of this (pure fantasy physics mechanic) is the ability to quickly calculate a reference area for the drag calculation. Ideally, this would be the area of a body which intersects with each field, and then the reference area for ambient TV drag would be the area not intersecting any field. I am not aware, however, of an efficient method to calculate intersection areas, and the ambient reference area calculation is complicated when the body intersects TDF overlaps. Currently, bodies simply experience full drag force from any TDF they contact, and only from the ambient TV when they contact no TDFs. Another alternative would be to consider the intersection of fixture vertices with TDFs, though this would be problematic for large or highly irregular fixtures.

There are, of course, other issues and features yet missing. I have a pretty solid idea what problems I’ll face down the road, and some ideas of how to address a few of them:

  • Constraints are not yet affected by temporal velocity; I believe only their frequency and motor parameters may be affected, and their TV can likely be treated as an average of the associated bodies in most cases.
  • My implementation features an observer TV variable, and all movements are based on the relationship between it and the body TVs. This means that if the observer TV is 2.0, bodies with a TV of 1.0 will appear to move at (1.0 / 2.0 =) 0.5x speed. The catch here is that for accuracy, we need to integrate for the change in body TV between steps, AND for observer TV. Not only do I need to revise some calculus before I can confidently implement the latter, but it also requires that I either cache previous observer TV values, or maintain an observerTemporalForce variable.
  • I need to go over the TOI (Time of Impact) solver code and work out how exactly TV impacts this, as currently this area is untouched. Also, relevant: I need to revisit my old idea of modifying the position and velocity iterations based upon the the current maximum TV in a simulation. My intention there is to maintain stability in accelerated time streams. The problem is that in order to utilize the current maximum TV we would need to either apply temporal forces to TVs in a separate loop prior to island* solving. Alternatively, we can look into the viability of allowing iteration counts to vary between islands, or utilizing the maximum TV from the previous step.
  • By using the standard drag equation, TDFs could potentially be further configurable than they currently are, for example by adding a ‘fluid density’ variable. Currently my implementation uses a (rather high) hard-coded fluid density for temporal drag calculations, to ensure rapid speed adaptation.
  • I’d like to experiment with applying a shader which stretches geometry based upon TV and (spatial) velocity. There’s already a suddenly slowdown upon exiting an accelerated TDF which is reminiscent of warp-in effects from Sci Fi media, and I think this could make it look extra cool.

In all likelihood I’ll soon have to put this on hold indefinitely and focus on some more practical projects, but it’s been fun and informative, regardless.

* Islands are B2D structures into which bodies are clustered prior to solving, based upon their contacts and constraints.

Portfolio Update – AI for The Resistance

Hello.

A few weeks back I added a page for my dissertation project, a research/development paper on AI for the modern board game The Resistance, found here. I finished the last section about a week ago and have no removed the work in progress tags since I don’t think I need to make any major changes.

I’m not completely satisfied with how it turned out; it’s significantly longer than I had intended and skims over a lot of information. The intention was never to provide an alternative to reading the full paper though, only a summary of the work therein for interested parties to skim over. I generally find abstracts for longer papers to a poor job of this.

Lately I’ve been a little preoccupied with the job hunt, but I’ve been quietly toying with a little programming problem and indulging my other creative interests in art and language too. I recently hit my first exciting milestone in the programming project. It’s not much but it’s the culmination of some hours researching a foreign code base to work out the best approach, and I now have a solid understanding of all of the problems that need to be solved as I move forwards.

Updates soon :)

 

Portfolio Update – Game Behaviour

Hello!

I recently put up pages for two projects from the Game Behaviour module undertaken in the final year of my BScH in Computer Games Programming at the University of Derby, which I have now fully completed and received a very pleasant classification for.

You can now head over to the pages for Crispis and DropCakes, and The Frozen Firepits of Generic Dungeon Name for information on these projects, or to download the source code and executables. The former is simply a 2D physics sandbox built upon Box2D and a custom Entity/Component engine, and probably isn’t or much interest to many. The latter, however, you may find interesting if you’re into game design, classic roguelikes, fantasy games, and such.

The Frozen Firepits of Generic Dungeon Name (TFFGDN) was an experimental game design implemented for an artificial intelligence (AI) assignment; it did well, though the AI isn’t too interesting in my opinion. It’s a fusion of turn-based, physics-based mechanics similar to Snooker or Pool, and classic fantasy dungeon-crawler games where a party of adventurers of traditional achetypes such as Warrior, Wizard, Rogue, etc. enter into a monster-infest labyrinth seeking treasure. In its current state it’s not too thrilling; I had intended to implement magic and special abilities for player characters and enemies, which I think would make things a lot more exciting, but I just didn’t have time. I also feel like the physics could be tightened up a lot to increase the pace of gameplay, but I had to do a lot of fiddling with Unity just to get it working in the first place.

Come next week or so I’ll try to have some more information up regarding my dissertation project which was an investigation into AI for Don Eskridge’s The Resistance. Then I can get onto undertaking some small personal projects while I look for work.