Fordesoft - An indie game developer

Optimizing Emerald Shores for the PS Vita

Emerald Shores just launched on PS Vita this week, and with that, I thought I'd write up a quick devblog of what went into making the game playable in terms of optimization.

Disclaimer

Everything described is very specific to my own experiences with my development environment, particularly the engine the final game ended up being built in (GameMaker: Studio 1.4). If I say "X was slow on the Vita", that doesn't mean the Vita itself is at fault for the slowness at all - many [obviously much more demanding] games run perfectly fine on the Vita. Rather, these are areas that needed optimization when using this specific engine in the ways that I was specifically using it.

The need for optimization

Although the game ran fine on PlayStation 4 and modern PCs -- with a smooth 60 FPS framerate throughout and virtually instant loading times-- the PS Vita version needed a lot of love in both of those areas.

It was a surprise to me that this was an issue, because the game is a fairly simple 2D game on a technical level, and because the previous engines the game was being built in ran it fine: C#/PlayStation Mobile initially, and then the C++-based PhyreEngine.

In the end, optimizing the game for the Vita alone ended up taking a fair chunk of the game's overall development time. While the game in its final state still has a few hiccups, it's at least very playable, when initially the load times and framerate would have been unbearable.

Loading time optimization

Prior to optimization, levels took a long time to load. Larger levels took 20+ seconds to load, and each time your character died, you'd have to wait the entire time again.

Partial reloads

My first solution to this was to implement a "partial reload" system.

The way this works is that when a level is restarted, only the game objects are reloaded. The level's geometry, i.e., all of the tileset tiles, are kept from the last time the level loaded. This was a somewhat simple solution that easily cut the restart time in over half.

But there was still the initial load time issue. Nobody wants to wait 20 seconds for a level to load, even if the restart takes less than half that.

After a few experiments to find out what was causing levels to load so slowly, I discovered that a major bottleneck was just the amount of time it took the system to read the text files that the levels were stored in.

Removing unused junk from object data

These levels were created with a map editor called Tiled, and stored in the game as JSON files. By default, Tiled exports a lot of data about the objects and tiles in each level -- most of which Emerald Shores doesn't use. For example, the "rotation" property is completely unused, because none of the enemies/coins/items in Emerald Shores have a default rotation that can vary between instances. A quick experiment in manually removing all of those unused properties from a level concluded that it would decrease loading times by a noticeable amount.

My initial attempt to add this into my workflow was to write a custom exporter for Tiled, similar to the JSON exporter, but which would neglect to export the unused data. I ran into a few technical hurdles there when attempting to do this while keeping Tiled itself updated to its latest version, so I came up with another solution instead.

I used my experience in web development to write a command-line program in JavaScript, with Node.js. The program loads all of the level files, reads them, and then re-exports them as JSON again. Simple enough.

Optimizing the level format
A program I wrote to "compress" level files by removing unused data

However, there was still room for even more improvement.

Removing empty tiles: the first attempt

Tiled exports data for every tile in the level -- even when a tile was empty. In other words, if a level was 30 tiles wide and 40 tiles high, there were 1,200 entries for tile data in the level file, even if the top half of the level is blank and only ground tiles exist. That made the level file significantly bigger, and, in turn, made it take longer for the game to load the level data from the file.

Every tile exists in the file in order, so the game knows that the first tile will be the top-left-most corner, and then the next tile will be immediately to the right of that, etc.

My first experiment here was to remove all empty tiles from the level data, and then add "x" and "y" coordinates for the tiles that did exist. This actually ended up making most level files larger, so I scrapped the idea. Oh well, it was worth a try. But the problem still needed a solution.

Removing empty tiles: the second attempt

It occurred to me that, in most levels, most of the empty tiles were in the top-left corner of level. What if I could get rid of those, and tell the level-loader that the first tile it sees in the level file isn't actually at position 0,0 (the top-left corner), but at something like 300,20 -- or whatever the first non-empty tile in that particular level ends up being.

So, that was what I did. I added onto my level-compression program a feature to remove all of the first tiles it comes across, until it finds one that's not empty. And then it would make a note of the coordinates of the non-empty tile, so that the level loader knew the coordinates of that first tile, since it could no longer assume that the first tile would be at position 0,0.

After I finished updating the level-loading code to be able to handle this newly-modified level format, loading times were reduced even further. At this point, most levels took fewer than 5 seconds to initially load, with the longest I timed being about 8 seconds. Much better than the 20-30 seconds. And with the "partial reload" system still in place on top of that, it only takes a couple of seconds to restart a level once you're already in it. Phew. Countless hours paid off.

Optimizing the framerate

There were two areas that seemed to cause the framerate to take a dive: particle effects and large backgrounds. Everything else seemed to have little to no impact on the framerate. So, naturally, these are the two areas where I took it upon myself to put in a bunch of Vita-specific checks in determining what the game should render versus what it should skip in order to make the game run faster.

Reducing particle effects

It was mostly the bomb particle effect that caused issues.

The solution here was pretty simple: I removed the explosion particle effect, and replaced it with a "Bomb!" action-comic-like image reminiscent of the bombs in Super Mario Bros. 2. If you're playing the game on PS Vita or PlayStation TV, you'll see that image when a bomb explodes; otherwise, you'll see the nicer-looking explosion particle effects.

Simplifying backgrounds

Large backgrounds seemed to take a toll on the framerate for whatever reason. I speculated that it was due to the game swapping textures in and out of memory, but GameMaker's debugging tools didn't help me much to confirm or deny that, and experimenting with the texture swap settings didn't help, either.

So I was going to need to just simplify the background images. Through trial-and-error, I discovered that if background images took up more than about half the screen space, the framerate would usually drop. In the first level of the game, this meant having clouds and mountains would cause a framerate drop, so I disabled the mountains. It's probably not something you'd notice unless you're actively looking for it, so it wasn't a huge deal; the mountains just add a little more immersion to the scene, but they aren't critical.

In some cases, such as level 1-2: Forest of Secrets, I was able to keep the backgrounds by simplifying them.

On the PS4 and PC versions of the game, the forest background is made up of three parallax images. In the PS Vita version, I've combined these into one smaller image that takes up half of the screen instead of the full screen. The parallax effect is gone, but otherwise the scene doesn't look terribly different.

Forest of Secrets on the PS4
1-2: Forest of Secrets on PS4

Forest of Secrets on the PS Vita
1-2: Forest of Secrets on PS Vita

Conclusion

Optimizing a game for older platforms is tough work, even for games that don't appear to be technically demanding. All of the optimization efforts I put into the game were for the Vita specifically; the game always ran smoothly on other platforms. But the Vita launch was always a priority, having started as a PlayStation Mobile project years ago, so I was determined to make sure it was playable.

Super Blackout is coming to Steam!

Super Blackout is coming to Steam next week! You can check it out here:

https://store.steampowered.com/app/992970/Super_Blackout/

Emerald Shores available on PS Vita in North America

The PS Vita version of Emerald Shores went live yesterday on the North American PSN! You can check it out here:

https://store.playstation.com/en-us/product/UP0770-PCSE00859_00-EMERALDSHORES001

It's cross-buy, so the PS4 version comes free with its purchase, and vice versa.

Europe is next! Planned for this month or next.

Super Blackout announced for Steam; Emerald Shores hits PS Vita on Tuesday

Hi everyone,

I have a couple of pieces of news today:

The first is that Emerald Shores is finally going to be releasing on PS Vita and PlayStation TV on Tuesday. This is only in North America so far, but the European release is on its way sometime in the coming weeks as well. Note that the game supports cross-buy, so if you previously purchased the PlayStation 4 version, the Vita version should show up as free for you on the PSN store.

The other piece of news is that Super Blackout is getting a PC release next week.

I released Super Blackout on PS Vita back in late 2015. Despite it being a fairly casual puzzle game with a simple concept, the reception was warm, with thousands of people enjoying it over the past few years.

Super Blackout launches on Steam on Friday, December 14th for $4.99, with a launch discount of 40% (down to $2.99) for the first week. If you add it to your wishlist, you can get a reminder when it launches.

Steam store link: https://store.steampowered.com/app/992970/Super_Blackout/

Emerald Shores is out today on PS4

It's finally out! You can check it out here:

https://store.playstation.com/en-us/product/UP0770-CUSA04403_00-EMERALDSHORES001

The PS Vita version will follow in a couple of weeks, and the European version shortly after that. The Steam version launches on November 21 for both Windows and Linux.

Emerald Shores is complete; release dates announced

Emerald Shores is finally complete (phew!), and in it's in the publishing pipeline to be released on PlayStation Network on November 13, 2018, and then Steam on November 21, 2018.

You can check out the Steam store page here: https://store.steampowered.com/app/970470/Emerald_Shores/

Keeping the gameplay interesting by switching up the mechanics

My current project, Emerald Shores, was heavily inspired by platformers from the Super Nintendo and Sega Genesis era.

And something that I’ve always enjoyed about those platformers is the incredible breadth of variety many of them implemented, frequently changing up the gameplay mechanics throughout the course of a game.

While running-and-jumping has always been the cornerstone of a classic platformer, most of the memorable ones from that era had a tendency to take an occasional detour from the regular mechanics and present the player with a level that could very well have been its own simple game.

Disney’s platformers are some of the best examples of this. Take Aladdin - as soon as you start getting bored of jumping around and throwing apples, the game presents you with a magic carpet-flying level.

Aladdin gameplay GIF
Aladdin, SNES

The Lion King is great as well. Not only does your character transform halfway through, changing the core gameplay mechanics for the rest of the game’s duration, but it also has various minigames, like Timon and Pumba collecting bugs, and another one of these “detour” levels where the core mechanics are abandoned for a few minutes.

The Lion King gameplay GIF
The Lion King, SNES

Toy Story did the same, replacing one of its traditional platforming levels with a racecar-driving level.

Toy Story gameplay GIF
Toy Story, SNES

Keeping the gameplay interesting by switching up the mechanics here and there provides a breath of fresh air that’s needed sometimes.

Most AAA games today seem to apply this strategy as well - not just platformers. Open-world games like Grand Theft Auto have always capitalized on having a wide variety of side content to explore when the “main” content starts to get repetitive, but even action games like Spider-Man now offer players a wide variety of side missions and minigames to take on whenever the main story starts to feel repetitive.

Spider-Man gameplay GIF
Spider-Man, PlayStation 4

That’s something I’ve tried to achieve with Emerald Shores: keeping things interesting by mixing things up after every few “regular” levels, and providing a variety of side content for players to tackle whenever they need a break.

The game has a couple of minigames thrown in as mandatory levels, it has a couple of optional, hidden minigames that offer valuable rewards, it has a huge, optional, ultra-powerful boss, and there’s even a key-collecting sidequest that unlocks a large castle with its own valuable reward hidden inside.

Emerald Shores - Bootworm Racing minigame gameplay GIF
Emerald Shores, Bootworm Racing minigame (PlayStation 4)

Emerald Shores announcement trailer

Emerald Shores has gone through some huge changes over the past of 17 months since I first announced it.

I hired a talented artist named Raou to revamp the art, added a bunch of features and minigames, polished things up, added trophies, and finished just about all of the remaining content.

With all of those changes, it seemed like a new announcement trailer was in order. :)

There are still a few things to do, but the game's almost ready to go. The plan right now is to launch it in either October or November. The initial launch will be on PS Vita and PlayStation 4, with other platforms coming next year.



Here are a few stats:
  • Release: October or November 2018
  • Planned price: $9.99 (cross-buy PS4 + Vita)
  • Trophies: 30 total (29 regular + 1 platinum)

Website updated

I just launched a new version of the Fordesoft.com website.

The design is pretty much the same, but the underlying technology is extremely different.

This should result in much faster page loads, while also paving the way for some future updates: I'm planning to write official strategy guides for some of my games, which will be hosted here.

Bootworm Racing minigame development

Wow, I've been neglecting this blog more than I thought. Things are still progressing; I've just taken to posting most updates on Twitter lately. But anyway:

I'm currently working on a sidequest/minigame for Emerald Shores called "Bootworm Racing." Here's how it works.

If you find the secret exit in level 2-3: Ice Castle, you open up a path to this island that looks like a Bootworm. This island, Bootworm Island, is home to a farm and a series of race tracks.







When you get here, you'll have a sassy pet Bootworm. You can bring him items that you find in the regular levels, which grant him new powers and teach him new spells.

And then you can take him to race in the Bootworm Races!

If you place first in all five races, you'll unlock something useful for your house.

This is just an in-development preview, and there are a few things I need to add to the UI in the racing minigame, but that's the gist of how it all works.

Art update, new RPG in pre-production

Quick update on Emerald Shores:

I posted last month that I was contracting an artist to replace the art. It was a quick search, and I found a really talented applicant to fulfill that role. The game is going to have a very "Super Nintendo" feel to it.

No screenshots to show yet, but I'll post as soon as the art replacement process is far enough along.

New game in pre-production:

I have some downtime from Emerald Shores while that's going, so I've started pre-production on my next game.

This one's going to be a 2D monster-catching RPG. I'm taking some inspiration from the Shin Megami Tensei series, so if you're a fan of games like SMT III: Nocturne, I think you'll like it. Planned platforms so far are PlayStation 4 and PS Vita.

It's still early in the planning stages, so right now I'm getting the story, characters, etc. out on paper, mapping out the world, deciding which technology to use, figuring out the art direction, and planning the battle system.

I'm pretty excited for this game, as I've been wanting to do a game like this for years but never had the time due to college and life. A couple of years ago, I finally decided I was going to build a small game (Super Blackout), then a medium-sized game (Emerald Shores), and then this one, which will be the largest game I've ever developed in the nearly 17 years I've been developing games in my free time. Even bigger in scope than Seeds of Time Online. :)

Emerald Shores is getting a new look

After the announcement post, there was a lot of feedback regarding the art style. Based on that, I decided to hire an artist for the game, rather than continuing to draw it all myself.

As a result, Emerald Shores will soon look totally different and much, much better.

Expect a bigger announcement in the next month or two, ripe with screenshots and eventually an updated trailer.

Announcing Emerald Shores for PS4, PS Vita, and PSTV

I'm happy to finally announce Emerald Shores, a challenging 2D platformer with light RPG elements.

It's entirely a one-man effort (programming, design, music, "art"), so it's been a long journey, but it's close enough to being finished that I can say it'll be out by the end of summer 2017.



A few details:
  • The concept is something like "take Super Mario World and add a level-up system that determines your HP and how much damage your jumps deal to enemies"
  • The main storyline will have at least 20 main levels, 5 boss battles, really short cutscenes, a few secret unlockable levels (find those hidden exits), and then something for those who manage to complete all of the secret levels
  • There's a Remix Mode which plays just like the original story mode, but all levels are rearranged to be more difficult
  • There are two world maps: the one you see in the trailer, and then a floating island called Emerald Shores
  • Levels have powerups hidden in them, which grant abilities like double-jumping and throwing fireballs
  • Not confirmed yet, but the plan is $9.99 and cross-buy between the platforms


I'll be posting news and in-development screenshots regularly on Twitter now, so if you want to hear more about the game, please give a Follow:

Game announcement next month (finally)

This platformer is finally almost ready to be unveiled.

I'm planning on writing up a full announcement post, complete with screenshots, sometime in the coming weeks. There are just a few more things I want to finish up first.

I'll also be showing the game at the Midwest Gaming Classic in Milwaukee this April. If you're in town, come check it out!

Delays and progress

Some major delays have occurred, but things are back on track with my current [not-yet-announced[ project.

Over the summer, I ended up porting the game to a different engine, which solved the technical difficulties that had been plaguing development for a while.

I also purchased a PlayStation 4 development kit over the summer, so I'm happy to announce that the PS4 build of this game is fully functional. I'm now testing regularly on both PS4 and PS Vita as the project goes along.

Not much more to say yet about the game. I'm still planning to keep details under wraps until the game is virtually finished, which will be a couple of months before it's released. At this point, I'm hoping to have it released sometime next spring.

Still progressing...

Just posting a quick update so that this blog doesn't look abandoned.

The game is still underway and not ready for announcement yet. I want to have the game mostly finished before announcing it, so that the trailer can resemble a final product, and it's taking longer to get to that point than I expected. Still planning for a PS Vita release sometime this summer, though, and a PS4 release soon after.

In the past few months, I've mostly been composing music for the game, and the soundtrack is now mostly finished. I also built a little scripting engine to use for cutscenes, so I'm looking forward to putting that to use soon; it was fun to write a compiler for the first time since college.

For now, it's time to try and digitally paint some more of the game's non-pixel art: character portraits, backgrounds, etc.

Vita/PS4 platformer is still progressing; announcement fairly soon

Just a quick update, since it's been three months since my last post:

The platformer is still progressing really well, but it's not quite ready for an announcement yet. I'm still working to have a really significant portion of the game complete before the announcement even takes place.

I recently decided to go all-in this time and do everything in the game myself, including music (something I hadn't created for a game since 2008 or 2009). Between the programming, art, music, design, and sound effects, there's quite a bit to do in a single project, but it's a fun challenge.

Super Blackout is now out on PS Vita!

Super Blackout was just released today on PSN for only $4.99. You can find it here:

https://store.playstation.com/#!/en-us/games/super-blackout/cid=UP0770-PCSE00784_00-SUPERBLACKOUT001

If you purchased Super Blackout on PS Mobile, I want to give you a free upgrade to the new PS Vita version when it launches on Tuesday

Did you buy Super Blackout on PS Mobile? You have my sincere gratitude, and I want to give you a free upgrade as a token of my appreciation (and because I believe you shouldn't have to buy a game twice on the same console).

The outpouring of support I received when Super Blackout launched on PSM is a huge part of what led me to launch Fordesoft two months later, jumping feet first into PlayStation game development, with a special focus on the PS Vita. This was always a goal of mine, but the feedback I received from Super Blackout gave me an extra push to do so now rather than later.

By the way, if you haven't heard about the new version, here's what the new game looks like. It launches on Tuesday for $4.99. While it's the same game at its core, this new version adds new graphics, new music, trophies, controller support (in addition to the touchscreen), and PlayStation TV support.



Note that the game is currently only being released in North America, unlike the PS Mobile version, which was available in both NA and EU regions. If you purchased an EU version of the PS Mobile game, you're still eligible for the free upgrade, but note that I can only send you a code for the NA region, because that's all that exists right now. A EU release is possible but uncertain at this point.

How to claim your free upgrade

To verify your PSM purchase, I need you to look up your e-mail receipt from when you purchased the game, and send me some details from it, following the instructions below.

And I really have to stress that I need to be able to verify your purchase. If the information you send doesn't match the sales records I have, I won't be able to send you a free code. Please make sure to double-check the information before you send it.

1. Track down your e-mail receipt from PlayStation Network, which should have the subject "Thank You For Your Purchase". If you're using Gmail, try searching All Mail for "super blackout thank you for your purchase" (without quotes).



2. Send me an e-mail via the Contact page before November 30, 2015 with the subject "Super Blackout free upgrade", with the values of these two fields copied directly from the receipt:
  • Date Purchased
  • Order Number
If you purchased the European version of the game, please let me know that in the e-mail, too.

When will the free code arrive?

As long as the verification is successful, I'll reply with your free code to you soon afterward - almost definitely within a week, but probably within 1-2 days. The earliest is Tuesday, since the game won't be out until then. And be sure to regularly check your Spam folder in case it somehow winds up there.





Price announcement: Super Blackout will be only $4.99!

Super Blackout launches exactly two weeks from today on PS Vita, and I'm happy to be able to announce the low price of $4.99.

Super Blackout goes gold! Game releases on October 13, 2015

Great news today: Super Blackout is now packaged up, approved, and ready to hit the PlayStation Network store!

Mark your calendars: it'll be releasing on Tuesday, October 13, 2015.

Super Blackout progress, and conference fun

Looks like a release for Super Blackout in October is more likely at this point. Right now, there are just a few technical issues to fix up regarding the save data, but they're proving much more of a burden than anticipated.

On a brighter note, I had the privilege this week of speaking about multiplayer HTML5 game programming (with Node.js and Socket.io) at That Conference 2015. It was a really great experience, and I'd urge anyone in the midwest who's interested in web development to check the conference out next year.

Enhanced version of Super Blackout preparing for PS Vita release

Last November, I released Super Blackout on PlayStation Mobile.

Due in part to the closure of PlayStation Mobile (which just happened last week), I decided a few months ago to start working on an upgraded, enhanced port of Super Blackout for the main PS Vita platform.



It's virtually finished now, and I'm in the process of getting it ready for release, which currently looks to be sometime around August or September.

Some of the new features in this version include:

  • New graphics
  • PlayStation TV support
  • Gamepad controls (in addition to the existing touchscreen controls)
  • Trophies
So this is really the "definitive" version of the game.
Copyright 2015-2018 Fordesoft, LLC