Feeling Ripped Off in Ravensword

If you’ve read my previous review of the Ouya, you may be familiar with my strange obsession with Ravensword: Shadowlands. It’s a hilariously inept Skyrim clone for phones, tablets, and the Ouya. The game seems like they went down the list of Skyrim features and implemented a bare bones version of each one. From horseback riding to guild systems, they all exist–but are laughably basic. Still, I must have dumped over 15 hours into this saga, exploring its ambitious yet flawed world.

One interesting element of Ravensword is the business model. It’s essentially premium, with an up-front cost to buy the game once the demo period is over. However, at any time you can buy gold, experience, gems, health restores, and talent points with real money. It’s probably the first single player RPG I’ve seen with such a business model.

Early in the game I hit a difficulty brick wall. Monsters were way too strong and there seemed to be no way to grind for gold or XP. I decided to make a one-time purchase of 5,000 gold pieces for $5. I then bought the finest equipment the shops in South Aven had to offer and ventured out into the wilderness, tearing through monsters that were previously kicking my ass.

Maybe 10 minutes after making this purchase, I found a chest containing a sword better than the one I spent the equivalent of 2 real-world dollars on. I felt ripped off. It’s the in-game equivalent of buying the latest iPhone a few days before they announce a new model.

This made me constantly suspicious of the game. Every time I hit a tough point, I thought about if it was some kind of game design sales funnel to get me to spend money. If there was any kind of competent story to be immersed in, it probably would have taken me out of the game, too.

As I stated in my Kotaku piece earlier this year, f2p game designs are still too primitive to carry a single player campaign. Ravensword is a prime example. I salute the developer for making a stab at merging a single player narrative with f2p economies. Yet, scattering purchases throughout a quest makes you second guess every design choice to the point of completely breaking any sense of immersion. Issues like this make me think it’s impossible to reconcile the design principles of f2p monetization and an epic single player experience. Yet, Ravensword is only the tip of the iceberg. Hopefully we’ll see some stronger attempts at this problem soon.

Displaying Maps in Unity3D

There have been a few recent examples of real-world maps displayed in Unity3D apps. The first one I noticed was the playfield in the infamous Halo 4 iPhone app that came out late last year. For unknown reasons, I was really into this game for a few months. I hung around my local 7-11 scanning bags of Doritos so much that I thought I was going to get arrested for shoplifting. Eventually this obsession led to me wanting to duplicate the map display used in the game. Here’s how I did it.

Google Maps Plug-In

Naturally the first place I looked was the Asset Store. It turns out there is a free Google Maps plug-in available. The only catch is that it requires UniWeb to work. UniWeb lets you call REST APIs and generally have more control over HTTP requests than Unity’s own WWW class allows. It can be a necessity if you’re using REST API calls but it restricts your code stripping options. This will bump up your binary size.

This asset’s sample scene works flawlessly. It downloads a map from the Google Static Map API and textures it on a cube. The code is clean and well documented, featuring the ability to request paths and markers to be added to the static map. Most attributes can be tweaked through the inspector–such as map resolution, location, etc.

I made a lot of changes to this package. I really wish it was open source. Free code assets really should be in most cases. I will try to isolate my changes into another C# file and post a Gist.

The first change I made was to add support for themed Static Maps. If you look at this wizard, you can see that there are a lot of styling options. This appears to be the same technique used in the Halo 4 app because with the right set of options you can get something that looks really close. Supporting styling in Unity3D is just a simple act of appending the style parameters to the end of the URL used by the Google Maps plug-in.

Displaying Markers in 3D

The next thing I wanted to do is display the markers as 3D objects on top of the map instead of having them inside the texture itself. This requires 3 steps:

  1. Determine where the markers are in pixel coordinates in the static map texture.
  2. Calculate the UV coordinate of the pixel coordinate.
  3. Calculate the world coordinate of the texel the UV coordinate resides at.

Step 1 can be tricky. You have to project the latitude and longitude of the marker with the Mercator projection Google Maps uses to get the pixel coordinate. Luckily, this guy already did it in PHP to create image maps from static maps. I adapted this code to C# and it works perfectly. You can grab the Google Maps utility functions here. (All this great free code on the net is making me lazy–but I digress)

Step 2 is easy. This code snippet does the trick. The only catch is that you have to flip the V so that it matches with how Unity uses UV coordinates.

Step 3 is also tricky. However, someone with much better math skills than I wrote a JavaScript method to compute the world coordinate from a UV coordinate. It searches through each triangle in the mesh and sees if the UV coordinate is contained inside it. If so, it then calculates the resultant world coordinate. The key to using this is to put the static map on a plane (the default scene in the plug-in uses a cube) and use the C# version of this function I wrote here.

3D objects floating over marker locations on a Google Static Map.

3D objects floating over marker locations on a Google Static Map.

Here’s the end result–in this case it’s a display for the Donut Dazzler prototype. 3D donuts are floating over real-world donut shops and cupcakes over cupcake bakeries. I got the locations from the Foursquare API. This is quite easy to do using UniWeb.

Slippy Maps

The aforementioned technique works great if you just want a static map to display stuff around the user’s current location. What if you want to be able to scroll around and see more map tiles, just like Google Maps when you move around with your mouse? This is called a Slippy Map. Slippy Maps are much more elaborate–they require dynamically downloading map tiles and stitching them together as the user moves around the world.

Thankfully Jonathan Derrough wrote an amazing free Slippy Map implementation for Unity3D. It really is fantastic. It displays markers in 3D and pulls map tiles from multiple sources–including OpenStreetMap and Bing/VirtualEarth. It doesn’t use Google Maps because of possible TOS violations.

I couldn’t find a way to style map tiles like Google Static Maps can. So the end result was impressive but kind of ugly. It is possible with OpenStreetMap to run your own tile server and run a custom renderer to draw styled tiles. I suspect that’s how Rescue Rush styles their OpenStreetMap tiles–unless they are doing some image processing on the client.

Either Or

For my prototype I ended up using Google Static Maps because Slippy Maps were overkill. Also, pulling tiles down from the servers seemed much slower than grabbing a single static map. I suppose I could add some tile caching, but in the end static maps worked fine for my purposes.

Keep in mind that Google Maps has some pretty fierce API usage costs. If your app goes viral, you will likely be on the hook for a huge bill. Which is why it might be worth figuring out how to style free OpenStreetMap tiles.

Unity3D 4 Pet Peeves

I’ve been updating my older apps to use the newly released Unity3D 4 engine, as well as starting an entirely new project. I haven’t used many of Unity3D 4’s new features yet, but I figured this is as good a time as any to list a few of my pet peeves with Unity3D 4 as I did with Unity3D 3 a few years back.

It’s time Unity3D had a package manager.

Unity3D plug-ins and assets purchased from the Asset Store are invaluable. It’s becoming the most important feature that makes Unity3D the superior choice. However, managing projects with multiple plug-ins is can be a nightmare. A lot of this is how Unity3D handles file deletions.

If you click the “update” button to overwrite an existing plug-in with the latest version from the Asset Store, it may wreak havoc upon your entire project. Unity3D’s file hashing system will sometimes fail to overwrite files with the same name, even if you are importing a newer one. You’ll end up with a mess of old and new plug-in files causing chaos and mayhem. The only way to prevent this is to manually find delete all the old plug-in files before updating with the latest version.

Not to mention the fact that native plug-ins either require you to manually setup your own XCode project with external libraries or have their own proprietary scripts that edit your XCode project. Unity3D should provide an API and package manager that lets plug-ins forcibly delete and update their own files as well as modify settings in the XCode project Unity3D generates.

Let me import files with arbitrary extensions.

A minor annoyance is how Unity3D will only accept files with specific extensions in your project. If you want a custom binary data file you HAVE to give it the txt extension. It’s the only way you can drag the file in to the project. Unity3D should allow you to import files with any extension you want, but provide a method in the AssetPostprocessor API to be called when an unknown file extension is detected.

Where’s the GUI?

Come on now. It’s 2013. The new GUI has been “coming soon” for years. Unity hired the NGUI guy, which leads me to believe the mythical Unity3D 4 GUI is merely the stuff of legends and fantasies. I like NGUI but I’m really looking forward to an official solution from Unity. Although I’m not looking forward to re-writing all my GUIs once it arrives. Let’s just get it over with. Bring it on.

Monodevelop sucks.

My god. Monodevelop sucks. Lots of people use other text editors for code, but you still can’t avoid touching Monodevelop when it comes to debugging on OSX. I’m sure it can be whipped into shape with a minor overhaul, but it’s been awful for so long perhaps this is unlikely. Aside from the crashes and interface weirdness, how much human productivity has been destroyed waiting for Monodevelop to reload the solution every time so much as a single file has been moved to a different folder?

Is it time to update Mono?

While we’re at it, Mono recently updated to C# 5.0. I’m not sure if this is a big performance drag or not, but I’d love to see Unity3D’s Mono implementation updated to the latest. There are some C# 5.0 features I’ve been dying to use in Unity3D.

Tough Love

Don’t take it personally, Unity3D is still my engine of choice. This list of annoyances is pretty minor compared to previous ones. Every year, Unity gives me fewer and fewer things to whine about. It seems competing solutions are having trouble keeping up.

Native Code is Dead

Although Android has a larger market share when you count it by pure number of devices and users, iOS still dominates monetization. Research I did earlier this year about apathetic Android users still rings true. However, vast improvements in Android as an OS and Google Play as a way to monetize apps are changing this. Not to mention changes to the new iOS 6 App Store are making app discovery even more difficult on Apple devices. A lot of developers are grumbling about their fortunes on iOS and are looking elsewhere.

Platforms are volatile. Five years ago, Facebook was the ultimate destination for game developers. Now it’s a ghost town. iOS is the hot ticket now, but Android is becoming increasingly competitive. As a developer you need to be prepared to move platforms in an instant. For this reason, native code is dead.

Using a solution such as Unity3D, Flash, or HTML5 allows you to easily move apps from one device to another. Or, from mobile to the Web. Or, from Web to desktop. You get the idea. It’s true that each one of these solutions has tradeoffs in features or performance to accomplish frictionless cross-platform porting. However, most studios can’t afford to double their engineering staff to multiply the amount of platforms they deploy on.

If you’re starting a new project from scratch, you have to consider your cross-platform options:

Unity3D

As one of the (very few) detractors said of my recent GDCO 2012 presentation on Unity3D: “This guy was a bigger Unity fan-boy than the company would have been.” It’s true! I am a self-declared Unity3D zealot. My experience moving between platforms has been incredibly easy. You can check this older post on the process I went through to bring Brick Buddies to Android. Unity3D has issues, but it’s the best solution I’ve found yet.

Corona

I’ve not used Corona myself, but did research it a bit when deciding which platform to hang my hat on. I know other developers who have created very successful apps with it. The major drawbacks are it uses Lua as its scripting language and it still doesn’t allow native code extensions. Yeah, I know I said native was dead–but not totally dead. I occasionally have to write native code plug-ins for Unity3D to access parts of a platform’s API that aren’t abstracted in Unity itself. This is a critical feature. Also, Corona can’t be used on the web or desktop platforms.

Flash

Flash has a tragic branding problem. The declaration of mobile Flash’s death doesn’t mean Flash is dead on mobile. This means the browser plug-in on Android is defunct. Good riddance. Flash made the mobile browsing experience on Android unusable.

Adobe has stepped their game up with Flash’s iOS and Android exporters. The packager allows Flash projects to be exported as apps on the target device. Flash’s CS5 exporter was atrocious, but I’ve seen some impressive work with the latest version. Flash even supports native code extensions. Adobe’s extortionate demands for revenue share mean Flash is out of the running for me if I intend to use their more advanced features. Otherwise, it is a superior option over Corona.

HTML5

For game development, HTML5 is insane. If you really want to give it a shot, there are some relatively performant libraries such as impact.js that might help you out. I don’t recommend it. HTML5 isn’t much of a standard, needing a lot of workarounds for various browsers. Not to mention its horrible performance on mobile browsers. You just can’t win.

For non-game GUI-based apps (like Yelp or Evernote) HTML5 makes a lot of sense. PhoneGap/Cordova makes this possible by providing a framework for running HTML5/CSS/JS based applications inside a mobile web view and packaged as a native app. Coming from a native code background, constructing interfaces in HTML5/CSS seems absolutely insane. Friends don’t let friends write HTML/CSS. It should remain purely the output of tools such as Handheld Designer. HTML/CSS is becoming the Assembly Language of the web–it’s good to know, but hopefully you’ll never have to touch it.

Etc.

There are plenty of other options I haven’t mentioned: Moai, Marmalade, Titanium Studio, UDK, and the list goes on. The important thing is to research your platform independent option and find what’s best for you. For games, I’m biased towards Unity–but other options are just as valid…I guess. Obviously there are applications for which native code will always be the solution. Yet, for the incredible glut of dying console game studios “pivoting to mobile,” this is an increasingly remote option.

Kakao is the new Asian mobile gaming powerhouse

Kakao has leveraged their insanely popular mobile group messaging app, Kakao Talk, to launch a social gaming network called Game Center in Korea. This is similar to Tencent’s strategy of using their Chinese instant messaging network, QQ, to drive traffic to f2p PC games. Yet in the West, Apple’s iMessage seems to have killed off most group messaging startups, and the only one to pursue a gaming strategy released a tower defense game based on Shannon Tweed. No, really.

Kakao has successfully commissioned established game developers to produce high quality games for Game Center. The slickly produced Match-3 game, Anipang, recently rose to the top of the Korean App Store due to its use of Kakao Talk as a viral messaging channel. (It’s also available for Android) Encouraging users to message friends in order to get extra plays, Anipang uses social news update notifications similar to the early days of Facebook games to drive reach. Korean friends of mine have deleted the app from their iPhones to avoid the onslaught of game messages–reminiscent of the bad old days of “Lost Sheep” Farmville spam. Regardless, Kakao has mined a passionate and highly monetizable social network of gamers from Kakao Talk.

With over 55 million users, Kakao may eclipse the size of DeNA’s Mobage platform. It remains to be seen what their plans for the US are. Although Game Center will probably have to be renamed before it launches in the West. I hear Apple can be quite litigious when it comes to their intellectual property.

Come to my session next week at Austin GDC

By the way…On Wednesday, October 10th at 5:35 PM at Austin GDC come see my talk on cross-platform Unity3D mobile games development. Hey, it’s only 25 minutes long. How bad can it be?

In Search of…Rage of Bahamut Players

I recently listened to the excellent Walled Garden Weekly podcast about the massively successful collectible card game, Rage of Bahamut. The brave hosts played the game for a while in an attempt to analyze why it has dominated the top grossing charts on both iOS and Android for so long. In the end, they had no idea why.

I thought this episode was hilarious because I recently had the same experience with a friend of mine. We forced ourselves to play this game to understand why it is so successful. We came away from the experience just as mystified as Walled Garden. Is it a masterpiece of mobile gaming? Are we just too old and can’t comprehend this new genre of greatness? Perhaps it’s a combination of the two.

Rage of Bahamut is a collectible card game with no apparent skill involved. The interface appears to be a series of sloppily constructed UIWebViews displaying what looks like a web page from 1996–complete with blinking text. There’s no sound. The gameplay consists of tapping the screen and watching coins fly out of monsters with Skinnerian glee. PvP card battles are automatic and involve no strategy beyond deck construction. You win or you lose.

It’s also very difficult to find out how to spend money in the game–with the IAPs buried deep in the interface. This thing has towered over the top grossing charts for months on end, yet I’ve never met another person that’s ever played it. When Angry Birds was in a similar position a few years back, I knew lots of people who were fans.

I attended the Collectible Card Game panel at Casual Connect this past July to understand the space more. The takeaway was that since Pokemon will never appear on mobile devices, there is a huge vacuum taken up by the absence of that IP. In its void, a ton of CCGs have appeared on mobile targeting the Pokemon player demographic. It was suggested CCGs have 8-10X the monetization of other social games and are the ultimate core game experience for younger gamers. Maybe I don’t know any Rage of Bahamut players because I’m not 14?

Still, where are these people? I never see any coverage of this game on the web other than articles talking about how much money it’s making. It seems that the reason why you might not see a lot of chatter about these games on social networks is because the users are too young to be on Facebook. Instead, they use YouTube to display their lavish card collections. Most of the other social interactions are contained inside the game or DeNA’s social network, Mobage.

Rage of Bahamut appears to be a pure compulsion loop. It’s more like a slot machine than an actual game. The main drive is to collect rare cards and “evolve” them to advanced levels featuring character portraits with increasingly fewer articles of clothing on. Packs of cards in Rage of Bahamut can cost over twice as much as real paper cards for Magic the Gathering or other physical card games. This game is very simliar to Mafia Wars, so perhaps its success shouldn’t be unexpected. However, could something else be afoot?

Noting strange patterns in customer review score distribution and other clues, the Walled Garden podcast seemed to suggest maybe some chart manipulation is involved. I can’t say that thought hadn’t crossed my mind. DeNA made $609 million in revenue last quarter. The top grossing game in the App Store usually brings in about $10-15 million a month. Let’s double that to include Android (which probably is generous). Is it conceivable that in addition to the usual tactic of spending $50,000 a day or more in user acquisition, that DeNA is spending $20+ million a month on buying its own virtual goods to dominate the top grossing charts? With $1.82 billion in sales last year, it doesn’t seem like DeNA would need to do this.

Considering there are tons of other CCGs that are very popular, there’s a large and lucrative market for these games. There are different sub-genres as well. Some require skill similar to Magic or Yu-Gi-Oh instead of being a mere slot machine. I’ve read plenty of enthusiastic Rage of Bahamut reviews from people who are genuinely excited about it. Just watch this video–this guy really gets amped when he’s about to evolve his card to a new level of disrobement. Real people who play this game must exist somewhere. Leave a comment–let me know why you play it.

Oh, and while I’m at it, my referral code is mhk64683 if you want to start playing.

Video Game Companion Apps

The so-called “companion app” is becoming a common marketing tool for console game publishers. The idea being that you extend the game’s brand to mobile to create awareness of your upcoming console release, or to further build upon the IP. Perhaps the earliest example is Microsoft’s Fable III Kingmaker location-based game for iOS. You could play Kingmaker without the console game, or transfer currency earned in the app to Fable III on the XBOX 360. Last year we had the Deus Ex QR Missions scavenger hunt game. More recent ones include EAs Mass Effect 3 Datapad, Capcom’s Pawns Unleashed / Compendium of Wisdom for Dragon’s Dogma, Starhawk Uplink, Battlefield 3’s Battlelog, and the Soul Harvest location-based game released as part of Darksiders II’s marketing effort.

The idea for a console game companion app is inspired by the fact that most of the target audience has a tablet or smartphone. The obvious question is, instead of putting a companion app on mobile why not put the actual game there? The answer is usually irrelevant, as dinopubs are preventing the game from being on a platform where the audience actually is. Strategies such as this can at least partially explain the AAA publisher slide.

MMOs have a long history of companion apps. Perhaps the earliest example is the iPhone app made for Champions in 2009–although now they are commonplace. Companion apps make a lot of sense for MMOs since the world is alive when you are not playing. An app is a perfect way to perform housekeeping duties on your character or check in on what’s going on while you are away from your desktop machine.

Since most console games aren’t persistent, there’s no reason to run an app to keep up to date on what’s going on. Nothing is happening while your console is turned off. In their current form, console companion apps make more sense as a marketing tool. Put out the app well ahead of the game’s street date and allow the user to unlock content and advance his character before the game comes out. It can be useful as an advertisement and a place to build a community around your game.

Microsoft’s SmartGlass initiative at E3 is evidence that they are serious about this “second screen” experience. Their XBOX Live iOS app is actually quite good, and shows they are putting some effort into this. A smart approach for next generation consoles is to have companion apps part of a core strategy. As for the promotion of individual games–I haven’t seen any companion apps chart very well on the App Store. Nor have any publishers reported companion apps having any positive impact on sales. The killer companion app has yet to be made.