Unreal Engine 4 Review

NOTE: This post was originally written in 2013, but could not be published due to certain NDA clashes. Now that UE4 is public I can finally share my thoughts with the world. Small edits have been made to make sure the post remains relevant, since UE4 has advanced a lot since last year.

TL;DR

I was given the amazing opportunity to preview Unreal Engine 4 in private beta. Verdict? UE4 is currently the best game engine in the known universe.

Contents

  1. UnrealScript is Dead, Long Live C++
  2. Faster than a Cheetah on Jet Pack Rollerskates
  3. Blueprint: Kismet on Steroids
  4. UE4 Loves Version Control
  5. An Editor for You and Me
  6. Let’s Rocket To Infinity and Beyond

UnrealScript is Dead, Long Live C++

I may as well get the biggest rumor out of the way first. UnrealScript is gone. 100% out of there. You know all that effort you put into learning UnrealScript these past few years for UDK? Yeah, not important anymore. Forget all of it.

Well, not all of it.

But most of it.

I could go into great detail about how much I hate C++, but we’ll leave that for another post. The sad truth is, C++ is pretty much the de facto language in game development and if you want to get anywhere in this industry you should at least know its basics. And what better incentive than UE4?

My loathing for C++ aside, programming in UE4 isn’t really that bad. It helps to have had a course in C/C++ (as I did) and one or two C++ books lying around (my personal favorite is C++ Primer Plus, but a better starter book is C++ For Dummies), and a second monitor for Stack Overflow is indispensable. Even with all these resources, though, the learning curve for C++ is gigantic.

In that respect, Epic Games has tried to make programming as painless as possible. Remember the hot-load feature from the UE4 Features Walkthrough? Totally works. You no longer need to quit the editor to recompile code; in fact, compiling from the editor is recommended. There’s a C++ Class Wizard, also in-editor, to help with generating boilerplate code. And there are dozens of sweet C++ macros to learn that help boost your code’s functionality. For example, this:

UFUNCTION(BlueprintCallable, Category="MyAwesomeFunctions")
static void MyAwesomeFunction();

will allow me to call MyAwesomeFunction() from Blueprint (we’ll get to that later). I also love the Unreal Smart Pointer Library. If you’ve coded in C-and-friends for any length of time you probably despise pointers. In UE4, just use TSharedRef all over the place and you’re good to go.

Of course, you’ll have to learn all of these UE4-specific tricks and shortcuts in addition to learning C++ by itself. So prepare yourself for a lot of learning.

Faster than a Cheetah on Jet Pack Rollerskates

One reason why C++ is so popular is that it’s fast. For UE4, this means a dramatic speed improvement in almost every way. On my computer, the editor starts up in a little under 5 seconds, whereas UDK can take up to half a minute to load. Compilation takes about the same amount of time in either version (20-40 seconds for a smallish project), but I chalk that up to Visual Studio doing a bunch of linking junk in the background that UDK never had to do.

The engine is also no longer strictly limited to 30 FPS. The editor (which is build upon the engine, mind you) consistently runs over 60 FPS and usually clocks in at 110 FPS for the default level. Depending on the game, I do get FPS drops occasionally, but never below 30 FPS. And there are crazy optimizations at work: open a menu while in the editor and you’ll flat-line at 120 FPS, because the world doesn’t need to render since you’re looking at a menu. Yeah, they’ve thought this through.

Epic was also not lying about gameplay performance. I’ve done the million-particles test and UE4 was able to pull it off with no sweat. And a good friend of mine has dropped over 3000 dynamic lights into a single level — UE4 didn’t even blink.

You might be wondering about the state of lighting in the engine. In a video I posted a while back, I said UE4 would have dynamic global illumination. This is not entirely true anymore. I’d have to agree with the reasoning; if it makes the engine that much faster at the expense of “fake” dynamic lighting, then I can live with it.

So how fast is UE4? Well:

It's a well-known fact that jetpack rollerskate cheetahs are the fastest Earthbound objects in existence.

It’s a well-known fact that jetpack rollerskate cheetahs are the fastest Earthbound objects in existence.

Blueprint: Kismet on Steroids

Wait, that title isn’t accurate. “Steroids” gives Blueprint a negative connotation, when in fact Blueprints are quite positively awesome. I should really say something more along the lines of “Blueprint: Kismet if Kismet Exercised Daily, Ate a Balanced Diet, and Learned C++“. But that’s kind of a long title. I digress.

Blueprint is in some sense the successor of Kismet, but it’s really a lot more than that. Put very simply, Blueprint is a visual scripting language. Imagine if you took any piece of code you’ve written in UnrealScript and tried to draw it out as a graph of nodes connected by wires. That would be Blueprint.

In UDK, Kismet was only a visual graph for events in a single level. But in UE4, Blueprints can be applied to pretty much anything. You have your standard Level Blueprint (doing what Kismet did), but you also have Class Blueprints that extend the functionality of C++ classes within the editor. Blueprints can be saved like any other asset in the Content Browser. Blueprints can talk to other Blueprints (this functionality is current kind of lacking, but Epic says it will become a lot more robust in future releases). Blueprints can even be included in other Blueprints via macros.

Blueprint can’t do everything C++ can do, but I envision that at some point it will become powerful enough that we don’t need to depend on C++ at all. In fact, Epic has already released a demo game called Swing Ninja that is written completely in Blueprint, and some people on the forums have already done things in Blueprint that I wouldn’t even begin to try coding in C++. And a final added bonus is, it’s incredibly easy to learn. Actually, if you’ve done any work in Kismet at all, you already know it.

Let’s end by revisiting my previous code example:

UFUNCTION(BlueprintCallable, Category="MyAwesomeFunctions")
static void MyAwesomeFunction();

In UDK it was a real pain to add custom Kismet nodes, but in Blueprint this is all you need to do. Just hop on over to the editor after compiling and you’ll see your custom MyAwesomeFunction node in the MyAwesomeFunctions folder within Blueprint. Sweet, right? Yeah, I thought so.

UE4 Loves Version Control

One of the last things Epic did before stalling UDK development altogether was integrate Perforce version control. I’d like to take this time now to say that if you haven’t used version control before you should be ashamed of yourself. Even if you’re developing your game alone, you should try it out. Version control systems make life easier for software developers and increase the productivity of large teams dramatically.

In UE4, Perforce is enabled by default but can be disabled with the click of a button. I don’t use Perforce myself — not a hypocrite, I just like GitHub better — but I can see where this automatic integration would be insanely useful.

But suppose you don’t use Perforce (like me)? What benefits does it give you (and me)?

To facilitate better version control, Epic has rethought their entire project structure. Remember in UDK how we had the single folder, and all our game code lived in \Development, and all our assets in \UDKGame\Content, and so on? Ever tried working on two games at the same time using the same UDK release? No? Well it’s a pain in the posterior. That’s why I usually had two or more UDK version installed, one for each project I felt like messing around with. And if I wanted to somehow “separate” my game’s code/assets from the rest of the engine (to distribute its source, for instance) I had to resort to copying a bunch of folder paths all over the place.

In UE4, all your projects live in a folder called (appropriately enough) “Unreal Projects”. Inside this folder you can have any number of subfolders, one for each project you’re working on. And each project subfolder contains all your game’s code, assets, levels, etc. Here, each project’s structure is completely self-contained and separate from engine code. If I want to distribute the entire project, I just zip up its folder.

Each game asset is also now a separate file. No longer do we have giant 100MB files containing all the Necris archways and pillars and whatnot. Rather, we’d have a directory containing 200+ individual files, each one encapsulating a single mesh or texture or material. This makes version control a breeze because instead of having to upload the diff of a 100MB package every time you change the color of a single material inside it, you just have to upload the changed ~40KB material file. It’s beautiful.

An Editor for You and Me

One thing I’ve always loved about the Unreal Engine is that it’s very much community-oriented. Unlike in many other AAA game companies, with Epic the Unreal Engine is actually a product, so they put a lot of time and effort into making it useful to other developers as well.

UE4 takes this to the next level. Perhaps I should let Epic speak for itself:

Many Unreal Engine subsystems were designed to be extensible, allowing you to add entire new features and to modify built-in functionality without modifying the engine code directly. You can create new file types, add new menu items and tool bar commands to the editor, or even add entire new features and editor sub-modes!

The way to do this is through the new Plugin system. It’s currently very experimental and Epic cautions us that it will change in future releases, but I’ve already created a plugin and it’s actually pretty easy to do. A plugin, like a game project, is self-contained in a single directory. That means it can be zipped up and distributed for other users, and all they have to do is drop the code into the plugin directory \[UE4 root]\Engine\Plugins and it’ll be available to be installed in the editor.

At some point, I hope that Epic will have a plugin hosting service integrated into the editor itself a la Sublime Package Control, so that all we have to do is browse for available plugins, click a button to install, and profit.

Even if you don’t use plugins, though, UE4 is already way more customizable than UDK. For example, I know someone who’s made their editor pink. I’ll leave it up to you to figure out who that is.

Let’s Rocket To Infinity and Beyond

I believe I’ve already said this, but it bears repeating: UE4 is currently the best game engine in the known universe. It has its little quirks and flaws and many of its subsystems aren’t finished yet, but it’s already leaps and bounds above UE3 before it (and dare I say any other engine in the industry).

You may disagree. That’s cool. I’m not going to say you’re wrong.

But even if you don’t agree…at least give Epic a big hats off for all the work they’ve done. With UE4, they’ve certainly earned their name.

Advertisements

BioShock Infinite Review

I don’t write many video game reviews — this is only my second one, and the other one was just to test the creative waters. So the very fact that you are reading this should tell you something.

I’m going to skip much of the usual stuff (story, character development, environment, graphics, blah blah) because lots of other review sites have already covered those bases and I pretty much agree with them. One review that I particularly like is from Eurogamer because it digs pretty deep into the whole Elizabeth back-story analysis and looks at the overarching themes other reviews miss out on.

But what I haven’t seen reviews do is give the ending any more than with a brief, “it was confusing, my mind was blown, Inception all over again” kind of slant. Which is perfectly fine, but this is an ending I guarantee gamers will be talking about for quite some time and I’d like the discussion to be a little deeper than “mind blown”.

So, without further ado, SPOILER WARNING.

Quantum?

One word that gets thrown around a lot is “quantum”. This review pretty much sums up the popular idea about the multiverse of lighthouses at the end: in the world of quantum theory, everything that can possibly happen does in one universe or another. As a quick and not so accurate analogy, you can think of the popular Schrödinger’s cat. The cat is both alive and dead at the same time, alive in one timeline and dead in another. We don’t know which timeline we’re in until we open the box.

As another analogy, consider the Quantum Bogosort algorithm:

function QuantumBogosort(List list) {
    Randomly shuffle list
    If list is unsorted, destroy the universe
    return list
}

This works because every possible ordering of the randomized list ends up happening. If we destroy all universes that have unsorted lists after the randomization, the only universes left “alive” will have sorted lists in them.

Now consider BioShock Infinite. One twist on this standard multiverse idea is that Elizabeth can open tears into other times as well. We see her opening a portal to a 1980’s Paris and, later, somehow going back to Booker’s baptism. This time travel isn’t restricted to Elizabeth; both Comstock and Booker experience visions of the attack on New York which happens far in the future (when Elizabeth is older). Comstock apparently does so through the Siphon, but Booker has no means to see it. We can only assume it is a memory from one of his previous incarnations.

Multiverse vs. Samsara

The reason why “quantum” isn’t quite accurate in BioShock Infinite’s case is that the story also happens cyclically. The first blatant indication of this happens roughly thirty seconds in, when the Lutece twins note that Booker never rows the boat. This suggests that he has relived the journey to the lighthouse countless times before, and in all cases has never rowed. There is also the case of the coin flip at the raffle, wherein Booker perpetually chooses tails. The number of tallies for heads on Robert’s board gives an indication of how many times Booker has been through the same ordeal.

Such a plot device isn’t new at all. It goes way back to the Hindu idea of Samsara (continuous flow) that’s been around for millennia. It’s featured in many Hollywood movies and novels (my favorite: The Dark Tower series by Stephen King). What Bioshock Infinite does better in this respect its its subtlety. Unless you play the game over and over again, you won’t catch all the little hints to this cyclic idea. And there are LOTS of hints.

Hardcore quantum theorists would balk at such hints because:

  • That isn’t how quantum theory works at all, and Rosalind should know that if she’s such a great quantum physicist
  • Multiverses are concurrent (insofar as we know, and we don’t really know…it’s really all just theoretical)

But we’re not hardcore quantum theorists, now are we?

The Paradox

Booker kills himself. Or rather, he lets a bunch of Elizabeths kill him. This is the part that went a bit far for me…I’d been keeping up perfectly fine with the ending until this happened. I wasn’t sure what was going on. Mind blown.

Of course, by this point we’re assuming that spacetime and special relativity and Newtonian physics have gone all to hell and Elizabeth is pretty much omnipotent. The analyses I’ve read online come to the conclusion that the incarnations of Elizabeth at the end are from all the “past” times Booker has tried and failed to set things right.

I tend to disagree. I think it’s just Irrational’s way of making a really trippy and quite disturbing scene where the main protagonist gets drowned by 20 of his daughters so that people like me can blog about it in the weeks to follow.

Breaking the fourth wall aside, Booker dying isn’t all that paradoxical. If you recall the Quantum Bogosort, you can think of the baptism as being an “unsorted list”. Here’s our revised algorithm:

function WinBioShockInfinite(Person Booker) {
    Have Booker decide whether he's going through with the baptism
    If he is, destroy the universe
    return Booker
}

Now the only universes that are left are ones where Booker hasn’t gone through with the baptism. Anna is just Anna, not Elizabeth + pinky finger, Comstock is nonexistent, and we won’t even begin to conjecture about Lutece(s). And they all lived happily ever after.

No, the real paradox is Elizabeth. Because Elizabeth doesn’t exist anymore. Because the only reason Elizabeth existed in the first place was because Comstock went all Vaas on the whole situation. But since Comstock doesn’t exist anymore, who’s there to make the girl that kills him?

Whoa.

In order to resolve this I humbly advance my theory: Booker is hallucinating the whole thing, and the many Elizabeths are really just Preacher Witting and all the other onlookers. Because the game’s story is perpetual, we can say that Booker has somehow “merged” back into his older self, ready to start another cycle, except this time he has enough sense to drown himself. In case anyone disputes my theory:

  • Wouldn’t you be hallucinating after going through all the things Booker went through?
  • Preacher Witting sucks at baptism. He nearly drowns Booker at the gates to Columbia anyways; it wouldn’t take much more effort to actually drown.

TL:DR

BioShock Infinite is an amazing game, and not just for its ending. Although this review has pretty much talked only about the ending, it’s not even the best part of the game. I’ll leave it to you to discover what is.

Rating: 10/10
Get It: If you don't you are a bad gamer and you should feel bad

Temple Run 2 Review

Most popular mobile game ever, 170 million+ downloads, yada yada yada. It’s impossible to talk about Temple Run 2 without first mentioning Temple Run, so there was my obligatory intro sentence. Now that we’re past the Temple Run, let’s talk about the 2.

One of the most obvious additions this time around is the decidedly nonlinear gameplay. Instead of dreary left and right, now you’ll be rolling around gently curving cliff sides and through winding forest paths, all while maintaining essentially the same simple mechanics. And instead of an endless swamp, the game has been revamped with an open sky environment — like a cross between Uncharted 2 and Twilight Princess‘ City in the Sky.

Oooh...look at the pretty skyyy...

Oooh…look at the pretty skyyy…

The graphics are also better (as they should be). I was pleasantly surprised by the flowing rivers the first time I decided to drown myself in them. And then there were the God Rays, which admittedly were probably only a texture overlay. But still, they look nice, don’t they?

A simple but effective graphical improvement.

A simple but effective graphical improvement.

You’re also gifted with some new gameplay additions: zip-lining and mine-cart-riding (Nathan Drake and Indiana Jones inspired, respectively). Zip-lining is cool because not only do you get to relax and fully admire the wide open sky you’re soaring through, but you can usually score a huge coin string without any effort. Mine carts are another matter: they’re much faster than simply running, and often there’s absolutely no time to react.

At the expense of all these additions there is a price: lag. Now, I’m not necessarily talking about frame-rate lag, because the game usually runs silky smooth even while I’m multitasking. However, the procedural engine sometimes can’t keep up with what I’m doing. In the first game things were always just there when I rounded a corner, making me feel like the world was as concrete as it’s supposed to be. But in Temple Run 2, more often than not I get this:

Umm...guys...what happened to the path?!

Umm…guys…what happened to the path?!

No big deal, I suppose, but it does break the magic a bit. As for the rest of the game, there are marked improvements to the UI and menu system. Character selection is a bit more important this time around, since choosing the right character affects what powerups you can grab. There’s also a neat new Gem system. Gems function to increase your powerup strength as well as resurrect you when you die (for a price), and they can be found in-game at random intervals. I like to stockpile 30 or so gems and then waste them all on a run where I can resurrect myself 4 or 5 times in a row.

Unfortunately, Imangi has also succumbed to the horrors of modern app design, such as prompting the user for every little thing. For example, once you get 2500 coins you can buy and use a Head Start as soon as you start running. Too bad I didn’t know that when I tapped the screen more than once, causing me to lose a good portion of my cash for no particular reason.

A few old problems are still not resolved in the sequel, the biggest of which is procedural content placement. Every so often there’s still a big spiky wheel thing right after a big gap in the path, meaning instant death no matter what you do. And I swear I once ran into a mine cart path where both forks in the road were barriers (also instant death).

Okay, so the big question: is Temple Run 2 better than Temple Run? Answer: yes. As it’s still free, I don’t see why anyone would want to pass up getting it. While the series may only be getting better incrementally, and the sequel won’t come anywhere close to the success of the original, it’s still a polished and solid game.

Rating: 8.5/10
Get It: Yes