SimpleRockets 2 is now available for mobile
After more than three years of development, SimpleRockets 2 is now available on the iOS App Store and Google Play. You can get it here.
As usual, here’s a new launch trailer we put together for this special day. There is an absurd number of features in the game and the mobile version has the same feature set as the PC and Mac versions. The only difference is that the graphics are dialed back slightly, but don’t get the wrong impression as the game still looks amazing on mobile devices!
SR2 has been available on Steam for almost a year now, so we’ve had time to add tons of new features and fix a lot of bugs to get it ready for this mobile release. But, we’re not stopping here! You can check out our Roadmap for the list of stuff we are planning to work on. If you have a suggestion, feel free to submit it and make sure to upvote the suggestions that you favor. We take player suggestions into consideration with every update and it has led to great enhancements to the game such as the procedural rocket engines and jet engines.
If I could go back three years ago to when we started this project, I never would have imagined that we would get a fully 3D space simulator with seamless ground-to-space transitions and unprecedented craft customization working on a mobile device. I’m really proud of the team and the work we’ve done in creating what is now the most comprehensive simulator on mobile for building and flying rockets. I hope you will enjoy the game as much as we’ve enjoyed making it!
Thank you for reading and we hope you enjoy the game!
-The Jundroo Team
SimplePlanes Trailer
Just remembered that I still have this blog. Well, the past year I’ve been writing a game with Philip Tarpley about building airplanes. The game is called SimplePlanes. It’s available right now for PC and OSX. We are launching for mobile on Dec 11th, unless we get a rejection from Apple. Here’s the trailer:
Jundroo’s Game Architecture and Tools
I am frequently asked what I use to write my games, so I thought it was time to just write it down and put it in one place.
Architecture
95% of my code is in C++, and then I have a different application layer for each platform. Windows is C++, Android is Java, iOS is Obj-C, and Windows Phone is C#.
Tools
I do nearly all of my coding in Visual Studio 2012 on a Windows 8 machine. It’s my favorite IDE by far, and is also my favorite product from Microsoft. C# is my language of choice, but C++ is a great since it runs everywhere. This is changing now that Unity3D is becoming so popular. I have started to tinker with it and I’m really excited that it uses C# for scripting. It is possible that my entire workflow may change for my next project, but that’s to be expected sooner or later.
Artwork is done in Photoshop, though most art is done by my friend, Matt Clair. Sprites are packed into a a texture atlas using TexturePacker.
I use Audacity for any audio work, but I typically buy stock sounds from soundsnap.com. I have yet to put music into any of my games.
Landing a rover on Smoon in SimpleRockets
It seems that every time I release a new game, my players manage to do the impossible. SimpleRockets has been no different. Within just days after release, I am seeing high scores that I never thought would be possible, and I’m seeing picture albums detailing long, complex, and well thought out missions that players are creating by themselves in the Sandbox mode.
Landing a Rover on Smoon
Banjerpickin managed to get a rover all the way to Smoon and land it safely. He even built a skycrane to safely get the rover down to the surface. Really impressive!
You can see the full album here, and you can see the discussion on reddit here.
Smearth to Smenus
Nut007 managed to build a rocket to get himself all the way from Smearth to Smenus.
You can see the full album here, and you can see the discussion on reddit here.
SimpleRockets Forums
Actually it’s a sub-reddit.
If you have a question about the game, or want to see more of this stuff, please visit the SimpleRockets subreddit.
Number Two
My newest game, SimpleRockets, was released yesterday (9/5) and rose to the #2 spot in the iOS App Store. Needless to say, it’s been an exciting day and I thought it would be fun to share the details of my marketing campaign.
Let me first state that the overnight success of SimpleRockets really started three years ago. Thanks goes to the CEO of FreeAppADay.com, Joe Bayen. Today would not have happened if you had not reached out to me 3 years ago and took a chance on BridgeBasher. I would have never been able to get the user-base that I needed without that promotion. Thanks, Joe.
The Plan
I had a four pronged marketing strategy with SimpleRockets.
1. App updates
I have four other apps on the market right now. They are still doing fairly well and have a fairly large user base. I added a link in each of my games that the player can’t miss that points them to SimpleRockets. On launch day, I will release the updates and existing players will get a notification of the update. Hopefully they will hop in the game for a minute to check out what’s new and see the link to the new game.
2. Free my apps
I also setup campaigns with FreeAppADay, AppGratis, and 3 Magic Shots to turn my apps to free for a few days. My app is then promoted on their websites. I hope to pull a lot of new players into my existing games so they can see the link to SimpleRockets.
3. Massive email
Every time I use my email mailing list, I feel like it becomes less effective and it’s expensive. However, the list has grown to 110k people, so I can’t ignore it. I setup an email campaign with Campaign Monitor.
4. Work the social media
I only really used Reddit and Facebook. I didn’t have much hope for these services, but reddit has really blown me away. Facebook is okay, and a great way to tell my existing players that I have a new game out, but not a good way to get new players to try my game.
September 4th – The day before launch
8AM
Released all app updates – iTunesConnect was giving me a lot of grief. Lots of time outs and other issues.
10AM
Trying to set SimplePhysics to free for the AppGratis promotion. It was a trying process. Kept getting timeouts from iTC and it kept logging me out. Extremely frustrating. Finally got it set to free. Trying to edit the app description and add the tagline for AppGratis. Timeouts galore. Argghh! Great! iTunesConnect just went to down for scheduled maintenance. I wasn’t aware they “scheduled maintenance” right in the middle of a business day. That’s outstanding.
Noon
Really nervous that I can’t get into iTC to change my apps to free and add the taglines. I’m afraid the services are going to drop my campaigns – though I’m not sure what they’d do because iTC is down, so nobody on the planet can set their app to free right now.
3PM
I noticed that SimpleRockets busted onto the iOS charts – popped in at #192 top overall. That is exciting. I haven’t even started the major promotions yet – those won’t start until tomorrow.
4PM
I noticed that one of my app updates have gone through (SimplePhysics), but the other 3 have not. These are important, because they have links to SimpleRockets and I need them to go through well in advance of doing a free promotion so that new players will get the updated version with the link.
5PM
Called iTC support and asked if they had more information about the outage. They said they didn’t know, just that people were working on it. Very friendly, but nothing they could do. They did offer to check on the app updates and minutes after I got off the phone I noticed the app updates had been pushed through. That was a relief.
9PM
Going to bed. Checking the app store one last time. Wow! SimpleRockets is now at #45 top overall. Might be hard to sleep now after seeing that.
3AM
Woke up because Charlie, my doberman, was acting strange. She just had surgery a few days ago to remove a corncob from her bowels. Be careful everyone. Corncobs are not for dogs!
Checked my phone. WOW, #25 top overall. I lay back in bed staring at the ceiling, my mind is racing, heart is pounding…roll over and check iTC – it’s back up! Okay, might as well get out of bed and get started.
September 5th – Launch Day
4AM
Changed all of my remaining apps to free and put the taglines in. I’m not messing around with iTC today. I’m supposed to wait until afternoon to switch the FreeAppADay apps to free, but I’m afraid iTC might go down again. Not taking that chance.
5AM
Wow, up to the 19th top overall app now.
6AM
Check Youtube, find that Scott Manley’s channel has released a video review of SimpleRockets. Scott Manley is an extremely popular figure in the rocket science game genre. He could pull in a lot of new players, or repel them. I’m so nervous. I’m actually soaking my shirt with sweat as I click play. What if he doesn’t like it? What if he recommends players don’t buy it? Relief gradually washes over me as I watch a favorable review of the game. I even LOL at a few places. That’s great, I’m so happy, things are going about as good as they can.
7AM
Kids are up, time to get them ready for daycare.
8AM
Back from dropping the kids off at daycare. I’m trying to get a post going on reddit in the Kerbal Space Program subreddit. I know these guys would love my game. I’m painstakingly writing each person individually who commented on a reddit post I had made a few weeks ago with the trailer for SimpleRockets. This turns out to be around 30 people. I just send them a link to the new reddit post, and hope that they will give me a few upvotes here and there and get the post rising in the KSP subreddit.
9AM
Updating Facebook fan page now with a link. Throw in a nice screenshot – picture posts always seem to do better on Facebook.
10AM
Keep coming back to reddit to check on the post and it’s rising. I’m talking with people who have feedback or questions about the game. I answer all questions like I have an aggressive case of OCD. I throw a few more posts up on reddit in the /r/iPhone and /r/Android subreddits. I doubt those will take off, but why not try.
10:30AM
I finish up the email campaign I have set up with Campaign Monitor. I review it again and again, looking for anything I may have missed. Double-Triple-Quadruple check the links to make sure they are pointing to the correct app stores. Looks good. Send it. A/B campaign comes back and says that they are about equal. I manually select the B campaign and then blast out the remaining 108k emails. Out-of-office replies flood my inbox. Go through one-by-one. Sometimes you get some pretty funny ones.
11AM
Getting tons of responses from people through email. People are being super nice and saying they are excited to try it and “buying it now” sort of stuff. Really uplifting!
I check the AppGratis website and I notice that SimplePhysics is not up. This could be bad. SimplePhysics is an integral part of my promotion. Ideally it should be high in the free charts, pulling in players and then giving them a link where they can download the new app. What’s up AppGratis? Did you drop me from the promotion without telling me? I email them.
Noon
Just puttering around now, responding to emails and reddit posts. Went to the Touch Arcade forums to throw up a forum post. Funny, somebody already posted on TouchArcade for me. That’s a good sign!
Not getting as many email replies as I thought I would. I wonder what the issue is. Maybe it got caught up in spam filters?
1PM
Up to #14 in the ranks now, that’s great! It’s still climbing the charts!
2PM
At Midas now. Answering questions on reddit while I wait for my car to get serviced – the damn A/C is going out on it. People are still really enjoying the game. Mostly positive feedback. Starting to get some suggestions and minor complaints.
3PM
What! #5 in the app store now? What happened last I checked it was 14, how did it jump a full 9 spots!? I am filled with glee. I immediately screen cap and send a text to my wife.
I check the AppGratis website. SimplePhysics is still not up. Still no response from the email I sent them earlier. I email them again.
6PM
Driving to dinner with my wife. She’s checking the app store every few minutes. She explodes – “You’re number 3! You’re number 3!”
My son interrupts “Mommy, what’s 3?”
She replies “Daddy’s game is number 3.”
She pauses. I glance over and see her thinking about how she’s going to explain this concept to a four year old.
She continues “That means that out of all the games in the world, daddy’s game is the third best.”
Will smiles and nods his head and says “Well, I played his game.”
That really was a special moment, and for a second I couldn’t even hear my two year old daughter screaming that she wanted her sippy cup RIGHT NOW.
September 6th – The Day After Launch
AppGratis never did run the promotion for SimplePhysics. They never told me they were dropping it. They became incommunicado at the most crucial time for my campaign. Even despite that, SimpleRockets rose to the #2 spot overnight where it’s been sitting all morning. This is my best app launch, and I am very surprised the game did this well. I’m sure it will start dropping off the charts in a day or two, just like SimplePhysics did a few years ago. Until it does, the sales reports for the next few days will be silly. That’s exciting, not directly because of the money, but the freedom that money can buy to allow me to continue working on games, and not have to return to being a corporate software developer just yet.
The numbers
SimpleRockets rose from #192 to #2 yesterday, and received 13,178 downloads on iOS and about 4,465 downloads on Google Play. The other markets were negligible in comparison.
SimpleRockets has launched!
SimpleRockets is now available on iPhone/iPad, Google Play, Amazon App Store, Windows Phone 8, and PC. It’s just $0.99 on everything except for PC. Be sure to get it now, because the price will increase after this weekend!
It’s always exciting to launch a new game, and I’m already seeing some very positive feedback from players.
Great physics, many combinations, this game is one of the best iPhone physics games I’ve played!
It’s a lot of fun just building rockets. The various challenges make it even more fun. I’d pay a lot more than $0.99 for this game.
Great little orbit game. It’s like KSP lite, and a wonderful game in its own right! Well worth the purchase.
Trailer
Interview on Channel 9
I had the pleasure of meeting Laura Foy in Seattle for an interview on my experience porting my games over to Windows Phone 8.
http://channel9.msdn.com/Series/Developer-Diaries/Dev-talk-with-Andrew-Garrison-from-Jundroo
Porting an iOS app to Windows 8
I just recently finished porting my iOS game, SimplePhysics, to Windows 8 Metro WinRT. SimplePhysics is primarily written in C++, with just a pinch of Objective-C to get it working on the iPhone. Fortunately, the new WinRT platform is written in C++/CX, so in theory I should be able to reuse almost my entire code base!
This was true for the most part, but there were still some significant hurdles that I had to overcome to get my app running on Windows 8.
Learning the Framework
The first problem was the fact that I knew nothing about WinRT. It’s a completely new framework written to replace the age-old C-based Winapi. Whenever I encounter something that I know nothing about, I turn to my secret weapon: Pluralsight. If you haven’t heard of Pluralsight, then I highly recommend that you check them out. They make extremely high quality training videos that can get you up to speed on a new technology faster than any other method. They are now my #1 stop when learning a new tech. It does require a paid subscription, but they have a free 10 day trial, so you can watch the training video on WinRT for free. This video was particularly good, because it was done by Kate Gregory, who has written over a dozen books and is amazingly knowledgeable about the platform.
No Support for OpenGL
You have two options when making an app for the new Windows Store: DirectX or XAML. OpenGL is not supported, and likely will never be supported. This is very unfortunate when the vast majority of indie game developers are using OpenGL. So now you have to rip all that OpenGL code out and replace it with DirectX…unless there is another way.
Instead of ripping out my OpenGL code, I looked into using an OpenGL to DirectX wrapper library. The idea is that you just link with this wrapper library that implements a version of the OpenGL API that routes your OpenGL calls to their DirectX equivalents. Quite a few wrappers exist, but I couldn’t find any that support DirectX 11 (which is what you’ll need to use on WinRT). So, I set out to write my own wrapper library. It wasn’t too painful in my case, because the drawing code in SimplePhysics is very basic and I was only using around 25 methods from the OpenGL API.
I put the code up on Codeplex, so feel free to download it and check it out. It’s licensed under the MIT License, so you can do whatever you wish with the code. It also includes a simple Windows 8 application project that demonstrates how to use XAML based UI and OpenGL graphics together.
Asynchronous File I/O
This was the biggest hurdle for me. WinRT really enforces the idea that if you want to do some long running operation, you must do it asynchronously. This is understandable. They just want their apps to feel more responsive to users and really this is something that all devs should strive for anyways. However, in some cases it is quite a pain to convert working synchronous code to its asynchronous equivalent.
For example, nearly every game ever written persists the user’s settings to a file. In SimplePhysics, this is just a handful of saved blueprints and is only a few kilobytes in size at most. This is hardly worth converting to asynchronous code because (a) it is only done on start-up, and (b) modern hardware can read a few kilobytes lightning fast. We’re talking milliseconds.
Unfortunately, in WinRT, all file I/O operations are done using the IAsyncOperation class. For instance, if you want to read a file, you’ll have to do something like this:
void ReadFile(Platform::String^ fileName) { using namespace Windows::Storage; using namespace Concurrency; // First get the file...asynchronously auto folder = ApplicationData::Current->LocalFolder; task getFileTask(folder->GetFileAsync(fileName)); // Then read the file...asynchronously auto readBufferTask = getFileTask.then([] (StorageFile^ f) { return FileIO::ReadBufferAsync(f); }); // Then convert the buffer into something usable, like // a std::vector......asynchronously readBufferTask.then([requestId] (Streams::IBuffer^ b) { auto a = ref new Platform::Array(b->Length); Streams::DataReader::FromBuffer(b)->ReadBytes(a); _data.clear(); for (uint i = 0; i < b->Length; i++) { _data.push_back((char)a[i]); } // Now set a flag to indicate that _data vector is ready _dataIsReady = true; }); }
The code in this method isn’t too complex. WinRT actually has some nice ways to handle async operations, as seen with the “then” method, but it can still have a significant impact on an existing, working, code base that is using synchronous file I/O. Initially, I started down this path of re-factoring SimplePhysics to use async file I/O, but it was just taking too long. At the end of the day, I found that even though WinRT doesn’t expose any synchronous file I/O, good old fopen, fread, and fwrite still work just fine. The trick is to know where to read and write your files. If you try to read or write from the wrong location, your fopen call will fail. I stored all of my user settings files in the LocalFolder, which is the “root folder in the local app data store.”
Here’s some code that demonstrates how to write to a file, synchronously, using fwrite.
auto localFolderPath = Windows::Storage::ApplicationData::Current->LocalFolder->Path; auto filePath = localFolderPath + "\\test.txt"; FILE* file; _wfopen_s(&file, filePath->Data(), L"w"); if (file) { unsigned char data[] = { 'a', 'b', 'c' }; fwrite(data, 1, 3, file); fclose(file); }
In Conclusion
Other than that, the port from iOS to WinRT was relatively straight forward and mostly painless, and it’s exciting to see SimplePhysics in the Windows 8 Store. I hope these tips will help some of my fellow indie devs, and if you have any questions feel free to contact me.
GoDaddy is Suboptimal for WordPress
I have a confession to make. I’ve been running a website on a shared GoDaddy web server for years. During that time I’ve really never had any problems. The tech support was fine. The performance was fine for my DotNetNuke blog and a handful of other ASP.NET pages that handle service calls from my iPhone games. I did seriously consider switching away from GoDaddy after the SOPA fiasco and the resulting backlash from the reddit community, but I did not. The thought of moving to a new hosting company was daunting and laziness took hold and squashed my desire to make a political statement.
Around a month ago, I decided to convert my DotNetNuke blog into a WordPress blog. WordPress is like a breath of fresh air after using DotNetNuke’s blogging module. The themes and plugins for WordPress are amazing and everything was going great until it became apparent that my shared web server was unable to handle the new platform. Several times a day the web site would timeout completely. I wrote a little app that pinged my web server and found that response times for a single blog page averaged around 13 seconds, with as many as 14% of the requests failing completely over the course of a day. This was unacceptable. I spoke with the GoDaddy support and they informed me that things would speed up a bit if I switched from a Windows server to a Linux server. That would be fine, except I was also running a few ASP.NET services for my iPhone games. I had to stick with Windows. They seemed to acknowledge that WordPress on Windows was slow, yet they still seem happy to sell that service with no up front indication that it performs terribly. The interwebs are filled with people complaining about the issue. Just to name a few.
I still tried desperately to make things work. I upgraded to GoDaddy’s Ultimate 4GH plan and installed the WP Super Cache plugin (which is awesome, btw), but to no avail. It was becoming clear that a WordPress and GoDaddy were no longer an option. I started looking around to other hosting services and landed on GearHost. The process took about two days to get all of my stuff moved over, but overall it was not quite as painful as I thought it would be. The difference is nothing short of incredible. The average response times now are just over one second and I have yet to have a request fail. Not only is GearHost outperforming GoDaddy by a wide margin, but GearHost is actually cheaper than GoDaddy too. Here’s a break down in the comparison between the two services:
[table]
Service,12 Month Price,Failed Requests,Average Response Time
GoDaddy Ultimate 4GH,$9.49,14%,13356ms
GearHost CloudSite,$8.99,0%,1308ms
[/table]
Here’s a graph showing requests over the course of a day between a WordPress blog page running on GoDaddy vs the same blog page rehosted on GearHost. Each bar represents the average of 6 requests, spaced 10 minutes apart, for that hour of the day.
I’m very happy that I finally made the switch. GearHost does have a weird delay with FTP, which is very frustrating, but other than that the service is solid and the tech support has been great.
Dummy Defense
Dummy Defense is a spin-off of the popular physics and engineering game, SimplePhysics. In Dummy Defense, you must use your engineering prowess to protect Melvin, the dummy, from an array of dangers, such as boulders, explosions, death pits, meteors, and more. Using the same blueprints editor from SimplePhysics, the player must build a structure that is simulated using a physics engine in real time. Players can view how their design reacts in slow motion, fast forward, and they can even rewind time to pinpoint any weaknesses in their design. It’s an addictive game with a wide variety of levels, and players may even learn a few things about structural engineering along the way.
Recent Comments