Tag Archives: technology

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.

So a couple of months ago I made this post about what I planned to do with my summer. Well, summer was shorter and busier than I thought it might be, so my best laid plans kind of fell to pieces. I don’t mind of course – I found a decent placement for the year after all – but the chaos that’s dominated the last month or so has left me kind of disorientated.

So where do I stand? I’m in London now, working full-time for a company named ‘Feral Interactive‘, and have just come off of a three-week stint without internet, during which I’ve walked too many miles, watched too many TV series, and played too much Ys. Before that, and before all of the effort that went into arranging the move, I did manage to get through those WebGL tutorials, read a good deal of the Python documentation, and dig through the internet in search of information about network programming for games (without much luck). Mostly though, I just studied Korean and house-hunted. I also bought a small graphics tablet – a Wacom Bamboo Pen and Touch – but I’ve had no time to look into digital art, so I’ve barely gotten used to controlling the thing.

The apartment I have here is small, but nice. It’s essentially two rooms with an entrance down a back-alley – what would be the kitchen-bathroom extension on a terraced. I don’t really spend much time here, what with my working hours, but what I do spend here is comfortable. Once I’m settled I want to get to work on the things that got put off this summer. I’m four chapters in on this maths book, but I’ve yet to get around to doing any OpenGL programming and still haven’t regained any confidence in drawing. To be honest I’ve also considered just taking advantage of the Korean presence down here in London – making language study my extra-curricular priority for the year. Work is tiring, life is complicated. Time will tell.

Right now, I’m watching 원스 어폰 어 타임 임 생초리 (Once Upon a Time in Saengchori). Next? Maybe I’ll hammer out another chapter of this maths book.

Since handing in my last assignment of the year, I’ve had a good amount of time to recover from the previous stressful semester and make a start on some of the things I wanted to get done this summer. This’ll be a short post outlining these mysterious things, mostly for my own benefit, though I guess it may be of interest to any passing traffic.

For the most part my efforts so far have been centered around finding work, and following a small series of WebGL tutorials based on the popular Nehe OpenGL series. I’m using WebGL to brush up on the OpenGL I covered last summer, and to serve as an introduction to JavaScript and general web development. Working with JavaScript has been relatively painless given my previous experience with ActionScript 2.0, and the useful developer tools included with Firefox and Chrome. Still, an environment which doesn’t crash when you call a non-existent function has it’s pitfalls.

Expanding my experience with a variety of languages is a priority for me at the moment (I’ll be starting some Python tutorials later today), but ideally I’d also like to move back into C and bring my OpenGL experience up to par with my DirectX experience so that I can make an attempt at some sort of deferred shading system. Graphics programming isn’t my favourite of subjects, but it’s challenging and the results can be very satisfying. The implementation of a renderer using deferred shading seems quite intuitive to me and could be a lot of fun to experiment with. To this end, I’ve also been brushing up on some maths, as I’m aware my lack of A-level puts me at a disadvantage in the eyes of some employers, and It’ll really help to fully understand more advanced techniques in graphics and other 3D programming tasks.

I found a decent book to help with my maths studies, but it’s part of a larger stack of books I’ve yet to wade through, including one on API design, and another one on x86 assembly programming. Assembly programming is something I particularly enjoyed during the first semester this year, but it remains to be seen whether or not I’ll get back to it this summer. I’ve resolved to get hold of a decent graphics tablet as soon as I’m sure I have a little time to burn – I may be a programmer now, but there’s only so long you can suppress your creative routes. I never really got into digital art before, but working with pen and pencil for so long has gotten me into a bit of a rut, and I feel like I need to stretch over into new mediums to escape it. While we’re off the subject of programming, I’ve also been studying Korean a lot more since the semester ended – even if the majority of that has been reading 루쿠루쿠 (Lucu Lucu) and playing Pokemon White. I should get back to Lang-8 and make a post there sometime soon to try out the new grammar.

At the moment I’m still living with the majority of Pillowdrift, and watching as they work away on Mega Driller Mole. I’ve even joined in with the effort this past couple of days, lending them my technical and artistic abilities to enhance the mineral system and throw in some new enemies (yes, there are demon cats now). Mostly though, I’m proud to say that they’ve had little difficulty adapting to my original code-base, and twisting it to their needs. I wasn’t even here during their initial work – they had to figure it out all on their little own!

I also worked with Bombpersons following a quirky little framework he threw together for a discontinued Mini-Ld attempt. He used SDL to create a very lightweight graphics module which allows the setting of pixels, never clears the screen, but blurs its contents every frame. I threw together an equally light weight (and not really well coded) game framework over the course of a day, and implemented a controllable player, just to see what it looked like, while he developed a simple particle system, which it turns out looks really freaking cool in such an environment. That’s as far as we got with this quick and dirty prototype, but we definitely think there’s room for a decent game implemented around the blurring gimmick.

Coming SoonI mentioned something a while back about decent games made in Game Maker, and how I wanted to write something about that. Well, I’ve been playing a lot of Hyper Princess Pitch recently, and instead of tackling the subject head on, I figure I’ll come at it via review instead. Expect something up in the next day or two.

Spent a good amount of time in the last two days putting up more videos and pages around the place. Most changes have occurred over on my YouTube channel and on the Year2 page. I also have new pages for all of my Console Development projects, and my first attempt at a DirectX game engine, DacquoiseX. Hopefully this place is presentable enough for now, and I can get back to applying for jobs, and doing actual work.

Not to say that it’s been an easy one, but this year sure has flown. This last semester was a particular challenge due to dealing with five modules at once, rather than the usual four (or the three we had in the first semester). What’s more, I really poured a lot of effort into every assignment, which has left me completely drained after the last five or so weeks of pure work.

I’m back at my parents’ place right now, catching a bit of rest before I engage in any personal projects, or go on the placement-searching-rampage that will be needed if I’m to find something good for next year. That said, having only handed in my last assignment yesterday, I’ve already set about grinding through my backlog of Anki cards and reading one of the many programming/maths books I’ve had on my shelf for some weeks.

This ‘blog’ has been long neglected while I’ve been working on my Interactive 3D and Console Development assignments, so I’ll try and overhaul it at some point with a proper Console Development page and information about my latest works. While I’d like to have a proper personal website, I’ve no experience in web development and it’s not on my agenda right now. I’ll even put up source once we’re a safe distance away from assignment submissions, though I’m not sure how much of my work with the PSP SDK is mine to broadcast, and I won’t put up source for my Android game, Mega Driller Mole, because my friends at Pillowdrift are considering taking over that project.

In the first year of my degree at the University of Derby we studied a module named Ludology, which was all about the theory of games and game design. The final assignment for the module was to create a clone of an 8/16-bit era game using Game Maker (urgh) and pitch it to two of our lecturers, who were posing as 80s publishers. Despite having to make the game in Game Maker, choosing a challenging target, and being stubborn enough to use only blocks for the game logic, what I created for this assignment was actually an incredibly faithful recreation of the first level of Sunsoft’s Gremlins 2: The New Batch for NES, including all game mechanics seen in the first level, except for money.

Why do I bring this module up now, a year and a half after the fact? Well, Gremlins 2 is a gem from my past, a huge part of my childhood as a NES gamer (yes I know I’m too young to have been brought up on an NES, but being poor had its advantages I guess), and a game I still enjoy to this day. I’ve played it to death, and previously even uploaded a video of me playing one of its hardest levels without taking a single hit (see below). I distinctly remember other students last year telling me how closely my clone resembled the original game, and having recently come across its exe, I couldn’t help but be proud of how authentic it felt, even if it was made with something so childish.

This brings me neatly on to two issues:
The first is simply the heritage of Game Maker, it’s flaws, misuse, potential, and the fact that it actually is possible to make good, respectable games in Game Maker – people just don’t. I’d like to make a post about this subject later, but in case I don’t get chance, I want you to check out two people: MESSHOF and Remar. In particular I want you to download and play Remar’s games Hyper Princess Pitch, and Hero Core. They’re free, and if you truly have an interest in gaming, you will thank me.

The second is the one I want to discuss now: Video editing. I’ve always found this to be a tricky subject. My experience with the various free software solutions has been poor (no decent export settings, formats, unstable, lost work, poor interface, unintuitive, poor video/audio synchronization), and I have never been able to justify splashing out on something more professional. Add to that I’ve always found it quite difficult to find information on how people managed to capture and compress high quality gameplay videos so effectively, and you’ll begin to see why the video before the previous paragraph is so poor, with the audio gradually drifting out of sync as it runs.

Since making that video, I have discovered VirtualDub. VirtualDub is a simple, linear video editor which is perfect if all you want to achieve is some simple cropping, resizing, dubbing, appending and recompression, however, it does not provide the slick GUI or advanced non-linear features that other editors do. After a little bit of poking around and following a lovely video tutorial for high quality, small file size exports on YouTube, VirtualDub allowed me to create reasonably sharp videos for my recent projects, Battenberg and Pastry3D. However, I ran into a brick wall when I set about my latest video editing endeavours.

Back in January I recorded the two playthroughs seen above, of Gremlins 2, level 1. One of these is running on an NES emulator, while the other is my Game Maker clone, and the point of the video was to position the two side by side so their resemblance was truly put to the test. But the playthroughs were recorded separately, so how would I go about merging them in this manner? VirtualDub is too linear for this – it does not provide functions to merge videos in such complex ways.

The answer, as it turned out after three to four hours of research and work, was to download Avisynth and VirtualDubMod. Avisynth, as best it’s creators describe it, “is a powerful tool for video post-production”. As far as I’m concerned though, it just provides a scripting language which can be used to manipulate videos in a non-linear fashion by utilizing a number of simple functions, such as StackHorizontal, which fitted my purposes to a tee. Again, as far as I’m concerned, VirtualDubMod is simply VirtualDub with added functionality, and integration for Avisynth, including syntax highlighting.

The short story is, the solution to the problem was simple, but the information I needed was so buried, and so tricky to put to use that it took a considerable amount of effort to achieve my end goal. Still, it was interesting to see how programmatic a solution to a problem such as video editing could be (seems obvious now I write it down), and I’m considering laying down a nice tutorial if I find the time – though a tutorial on merging videos like this may be too specific, and I’m no general master of the tools involved.

Lectures an tutorials are of course important, but it has to be said that the journey to and from the university, and their inflexible schedules are rarely convenient things. More and more of late I’m finding I’d rather be off investigating things for myself than being forced down particular avenues. I’d love, for instance, to be looking into WebGL and x86 assembly right now, having greatly enjoyed the time I spent with MIPS last semester. Meanwhile, I feel that modules like Team Software Development have long since served their purpose in teaching me in the value of effective teamwork strategies, and now now do nothing but eat into my time. It was with great relief last weekend that I entered the start of a three-week break from such activities.

Three weeks to get well ahead with my assignments, three weeks to get some more job applications off, three weeks to resume my studies of the Korean language, three weeks to look into WebGL or x86 assembly, three weeks to properly maintain my online presence or pursue my artistic interests. So many choices.

One week of that time has already elapsed, and I elected to spend it in the labs, where the PSP dev kits are, working on an optimized, billboarded, particle system for our Console Development 2 assignment. This is the module I’ve enjoyed the most this semester, and the module within which I feel that I have learned the most. Which of these is resultant of the other? Well, personally I think that it’s reciprocal. I’ve not only learned about PSP specific programming and optimization, but also finally found the opportunity to gain an understanding of threading – it’s a lot simpler than it seems on the surface – and undertake a complicated project in straight C. I’ll explain more about this assignment when it’s all tied up.

Speaking of threading, this has also been a feature of my Operating Systems and Mobile Development modules. My OS assignment is pretty much complete, and of little interest – it’s a simple benchmark of communications between processes and threads using the Windows API, and I plan to clear up the written part in the coming week. As soon as my PSP work is done I’ll sort out the write up for that too, leaving me only three modules to worry about when I go back for the last three weeks of the semester.

My Mobile Development project is a 2D game for Android. I’ll make another post about this in the coming weeks, but for now know that it’s a simple points-orientated game about drilling, I’m using the incredible libGDX framework, and the game may someday see itself published if my friends at Pillowdrift decide to take it on once I’m gone.

By gone I mean off on placement at whatever company wants me. I’m still looking, and I’m not worried about the time yet – the deadline is the end of summer and I’m sure I’ll find something excellent. If you’ve found your way here via my CV, a belated welcome to you! I hope you’ll take a quick look at my work under the Projects tab. Anyhow, my housemates and another friend are setting up shop as an indie company next year, and while I wish them the best of luck, I’d rather siphon the experience of industry veterans and prove myself in the real working world. I’ve told them they can have my Mobile Development project, polish and publish it if they wish, so I’m trying to keep the project as tidy and flexible as possible.

Seems there’s only one module I’ve yet to talk about, and this one comes with pictures! No really, I’d happily put up pictures of my other projects but I don’t have access to everything since I’m at my parents’ place right now. Interactive 3D Graphics Programming has taken me through the pains and pleasures of shaders lately, including a brief expedition into PIX to determine the root of some HLSL failures. As best I can tell I now have per-pixel diffuse and specular ambient, directional, point and spot lights working, and a system in place for managing them, attaching them to nodes in a scene graph for transformation. I recently added a similar method for attaching cameras to nodes and now need to re-implement my controllable camera nodes. By re-implement, I mean replace with controllable transformation nodes and attach cameras to those. Specular lighting looks fantastic on my terrain, though the terrain itself is a little bumpy, and I probably should decrease it’s shininess value. The one thing that’s been bugging me with my framework for this project is my use of DirectX constant buffers. Currently I only allow for a single constant buffer per shader set, and all of it’s data is copied across every time something draws. A better, more efficient, more flexible system would be to have multiple constant buffers updated hierarchically in my scene graph. In this way lighting data and other items would only be copied across when they are actually changed, saving a significant amount of time. Implementation of this system is of course dependent on the impending deadline, and seems unlikely, as I also need to implement render targets, collisions, player physics, and a demo. Still, you don’t learn the pitfalls until you try things, and I’ll remember this for future projects.

Let’s wrap this up with some screenshots from my DirectX engine, DacquoiseX. The model of Princess Peach is an adaptation of retrotails‘s over on Google 3D Warehouse, and I intend to use it for my current PSP project, recreating a scene from the ice levels from Super Mario Brothers 2 in 3D, with peach standing on the back of a black whale, spurting watery-foamy-particle-goodness from it’s spout-hole. The demo for this project? Well, that’s gonna be a bit stranger…