A quick (but useful) update to an oldie-but-a-goodie

One of the first apps I ever wrote for Android, and certainly the first app I published to the Google Play Store, was a simple unit converter app. (My god, that was nearly six years ago!) With over 150,000 loyal users, I’d say it’s been modestly successful, especially considering the hundreds of other similar utilities that exist on the Play Store.

Anyway, I thought it’s high time that this app receives some love, so I implemented a feature in the app that I’ve been wanting to make for quite a while: Widgets! You can now drop a widget right onto the home screen of your device, so that you can perform quick unit conversions on the home screen, without having to launch a separate app! You can also drop multiple instances of the widget, if you need more than one quick conversion. Here’s what it looks like:

The steps for putting a widget on your home screen varies for different Android devices, but generally it involves pressing-and-holding within an empty area of the home screen, and selecting from the “Widgets” menu. If you have the app installed, you should see a “Convert Units” widget that you can select and place on the home screen.

After placing the widget, you can configure which units it shows by pressing the “gear” icon on the left. You can then increment and decrement the value to convert by pressing the “+” and “-” buttons, or exchange the “to” and “from” units by pressing the widget itself.

No Man’s Sky: All Breadth, No Depth

Imagine a game that shows you a random number and asks you to give that number a name, and upload it to a database. That, in a reductive nutshell, is the general idea of No Man’s Sky. The question is whether No Man’s Sky dresses up this mundane  premise in a way that makes it worth playing. The short answer, I’m afraid, is no. The game disappointed me in  several ways, which I’ll outline below, along with some lessons and recommendations for future game developers, which they are welcome to take or leave.

General disappointment

In a broad sense, the game is indeed  revolutionary, since it allows the player to roam free in a universe filled with procedurally generated planets, meaning that no two planets are exactly alike. The game allows for 18 quintillion (264) such planets, giving the player an inexhaustible supply of new worlds to visit and explore.  And make no mistake: the first impression that this game gives you is outstanding – breathtaking vistas, a world bustling with life, and seemingly unlimited possibilities for exploration.

Unfortunately, the procedurally generated elements are only a thin veneer on top of a whole lot of repetition and mundanity. After exploring a few planets, it becomes clear that while the landscapes are indeed randomly generated, the small-scale structures are pulled from a very limited selection of shapes. Things like trees, flowers, corals, crystals, geologic structures, etc. are nearly identical from planet to planet. The various animals that can be found on each planet (again, randomly generated permutations of a small selection of body part shapes) provide some amusement, but there’s nothing else to do with them except catalog and upload them to a database that no one will ever see.

Each planet is also peppered with “artificial” structures like trading posts, transmission towers, and manufacturing facilities. All of these are identical from one planet to the next. If you’ve visited one, you’ve visited them all. The same goes for space stations that are present in every star system: they look nearly identical on the outside, and exactly identical on the inside.

The intelligent aliens that you encounter along your travels look and behave identically, are completely static, and allow for a single conversation that has zero consequence, and may provide a crafting schematic that you already have.

“Star systems” are not really star systems; they are clumps of a few planets in close proximity, between which you can hop in your starship. Space itself, far from being empty, is jam-packed with asteroids that are made of starship fuel, conveniently enough.

There’s never any sense of danger, since you can crash directly  into asteroids while taking minimal damage, and the game simply won’t let you fly too close to the surface of planets. The idea of survival being one of the pillars of this game is laughable. You really have to try to get killed in this universe.

The game’s universe also feels sort of abandoned: none of the planets have any cities or settlements, except the aforementioned lone buildings, which are sparsely spread out and manned by a single alien at most. Where do these aliens come from? What do they do outside of work?

There are also  occasional starships or freighters floating around in space between the planets, whose only purpose is  to tempt you to steal their cargo. Where do these ships come from? Where are they going? Does it matter?

Occasionally, you’re attacked by hostile starships in space, or by hostile “sentinels” on the ground. They appear out of thin air, and their motivation is completely unknown. The battles unfold identically  from one instance  to the next.  The battles also have zero consequence, since you can return to your death point and retrieve your lost items, with the enemy no longer in pursuit.  And thus, the game manages to reduce something as exciting as  a battle to even more monotony.

Therefore, on the whole, the novelty of this procedurally generated universe wears off after a couple hours. After that, it becomes a tedious grind of collecting resources to power your starship and expand your inventory, with ever-diminishing reason to do so.

Specific disappointment

From the beginning of the game, the player is given the option to follow a storyline where the player embarks on the path of “the Atlas”, a mysterious force/entity that starts to guide the player towards a vague eventual goal. The storyline has a good dose of mysticism and philosophy, as well as  some nice visuals along the way. I found this storyline much more interesting than any of the procedurally generated elements in the game, which says a lot about the latter.

However, the ultimate disappointment came at the end of the Atlas storyline. The game asks the player to collect ten “Atlas stones”, which involves a time-consuming process of collecting resources, crafting new supplies, and upgrading your starship so that you can travel from one Atlas station to the next. At each Atlas station, the suspense builds, and the player expects an ever-more-grandiose payoff at the end. But instead of a grandiose payoff, we get… nothing.

When you turn in the ten Atlas stones into which you’ve invested so much time, you’re told (not shown) that you’ve fulfilled your destiny by “birthing a new star”, and that you’re now “free to explore” on your own. This is done offhandedly, in the exact same conversation interface as all other interactions in the game, and with no other visuals to make note of your accomplishment. You’re not shown this new star, there’s no cutaway scene, and there’s not even any reward in terms of upgrades, milestones, or possessions. The game simply continues, with no further information given.

At first I honestly thought that it was a bug in the game. But when the realization sank in that the storyline was over with absolutely no payoff, I was kind of appalled, and was pretty much turned off from playing the game any further.

I’ve also already read spoilers of the actual “ending” of the game (when the player reaches the center of the galaxy), which turns out to be almost equally unsatisfying. I therefore have zero interest in completing that portion of the game, either. All that’s left is to visit random planets and upload them into a database that no one will ever see. Or, more precisely, look at random numbers and give them a name. No, thank you.

Controls and user interface

The controls in the game are very frustrating. I played the PC version of the game, and it doesn’t feel like it was built for a PC; instead it feels like a back-port of the PS4 version, or some kind of lowest-common-denominator between the two. When I press a button on the keyboard, or click my mouse, I expect that action to have an immediate effect. However, the game expects you to press and hold your mouse and keyboard buttons for a split second, in order to perform  the desired action. Moreover, this scheme is inconsistent: some actions are immediate, while others are press-and-hold.  This requires users to unlearn the way they’ve interacted with PCs since the beginning of time, and adds a huge amount of unnecessary frustration.

All of the conversations with aliens and interactions with objects come with built-in  mandatory delays, to accommodate a slow animation that cannot be skipped. This is fine the first few times, but then becomes very annoying. The biggest offender in this category is the interaction for selling items on the “galactic market”, where the interface animates for a full five seconds before offering the options to buy or sell items.

Maneuvering through space in your starship works well enough, but becomes inexplicably terrible when maneuvering over a planet’s surface. At random times, your ship will pull itself to the left or right. There’s an invisible barrier that prevents you from flying too low, which takes away any excitement you might get from wanting to fly  through canyons or mountain ranges.  When taking off from the ground, your launch thruster may put you a few kilometers above ground, or it may put you into orbit, with no clear way to control it. But I digress.

The Good

The best thing I can say about No Man’s Sky is that it’s a beautiful proof of concept, and I certainly don’t regret trying it out. As a software developer, I can appreciate the tremendous  engineering skill that went into constructing this world. I can also see exactly what “happened” in the development of this game: 99% of the effort went towards building the game engine, and 1% went towards thinking about the story and the gameplay.

Nevertheless, the fact that it was executed by an indie game studio makes it doubly impressive. No Man’s Sky has laid the groundwork for a procedurally generated sci-fi adventure. To see that it’s even possible to create this kind of world is very encouraging. I look forward to the next iteration in this genre, perhaps executed by a major game studio, that might feature more meaningful procedural elements, better multiplayer interactions, and most importantly, deeper storylines.

To summarize, there’s a  brilliant little YouTube video  that captures my feelings on the game perfectly. Enjoy.

The state of emulation on Android

For whatever reason, I have a strange fascination with emulators, and making sure that I can emulate as many machines and game consoles as possible on my current PC.

The one thing I haven’t researched until now is emulating various systems on my Android device. Now that I’ve received my shiny new Galaxy S7, I figured it must be powerful enough to emulate a good fraction of older hardware. And indeed, I was pleasantly surprised by the “state” of emulation on Android.  Emulators for NES and Super NES are readily available on the Google Play Store, along with emulators for Atari and Commodore 64, and hardly require the latest hardware to run well.

But what about emulators of  actual PC hardware? Well, there’s the excellent DosBox Turbo app, which is an optimized DosBox port to Android. This is not a free app, but it’s well worth it. However, what I was looking for is a true PC emulator, such as the great bochs emulator that I’ve trusted for a long time to boot into my disk images of Windows 3.1 and Windows 95. After a bit of looking, it turns out that this is available, too!

Thanks to  some fantastic work by Pelya (for porting the SDL 1.2 library to Android, thus  making it easy to port any SDL-based application to Android) and by  Lyubomyr  (for actually adapting bochs to use pelya’s SDL port), we now have a perfectly working version of bochs for Android! Using their build instructions, I was able to build my own bochs APK, load it onto my device, along with a few disk images. And after a few configuration tweaks, I’m now able to run my emulated images nearly flawlessly:

Here it is, running Windows 3.11:

…and Windows 95:

…and Windows XP:

And here it is running one of my favorite old DOS games, Return to Zork!

Planetarium app for Samsung Gear VR!

As a fun side-project during the last few weeks, I’ve been developing a planetarium application for the Samsung Gear VR headset (one of the neater gadgets I’ve gotten my hands on this year), along the lines of Stellarium or Google Sky Map. It’s pretty rudimentary so far, but nevertheless packs most of the features you would expect from a planetarium application, such as constellations, accurate planet positions based on current time, and a selection of Messier objects.

You can “look at” any object in the virtual night sky within the app, and see a pop-up description of its name. While looking at an object, you can also tap on the trackpad on the Gear VR device to retrieve a full description of the object from Wikipedia (using Wikipedia’s new RESTBase API, which I also help develop).

The app is not yet deployed to the Oculus app store (working on it…), but you’re welcome to check it out on GitHub and build it for your own device. Here are some screenshots:

Star Wars: The Force Awakens: Obligatory Commentary

The new Star Wars movie is really great, but it’s by no means a perfect movie. It strikes a relatively good balance between capitalizing on nostalgia or “fan service,” and delivering fresh, new characters. I’m also thankful that it makes zero references to the prequel trilogy (Episodes I through III). In fact, I firmly believe that one of the planets destroyed by the new Starkiller Base is Coruscant, in a symbolic gesture of destroying any remaining evidence of the prequels. In this way, this movie fully redeems the entire franchise from the sins of the prequels.

But, now that the initial excitement and giddiness have worn off, I’ve crystallized some thoughts on what exactly my issues  with this movie are, and I’ll focus on just one: by far, my biggest complaint is that our lead character, Rey, is implausibly too good at what she does, for the mere convenience of the plot.

This seems to be a recurring theme in J.J. Abrams’ movies. If we look at Star Trek (2009), we see that all the characters are super-geniuses: James Kirk graduates from the Academy in three years, and gets promoted to Captain on his first mission. Uhura speaks a hundred languages, and can learn a new one by listening to it for a few minutes. You get the idea. To me, this suggests that Abrams is more interested in jumping as quickly as possible to the action by endowing his characters with super-human abilities, rather than taking the time to develop his characters in a richer way, by allowing them to be vulnerable human beings with weaknesses.

The Force Awakens obviously invites us to draw comparisons between Rey and Luke Skywalker from the original trilogy, so let’s examine these comparisons:

When we first meet Luke Skywalker, we learn that he’s a good pilot, but that’s about all he is. When it came to most other things, he was pretty much clueless. He had no knowledge of the Force, he was useless in a fight, and had to be rescued multiple times by supporting characters. This made us care about Luke in a much deeper way, because there were times when he was in real danger.

In fact, we can even make the argument that when Luke destroyed the first Death Star, he did it by being a good pilot and a good shot (and being very lucky that Han Solo joined the battle in the end). The Force may have helped him a little, but he certainly didn’t use the Force in the kind of “direct” way that a Jedi would use after sufficient training. Indeed, it wasn’t until Luke’s training with Yoda that he learned to harness the Force directly to manipulate physical objects, as well as to manipulate the actions of weak-minded fools.

Compare this with Rey, who goes from being a lowly scrap scavenger struggling to put food on the table, to doing all of the following in the course of a single movie:

  • Pilots and repairs the Millennium Falcon better than Han Solo ever could, having never touched it before.
  • Resists Kylo Ren’s mind probing, despite Kylo Ren having been trained by Snoke and presumably by Luke Skywalker.
  • Performs a Jedi mind trick on a stormtrooper without ever having heard that Jedi mind tricks are even a thing.
  • Wins against Kylo Ren in a tug-of-war to pull the lightsaber out of the snow, without ever learning that that’s possible.
  • Nearly defeats Kylo Ren in a lightsaber duel, having never used a lightsaber before. (Sure, admittedly Kylo Ren was weakened, but still: he’s a dark-side Force user, trained by Snoke and by Luke Skywalker!)

Because of all of these implausible outcomes, and a ton of other coincidences, we never get a sense that Rey is in any actual danger, which distances us from being able to relate to her. I compare all this to using cheat codes in a video game: “Just get to the boss fight! I don’t have time to go through the rest of this storyline…”

Anyway, once again, The Force Awakens is a great movie overall, and I look forward to watching it again many times. The shortcuts that J.J. Abrams took with the Rey character are certainly not enough to ruin the whole thing.   I just hope that the next installment (Episode VIII) feels more like a true sequel, rather than a sequel-reboot hybrid. I also hope that we get to delve much deeper into the stories and vulnerabilities of the new characters that we’ve met. I want to fall in love with them – but I haven’t yet.

P.S.
On a completely different subject, one other nitpick I’ll mention is a “scientific” one:
When the Starkiller Base fires its weapon, it destroys five planets at once, and we see all five planets in a single frame! If five planets were that close together, they would gravitate towards each other, and eventually combine violently into a single larger planet. Speaking of which, are all the planets in the Star Wars universe inside a single solar system now? The Starkiller Base weapon took less than a minute to reach its targets, meaning either that the weapon travels faster than light, or that Starkiller Base is very close to the other planets. Did the citizens of Coruscant fail to notice the Starkiller Base being built next door?