Author Archives: The Regular Oddity

Three adventure games

I played stuff

Related imageRelatively recently, I played three adventure games that were fairly compelling and impressive, but only one really blew me away. Two of these adventure games were by, arguably, the greatest designers of the genre: Ron Gilbert and Tim Shafer, in their great return to adventure game design. One was by a rather meek newcomer: Swedish independent Natalia Figueroa. This post is about how Ms. Figueroa blew me away.

Now one could argue that my expectations were very high for Schafer and Gilbert and very low for Figueroa, and that would be true. But that’s not where their games differed. Ms. Figueroa’s game shone in a very different and much simpler way.

The three games are the following: Tim Schafer reignited the flame of adventure games and probably strongly contributed in making Kickstarter a valid platform by using it to fund the adventure game that would eventually become Broken Age. Ron Gilbert followed suit with Thimbleweed Park. Natalia Figueroa also funded her game through crowdfunding, though in her case it was through Indiegogo. She made Fran Bow. Fran Bow was released shortly after the second part of Broken Age, a year and a half before Thimbleweed Park.

Broken Age

Image result for broken age

Broken Age is meticulously designed, masterfully executed, innovative, charming and probably does not contain anything seriously wrong.

First, as one should expect from Tim Schafer, the art of Broken Age is executed in an extremely thorough way. The backgrounds are superb. The animation is simple, expressive and memorable. The voice acting is fantastic and some of the voice talent in Broken Age is performed by famous Hollywood and TV actors.

The basic premise is that, as the title indicates, the player is offered to play as either Vella, who seems to live in a idyllic fairytale-like world or Shay, who lives in a science fiction-like world. Neither world is fully coherent and both have details that just look wrong, or sometimes just elements that just don’t belong. Still, neither Vella nor Shay’s story seems to clearly connect to the other. The game is clearly divided in two parts and the implicit purpose of the first part is to figure out the connection between the two main player characters and their respective worlds. This is in addition to the general goal of the adventure game which is always to move the story forward.

This is a compelling premise. Shay and Vella seem to be separated in every conceivable way: one travels through space, one is stuck in a small area of land. One seems to live centuries after the other. Although, conceivably, Vella could be living on one of the planets Shay visits. Still, both characters are kept a distance that’s just effective enough to keep the player digging and seeking.

Shafer is no stranger to multicharacter adventure games. He’s mostly famous for Full Throttle and Grim Fandango, but I would still argue that his masterpiece is Day of the Tentacle, where the player had control of three extremely expressive characters, Bernard, Hoagie and Laverne, each separated by two hundred years in time.  The time puzzle of Day of Tentacle, which are at the core of the multicharacter aspect of the game, are one of its more memorable parts.

That is, if it works. And while the mystery of the connection between Shay and Vella does work, without a doubt in Broken Age, it’s not enough to keep the two parts connected. Not even in the second part of the game when they are connected not just through the continuous deepening mystery of how they are linked, but through specific puzzles and therefore through gameplay.

The problem with Broken Age

Image result for broken age wolf

And this is one of many ways in which Broken Age fails. For all of its meticulous attention to detail. For all of its exquisite art, delightful details, charming mood, stunning reversals and surprises, it feels unfinished, empty, hollow.

Not just that: it feels unfinished because it is too detailed. I know that sounds strange. Let me explain. It feels as if if more resources had been assigned into content and less into art, the game might have felt fuller, more meaty.

But it does not. Shay’s ship feels pretty small and empty. Shay, for reason that eventually become clear, never actually leaves his ship in part one of Broken Age. Vella does get to explore her land, but not very far. And she does not get to know that many people. And the people she does get to know are interesting, but she never seems to be able to interact with them that much.

Guybrush Threepwood from Monkey Island games, the three characters from Day of the Tentacle or April Ryan and Zoë Castillo from the Longest Journey games all seemed to be able to enter and touch much deeper, more complicated, more tangible, messier at times, fuller worlds. In comparison, the worlds of Broken Age feels like a empty template of what it could have been. It feels short. Like a thin slice of a wonderful, but overly decorated cake.

After I played it, I thought that Ron Gilbert, were he to make an adventure game, would focus less on voice and graphics and more on content. He’d give us a big, complex, deep, mysterious story with meaningful interaction. And that’s still what I expected when Thimbleweed Park was finally announced.

Thimbleweed Park

Image result for thimbleweed park

When I saw the opening screen of Broken Age, I knew nothing about the game. I didn’t even know I’d have to begin by picking between two characters. I wanted to start playing as a complete blank slate. But when I came to Thimbleweed Park, I wanted to keep on top of things. I followed the blog. I even contributed. I made up a title for the bookstore and I wrote three books for the library.

Thimbleweed Park is also a multicharacter adventure game. It starts as a murder mystery. A body has been found in the eponymous Thimbleweed Park in 1987, an decaying city. The player controls five characters, including two FBI agents, a young game designer, her father, and a clown. The game is full of references to old games designed by Ron Gilbert, Gary Winnick and their colleagues and seems to target, at least in part, their long-time fans.

Just like I had hoped, Thimbleweed Park did not look too polished. Ron Gilbert seemed to be focused more on content than on presentation. Again, I do not and would never deny the importance of presentation, but I am curious about a game where most of the effort is focused on creating deep, meaningful content. Ron Gilbert’s blog entries talked a lot about storylines and about puzzles. There were a lot of posts about art too, but the art seemed to be kept efficient, and manageable.

When I remember Ron Gilbert’s main games, the Monkey Island games as well as Maniac Mansion, they were not just interactive stories, but they were worlds with strong storylines that the player could fully explore in a narrative way. Not in an RPG way. There were no monsters to kill, but you could make any joke available to any character without fear of consequence, just to see how they would react. That’s a narrative form of exploration. At the same time, the secrets of these worlds would slowly be unveiled to you. I was hoping the new game would be like that.

The problem with Thimbleweed Park

Image result for thimbleweed park factory tubes

But to me, Thimbleweed Park was not like that. That world, while intriguing, seriously lacked tension. The mysteries felt flat. The jokes were interesting references, but were not funny. I found one character truly compelling: Delores. Franklin, her father also came off as sympathetic, but mostly again because of the way he related to her. Delores was a fully-realized character. He story was interesting; he dialog was funny; her goals were easy to identify with; the mystery around her was truly puzzling. And the gameplay that came out of that was truly fun. But it also underlined how flat the other characters’ storylines felt in compasion.

Still, overall, my main objection with Thimbleweed Park was how arty it felt. Usually, I approve of artistic ambition in games, but in this case, it came at a very costly price. The game starts with an actually intriguing murder mystery. However, as the game progresses, it slips into a completely meta reflection on itself. This is daring and I’m not sure that the game pulls it off. As banal as is sounds, if we had explored the connection between each citizen of Thimbleweed Park and the murder victim, I think it might have made for a more interesting game.

I would also like to point out that I’ve played the game shortly after its release. At the time, the characters could not talk to each other and there was no hint system. Also, there arcade was closed. I have not played the game since, mostly because I did not enjoy that much the first time. But this inability, now fixed, for the characters to communicate felt terribly wrong. It made the whole world of Thimbleweed Park feel hollow.

Fran Bow

Image result for fran bow

Fran Bow follows an episode in the life of its title character, a young girl called Fran Bow, who lives in New England in the US in the fifties. In a very long intro scene, we learn has no friends, except for a pet cat. One night, a horrifying creature kills her whole family but she and her cat escape. She ends up in a mental asylum. She is certain that her cat is still alive in the forest. There, she is treated with an experimental medication that gives her terrifying visions. Realizing that, her doctor immediately stops her treatment. But Fran thinks that these pills can help her find her cat.

The game has a very simple interface. Fran can walk, look at things, use things, use dialog trees (always with two options), and swallow a pill. Under the influence of a pill, she can close the pill bottle, with will stop the pill from being effective. While the pills are in effect, she has visions. And, of course, her visions are real. But the player is quickly challenged to questioned what “real” means.

The dialog seems to be written by someone whose native language is not English. There’s an overuse of the phrase, “It’s fine.” The graphics are a bit clumsy. At first, the puzzles are fascinating, but towards the end, I’d accuse the game of puzzle-stuffing. By that, I mean that Natalia Figueroa seemed to want to tell a story but was making a game so she interrupted her story with puzzles that didn’t really need to be there. There are all details. Trifles. Overall, I would argue, that Fran Bow is a true masterpiece. More so than either Thimbleweed Park or Broken Age.

What works with Fran Bow

Image result for fran bow

Fran Bow perfectly mixes a deep, complex story with compelling gameplay. It’s hard to talk about without giving too much away but there’s one thing that I can say with confidence about Fran Bow: at every step of the way, I thought, “Oh, I know exactly where this is going” and at every step I was wrong. The game was several step away from me. This was true of both the story and the gameplay and in both cases, they were really the same thing.

This also happened for Thimbleweed Park, but not in the same direction. I’d think, “Oh, I think I know where this is going…” but it went in a different direction but I wish it had gone in the direction I had wanted. That’s less good.

Fran Bow plays with its own rules constantly, but never ignores them. For example, you think you know how the pills work, but you don’t. Even though the rules of how the pills work are as given to you, they never change. You just don’t have all the element yet to understand what those rules mean.

Also, Fran Bow is long. Every time, I thought I was near the end, I realized I was nowhere near it. And every time I thought the tone of the game had changed completely, I realized that it really had not. I was just fooled into mistaking a temporary alcove for a whole new structure.

Image result for fran bow

Fran visits deep, complex worlds. She interacts with strange, complex people. She herself is worth getting to know. Her world is fascinating and full. Fran Bow also shows strong authorship. One can clearly tell is is the work of a dedicated author with a vision. It has flaws, but its flaws make it better. It allows to hang onto it, unlike a completely smooth surface that a player or other art appreciator would just slip off of.

I have no idea what Natalia Figueroa will do next. I’d say there’s no way she’ll do something as good as this next time, but, honestly, there was almost no way she’d do something nearly as good as Fran Bow the first time, so, in all fairness, all best are off.

Final note about Thimbleweed Park

One thing about Thimbleweed Park that is probably worth noting is its engine. Based on the game’s development blog, it looks like the engine for Thimbleweed Park could be an amazing tool to make new adventure games. Ron Gilbert, who was, after all, the lead developer of the legendary SCUMM engine, put a huge amount of effort into making it. He did say he would consider releasing the engine but made no promises.

It is not unheard of that when a game splits its effort between its content and its engine, it cannot deliver as much of its content as one might hope. I’d argue that’s why the first Assassin’s Creed had much more repetitive content than the second one. For the first game, the whole rules of how the game was played, the mechanics and most likely the engine had to be built. The second game only had to build on that.

I know a lot of people loved Thimbleweed Park. I have high hopes for its engine.

No responses form the forum

No one responded to my call for help on the forum. I’ll try removing all references to blorb and glulx in the code this evening, but I’ll also write and email to David Kinder. I think I really have to by now.

Though if I could crack that static library problem it would be even better. I might post a message on StackOverflow about that. Though people on StackOverflow tend not to like it when you ask questions about code that’s not your own because then the poster can’t comment on the intent of the code accurately.

A static library turns out to be a static issue

One library is really getting in way. It took me a while to figure out that it’s by the author of Frotz for Windows, David Kinder. The project and it’s set up now wants to import it as a static library. It didn’t actually say that, of course. It just said it expected a file with a “.lib” extension. But, based on what I’ve looked up, that means it’s expecting a static library, which is an unlinked compiled file.

It took me a while (again) but I managed to figure out how to compile that. The problem is that nothing in that file is public. That means that the compiler can include the file but, from the compier’s point of view, the file in empty. I’ve tried to make elements in it public, but the compiler does not seem to see that. All the web pages I can find on the issue are for Visual Studio 2008 or later.

I’m going to email Emily Short and ask her to give me David Kinder’s email. It think, at this point, it is necessary that I do that.

Problems with libraries and compilation

I’ve been trying to compile Frotz for Windows many, many times by now. It’s always seeking more libraries. There’s a “Libraries” folder is the source code. I thought that was where the Libraries were supposed to go. This is all very different from what I’m used to on Unix. For each library I added in the project’s folder, I had to add that new folder in the project’s settings. That was clearly not the way to go.

Then, something I didn’t expect happened. Frotz expected Libraries I had already included to be specifically in a folder called “Libraries” in my home folder! So I moved everything there and renamed everything the way the compiler asked me to. What worries me is that I’m still not sure where the compiler is getting all of these names and places from precisely. And there’s not much documentation available for versions of Visual Studio older than 2008.

Another slightly annoying thing is that all of these libraries are for media that are not actually supported by Frotz. They are useful for the other story format that Frotz for Windows uses, the glulx format, saved in blorb files. (Yes, these are strange names.) There’s not C definition or compiler setting that just disables including these in the code. And if I try not importing the blorb sources, another part of the code, much further in, complains that it’s absent.

I’ve also been trying to contact the developer for a few days, but I simply can’t find his email address. If I really get stuck for too long, I’ll write for Emily Short for help on how to contact him. On the one hand, Emily Short’s already been extremely kind, supportive and helpful for my EET project, but, on the other hand, I really don’t want to take more of her time than I already have.

I’ve also noticed that I could have used some of the advice I use to tell my students at the National High School Game Academy: guesswork is generally a bad idea. It’s slow, ineffective, inefficient and unreliable. I found that I’d used it much too much when dealing with Visual C++. The reason for that is that I’d been trying to use the interface as an interface. What I should have done, and eventually did, was go look at the project file directly. All the settings are there in a simple XML file that I can search with a text editor. I really should have gone past the graphical interface and looked into the file earlier.

On the upside, so far, all the libraries have been pretty easy to find and add. A few more and Frotz for Windows might actually compile.

I’d like to reiterate at this stage that the original command-line Frotz compiled in a few minutes. And that it’s the non-Frotz part of Frotz for Windows, particularly the media part, that’s causing my current problems.

Windows and Visual C++ installed

It took me a couple of days and a new external hard drive, but I manage to completely delete and replace all of the partitions on my Mac and install Windows. At about the same time, I actually found a version of Microsoft Visual Studio that’s pretty close to the one that was used to make Frotz for Windows. So now, at least, I have a computer at home I can use to develop for Frotz and also that I can use to play games like Dead Space that I really should be playing for my project work.

I tried opening the project in Visual C++ 2003 and it actually opened. It didn’t compile, but it’s much closer to compiling than any other version that I’ve tried so far. One of the ideas is that by figure out what Visual Studio 2003 expects, I’ll be able to also open it in a more recent version.

Z-machine specification (and more install trouble)

DocumentsI had two items on my list of things to do this weekend: install Windows on my Mac and read Graham Nelson’s Z-machine specification. As I’m typing this, on Sunday evening, Windows is still not on my Mac.

About the Windows thing, it took me forever to find and download Windows and Office and configure my Mac. And by that I don’t mean that the whole thing took forever, I meant that each took forever. Yes, it was a series of infinite periods of time. Not literally, of course, but it was pretty much how it felt like. In the end, I did get Office installed on my Mac, so that’s already a good thing, because I really need it right now. As for Windows, I pretty much need to reformat my Mac’s internal hard drive and restore its current content. I’ve ordered an external hard drive to store the data in the meantime. (I was meaning to buy one anyway to get stuff off of my ETC computer at the end of the semester.) THEN, I’ll have Windows on my Mac at last. I really need to play some games for research and I’ll want to be able to compile Frotz for Windows at home. If I ever manage to compile it at all.

As for the Z-machine specification, I read most of it. It’s really interesting. Fortunately for me, when I was at NYU, I did a little bit (a tiny bit, really) of assembly and that’s certainly helping me understand that Z-machine thing. There are op-codes like in assembly. There are also rather strange things. The original Zork games for which the Z-machine was developed were created in the very early 1980s. Space was very much at a premium then. So the Z-machine goes out of its way to save space. To that end, it has its own “word” type: a number encoded in five bits. I find that fascinating and astounding. It also explains some of the code I’ve seen so far.

In more directly relevant news, the in-game objects map pretty literally to how objects work inside of the Z-machine. The hierarchy is pretty literal as well. Each object has a parent, a child and a sibling, so if the player is in a room and carries an object he has to put on a table, the room is his parent, the object is his child and the table is its sibling. Not only that, but each object has attributes and properties, one of which is the object’s description. That should make my original idea of having a side-pane with the player character’s inventory on display relatively easy to develop, if, again, I can get anything Windows-related to compile.

I’m not sure current Z-machine interpreters have debuggers. There used to be a few, I’m not sure they’re still available to download. There even used to be decompilers, based on what I’ve found on the web. But they’ve vanished as well. I’ll see if I can just log things from the C code directly once I have a more concrete idea of what inside of the virtual machine I’m looking for.

Right now, my project seems to have shifted from analyzing and developing to just getting the basic set of tools to work. Honestly, as stupid as it looks, it feels useful to me. I’d better be doing that sort of thing here than when stakes are much higher. Plus, I’ve spent so long comfortably using open-source tools that the harsh reality of proprietary tools is probably a well-needed and sadly educational wake-up.

If the version of Visual C++ I ordered still can’t open the project, or if it simply fails to start, I’ll try fixing the version that was converted by more recent versions of Visual C++. If that fails as well, I’ll probably change the goals of my project. I can only bang my heard against the wall for so long. Still, it would be nice if I could keep my project C++ and Windows-related. And by “nice,” I mean “useful.”

More Visual C++, less productivity

I’ve spent the last couple of days trying to open the Frotz for Windows in Visual C++ in a way that would allow me to use it. For Frotz itself, again, it was very easy. Eclipse was all I needed. Frotz for Windows relies on MFC, the Microsoft Foundation Classes, a library that wraps the rather difficult calls to the Windows API into well-structure C++ classes.

The problem is that MFC, being a proprietary Microsoft technology, is in no way standardized, so version of Visual C++ I use must match the project. There’s a feature to upgrade a project to a more recent version of Visual C++, but it didn’t seem to work at all for Frotz. I found that I had access to the “pro” version of the latest version of Visual C++. After taking time and effort to remove the older ones, it took me a long time to install the lastest one. I didn’t do the import successfully either. I looked up the Wikipedia entry for Visual C++ and I deduced that the best version of Visual C++ was version 6.0, a version from the late 90s, that, oddly enough, is rather easy to find.

Software hellI installed Visual C++ 6.0 and tried to use it but it crashed every time I tried to open a file. I tried to change the settings on Windows to set the right compatibility mode of Visual C++ 6.0 and that didn’t work. Then I remembered that for my first project, Steve Audia told me about Windows 7’s Windows XP mode. Windows XP mode is a free-of-charge emulator that can run Windows XP inside of Windows 7. I found the one I had set up on my PC. I installed Visual C++ 6.0 on it. I got Frotz onto the virtual machine and… The version was wrong. Frotz for Windows was not a project format that Visual C++ 6.0 could understand.

So I did what I should have done at the very start: I opened up the project file in a text editor and hoped that there would be something like a version number somewhere in there. The project file was simple XML and indeed the version number was plainly visible: version 7. Of course, there are two versons of Visual C++ that have a version 7: Visual C++ .NET 2002 and Visual C++ .NET 2003 are both version 7, and they each have a different version of MFC, according to Wikipedia. But Visual C++ .NET 2003 is technically version 7.1.

I looked for Visual C++ version 7 on the Internet and I couldn’t find a free version, so I bought an second-hand copy on Amazon. It wasn’t very expensive. I’ll see if I can install it and proceed from there. In the meantime, this weekend, I’ll look at Graham Nelson’s Z-Machine standard. That does not require any Microsoft software to work.

I have a reputation of being unfairly anti-Microsoft. I’ll openly admit being anti-Micrsoft, but I really don’t think I’m that unreasonable about it.

In the end, even though I should be furious and consider all this a waste of time, I don’t. I see it a useful training on how to work with Microsoft Visual Studio, particularly for legacy projects. I really don’t think this is the last time something like this will happen to me. The next time, I’l be prepared. Well, at least, a bit more prepared.

Visual C++ is annoying me

XKCD - Sudo sandwichVisual C++ is annoying me and I haven’t even started using it yet.

For analyzing Frotz, Eclipse worked like a charm. But for Frotz for Windows, I need Visual C++. The updater failed from two sources today. So tried uninstalling it so that I could then re-install it. That took me a long time. I’m not sure how much, but it was much longer than it should have been.

Being used to Linux, the uninstall process was painful. Instead of just typing something like sudo apt-get remove nameofprogram1 nameofprogram2, I had to uninstall each component of the program one by one. For some reason it was divided into lots of small parts. Then I had to wait until it asked me to confirm admin privileges. For each part. I wanted to do Windows programming because Windows is the de facto platform for games, but this is not making me like Windows more so far.