Porker Let’s Play Campaign – Post Mortem

In the wake a half dozen or so key requests on WeaselZone.com which yielded no Let’s Play videos, I decided to do a post-mortem on my advertising campaign to evaluate what went right and what went wrong.

###

It’d been a little over a year since I programmed Porker: The Quest for Tastiness. That little game was never intended to be a serious endeavor, but rather a means to get some experience creating and publishing a game.

All of that changed on on February 12, when I’d noticed a couple of kids had:

  1. Found that obscure little game on GameJolt
  2. Installed it
  3. Played it
  4. Posted it on YouTube

They did this all on their own, without any prompting, incentive or instruction.
I was so inspired and encouraged by their Let’s Play that I decided go ahead and expand the game significantly into a fully-featured game.

It took about 2 months to finish the game, and I was very proud of the result. We started looking at ways to advertise and I’d settled on engaging the YouTube Let’s Players community. After all, that’s where it all began, right? What follows is how I went about it and what I learned from the experience in hopes that this may help another fledgling game developer…

###

The Popularity Paradox

Although I did not coin the term, “Popularity Paradox,” as far as I am aware (as evidenced by the entire 2 minutes of Google Fu I spent looking) I’m the only person who has applied to the term to this context:

…many indie games become popular because they receive a lot of YouTube coverage from Let’s Players, but Let’s Players tend to only review games that are already popular…

Therein lies the rub! While I sent keys to the usual 1M+ subscriber Let’s Players, I doubted any of them would ever see, let alone play my game. My research seemed to indicate that their backlog of Let’s Play games was dictated by their audiences, usually by popular request via Reddit or some other medium.

So instead, I focused on smaller to medium sized channels, who I hoped would be willing to do a fellow small-fry a solid. Here are the numbers…

 

I started with the [now defunct] YouTuber Gaming Megalist, a spreadsheet of over 5,000 YouTubers and their demographic information. As I went through the list, I was able to pre-qualify about 100 or so potential YouTubers, spending about 5 minutes each on their channels to answer the following questions:

  • Do they post frequently (at least once a week)?
  • Do they cover small indie games, or just the ones everyone else is playing?
  • Does their ‘about’ page encourage developers to contact them, or state that they play indie/random/rage games?
  • Do they have an email address?

If I could answer, “Yes!” to all of these questions, they received a..

  1. Personalized message, tailored specifically to them (no mass-mailing)
  2. Game key for Porker to use for a Let’s Play video
  3. Let’s Player’s guide (PDF)

Of those original 100 or so emails sent out, 25 clicked the link to view their key, and of those, 14 claimed their key. Of those, only 3 went on to make Let’s Play videos.

So how do those figures stack up? Well according to Mail Chimp’s Email Marketing Benchmarks*, the Games industry average was a 19.71% open rate, and a 3.19% click through rate.

Since I emailed my recipients by hand, one message at a time, I can’t really say how many of the 100 odd that I emailed a key to actually opened the message, so instead I’m going to consider “key views” to be my open rate and “key claims” to be my click through rate.

Using those metrics, my open rate is 21% higher than the industry average, and my click through rate is nearly 4.5x greater than what I should reasonably expect.

I suppose that a 21% conversion rate (i.e. ~ 1 out of every 5 people who claimed a key made a video). That’s not terrible, but that was result of about 80 hours of work on my part…

I don’t have a full-time PR person, and have no way of distinguishing between people who are serious about exchange services and helping each other grow vs dishonest scammers who just want something for nothing.

Going forward, if I do hand out keys, I will use a service like distribute() to do it.

Changes

“Time may change me, but I can’t trace time.” – David Bowie

About 8 weeks ago, I celebrated my 1 year anniversary in my new role. A week after that, my manager resigned and I was tapped to take his place. Since then, it’s been a whirlwind of changes and new responsibilities.

By all accounts, this is old hat for me, but the demands on my time have increased significantly, becoming greater and greater as I unravel years of mismanagement and willful neglect.

While I’m very happy in my new position, I am busier than ever, and even less inclined to do anything productive when I get home after 10-12+ hours of skull sweat…

Pressure requires a release valve, and lately, my pressures had been relieved by playing games rather than making them. What’s worse is, these games introduced a whole-new set of pressures and demands on my time – so much so that it felt like a second job, albeit one which I wasn’t being paid to do.

###

While playing games can be fun and interesting, that part fades quickly. What keeps me interested is the social interaction; meeting and spending time with new “friends”. What I found was that for the people I was spending a great deal of time with, the opposite was true – they had no interest in camaraderie, just a person to occupy a seat at the table so they could carry on their game.

Maybe it’s the age gap speaking here, and relationships have given way to instant gratification – maybe I found myself surrounded by the “single serving friends” of Chuck Palahniuk’s Fight Club…

So what did I do? I withdrew…

 

Credits: featured image, “Butterflies” by M.C. Escher

Dreams and Doldrums

“…there is no way that writers can be tamed and rendered civilized. Or even cured. In a household with more than one person, of which one is a writer, the only solution known to science is to provide the patient with an isolation room, where he can endure the acute stages in private, and where food can be poked in to him with a stick. Because, if you disturb the patient at such times, he may break into tears or become violent. Or he may not hear you at all… and, if you shake him at this stage, he bites…” – Robert Heinlein

These days, I find myself short on energy. It’s hard to concentrate on programming when my office is in shambles and there is no shortage of housework to be done: Painting, decorating, yard work, hauling off lots of junk left – some of it mine, but the majority belonging to my former house sitters and their extended family – all of it needs to go!

Despite so much to do I find I have little time or energy to do much of anything after a long day of work… Mostly I just sit lay about and watch videos until I fall sleep.

When I sleep, I dream. My unsatiated creativity gives way to restless nights of dreams, urging me to return to my unfinished work. Somehow, distractions always seem to overtake me, and before I know it, a whole day is wasted with nothing to show for it but writers block.

In other news, my code-signing certificate has been renewed despite having a few new hoops to have to jump through.

I need to find inspiration, and I need to organize my office into something conducive for productive work.

Transition

“Use a superior development system than your target to develop your game.”
– John Romero, Early Id Software Programming Principles

One of the nice things about being employed again was the ability to afford a new computer, something I’ve put off as long as I could.

About 5 years ago, I’d purchased a very high-end mobile workstation to take with me overseas so I’d have something to keep myself entertained on the 26+ hour flights to and from the US:

  • Intel Core i7 3630QM @3.2GHz
  • 32GB of DDR3 RAM @ 1600MHz
  • Nvidia GTX 675MX 4GB of VRAM
  • 120GB SSD Primary Drive
  • 1TB Storage Drive

When I came back home, I found it more convenient to develop on my aging desktop machine with ideas of upgrading it when possible:

  • Intel Core i7 2600K @ 3.4GHz
  • 8GB DDR3 @ 1600MHz
  • AMD HD 5770s 2GB VRAM (x2 in Crossfire)
  • 120 GB SSD Primary Drive
  • 80GB SSD Auxiliary Drive
  • 320GB Storage Drive
  • 1 TB Secondary Storage Drive

A couple of months ago, I built myself a new PC that should last me a good 3-4+ years with minor upgrades:

  • Intel Core i7 7700K @ 4.2 GHz
  • 16GB DDR4 @ 3200MHz
  • Nvidia GTX 1080 8GB of VRAM
  • 240GB SSD Primary Drive
  • 2TB Storage Drive

I’ve been very pleased with it so far, and have been slowly reinstalling my development tools. The next step was to copy down my data so that I could pick up where I left off. To facility this, I purchased an inexpensive but well-made USB 3.0 SATA Hard Drive Docking Station.


What was intended to be a simple task, however, turned out to be anything but…The data I needed was spread across 4 different drives, one of which was BitLocker encrypted. The machine itself belonged to me originally, was lent a friend who in-turn savaged it, replacing several of the drives and the OS. On the actual computer, I’d solved this using Windows Libraries, but didn’t have that luxury when reading the raw drives.

So what did I do? I incorporated a handy application called SpaceSniffer to help me work out [visually] where the files I was looking for were.

This application is very similar to WinDirStat, but performs significantly faster. I still have a few more applications to [re]install, but I can get that done tomorrow at some point as it is now 4:13am, and I should think about getting to bed as I have to be up in 3 hours.

Get on with it!!!

Conflicting Priorities

I spent most of last week preparing for a face-to-face interview, pouring over the job description and reviewing every detail so as to be prepared for whatever the interviewer might bring up – this meant putting just about everything else on hold and using every waking moment to study.

The interviewers seemed pleased with me, and I was disappointed to learn that the job descriptions were erroneous; most of what were listed as, “required skills” weren’t required at all! What a waste…

Earlier this week, I received a call back from the recruiter explaining that they elected to go with someone else. In short, a week wasted and nothing to show for it but a heaping helping of disappointment…

###

After about a day of laying about and feeling sorry for myself, I decided that what I really needed was to focus on something productive… the game I’d set aside to study up for the interview was sitting there, 90% done, waiting for me to cross the last mile…

“If you know where you’re going, you can get there very fast.” – Grandmaster Henrik Danielsen

The most time consuming part of making any game is getting a clear picture of what you want to do. This is true for every component, whether it’s creating artwork, making sound effects, writing music or programming.

Of these, artwork is probably the most difficult (for me) and time consuming…  Often times, I may not have a clear mental picture of what I want to do, and haven’t developed a good system for working through ambiguity yet – but once I do break through, things move very quickly!

I’ve accomplished more in two days than I have in the last 2 months, and the end is in sight! All that’s left is just putting in the time I need to spend to get through the last few pieces, a few days more to test, then on to distribution!

With luck, I’ll have a successful YouTube marketing campaign and will sell enough copies to support myself until I finish Beaster’s Dungeon.

Pizza and Diet Coke

You Need Enough Pizza and Diet Coke…

It’s been about three and half weeks since my last update, so I wanted to take a moment and talk about where I am, and where I’d like to be.

As with anything, development is tied to real-world constraints. While it is true that some barriers are self-imposed, others are bound to either personal limitations (your own capacity to learn and develop new skills) or external limitations, mostly financial in nature.

John Carmack once said, “In the information age, the barriers [to entry into programming] just aren’t there. The barriers are self imposed. If you want to set off and go develop some grand new thing, you don’t need millions of dollars of capitalization. You need enough pizza and Diet Coke to stick in your refrigerator, a cheap PC to work on, and the dedication to go through with it. We slept on floors. We waded across rivers.

The sentiment is noble enough; I concede that you don’t need millions of dollars to make something great, just the will the see it through – even if that means sleeping on the floor or wading across rivers…but that isn’t the whole truth, is it?

Who pays for the floor you sleep on? Where do you get the money for your pizza and diet coke? Who pays for the electricity to power your cheap PC? Suppose something breaks – who pays for the replacement?

…and where do you get the cheap PC anyway? Not everyone is morally ambiguous enough to abscond with their employer’s computers to a rented lake house, away from prying eyes to work on their own projects in secret. Lakes flood, and when they do, you may find yourself wading through deep water indeed (and a lawsuit if you aren’t careful).

There is no honor among thieves. That fact is self-evident, but if you aren’t convinced, consider this: half of Id Software’s founding members were fired or forced to resign within the span of 5 years… but that’s all ancient history now.

…I would venture to say that the outlook of a teenager with no student debt or mortgage is very different. It’s a lot easier to just pack and move when all of your belongings fit into the boot of a brown MGB (which is to say, not much).

Then again, I never did like Diet Coke.

Paging Mr. Finagle Sod-Murphy…

About 2.5 weeks ago, we had a severe thunderstorm, losing power for a short while as well as about 4 hours of unsaved work. A few days later, I heard a loud pop near my feet, followed by the smell of burning plastic.

I quickly disconnected the power strip and the issue became immediately clear – the power cable connecting to my PC was to warm to the touch, and 4″ segment in the middle (presumably a short) was fused into a straight, blackened, stiff and brittle mass. This was probably the cheapest (and easiest to replace) component – it could have been the power supply, or worse yet, the motherboard!

A few days later, my dish washer stopped draining and needed to be repaired – I did so and threw out my back in the process – standing and sitting were difficult and painful for about a week or so.

Not long after that, my wife’s vehicle began stalling after she took it in to get the oil changed. I took it in the following day, and stuck around to talk to the shop owners as I had been coming there for about 12 years and had a good relationship with them. He asked about my work situation, and offered to refer me to a guy he knew at a large, local IT provider – more on that later…

…We Gotsta Get Paid!

Last month, over the course of a day or so, I made a small game for a friend. I wanted to explore making a game from start to finish just for the practice of it. It was just the right mixture of cheese, fun and juvenile humor to potentially make it a YouTube Let’s Play sensation.

The game had a start screen, a non-numerical score and a game over screen. I figured, if I could add a few more levels, enemies and secrets, I might be able to sell it for $0.99 on GameJolt. I have a list of hundreds of YouTube Let’s Players I could give a free copy to with the request that they make a video for it. The press might be sufficient to get enough people to buy a copy to keep me a float for another 3-6 months while I work on Beaster’s Dungeon.

While I managed to overcome several programming issues, and add far more so sophisticated features than I initially expected to, what eventually sent my progress grinding to a halt was my own limitations as an artist – my imagination was well beyond my skill and this stifled me.

For the last 3.5 weeks, I’ve been about 10% from finishing the game to my satisfaction, a loss of time I simply could not afford to bare. With bills looming overheard, and my savings coming dangerously close to exhaustion, coupled with the few meaty bitch slaps from Mr. Murphy I described above, it became apparent to me that I can’t weather much more of this. I needed a plan B.

Quit Your Day Job…

In order to quit your day job, you have to have one to begin with…If I go on to finish that last 10% and publish my game and it fails commercially, I’d still have a job to fall back on and bills would continue to get paid.

On the opposite end of the spectrum, the game might be a runaway hit, and I could use the money to put a substantial dent in my mortgage and/or student loans, bringing me one step closer to financial independence.

In either case, I couldn’t wait to see which way the pendulum swung as bills will not wait…

So I got in contact with the guy my car dealer referred me to, and within a week, I was on the phone with a recruiter. Following that call, I was invited to interview in person, which takes place next week. If successful, I could working full-time again as little as 2 weeks later. The pay is below average for the kind of work it is, the hours would be unusually long and there would be no overtime.

The last time I worked was almost a year ago, and so at this point, I’d rather take a step down in rank and pay to get back into a more technical role (the last two jobs I had leaned more toward general management). I could learn a lot, and potentially get a better job somewhere else.

This all a moot point unless I’m actually made an offer, which is not a foregone conclusion. Between now and my face-to-face, I’ve got to spend my time preparing for the interview and boning up on technologies I haven’t worked with in 5 years or more.

Wish me luck!

 

Development Progress Update, Week 4

Busy != Productivity…*

This has been a busy, though not an especially fruitful week in terms of development progress. I got side tracked trying to learn a couple of new techniques I’d need (shaders and surfaces) and I’m continuing to troubleshoot code signing certificate issues…

For the prior, I just stumbled on the fix this afternoon while trying to make a pause function – more on that on a separate post when I have the time/motivation to write it.

On the later, much of what I have encountered keeps coming back to the certificate signing request (.CSR) and private key export (.PFX/.PVK). I’ve been using OpenSSL, which my provider doesn’t seem to support, instead preferring that I use Window’s certificate snap-in.

This would be fine if I were on a domain, but I’m not…Ergo, there’s no certificate enrollment policy as there is no domain controller or active directory service. I had a spare PC sitting around (my wife’s old gaming desktop which had since been replaced by a much nicer gaming laptop), so I decided to plug it in and see if it still ran.

When I did this, I was greeted with a long series of short beeps (power failure) followed by repeated attempts to start itself only to immediately shutdown again. After digging around in the garage, I found a craptastic 500W PSU to replace the relatively nice 700W OCZ Stealth Steam modular PSU that was in it…

This allowed it to boot, and a cursory look around the machine seemed to indicate that it was good working condition otherwise.

Next Steps

Once I get the “server” up and running, setup all the required services and so forth, I should be able to sort out the SSL issue… I feel as though I’m spending way too much time on this, but without it, I’m not only out $140 on something I can’t use, but I’m also unable to distribute “trustworthy” applications.

 

*The prefix “!” means NOT (i.e. ‘!=’ is NOT Equal to)

Development Progress Update, Week 3

Summary

Game prototype is 67% complete!

I finally received verification on my code-signing certificate. While I was able to successfully sign an .exe file using the cert, I’m still getting a SmartScreen warning when running the file.

Further research suggests that I might need an Extended Verification (EV) code signing certificate (which isn’t available from my Certificate Authority (CA)), and/or publish the application on the Windows App Store.

I’ve received assurances from my CA that the certificate I purchased from them should work fine, and that the problem was with my Certificate Signing Request (CSR). Having rekeyed the request at least twice already, I feel sure that I’ve done everything correctly.

The only anomaly at this point is that Publisher is being displayed as the entire Subject string (i.e. state, city, country, organization etc.) rather than just the common name, “V-Toad Games.”

This is a big enough issue to warrant my full attention as a SmartScreen warning could deter potential players from running my games.

Development Progress Update, Week 2

Summary

Game prototype is 65% complete!

I lost a couple of work days due to illness…

I managed to get combination actions working (i.e. Jump+Down to drop down from a one-way platform). I may extend this later to allow look-down (using just the down key) to shift the camera a bit further once I learn how to use the view functions.

With the help of YYG Support, I was able to get the HTML5 module working, more on that later, and look for an update to my previous post.

I coded a virtual D-Pad for use on touch-screen devices, and while it works perfectly, I would need to adjust the resolution for it work on mobile devices.

On the business side, I’ve gotten together the required documentation needed to setup my Code Signing Certificate request submitted, and am awaiting verification.

What I’ve Completed This Week

Coding

  • Wrapped up player movement (combination keys to jump down)
  • Got HTML5 Module working
  • Got Virtual D-Pad (touch screen support) for mobile devices working
  • Got the trap mechanic started, but needs more thought with regard to implementation

Assets

  • N/A

Miscellaneous

  • Setup an account on GameJolt (allows me to publish and sell games both in .EXE and HTML5, hosted on their site)
  • Received an update on my Code Signing Certificate and provided additional documentation
  • Upgraded GMS to v1.9.525

 

What I’m Working on Next Week

Coding

  • Complete trap placement mechanic
    • Spawn cursor corners, spaced to fit any size trap object
    • Spawn/placement sound effects
    • Placement coding with checks to verify place is empty (no stacking/placement inside walls etc.)
  • Begin work on enemy AI

Assets

  • Background textures artwork
  • Scenery/flavor object artwork
  • Continue work on BGM 2, 3 and 4
  • Other SFX as needed

Miscellaneous

  • Follow up on Code Signing Certificate
  • Digitally sign an .EXE file and test it

Development Progress Update, Week 1

Summary

Game prototype is 60% complete!

I’ve begun coding the basic features of game, starting player control. This is the most important piece as the majority of the time spent in-game will be centered on movement and exploration.

I’ve coded it to utilize both Keyboard and Gamepad support (should I elect to port this to Xbox Live, PlayStation 3 & 4). The next piece will be getting the trap mechanic working, followed by Enemy AI (which are my goals for next week).

What I’ve Completed This Week

Coding

  • Basic platform physics (gravity, collision, one-way platforms)
  • Player movement: left-right, variable jump height, drop-down*
    • Keyboard support (WASD, [space])
    • Gamepad support (analog stick and d-pad) – Tested on a Logitech F310
  • Sound Engine:
    • Walking sound effects play and change based on surfaces
    • Landing sound effects play and change based on surfaces hit
    • Sound effects use random variable pitch to break up monotony
  • Basic inventory array
    • Keeps track of what spells you have
    • Allows you to toggle betwen spells

Assets

  • Sound effects and music:
    • Jumping
    • Landing on normal surfaces
    • Landing on wet surfaces
    • Walking on normal surfaces
    • Walking on wet surfaces
    • Collecting currency
    • Collecting resources
    • Collecting spells/secrets
    • Collecting bonus items
    • Detriments
    • Lob
    • Two kinds of projectiles
    • Damage
    • Title screen BGM (Background Music)
    • First level BGM
  • Player sprite animations:
    • movement (left,right)
    • Idle
    • Jumping
    • Falling
  • Resource sprite animations:
    • Arcanum (currency)
    • Iron Nodule (resource)

Miscellaneous

  • Converted all .WAV and .MP3 files to .OGG (faster and smaller)
  • Registered the DBA (fictitious name) of my business with the state
  • Send an inquiry to the SSL provider to request a Code-Signing Certificate (required the business to be registered)
  • Updated the vtoadgames.com website to use SSL
  • Acquired GMS Professional (v1.4)  and the HMTL5 Module**

*I’d like to modify this to use a combination of the Jump button and down, but haven’t gotten that working yet

**It doesn’t work out of the box, and I have no idea what I have to do differently to ensure that my games will work when ported to HTML5. Submitted a support request 5 days ago, awaiting feedback.

What I’m Working on Next Week

Coding

  • Wrap up player movement (combination keys to jump down)
  • Complete trap placement mechanic
    • Movement of the trap ahead of the player
    • Spawn cursor corners, spaced to fit any size trap object
    • Spawn/placement sound effects
    • Placement coding with checks to verify place is empty (no stacking/placement inside walls etc.)
  • Begin work on enemy AI

Assets

  • Background textures artwork
  • Scenery/flavor object artwork
  • Continue work on BGM 2, 3 and 4
  • Other SFX as needed

Miscellaneous

  • Follow up on Code Signing Certificate
  • Follow up on HTML5 export module issues