I wasted a great opportunity when my game received 191k views on Youtube in its first 10 days. Here are my lessons learned and what I would do differently.
Only 10 days ago, I uploaded my game, Lord of the Aisle, for The Arbitrary Gamejam 17. Already, there have been 39 Youtuber videos made of the game, ~191k views of the videos, mostly playing the old glitchy version of the game that was initially released for the jam’s deadline. There have been at least ~10k downloads/plays of the game, across multiple sites, some of which I did not even know were hosting downloads of my game.
Usually, my game jam entries only get 2-4 Youtubers, with a handful of views, and less than 1k plays/downloads within the first 10 days, despite them being around the same quality as this game. You can imagine my surprise by the number of videos, views, and downloads this time around.
I must admit that I have blown a great opportunity and capitalized very poorly on the publicity of the game, but learned quite a few valuable lessons.
1. Once you upload a free game, it’s out of your control.
Even if you only upload your game to a single site, it may grow legs and find its way to other sites. It doesn’t matter that it is a free game in a tiny game jam.
Even though Gamejolt.com was the only place I uploaded Lord of the Aisle, somehow a dozen other sites are now hosting the game (old versions of it) too! They never contacted me, nor credited me, nor got my permission, and I would not have known if I had not done a Google search or watched the Youtube videos. It’s a free game for a game jam. I did not expect to make any money on it. But it irks me that these other sites are making ad revenue off of my game, and I’m not getting a penny of it. Some of the other sites must have ripped the Unity Webplayer version of the game from Gamejolt. I didn’t realize that they could or would do that. Now I know.
The problem is that I have no control over the game’s description, the game’s version, or way to communicate with the game’s audience on any of those other sites. If I wanted to make a commercial version of the game (and I intend to), I can’t really reach out to the audience on those other sites. I can’t even post a comment to some of these other sites. Some of the other sites are in other languages.
Lesson learned: For future games, I’m definitely going to put an in-game link to the real site within the game, and perhaps add a simple feature that lets the player know if this is the latest version of the game, where to get it from, and displays a message from a remote online source that I control.
2. Old buggy versions will live around forever.
The initial version I submitted for the game jam had minimal testing due to time. I had no time for performance optimization or even performance profiling. From the early Youtube videos that came after the game was released, I saw that the frame rate becomes very low during later stages in the game on less powerful computers.
Very soon after, I uploaded updated versions onto Gamejolt, fixing the bug, but it was already too late. All of the other sites still have the old glitchy version of the game, and I have no way of updating those. And most of the Youtubers recorded using the old glitchy version. How embarrassing!
Lesson learned: Make sure you have some way to communicate updates with the audience of your game, which may be hosted/downloadable from unknown sites out of your control. Do this right from the start.
3. Most players of free indie computer games probably have slow crappy computers. Target them.
(This is purely anecdotal/conjecture – if you know of an article with stats about the computers of indie gamers, please let me know!)
Indie game developers often have a perception bias when it comes to computers. Most indie game developers are likely to be enthusiast gamers, who are more likely to have higher end computers, which are capable of playing a multitude of games (including intensive AAA games). They may commonly associate with other enthusiast gamers and developers who have high end computers. And so they may become less aware of the multitude of casual indie gamers/youtubers who have low-end budget computers.
On a high end machine (like many game developers probably have), a game issue causing a 50% frame rate drop from 120 frames per second (FPS) to 60 FPS will not even be noticible unless you’re specifically checking for it or doing performance benchmarks. (There’s usually no time to do that in a game jam, of course!) But on a low end machine, this drop could be a disastrous showstopper.
Lesson learned: If you only have high end machines to test with (even if it was a high end machine from a couple of years ago), at least do a run through with a reliable FPS meter or other metric even if the game performs perfectly fine on your machine. Would the game still be playable at 1/4 of the performance? What about 1/8th of the lowest framerate?
Also, if you develop in Unity, keep in mind that the FPS meter in the built-in stats display is quite inaccurate! It was displaying the frame rate as ~180-220 FPS when the real frame rate (# of times Update was called) was only ~50-80 FPS. I’d recommend Frame Rate Counter (free on the Unity Asset Store) or writing your own simple FPS meter.
4. A game is initially judged by its cover. Spend enough time on the cover.
Spending extra time to put an interesting character or interesting artwork in the thumbnail/title is probably worth the effort.
Let’s say you made a great game. But the game has a poor thumbnail/title image. It will likely be at a disadvantage at attracting players versus a crappy game with a great cover. When visitors see the game’s thumbnail in a listing among other games with their thumbnails, the thumbnail may have only milliseconds to capture the visitor’s attention before they move down the list.
I’ve made quite a few other free games for game jams that are on par with the gameplay/artwork of Lord of the Aisle, but in the past, I always left the thumbnail/title image to be created hastily in just the last few minutes before the submission deadline. So usually, the thumbnails I made in my old games are just text on a background pattern or vague screenshot – they never really told you much about the game itself from a glance.
However, with Lord of the Aisle, I spent a long time creating an extra scene in Unity, specifically for the thumbnail/title. It includes the main character and setting of the game in the backdrop. I know it doesn’t show, but I also spent an embarrassingly large amount of time experimenting with fonts/typography. It still wasn’t quite there yet, but apparently it was enough, and far more effort than the titles I’ve initially made for my other free games for game jams. I guess it paid off:
The themes of the game jam were: “Breeder”, “Neutralization”, “Criminal”, and “Surprise!”
The bonus rule was to add a “Did you know…” feature to the game.
I made the game using Unity 4.6 Beta (Pro) to test out some of the new features, Blender for 3D modeling and some simple texture painting.
Most of these are pretty technical except for the last ones. If you know of a better way to do some of these things, or have your own lessons learned about the items, please share. Note that I didn’t necessarily do things the “right” way or even the best way, just the most expedient way during a game jam.
1. Linear Lighting Model:
After watching the videos from Unite 2014 about physically based shading (here and here), and seeing how they use a linear lighting model (rather than gamma), and HDR (high dynamic range), I’ve tried using a linear lighting model with HDR, bloom, tonemapping (AdaptiveReinhardAutoWhite), color correction. With this setup, you get a lot more control via effects on the camera, instead of just the in-scene lights and render settings. It allows smoother transitions between lit and dark areas. I didn’t notice that much else besides for the haziness around the brighter areas due to the bloom.
2. New UI:
Unity 4.6 Beta’s new UI are a lot easier to work with than the old UI which I have often complained about. The new RectTransform component on them makes it a snap to position UI elements or make UI elements stretch according to the screen. For example the Love Meter bar automatically resizes based on the game screen’s width so that it’s right side is at 50% of the width, but the left side of the bar is a fixed position from the left (See first image in this post)
Here was a super quick last-minute title screen made using the new UI. I was planning to add buttons to it that allowed you to jump to a level, but didn’t have enough time:
Not the best layout, but given only few minutes, and that the background is animated, it will pass. I think I took 5x more time picking out the font.
3. More Shader fun:
The cross-striping on the ground and mushrooms is made using a custom written shader, as opposed to the ground in Boobstorm (my game from the previous gamejam) which was just a texture. Custom writing a shader allowed me to keep the stripes sharp at any resolution and at any zoom level since it is procedural. The stripes are based on the position in the world. This also allowed me to get away with not doing UV maps/skinning for the stripped elements, saving some valuable time. It also allows elements to be resized or stretched without the texture being stretched:
This was my first time trying to do a direction indicator UI 2D, pointing to the direction of an objective, and hiding itself when the objective is onscreen. See the little black arrow on the left:
Here’s the pseudocode:
– Project the 3D position of the objective to screen space.
– Calculate the acceptable portions of screen space that the arrow will be visible in (margins from the sides of the screen, taking the radius of the directional arrow sprite into account, assuming a central origin to the directional arrow sprite)
– Check whether the objective’s screen space location is inside that acceptable portion
– If not in acceptable portion, disable the arrow.
– If in acceptable portion, clamp the arrow’s position to the acceptable portion of the screen, and rotate it to point away from the center of the screen, and enable it.
I had tried using a second camera looking at the objective (your face in the game) and using that as the arrow. It was cool, but didn’t do the job as well as just a plain arrow. I should have made the arrow more visible.
5. Coroutines, Pausing, and Cutscenes:
I had previously avoided using coroutines for many things because I was afraid that they wouldn’t stop if the game was paused. This time around, I learned that Unity coroutines behave according to Time, and if you set Time.timeScale to 0, it will pause the coroutines as well! This allowed me to come up with a quick cutscene framework to easily script and coordinate different actions (camera movement, fade-in fade-out, text display) in the intro and tutorial without having to fuss around with separate animations.
For example, the intro cutscene is scripted with just a few lines using the framework:
Also, scheduled coroutines can be terminated using the StopAllCoroutines() method, allowing for an easy way to skip a cutscene. Of course, at the beginning of the next cutscene, set the state to what it would be after the first cutscene, just in case it was skipped.
I’m planning on perhaps generalizing the cutscene scripting framework for reuse in future projects and to share on the asset store. Right now it is just messy code I cobbled up during the game jam.
6. Ugh happened with Unity beta:
[Update: I figured out that the Tonemapping (AdaptiveReinhardAutoWhite) image effect does not work well with the Vignetting image effect on wife’s machine. This is not specific to just Unity 4.6 Beta, it also happens with Unity 4.5. When the camera has both of these, it causes the colors to go super dark.]
Somehow the game did not work right on my wife’s computer. It worked right on every other computer. I made this game all cutesy since my wife likes cutesy games! The lighting somehow ended up super dark on her computer (as if there were no lights or ambient lights). I wondered if it was because of the Linear Lighting Model (see point 2).
So after the jam, I went through the trouble of making a branch of the game to be the normal gamma lighting model and retweaked all the lighting, but nope, it still looked the same, lightless, regardless of web build or native build.
She’s got a Mid-2010 iMac, running Mac OS X 10.9.4 with an ATI Radeon HD 5750 1GB. It works fine when booted up in Windows 7 mode though.
I’ll chaulk it up as a Unity 4.6 BETA issue with Mac OS X since my past Unity 4.5 stuff all worked fine on her computer.
7. Tutorial and explicit gamejam mention:
With my last game jam game, the players mostly seemed to miss that the game was part of a game jam with really wierd themes/rules (and I made a game too tailored for those themes/rules). They also missed out on the instructions too. This time, I built in a tutorial, and based on the feedback comments and youtube videos (by patient38 and by DeathandGrim2), it worked.
Unfortunately still, our poor sleep-deprived host (@SnoutUp, thank you for hosting!) missed the statement that is boldly on the first line of the Gamejolt page’s description: that the game was a non-competition entry , and he declared it the winner initially :) Next time, I’ll make sure to put a statement that it is a non-compo entry within the game itself so that no one will miss it. I’m just not fond of having to add so much extra text to the game – the title screen is getting crowded. The real winner was BroodStop, by @ThumbsBlue, whose game I probably spent more time playing (and still haven’t beat, but it is on my bucket list) than I played my own.
8. Last Minute:
Level 2 and 3 were built in the last 2 hours of the gamejam. I had a choice of building them or just polishing the existing intro, tutorial, and Level 1. I’m sure glad I added level 2 and 3, since they demonstrate some different possibilities (obstacles, and moving faces) for future levels. I literally finished submitting the game with less than a minute left. So the lesson learned is to go for the gusto. It’s a game jam after all – the place to have fun and push yourself without much consequence of failure. If not here then where?
It takes about a whole entire week after a game jam for me to get back into doing my normal gamedev. This may be due to my lack of sleep from the jam, burnout?, marketing of the gamejam game, playing the other gamejam games, writing a blog post, or just the resting on laurels and procrastinating. It shouldn’t be like this. I should be able to use the momentum from the gamejam and spring right back into my normal gamedev. Dunno.
All in all, I had a ton of fun, and definitely honed my gamedev abilities in the frenzy that was Love Bandit. I’m excited for The Arbitrary Gamejam 15 in October 2014. I hope you to see more of you join in!