Category Archives: Rants

Iridescence mobile development update

When I was at the Boston Festival of Indie Games with Iridescence, I’d tell anyone who asked about the mobile versions that they were about two or three weeks out. At the time I had every reason to believe that to be the case, but it turned out to be a little more complicated than I had anticipated.

This will be a moderately technical post, so the short version: Iridescence is still coming out on mobile devices (iOS, Android, and even Windows 8 phones), but it won’t be as soon as I had hoped.

Now onto the technical side of things.

Iridescence is written in Haxe, which is a language that aims to act as an intermediary between platforms. Instead of writing C++ for desktop platforms, Java for Android, Objective C for iOS, and C# for Windows phone, Haxe allows you to write in one language for all platforms, translating itself into the one that’s best supported by each target. On top of Haxe comes OpenFL, a framework that mimics the Flash API but has support for OpenGL and runs as a native application. A single codebase, a familiar API, and great performance? Almost sounds too good to be true.

It is.

A week before launch, I plugged in my Android tablet to get a build running. It had been my intention to have a tablet on the exhibition table so people could see the game running on a variety of platforms. I’d had it working in the past without any issues and without having to change a single line of code, so I expected it to be uneventful.

It wasn't.

It wasn’t.

I’m at a total loss to explain what’s going on. At first I thought it was just a matter of the renderer acting up, but the music doesn’t start either. Worse, I get this same behavior if the app is entirely empty. Other games work just fine, so it’s not a problem with the device. On my friend’s brand new Moto X nothing displays at all, so it’s not a matter of the tablet being below required specifications.

I’ve spoken to the OpenFL community and development team to no avail. A new beta version of the framework came out and had the same problem. Worst of all, I tried to roll back to an earlier version that had worked before and I couldn’t even compile. The OpenFL ecosystem is in a constant state of flux, with new build toolchains and dependencies popping up seemingly every time it updates, and the older (working) versions weren’t compatible with the new tools.

At this point it was time to start considering my options.

  • I could hunker down, wait for another OpenFL release, and hope that it would solve my problems.
  • Or I could bite the bullet and port the whole game back to C# (the language I wrote the original gamejam version in) and use Unity.

I’m choosing Unity. I’ll be using the Futile framework, partially because the API is Flash-inspired and will be easier to translate code between, but mainly because it’s a fully code-oriented workflow and only has support for 2D. When I first started working on the improved version of Iridescence Unity still didn’t have support for Linux and doing 2D work was a hassle. Not so any more. When I’m finished, this version will replace the current Windows/Mac/Linux Haxe-based one.

It’ll be a tough road but I’m ready to do what it takes. I leave you with the first step.

long road

Disappointments: Amnesia a Machine for Pigs

Amnesia: The Dark Descent is a game that’s near and dear to my heart. It’s a masterpiece not only of the independent scene but of the entire games industry, succeeding brilliantly at delivering a truly terrifying experience that stuck with me long after I finished it. When the sequel, A Machine for Pigs, was announced, I preordered it as soon as I was able. Frictional’s games have only improved with each new title, and I was confident this latest release would be even better than the original.

As it turns out, that’s not the case.

A Machine for Pigs (AMFP from here on out) is developed by TheChineseRoom, best known for their experimental narrative game Dear Esther, with Frictional taking a minor role as producer and publisher. I absolutely adore Dear Esther for what it is: a beautiful dream of a game with breathtaking visuals and fantastic atmosphere. For all that, however, it’s very linear and involves no environmental interaction whatsoever, and unfortunately this design approach is carried right over into AMFP. Dear Esther was an extremely focused game; no element was included that wasn’t directly necessary to tell the story they were looking to tell, including many conventions considered standard in a first-person-perspective game, such as the ability to crouch and jump. While crouching and jumping are still in place in AMFP, it’s astonishing just how many other core systems were removed from the core Amnesia gameplay.

Simplifications in interactivity
Nearly every object in the world of Amnesia: The Dark Descent (just Amnesia from here on) could be picked up and manipulated. Books could be taken from bookshelves, bricks could be used to bash a hole in a damaged wall, and barrels could be stacked to collect out-of-reach items. AMFP limits interactivity strictly to puzzle items, doors and desk drawers. One memorable moment during my playthrough was when I came across a tubular object on the floor and picked it up, overjoyed to have found something to physically connect me to the world I was trying to immerse myself in. As it turned out, the object was a fuse that belonged to a fusebox in the next room. I plugged it in and went on my way.

object

While the lack of clutter in a level might seem like a petty complaint, the ability to interact with items in Amnesia’s environment was one of the things that really made me feel like I was inhabiting an actual space, rather than proceeding through a tightly directed tour. In AMFP, if you find an object you can pick up, make sure to take it with you, because you’ll definitely need it to solve an upcoming puzzle — or what passes for one in this game, anyway.

Disruption of Balance
Amnesia’s sanity meter has been criticized as being unrealistic and distracting, but I think it’s one of the game’s best mechanics. In a castle filled with murderous creatures and without any means of defending yourself, the obvious tactic is to skulk around in the dark to avoid detection. Amnesia made this very approach inadvisable with the simple rule that the darkness itself is your enemy too, causing hallucinations and insanity if you spent too long without coming into the light. It forced you to balance the preservation of your sanity with the knowledge that standing in the light made it possible for a monster to see you as well.

I’ll never forget one time in particular when I encountered a monster after having spent far too long in the dark. He roared as he spotted me and I sprinted away, veering madly. As I ran towards the door which would take me back to the safety of the main hall, I tried to make a minor correction in my heading and instead spun completely around to face him as he wound up for a swing. I turned again, view flailing, fumbling at the door just as his attack landed. I made it out. Barely.

In AMFP, the sanity mechanic is completely gone. You can creep around in the shadows to your heart’s content with no ill effects. In Amnesia, taking more than a quick glance at a patrolling monster was a good way to induce a noisy panic attack, but in AMFP you can stare at them with impunity, effectively removing the risk involved in learning patrol patterns and turning such segments into uninspired stealth gameplay. Far from being vulnerable and helpless, the player is just as empowered as the hero in any other sneak-em-up.

boss

At least, until you get to the boss fight against this teleporting cybernetic hogman.

Resource management
As with every other aspect of the game, resource management has been simplified to the bare minimum. The inventory has been completely removed; all puzzle elements are physical objects that you carry in your hands, laudanum is no longer available to sooth wounds, and tinderboxes have been replaced with the ability to conjure fire from your fingertips onto certain candles.

None of the above issues are really that big of a deal, but one more mechanic was removed that I can’t come up with a satisfactory justification for: the lantern no longer consumes fuel and can be used infinitely. Ultimately this decision cascades from the removal of the sanity meter and the fact that there’s no downside to being in the dark, but the tension produced by the knowledge that your fuel could run out at any time is noticeably absent. Yet another crucial element falls on the chopping block in the name of accessibility.

Direction over systems
Amnesia had its fair share of scripted events; whenever a door blew open in the wind or a monster broke into the room just after you picked up a puzzle piece, that was a scripted event firing off. For the most part, though, Amnesia was content to leave you to your devices. AMFP, on the other hand, is filled with scripted moments. You can hardly go a dozen steps without triggering a piece of expository voice-over, slow-motion walking sequence, or level-shaking earthquake. Not only do these get tedious after the first fifty or so occurrences, they always broke my immersion for a simple reason that can be applied across all types of games:

There is nothing safer than a scripted event.

When the game takes control away from me and forces me to watch as a monster shuffles through a doorway ahead of me, I know that at that moment there’s no way I’m in any danger. AMFP indulges in these moments all too often, and each time any tension that has managed to build up is dispelled. The director has called for a scene and I am to watch.

Another addition that I found strange is a new behavior of the lantern. If, while creeping around in the dark, you should happen to aim the light at a monster, it will flicker and go out briefly. While the game makes a halfhearted attempt at explaining this effect, the true reason is obvious; it exists wholly as a safety net to give me an opportunity to quickly put out the light and hide. For a horror game, AMFP is surprisingly keen on keeping me alive. Rather than designing systems that terrify, TheChineseRoom has created an experience in which I am constantly reassured that I’m completely safe.

Narrative flaws
AMFP will undoubtedly be praised for its writing, which somehow manages to be even more florid than that of Dear Esther and is the very epitome of style over substance, littered with tangentially related references to great works of literature. The protagonist, Oswald Mandus (whose own name is itself a reference), makes elaborate mementos that reek of thesaurus abuse — why say “earth” when “loam” sounds so much more profound? The two words aren’t, in fact, equivalent; one does not “descend into the loam” when taking a trip underground. This is just one example of the pseudo-intellectual language found throughout all text in the game, from dialogue to notes found in the environment.

When Oswald isn’t making tortured similes in his journal or waxing poetic in one of his frequent monologues, the environmental storytelling is just as confused. No justification is ever given, for example, of the village church’s stained glass windows featuring pig-headed saints and altar piled high with butchered swine. If the titular machine is such a well-kept secret, some explanation is necessary for this inclusion, but there is none. Tom Clancy has been quoted as saying that the difference between fiction and reality is that fiction has to make sense, and when studied carefully, AMFP does not make sense. Gaping plot holes, inconsistencies, and leaps of logic that strain verisimilitude are scattered all throughout, and the climax is never satisfactorily resolved.

I really, really wanted to like Amnesia: A Machine for Pigs, but it seems as far removed from the spirit of Amnesia: The Dark Descent as is possible before losing all resemblance. TheChineseRoom might excel at creating introspective art games, but masters of horror they are not, and AMFP manages to be neither a worthy successor to Amnesia nor a compelling horror game in its own right.

A brief rant about Eragon

I went on a bit of a rant on Facebook today. A friend was wondering whether Christopher Paolini’s book Eragon was worth sticking with if it hadn’t secured her attention in the first 100 pages. The following text was the result. It’s by no means a comprehensive critique, but it’s a start.

Despite my complete disdain for the whole series both from a literary and fictional perspective, I have actually read three of the four books — strictly for research, I assure you.

If you’re familiar with basic writing tropes, you’ll know what I mean when I say that Eragon is a complete Mary Sue. Early on in the first book he manages to stump two Alliance propaganda artists with a single sentence, and that trend continues throughout the book. The only mistake he ever makes (to my memory) exists only as a plot device to introduce a thoroughly uninteresting side character. No matter how foolhardy his decisions, they always work out to a positive result — oftentimes due to the sacrifices of others in order to cover for his incompetence. While this produces a reasonable amount of angst, Eragon’s character never develops as a result.

It’s pretty obvious that Paolini spent the entire time writing the books with a thesaurus in one hand. His vocabulary can seem impressive to the casual look, but in most cases the words he uses are subtly wrong for the situation. As a person who actually does have a wide vocabulary, it really ground on me whenever I would see a word out of place and know that it had been included due to a combination of ignorance and pretended intelligence. One memorable scene involves two characters arguing over which sword is better; a rapier or a flamberge — the fact that in many cases a flamberge is merely a type of rapier is not brought up.

Paolini draws liberally on established fantasy authors when creating his names and “languages”. Many names are either one letter removed from names found in the Lord of the Rings (“Isenbard”? really?), and the magic system is literally a direct copy of the “true name” doctrine in Ursula Le Guin’s Earthsea Cycle. The languages spoken by the various peoples of Alagaesia have none of the believability or linguistic feasibility of the languages of Middle Earth, but that doesn’t stop him from including entire passages of them.

As the series progresses, the narrative becomes more and more convoluted, with new rules being introduced into the magic system (by the middle of the second book a number of the terms from the Sword of Truth books have been adopted), new characters with entire chapters devoted to their tangentially related adventures, and some of the strangest discrepancies in character development that I’ve ever found (Arya won’t eat meat because it’s cruel, but she only ever wears leather?).

I haven’t read the last book. Maybe he cleaned up his act and produced something worthwhile, but I kind of doubt it. My vote: skip it. You could be spending the time spent on those 2800 pages on much better books.

As an added bonus, you can read my very old comic strip comparing the plot of Eragon to that of the original Star wars movies.

So, you want to write an alphabet

cirth

Ever since Tolkien, it seems like every fantasy setting to come along feels obligated to feature its own spoken language or writing system — and honestly, why wouldn’t they? It seems like a great way to add depth and believability to an imaginary world, but unfortunately the effort fails completely in the vast majority of cases, and the fact is that most people just don’t put much thought into this kind of thing. With that in mind, I want to go over some of the common pitfalls that it’s easy to fall into when designing a writing system for a fictional setting.

Continue reading

Hitman: Absolution is not a good game

My relationship with the newest Hitman game is…strained, to put it mildly.

I bought Absolution shortly after it came out, hoping against hope that it would be a worthy sequel to one of my favorite all-time games, Hitman: Blood Money. I added Absolution it to my favorites list before Steam had even finished downloading it.

According to the Steam counter, I played for a total of 13 hours before I removed it from that list. I’d be willing to bet that the majority of that time was spent doing something else, leaving the game running in the background as I watched videos on Youtube or worked on one of my programming projects.

Two weeks after removing it from my favorites, I uninstalled it. I don’t think I’ll be back.

Hitman: Absolution is not a good game.

What do I mean by this? Several distinct things at once, actually;

  • It is not a good Hitman game,
  • It is not a good stealth game,
  • It is not a game that respects my time, and
  • It is not a game that respects my intellect.

I’ll go through these one by one.

Continue reading

Magic in fiction

A friend of mine posted this on Facebook recently:

I know this will create some lively discussion, but I want to get Christians thinking.

Exodus 22:18, Deuteronomy 18:10, 2 Kings 17:17, Isaiah 47:9, Micah 5:12, Malachi 3:5, Galatians 5:20, Revelation 21:8, Revelation 22:15

These are a few of the verses I found with only a few minutes search through the Scriptures. All of them clearly condemn witchcraft and sorcery.

So can someone please explain to me *Biblically* why Christians allow themselves to glorify fiction with “good wizards”?

I won’t accept the argument that my conscience is different, and that yours doesn’t condemn you, so you’re okay. In the classic conscience argument, Paul states that the food in question was intrinsically fine. So those people understanding that had a conscience set free.

Such is not the case here, a wizard is not intrinsically moral, or good or pure…

We are commanded to abstain from every form of evil! And to meditate on praise-worthy things. So I also will not accept the argument that it is just fiction.

Continue reading

Stop looking to form gamedev teams

I frequent the Reddit /r/gamedev board, and it seems like every hour there’s a new post by someone looking to start a team to make some awesome game. The poster goes into great detail about the type of gameplay the game will have, lists games that inspired its design, and explains that he only needs a few people to help him out in order to get started.

He then goes on to list the roles that need to be filled; artist, programmer, audio design…finally wrapping up by describing himself as the “idea guy”.

I hate to sound cruel, but at this point I can state with absolute certainty that the project he wants to lead will never get off the ground.

One such topic was posted recently by a guy who wanted to make a game like Telltale’s The Walking Dead, which has been praised for its emphasis on branching storylines and player choice. I wrote a longish reply to help set him on the right track. Unfortunately, he deleted the post before I finished and I was unable to reply, so I’m copying it here.

My recommendation: stop looking to start a team so early on. It sounds like you have little to no experience with making games, and you’re going to need it. Teams that are founded by people with no experience end up falling apart and going nowhere.

If you want to get your feet wet, try out this tutorial for Twine. It’ll help you realize your goal and get a prototype together that is functionally the same as The Walking Dead in regards to choices and interactive storytelling.

Maybe partway through you’ll realize you aren’t actually interested in finishing it. That’s fine; it’s always better to ditch a prototype than a project you’ve invested tons of work into.

Or, maybe you’ll come up with something awesome and other people will look to team up with you and take it to the next level. That’s great! At that point you’ll be more than just the ideas guy; you’ll have demonstrated you have the talent and perseverance to stick through and see a project to the end.

Either way, it can only help you to start off by yourself. The type of people who would offer to join up with you based on your post are not the kind of people who have any serious experience.

Actionscript — likes and dislikes

 

I’ve been using Actionscript 3 as part of my game programming class for almost a month now. Coming from a C++ background, there were a lot of things I didn’t like about it the first day. Some of those things I’ve grown to like; others…not so much.

 

Things I like about Actionscript:

The import system

In AS3, libraries are built on the “one class, one file” paradigm. Each class must reside by itself in a file with the same name as the class. At first I thought that this was just a needless imposition; coming from C++ where every class can be in one file, it seemed silly to me that a language would restrict the freedom of the programmer in that way. As it turns out, this is possibly the thing I like best about the language.

AS3 classes are organized in “packages”, in a similar way that C++ uses namespaces. A package is a folder that contains class files, and is usually named according to Java naming conventions; for example since my website is www.jacobalbano.com, my classes are in the folder hierachy com/jacobalbano/, resulting in the package com.jacobalbano.

The beauty of this system is that the source is always exactly where you expect it to be, as opposed to in C+, where hunting down a class definition in a source tree can be a pain. Additionally, there is no concept of definition and implementation, since each class is contained in its own file.

Getters and Setters

In C++ classes, modifying or accessing private member variables requires two functions, usually defined as SetVariable() and GetVariable(). Actionscript streamlines this pattern with getter and setter functions, which take this form:

This allows access to the private variable _ID like this:

The beauty of this system is that it allows the convenience of a public variable without the problem that setting a variable is often not enough. For example, to start an animation with a class in C++, you’d have to use the following style:

The PlayAnimation() function in the above case might stop the current animation and start the one specified in the function’s parameters. In Actionscript, the procedure would be the same, but the interface is different:

In this case, the setter function would perform the same actions as PlayAnimation(), but in a cleaner way, in my opinion.
In addition, member variables can be made read-only or write-only by eliminating one of the functions.

Super() and function overrides

When extending a class, functions of the base class can be overridden with a function implemented in the derived class. In addition, the base functions can be accessed with the super keyword. For example:

The base function update() is overridden by the derived class, but it is preserved so we can still access it.

Function pointers

I’ve tended to shy away from using function pointers in C++, even going as far as to embed a Lua interpreter to bind actions to a GUI. Actionscript makes it easy to store and use function pointers with the Function type.

 

Things I dislike about Actionscript:

Syntax

This is a big one. Actionscript’s syntax (and that of any other ECMAscript-derived language) is close enough to C that I didn’t have a hard time picking it up, but some of the changes are clumsy. I would say the biggest offender is variable declaration.

This introduces another gripe I have…

Actionscript is a GC language.

I know it isn’t cool to manage memory yourself anymore, but I like the control it gives me over the program. Actionscript is very picky about what may and may not be deleted.

Actionscript doesn’t have Enums

Enums are a fundamental part of my programming workflow. I can’t think why they wouldn’t exist within the language, but they don’t.

Actionscript has limited support for class templates

The only class that has template support is the Vector class, and templates aren’t exposed for implementation into custom classes. I managed to fake it a bit, but it’s far from preferable.

Actionscript is platform-specific

I wouldn’t even consider learning a language if it didn’t run on Linux. Fortunately, Actionscript can be developed, compiled and run on Windows, Mac and Linux natively. In this case I refer to the fact that Actionscript only really runs on the Flash or Air VMs, one of which has been discontinued on Linux, and neither of which has particularly good performance.

Actionscript allows developers to be lazy

The Flex compiler won’t complain if you miss a semicolon. Forgot to define a return type for a function? Don’t worry, the compiler doesn’t care. I compile my C++ with every possible warning enabled, so this is another thing that bothers me a lot.

Actionscript doesn’t support overloading

In Actionscript you can only have one function per function name, even if the parameters are different between declarations. This means that you can only have one type of constructor, which gets awkward. In addition, operator overloading is not allowed, so if you want to trace your custom class you’re out of luck.

 

There’s a lot to like about Actionscript, but it has its fair share of ugly features and anti-features. If not for Flashpunk and FlashDevelop I would have given up on it by now. Ironically, Flashpunk is the best framework I’ve ever used, period, and Flashdevelop is the best IDE I’ve ever used, period. At least they make the language bearable while I have to use it.

What is a game?

I’m taking a class in “Beginning game development”, because I’m a total beginner at game development don’t you know. Anyway, one of the assignments for the first week was to write a report defining what a game is. I’m posting the text here, because why not. I feel like I did a fairly good job, but I’m a programmer, not a writer.

What is a game?

Among ludologists — philosophers who study what it is to play — the concept of “game” has many varied definitions. According to Wolfgang Kramer, a game is any activity that includes a set of rules, a goal, a measure of uncertainty or chance, and competition. Sid Meier, the developer responsible for classic video games such as Alpha Centauri, and the Civilization series put it more succinctly: “A game is a series of interesting choices”. While Kramer was writing about games such as Go, Solitaire and dice, and Meier referred to video games in his definition, I believe that either of these descriptions can be applied neatly to any type of game, be it a Half-Life, chess or football.

Can a game really be classified as such if there is no choice? While strategy games often consist of nothing more than an endless string of choices to make, and games like Deus Ex provide a tremendous amount of freedom, others such as Portal often provide a single path to a goal. However, while Portal is as a whole very linear, the player is given great freedom while solving the puzzle. Choice in video games is important as a means to an end. While a game’s ending may not be affected by the player’s choices along the way, the ability to choose his actions throughout is what makes it a game and not a long movie with checkpoints and quick-time events.

Similarly, a game must necessarily involve chance or uncertainty; whether it be that data is generated procedurally or, as is most often the case, that the enemy’s strategy is unknown, the player should never be in complete control, or indeed removed completely from control. If there is no possibility of failure, there can be no option to win. This is parodied in Portal 2, when one “puzzle” is solved by pressing one button. If chance is removed from the equation, playing the game is reduced to a rote sequence of actions.

All games must have goals, for obvious reasons: it is impossible to win without them. However,
goals are not always specified, and must be discovered or set by the player. In Minecraft or the sandbox mode of Just Cause 2, where no set goal exists, the player will invariably set a goal for himself, from building the Chichen Itza to destroying an entire enemy camp without taking damage. This is not bad game design; quite the opposite in fact. Sandboxes, even more so than strategy games, are probably the best example of games as a “series of interesting decisions”.

Another thing all games must have is a set of rules to govern player conduct. In board games rules are more intrusive that in video games, as an intimate knowledge of the rules is necessary to proceed. However, rules in a video game, while it is not necessary to know every one, are equally important, and even the most nonrestrictive game has hundreds of rules that are essential to maintain consistent behavior. Without order there is only chaos.

Finally, a game must have competition. In games like Call of Duty, Battlefield or Unreal Tournament, the competition is supplied by other human players striving for the same goal; whereas a single-player game like Half Life provides competition in the form of computer-controlled enemies. In this context, however, “competition” can refer to anything that prevents the player from reaching his goal. In Portal, for example, the competition comes not only in the form of hazardous environments, turrets and time limits, but also from the player’s own ability to look objectively at the puzzle and solve it given the tools at hand.

Personally, I think Kramer and Meier’s definitions go well hand-in-hand. I feel that the most important requirement for a game to deserve the title is that of choice. In recent years video games seem to have been straying towards a more cinematic style, frequently removing control from the player to ensure that he sees what the game designer intended, or to perform some action that would be impossible due to the rules of the game. For similar reasons, I don’t consider “You have to burn the rope” to be a real game. An excellent parody, to be sure; but not a real game.