About Ackmi and The Hinterlands

 

Hi, I’m Chris, and my wife is Megan. Together, we make up the Ackmi team. I do the programming, and she works on the design and a lot of the graphics.

About Ackmi:

My wife and I decided to start our own mobile games company in 2011 after she graduated with a graphics/ web degree, and we lost our house (and moved in with my parents to start paying off debt). I had been an ActionScript developer before that, and had made many small games.
We had read “4-hour work week” by Tim Ferriss, and realized we needed to find a good niche- something without a lot of competition, but with a lot of interest/ need for it. Using google keywords research, we found that “girl games” and “dress up games” were highly sought after in the “games” category, but there wasn’t much on the android market, although there were a decent amount of flash games to use to see what they actually were.
So we ended up creating several- they made money slowly, and not much aside from during Christmas (Oct-Dec). We were just using ads, switching between admob and mmedia, because admob started paying less and less eCPM, and mmedia was holding pretty well back then. It wasn’t enough to live on on our own, but if we made 10 of them, it might have been possible. But the games required a lot of time creating graphics, which would add almost nothing to gameplay time, so weren’t very sustainable.
But in 2012 I got very sick, and felt like I was dying. Heart palpitations, weakness, food shot through, dizzy, cold sweats, stomach cramps, and dizzy +feint feelings. It eventually improved a little after taking some anti parasite medication, but my stomach and head have been messed up badly since (4yrs), with me still not being able to digest food (but coming close on some foods), cramping less often, but drunk/ high/ out of it feeling a lot of the time, with a lot of trouble focusing/ concentrating.

About the HinterLands

I had been looking for a game like Terraria on mobile for a long time, but the guys who worked on the game had split up, the programmer said he wasn’t going to work on it anymore, and the artist went to work on  starbound, so it didn’t seem like it was ever going to happen. I had also been really wanting to find out how multiplayer worked, and really wanted to do a multiplayer game (the games I’ve liked best are multiplayer). I didn’t really like Terraria initially when I played it- the lack of goals/ objectives/ emptiness of the game made it pretty boring. But when I played it with my wife and a bunch of friends, we had a great time, hunting for new ores together, building big structures, finding out about, and taking on the bosses.
So in the end of 2012, I started working on the hinterlands (originally top down like harvest moon). It was intended to be a sandbox game like Terraria and Minecraft (so you can build your own world, and customize your “base”), but also combined with the RPG elements of Diablo 2 (another one I played multiplayer a lot), with leveling up your character, fighting hordes of mobs, customizing weapons, magic, classes, ect. We also wanted to add more harvest moon elements to the game, such as farming, animals, NPC’s to have relationships with (and years later someone told us about “rune factory” – a harvest moon+ RPG game).
We were working on another game, sort of like the tamagotchis/virtual pet, and that was supposed to be our main game, since it would support content creation better, as well as be an easier one to add in app purchases into (to compliment gameplay), with “The Hinterlands” being my fun side project
So I finally released a version in early 2013, and it started doing really well after about a month of almost no activity. Around 100k installs in the first month, then suddenly up to 1.7 million installs in the second month!
But someone had emailed me, and said Terraria was also announced to be released soon on mobile too! Apparently 505 games had contacted them, and got their permission to port it to mobile devices. So it was released a couple months later- no multiplayer, paid game only. I was worried it might hurt downloads, but was also hoping that it could have the opposite effect- since ours was the closest game on the market to it, and free/ ad supported, it would be the best option for someone wanting something with multiplayer, and couldn’t afford Terraria.
But that didn’t happen- the game started sliding down in downloads. I kept working on it religiously, adding more and more stuff, trying to improve multiplayer, improve the quality of the graphics in the game, fix bugs, and add more multiplayer options. But nothing I did improved downloads, and it seemed every time I released an update, it actually hurt downloads significantly. (And the networking was causing a lot of errors- a lot of objects would just never arrive over TCP, so I spent a majority of my time just trying to get multiplayer working without crashing- and I had over engineered early on, and had most of important game logic verified on the server end, which caused inconsistencies on the client ends. And it was virtually impossible to find any information on realtime multiplayer networking, except though valve documents, a Flash multiplayer book, ect.
Admob updated their system at one point as well, changed the way you request ads, removed “floor values” (which had allowed you to make sure you request high valued ads first before low valued ones, which had significantly helped with income), and also made your old admob data incompatible with the new system (so you couldn’t go back and check what times of the year were better, or relative eCPMs). After this point, eCPM’s fell dramatically, and never recovered.
On top of that, at the end of almost every quarter, eCPM’s through adMob would fall significantly, sometimes by half or more (whereas with our previous games, eCPMs would only really fall at the end of the year/ after Christmas spending).

iOS version

LibGDX had switched over to using a backend to convert to iOS called ‘roboVM’, and the library I use for networking ‘Kryonet’ (by one of the main guys who worked on LibGDX) had information on their message board that it worked on the iOS version. So I spent a while getting that working, but found that unlike on Android, where LibGDX was able to have the game view squished underneath a banner ad, on iOS they had only implemented being able to put it on top of the game being rendered (which I had used before, but took a lot of work moving the UI around to fit different sized ads, some ad networks delivering ads that weren’t the exact same size as others, and having important parts of the game being covered up). So I just released the paid version on iOS- it hasn’t done well, not enough to justify the time getting everything working. 10-50 downloads a month, but at that point, Terraria had already been on the ios app store, and based on the feedback on the android market since Terraria was released (“This game is like Terraria, I hate it!”), I wasn’t expecting much.

Amazon Underground version

When Amazon Underground was announced, it sounded like a godsend for the game (a very suspicious one though). Players get to play full versions of games for free, and Amazon pays developers based on the amount of time spent in the game- at a rate of $0.12 per hour (much better than what ads pay that come out to around $.01 per hour of gameplay). Since our game isn’t setup very well to monetize (no in app purchases, no short game sessions with lots of screens to show interstitials in between, not in portrait mode/ best for banner ads), but we do have a lot of people playing, and they play for a decent amount of time on average (average 20 minutes per person, which includes the 30% who leave after the loading screen, but before the main menu shows). Amazon is a little bit of a hassle to deal with (can’t have any of the links from the game mentioning anything about google play, even got denied once because our Facebook page mentioned the game is on google play…), but they do seem to be innovative, and their ad network pays over 10x what Googles own Admob pays (though they only show ads to countries that pay the most). But it seems like their is a lack of discovery, even though it is a a new market. We’ve only had a handful of reviews in about 6 months (all good though), and the number of minutes played a day seems to have stayed close to where it was in the initial launch- about 1000-2000 minutes a day (about $4).
But, we still haven’t ever gotten an explanation from Amazon about how they make money on the system, and the business model (from a developers or users point of view) is ludicrous – they pay developers more money than ads, and users don’t have to pay anything or see ads. So Amazon doesn’t make any money… but they obviously have to somehow, so it’s highly suspicious.
But the game is making roughly half as much on Amazon Underground as ads right now, but still not even enough to buy a lunch each day.

Steam version

LibGDX allows you to develop mostly on PC, and I use it for a majority of testing (2s for compiling before maven/ gradle vs. about a minute for testing on Android via cable/ emulator – for every compile- sometimes hundreds per hour). Once I had stand alone servers built, you could also run those off of PC as well (the upnp library I use for automatically trying to do port forwarding didn’t work on android). So I decided to try to get the game on Steam Greenlight. I submitted it back in December 2014, got 25-30% “yes” votes, more hate (a lot of 3d games being thrown together in Unity in a few minutes- most people on Steam seem to think if 3d can be done effortlessly, 2d must be even easier).
So I just kept releasing the PC version “demo” through our website when I updated the game, so people could at least play both ways. But randomly March 2016, I got an email from Steam saying the game was greenlit. I was able to get everything fixed up working well for the PC version (I usually just left controls on screen in the game/ targeted mainly mobile for making it look nice, but didn’t bother with removing all mobile references when testing before).
Surprisingly, there were actually less trolls per person on steam than Google play. There hasn’t been a lot of feedback, but there has been a couple articulate comments (I don’t mind people saying they hate the game, if they at least mention why they hate it/ things I can do better/ improve on in the future, instead of no information at all).
It’s been less than 200 units sold total so far, so it barely pays off the cost of steam developer license, and doesn’t cover the time polishing up the PC specific stuff, nor the extra time it will take to build+ package and deploy the PC version every update. I’m happy to finally try out greenlight, and even though it’s a bit more difficult to use than the Google Play developer backend (some spelling mistakes in the text files, the help videos are all for an older version of the UI that now has been partially replaced, the UI isn’t very intuitive or easy to navigate), I’m very happy to have a game on Steam (Loved the Half-life series, the mods (TF2, CS), some of the ideas (steambox)).

Mistakes

One of the biggest mistakes I made was based off of reading Notch’s blog- and trying to avoid what he said were one of his biggest mistakes. He had said he had to basically redo the entire game to add multiplayer, and would have wanted it in from the beginning, so it was high on my goals to have multiplayer working from the start. But that’s a very bad idea for many reasons:
* A lot more complicated for everything you do (whether it be trying to keep everything synced between everyone, or being limited on how much/ what you can send), as well as how to break everything apart to be able to fit in the max packet size.
* Virtually no resources for learning how to implement real time multiplayer (so most of the time you’re making a lot of mistakes that have been solved back by Quake 3 arena)
* Bad project management. In my experience, it’s best to work in small iterations with getting things working. Having a great single player game to use as a framework for adding multiplayer to it is much easier than trying to create a great single player game as well as trying to learn, understand, and create a multiplayer game at the same time
* There is a much bigger audience for people wanting a fun, single player game over a fun multiplayer game. Even though you’ll see reviews everywhere “add multiplayer to this game”, multiplayer is the icing on the cake of this type of game for most people- they’d like to have the option for multiplayer, but might only use it 10% of the time (and analytics backed this up – there was a much higher amount of people going into single player games over multiplayer).
* Spending almost 100% of my time trying to get multiplayer working well. Again, people see it as a “barely finished game with multiplayer” vs. “a multiplayer game that took a lot of time to get working, with a lack of additional content so far”
* Continuing to work on the game as a business, and not a hobby. The game took off initially, and started falling, so I got in the mindset “well, maybe if I can get the game closer to finished, it will turn around”. It never did, and I made the majority of the income off the game when it was very barebones, and have made the least income as it gets closer to finished.
* Not having a game that monetized well. The game wasn’t initially designed to have in app purchases (which it seems most games need to survive), but more like freeware games from my childhood. Play the game for free, but you won’t have as nice of experience unless you can pay for the full version. That way kids who wouldn’t be able to afford to play my game could still enjoy it, but people who could afford to buy it would want to, since ads are mildly annoying, and the experience is better without them.

Things I did right

* Making the type of game I enjoyed, and being able to share it with other people who enjoyed that type of game
* Being lucky with a side project done mostly for fun- it found a big audience initially, and it showed there was a market for this type of game when I originally released it.
* Having met some really great people played the game, helped with development, and provided valuable feedback and testing, which helped the game improve considerably.

What’s next?

The game currently is making less than the dress up games. My wife just got a job, but I’m still having a lot of issues with my health, and wouldn’t be able to work full time consistently. I’m going to be spending a majority of my time trying to get contract jobs to pay bills/massive amounts of debt. I used to get contract jobs for with web development, as well as had a good programming project with VMWare right after we started our company. So there are a lot of smaller jobs I can do to try to start paying off debt we’ve accumulated during the last several years trying to turn the game around.

But the game is still not finished, and I only recently got the networking virtually 100% stable (As of February- but now seeing random TCP messages in the game not being delivered again -_-). So I will keep working on it as a hobby project on the weekends, and I’ll eventually have it completely finished, and something I’m happy and proud of, and can finally live up to my initial design- a game like Diablo, with monster fighting, character development and leveling up, and a fun loot system + Having the ability to get resources from the environment, and build and customize the world (like Terraria and Minecraft) + be able to grow, farm and develop your own area in game, and have interesting NPC’s with unique personalities you can have relationships with (Harvest Moon).

Releasing the Hinterlands on Steam (LibGDX Java game)

We got approved for Steam Greenlight in March 2016, which was a little bit of a surprise, since we originally applied in Dec 2014. The game has had 23% ‘Yes’ votes, and 77% no votes. But there weren’t a lot of other 2d games being approved for steam green light at the time, most greenlit games being either ones with anime style graphics, or 3d games with stock assets (Grass simulator was approved very quickly).

So we had just figured the Steam Greenlight community was more fond of either fully complete 2d games, or partially complete 3d games.

(You can see the final store page for the game at: http://store.steampowered.com/app/454260)

Preparing LibGDX for release on steam

Adding an icon for windows
You’ll probably want an icon for your game while running in windows. To add this, in your Main.class for desktop, you’ll have to add the icon in your ‘LwjglApplicationConfiguration’:

LwjglApplicationConfiguration cfg = new LwjglApplicationConfiguration();
cfg.addIcon(“resources_pc/icon_32x32_windows.png”,FileType.Internal);
(replacing the first string with the path to your icon)

Making your game run windowed and borderless instead of full screen
To make your game run windowed, borderless, but look full screen, under the above:
System.setProperty(“org.lwjgl.opengl.Window.undecorated”, “true”);
cfg.width = (int) (LwjglApplicationConfiguration.getDesktopDisplayMode().width);
cfg.height = LwjglApplicationConfiguration.getDesktopDisplayMode().height;

Exporting a runnable jar from eclipse
I had been exporting out PC builds of the game for people to try out for some time, and LibGDX has a decent article about how to do it using eclipse: https://github.com/libgdx/libgdx/wiki/Deploying-your-application. Basically right click on your PC project, go to export, export as a runnable jar, extract or package libraries into the jar.

You’ll now have a runnable jar of your game, but you’ll need to copy all of the assets from your project into the same folder to be able to run it. You can start it from the console to see any debugging info (in case you’re not sure what asset you’re missing) by going to the command line, going to the folder that your .jar file is in, and running it using ‘java -jar thenameofyourjar.jar’. You’ll have to make sure the have your PATH variable setup in windows to java if it is not already (http://stackoverflow.com/questions/1672281/environment-variables-for-java-installation).

So if everything is working properly, you should be able to double click your jar to run it, or run it from the command line like above (to see any debugging output).

Changing your runnable jar to an exe – Picking a tool
There are two tools I’ve found for packing your jar as an exe.
* Launch4j http://launch4j.sourceforge.net/
* packr https://github.com/libgdx/packr

Packr sounds like it would be a lot better, is a tool actually made by the LibGDX guys, and recommended through their wiki. It allows you to also package your jar up for Mac and linux. It also offers the option to slim down a copy of the JRE with your game.

But, some of the negatives compared to launch4j:
* It doesn’t allow you to also have an icon on your exe automatically (and no information on how to do it manually)
* It doesn’t actually wrap your jar file- it creates a small exe and includes your .jar file
* It seems to clear out your destination folder, so if you wanted to copy your assets over manually the first time, it removes them (but has an option to copy over your assets every time)

So I ended going with launch4j (although both generated runnable executables) because of it looking more professional- an exe with an icon. The GUI also gives you feedback if you’re missing something, whereas packr does not. After you output with packr, you can get feedback to figure out what went wrong by running your executable from the command like such as:
TheHinterLands.exe -c –console

Steam submission- including the JRE
The first time I submitted to steam using Launch4j, I got a message back saying that it required an extra library (Java- the JRE), and it needed to have an installer packaged with it, or have the library included. Launch4j will automatically redirect someone launching your app to the Java download site, but it doesn’t look professional, and an end user might not know what version or the JRE they need (x64, x86, ect).

But both packr and Launch4J allow you to specify the location of a bundled JRE. On the packr site, there are actual instructions on what you need to do, whereas the Launchj site had no information, and the best answer on stack overflow was to just include your jre folder from your program files directory!

So packr actually directs you where to download JRE’s you can redistribute with your game, with zip files of the openJDK: https://github.com/alexkasko/openjdk-unofficial-builds.
The page says that project is discontinued, and links to the newer OpenJDK 8 bundles, but only the OpenJDK 7 bundles worked for me.

If you want to support both 32bit and 64 bit operating systems, you can just include the 32bit JRE, and it allows it to run on both systems (the i585= 32bit openjdk-1.7.0-u80-unofficial-windows-i586-image.zip).

Download that, and all you need is the jre folder from the zip that you include with your game.

Now you should have everything to make the game redistributable on Steam.

(Optional) Testing using the bundled JRE
If you’re curious whether the jre folder you included actually works or not, you can manually use it to try to run your jar. Put your jar in the folder with your assets and the jre, and create a new batch file called ‘testing.bat’.
Add the following lines:
jre\bin\java.exe -jar TheHinterLands.jar
pause

Save, and double click the bat file to test it. It should use the java file relative to your batch file to try to run your jar, and will pause after closing, so that you can see any errors/ console output for anything that might have gone wrong.

Required launch4j settings

On the first/’basic’ tab, you need to fill in ‘Output file’, ‘Jar’, and you can add your ‘icon’.
After that you just need to fill in the ‘JRE’ tab with the ‘Bundled JRE path’ as just ‘jre’ (folder relative to your exe), min JRE version 1.7.0, max I just did as 9.0.0 (so that it can work for some time).

To convert your .jar into the exe, you have to click the gear shaped icon, not the play, highlighted button. Once you do that, you should have your exe in the folder you specified.
If all your assets are in there, you should be able to just run your exe, and start up your game.

Uploading To Steam

You’ll find the same write up in the steamworks developer area, but I had a little bit of trouble getting it working. (Follow that documentation for getting your builds/ depots ready on the developer console end)

The videos from the developer area were helpful, but didn’t all work for me, and seemed outdated with the interface (which this might be by the time you read it, but as of right now, builds/depots are under app admin-> the steampipe tab)

First you’ll want to download the sdk, and unzip it to a location you’ll be uploading to Steam from.

Then browse to sdk/tools/ContentBuilder/content and make a new folder named ‘windows_content’, and copy all of your game files you plan to upload to steam there (your exe, your assets, everything needed to run the game). You can run it again from here if you want to check to make sure everything still runs fine.

Then you’ll have to update the included sample scripts under: ‘sdk/tools/ContentBuilder/scripts’, an app build and depot build.

Make sure to grab what you app id and depot id for your game are from the Steamworks interface (2 different 6 character numbers, my depot number was one more than my app number. Example: app_id=900120, depot number = 900121). The SteamWorks tutorials recommend renaming both files with your app and depot numbers instead of the default ones values, so you might as well do that as well.

Open up the app_build file in a text editor, change out your app_id, and your depots values and save. Example:
“appbuild”
{
“appid” “900120”
“desc” “Your build description here” // description for this build
“buildoutput” “..\output\” // build output folder for .log, .csm & .csd files, relative to location of this file
“contentroot” “..\content\” // root content folder, relative to location of this file
“setlive” “” // branch to set live after successful build, non if empty
“preview” “0” // to enable preview builds
“local” “” // set to flie path of local content server

“depots”
{
“900121” “depot_build_900121.vdf”
}
}

Save and open up your depot file. Change your ‘DepotID’, comment out ‘ContentRoot’, change ‘LocalPath’ to:
“LocalPath” “.\windows_content\*” (don’t forget the star, or it doesn’t grab anything).
So an example would be:

“DepotBuildConfig”
{
// Set your assigned depot ID here
“DepotID” “900121”

// Set a root for all content.
// All relative paths specified below (LocalPath in FileMapping entries, and FileExclusion paths)
// will be resolved relative to this root.
// If you don’t define ContentRoot, then it will be assumed to be
// the location of this script file, which probably isn’t what you want
//”ContentRoot” “..\thiswilloverridetheoneinappsettings\”

// include all files recursivley
“FileMapping”
{
// This can be a full path, or a path relative to ContentRoot
“LocalPath” “.\windows_content\*”

// This is a path relative to the install folder of your game
“DepotPath” “.”

// If LocalPath contains wildcards, setting this means that all
// matching files within subdirectories of LocalPath will also
// be included.
“recursive” “1”
}

// but exclude all symbol files
// This can be a full path, or a path relative to ContentRoot
“FileExclusion” “*.pdb”
}

Save, and you can finally work on the final step. Edit in your text editor ‘run_build.bat’ in the folder ‘sdk/tools/ContentBuilder/’. Change out the login with your Steam name and password, and the app_build with whatever yours is named. Example:
builder\steamcmd.exe +login steam_account_name password +run_app_build_http ..\scripts\app_build_900121.vdf +quit

Finally click on the bat file to run it, and it should upload the content for your game to steam! It takes quite awhile (maybe 10 minutes for about 100mbs- might setup stuff on their end for the first run).

Once it finishes, you should be able to see your content in steamworks under App->App Admin->SteamPipe tab->builds. Click on the drop down next to your most recent depot, and click default to make it the default build. You can also download your files (to make sure everything was uploaded correctly) by clicking on the highlighted depot number next to the drop down, and downloading your files as a zip.

If everything works, all you need to do is finish the checklist on your app page (by clicking on your app, and looking on the right hand side for the checklists ‘Your Store Presence’ and ‘Your Game Build’.

The HinterLands PC Version ready for download!

The Free PC version is ready for download. Let me know when you want to see the paid!

Waiting for approval through Amazon for their PC app store.

Steam Greenlight isn’t looking positive – only about 25% “yes” votes, no one is apparently interested in further development on the game on PC 🙁

feature_705x344

Download it here

Description in case you don’t know:

The HinterLands is a multiplayer 2d mining sandbox game, and was released early in alpha to encourage people to contribute to development.
It has grown a ton, and keeps growing thanks to player feedback! Contribute ideas and feedback, and help shape the future of the game.
Mine the world for resources, build great structures, harvest plants, trees and mobs, all with friends or random players!

•• Multiplayer Modes ••
• Play multiplayer over wifi/LAN (with mobile devices or desktops)
• Join a PC server and play with tons of people (both on desktop and mobile devices)
• PvP recently added- fight against friends or random players!

•• Features ••
• Fight mobs with fast combo attacks, or slow strong attacks, blocking, or turn off hostile mobs, go into creative mode, it’s all your choice!
• Build structures using tons of blocks and items!
• Farm mobs for resources, or destroy them for food to regain health, and stop hunger
• Harvest trees and plants for food, potions, or seeds to replant and grow your own forests

•• Features Coming Soon ••
• Redesigned UI: easier inventory system, more advanced item, armor and weapon crafting system, equippable armor and clothes, and quests
• Bosses, more mobs, and more biomes

•• Planned features ••
• Player vs. Player: Free for all, capture the flag, team oriented with different classes, tower defense with creeps and towers
• NPC’s: Characters to give you quests, buy and trade items
• Pets: Animals to join you on quests and in combat
• Level editor: Submit levels for public servers!
• Character leveling and skills: customize your character for your playstyle. Create a invincible tank, a stealthy rogue, or a powerful mage
• Farming: Domesticate mobs, take care of them in your barn and breed them! Grow crops for creating potions, money or aid in exploring
• UI system for advanced custom crafting of weapons, armor and vehicles. Quality based on character crafting skill, with adding gems and enhancements
• Polygon based worlds. Mini planets, solar systems, and space travel

•• Instructions ••
• Customize and create your player and world
• Play single player, wifi game, or join a public server
• Mine dirt, stone, ect with the pickaxe. Chop trees and items with the axe. Use the hammer to break down backgrounds or items
• Keys: W(move left), A or Space(jump/ double jump), S(move down, duck, go prone, or slide), D(move right), and Shift to walk. Click to mine, place or attack.
• Use the fast attack button to combo attacks on mobs(Left Click). Use the strong attack for higher damage(Right Click). Use the shield to become invincible(Middle mouse button or ‘E’)
• Mouse scroll to zoom in / out of the world; open your inventory and scroll to increase / decrease button size. Move items by holding them down for 1s, or split stacks by holding down longer
• Build amazing structures, upgrade your tools, and share on our facebook page! http://goo.gl/vsclYF
• More instructions on the wiki: http://goo.gl/UZcn2N

•• Bugs ••
• World format: needs to be changed, to optimize network, allow boss areas/ scripting, and allow more biomes+bigger worlds
• Lighting system was too slow, so has been cut down and needs to be redone
• Multiplayer movement needs to be changed to look smoother

The game is still in alpha, because there is so much still that we want to add.
There are only 2 of us working on it, but we appreciate everyone who plays the game, helps contribute by finding bugs, adding ideas, suggestions and feedback

Join the forums: http://goo.gl/Zxe3hb
Please leave feedback, have friends play with you, and be a part of helping an indie game grow! Let us know what you want added first!

•• Free Version vs Paid ••
We want to have everyone be able to play the game, both to try it out, and for people who can’t invest in its development yet. The Paid version has a much bigger inventory (80 vs. 20), and each character also starts with a “Backers Reward”, which allows you to teleport to and from your spawn point. We hope you help fund development, but understand if you can’t.