jump to navigation

WebP images September 18, 2014

Posted by Jesse in : Game Development , add a comment

Work continues on getting the Android port of Perseus ready to push out for public release. I had to completely rewrite some of the asset loading code to handle reloads when the OpenGL graphics context is lost. Awhile back they added a feature to Android to prevent it from getting trashed so often, but there seems to be a decent number of devices that ignore that feature completely, so I needed to come up with a fix.

In the worst cases, this is happening every time the player looks at the leaderboard or sees an interstitial ad. Unfortunately, the reloads are really slow. On slower devices, it would look like the game had locked up. Some of the assets in Perseus are huge. Each of the background textures are 900×1200 pixels, all of them clocking in over 1.4 megabytes each. (And we have to reload a lot more than textures. All of the shaders and render textures need to be recreated as well. We used a bunch of them for the laser, lightning, and bloom effects.)

In hopes of speeding things up, I started experimenting with some other file formats. Jpeg is the obvious first choice, but jpeg doesn’t handle alpha at all which I require, and I’d rather not have multiple file formats if I can help it. Next I stumbled upon a format called WebP. WebP is an image format being pushed by Google for use on the web. They claim that lossless WebP images are 26% smaller than pngs, and lossy images are 25-34% smaller than jpeg images. Apparently there’s been some difficulty in getting other browsers to support the format, but I don’t care about that, I’m making video games! 🙂

Google provides a library written in C to load WebP files, and in less than half an hour I had WebP images loading and it was much, much faster. I’m thrilled with the compression and the quality. Also, it supports transparency and translucency! Seems perfect for our needs.

Let’s take a look at some images. (Hopefully your browser will render the WebP images. They work for sure in Chrome and Opera.)

Reference image

100% quality

80% quality

75% quality

If you compare the WebP images to the original png, you’ll notice that they are a bit darker. I’m not sure why that is. It’s noticeable, but completely acceptable to me. In fact, when I open the 80% WebP in one tab, and the reference png in another so I can swap back and forth quickly, I don’t really see anything objectionable at all, and it’s dropping from 1440 KB to 97 KB. That is insane!

I shipped a new beta version of Perseus using WebP images yesterday, and none of my testers seemed to notice any differences in image quality. I’m really happy with WebP images, and I think I’ll be using them exclusively in my games from now on.

Perseus testing on Android September 12, 2014

Posted by Jesse in : Android,Perseus , add a comment

We’ve ported Final Flight of the Perseus to Android. Unfortunately, we have pretty limited access to Android hardware to test on, so I’m looking for some help.

If you have an Android phone or tablet and are interested in beta testing:

Option 1:

  1. Join the Google+ testing community
  2. Download the game from the Google Play store by visiting here on your device.
  3. (Optional) Let me know the email address you’ll use to log into Google Play Services (for leaderboards.) I have to add each player manually. If you don’t care about being in the beta leaderboard, you can skip this step.
  4. Let me know if/how it ran on your device.

Option 2 (advanced users):

  1. Grab the apk from here. If that link fails, there’s a mirror here.
  2. (Optional) Let me know the email address you’ll use to log into Google Play Services (for leaderboards.) I have to add each player manually. If you don’t care about being in the beta leaderboard, you can skip this step.
  3. Let me know if/how it ran on your device.

You can also view the current testing results.

Comments here, or over in the G+ community are welcome. You can also contact me directly using the website contact form, or by emailing me at jesse@thirdpartyninjas.com

Thanks!

Final Flight of the Perseus May 14, 2014

Posted by Jesse in : Perseus , add a comment

Guess what we did?

No, not that. We made a new game!

Final Flight of the Perseus is a wave-based space shooter similar to Galaga or Space Invaders, with beautiful graphics, intuitive touch controls, insidious boss fights, and an awesome upgradable ship.

Coming soon to an iOS device near you! (Really! It’s in the Apple review system now.)

The best part? It’s free!

For more screenshots, check out the new Perseus page.

Presskit available here.

Glitch Assets November 25, 2013

Posted by Jesse in : Game Development , add a comment

Recently I learned about a really cool looking game that was terminated last year. Rather than letting their amazing work rot on a server somewhere, the creators have released it into the public domain with the simple instruction of “Go and make beautiful things.”

And it shouldn’t be hard to make something beautiful. Take a look at this:glitch_creepy

These guys did some awesome work, and I’m sad that I never saw any of it before the game was cancelled. The assets were released in flash format, which isn’t something that I can use, so I converted them all to png files, and uploaded the results to github. They wouldn’t all fit into one repository, so there’s two:

Glitch Assets
Glitch Assets – Inhabitants

I claim no credit in the creation of these assets, and they’re released into the public domain just like the originals.

So, what are you waiting for? Go and make beautiful things.

Wisdom from Rami Ismail May 8, 2013

Posted by Jesse in : Game Development , 1 comment so far

Rami Ismail (of Vlambeer) wrote some really awesome tweets today. I’m copying them here because I think it is really valuable advice.

From @tha_rami on twitter:

I get so tired when someone emails me about tips for a gaming startup. Start a studio or a company or an actual thing that is real, damnit.

You’re making a game? Good, you’re a developer. Trying to sell them to stay afloat? Well, now you’re a company. What the hell is a startup?

Here’s a venture plan: ‘go make games as good as you can possibly make them and let people know that the game exists’.

Don’t want to contact press because you don’t want to shoot blind? Make a presskit (/w dopresskit.com?) and screw it, shoot blind.

Don’t want to reach out to Steam, Sony, Nintendo, iOS, Microsoft, Android because you’re working on your first game? E-mail them anyway.

Don’t want to reach out to your personal inspiration and ask for feedback because you’re just starting out? Do it regardless.

Don’t feel like going to that developers conference four hours away because you don’t have anything to show? Get a day off and go there.

Don’t want to show your game to friends and other developers because it’s not quite good enough yet? Show them your game.

Sincerely love the style of a certain artist or musician or the work of a coder or designer? Let them know.

Don’t know what to do, need help, a specific contact? E-mail someone who does know. Hell, call them for all I care.

In the end, what matters is what you *do*. If you don’t do something, whatever your hopes or motivations or ideas are will remain just that.

Oh, and do -not- make assumptions about how things work or how & why things are. You’re probably wrong so actually go and find out.

Spine March 7, 2013

Posted by Jesse in : Game Development , add a comment

Longtime readers of the blog will know that I’m a big fan of skeletal animation. I wrote Demina because I couldn’t find an existing software package that would let me create animations and export them to a format that would let me get them easily into my games. Better software has finally arrived, and Demina is officially retired. Happy Piggy! will be the last game we ever use it for.

That’s because now Spine is available. It’s almost embarrassing for me to compare Demina and Spine, because they support every single feature I had, and quite a few I hadn’t even considered that I’m already really fond of. Even better, the guys at Esoteric Software have already started releasing code to help people load and render animations in their games.

It took me a couple of days, but I’ve got animations up and running on iOS devices, and I don’t have to keep jumping back to a Windows machine to edit them. (Because Demina only ran on Windows.) I’ve even got transitions working, have a look:

Happy Piggy! February 23, 2013

Posted by Jesse in : Happy Piggy,iOS , add a comment

Surprise! We’ve made a new game. This time we’ve tried our hands at making a game for kids. It’s called Happy Piggy!

Happy Piggy! is an educational spelling game for kids, ages 2-5, for iOS devices. Words drop from the top, and the player taps the piggy carrying the next letter to spell the word. If they pick the wrong piggy, he makes an amusing oink and runs off the screen.

My daughter Ellie is three years old now, and she loves playing games on my iPhone and iPad. Unfortunately, I’ve noticed a regular problem with some of the games I’ve bought for her. If I let her play by herself for a few minutes, she’ll bring it back to me really upset because she’s stuck in a complicated menu or she’s hit a screen selling downloadable content, and ended up back at the App Store trying to enter a password. Some of the games are really pushy with their upselling, even games that aren’t initially free to play.

For Happy Piggy! I made the decision to avoid all of that. The game is 99 cents up front, and there are no in-app purchases available. Some friends have suggested that we might do well financially to add DLC for more word packs (harder words, proper nouns, alternate languages, etc.) but I don’t think it’s a good idea. I’ll gladly pass on the opportunity to make a little money to save kids the frustration. For that same reason I didn’t even include a Third Party Ninjas splash screen or a credits screen.

We’ll be uploading it to Apple for review very soon.

TexturePacker XNA Content Pipeline Extension August 2, 2012

Posted by Jesse in : Game Development , 19 comments

TexturePacker is pretty awesome.

The next St. Louis game jam will take place this coming weekend, so I’ve been going through and cleaning up some of my base code. I haven’t seen an XNA content pipeline loader for TexturePacker atlases, so I decided to share mine.

ThirdPartyNinjas.XnaUtility.1.0.zip

There’s a simple test included, and it shows how to load a texture atlas, look up a texture in the atlas, and render that texture using a few different origin options.

If you have trimming turned on, using the origin options can make things easier. There are four main options:

  1. TextureRegion.OriginTopLeft. This will draw/rotate around the original (pre-trimmed) top-left.
  2. TextureRegion.OriginBottomRight. The original bottom-right.
  3. TextureRegion.Center. The original center.
  4. Calculate your own origin using Width and Height in TextureRegion.Bounds.

A few things to keep in mind:

  1. While the loader supports rotated sprites if you choose that option in TexturePacker, the XNA SpriteBatch doesn’t easily support UV rotations so you’ll need to do extra work.
  2. By default, TexturePacker will name the texture and atlas with the same base filename. (i.e. foo.png and foo.xml) You’ll need to change that, or change the asset name of one of them to prevent a filename collision at build time.
  3. The content importer supports either the JSON-Array or Generic XML export options in TexturePacker.
  4. I didn’t put any sort of license notice in the source, but feel free to use it however you want. Not attribution or acknowledgement required. (If you need a specific license or info, let me know.)

Yell if you have any problems.

Third Party Ninjas Developer Vlog #3 April 24, 2012

Posted by Jesse in : Game Jam,Vlog , add a comment

I think Monday has officially become my day for recording the vlogs. It’s a nice motivator to keep working, because I want to have something to show off. Since I spent the entire weekend at the game jam, I don’t have anything new to show on the platformer. Instead I show the jam game we created, and the tools I used for my work on it.

Tools:
Demina
Gleed2D – Old versionNew version
Texture Packer Pro

St. Louis game jam (April 2012 Edition) April 23, 2012

Posted by Jesse in : Game Jam , add a comment

This weekend was another adventure at a St. Louis game jam. I last did a jam back in July of 2011, and I was really eager to participate since I missed the Global Game Jam earlier this year. I’d planned to work with a really small team and do something super simple, so that I could use the experience as a chance to play around with a new game development tool. (Something like Game Salad or Stencyl.) But it was not to be.

This year, my wife Mollie wanted to participate, but we couldn’t both attend, as there’s no way we could find someone to take care of our daughter for an entire weekend. So instead we decided to have her work from home, while I worked with a musician at the event. But when teams started forming, we somehow found ourselves with a second artist and two extra programmers. Whoops! Here’s a photo of the team:


From left to right: Ray Phillips (Programming, Level Design, Menu and Credits), Mollie Chounard (Background Art), Jesse Chounard (Programming, Character Animation), Jake Hilbolt (Music, Sound Effects), and Tim Snyder (Character Art). Not pictured is Ethan Hall (Programming).

The theme was “Light Justice.” It’s not what we initially planned during brainstorming, but we ended up with a game about a personified light bulb acting as a sheriff in the wild west, fighting a horde of bandit moths. I spent a huge portion of my time animating the characters that Tim drew and colored, and a bit of time organizing the files sent in by Mollie. Not as much time programming, but it’s okay, because Ray really picked up my slack. Putting Mollie on speaker phone to talk to the team worked out pretty well, and I think we functioned together nicely. I’m super thrilled with how the game looks! Mollie and Tim really knocked it out of the park.

In my opinion this was a far more successful jam for me than that last one. Before we started working, we identified specifically what we wanted to accomplish over the weekend, and we did it. Of course, we kept saying “Wouldn’t it be cool if…” but those suggestions were only to be added if we had extra time. (And some of those made it in. Like the hero’s light bulb shattering during his death animation.)

It’s likely that I’ll talk more about the jam in my vlog this week, so if you’re curious about anything in particular, please let me know.

Downloads:
Binaries (20 MB) requires XNA 4 Runtime
Source Code and Assets (21 MB)