App Pricing Follow-up

I received some really helpful feedback on my previous post, where I wondered aloud about the best way to monetize Corgi Corral. As a result, I have a new idea of what I’d like to do.

Basically, I’d like to include some sort of tip jar with two or three price tiers. I would offer 3 levels of the game for free, and any tip given would automatically unlock the rest and also give the player the option to play as a tri-colored corgi:

Tri-color Corgi

Here’s the tricky part: Consumable in-app purchases cannot be restored. I was curious as to how (Underscore) David Smith got around this problem with his popular fitness app Pedometer++. Pedometer++ features a 3-tiered tip jar that will disable advertisements at any tier. The tips themselves are consumable, meaning you can tip David multiple times for his work on the app. To test his system, I tipped him $1, which removed the ads. I then deleted and re-downloaded Pedometer++ and, as I thought, the ads returned without an option to restore my purchase.

That’s not a big deal for a small inconvenience like banner advertisements (and honestly, I’ll probably just tip David again because he’s awesome). However, in my case, if players pay to unlock all the levels they should really be able to restore that functionality on a new or different device.

This brings me around to a system that more closely resembles what Humble Bundle does: “Pay what you like.” In other words, you choose a one-time purchase price from 3 options, based on…well, the goodness of your heart I guess? It’s an idea that I’ve never seen implemented before in an iOS game and one that I can afford to try.

Setting up in-app purchases sounds like an enormous headache, but I’m actually more concerned about localization and how to word everything. I’m stuck on two things:

  1. What should I name the 3 price tiers? Something goofy like Corgi Fan/Corgi Lover/Corgi Wizard or more straightforward like Bronze/Silver/Gold Supporter? (or maybe something involving the word “thanks”?)
  2. What should the user-facing explanation be? I was thinking something like, “If you’re enjoying Corgi Corral, your support would be greatly appreciated. Purchasing any tier will unlock the full game.” Does that make sense?

And once I figure those two things out…do I dare try to do the translation myself? ?

Anyway, I suppose I’m getting ahead of myself. I have so much more work to do on just finishing all of the art assets that I won’t need to make these decisions for several months, probably!

App Pricing: An Internal Monologue

In case you’re new to my blog: I’m currently in the process of making my first iOS game. It’s short, casual, and is clearly made by a beginner (is that a polite-enough way to say “amateurish?”). I’m hoping to release it sometime this summer and have been thinking a lot about pricing models for iOS games. What follows are some of my loosely-organized thoughts on that subject.

Customer Expectations

People who like to play short, casual games tend to expect them to be ad-supported, free-to-play, or just plain free. However, the developers that I follow, respect, and want to emulate, tend to express disdain toward those pricing models and prefer to promote games that are paid-up-front. Because of this, I feel torn between a niche group of thoughtful, intelligent iOS gamers whose respect I would love to earn, and the general public who couldn’t care less about the indie games market and just wants free games. And the thing is, I’m just a beginner, which brings me to…

Who am I?

Nobody knows who the heck I am. How could they? I’m not known for anything because I haven’t published anything. I have no fanbase, no credibility, and no experience. If I make my game free with ads and localize it as much as possible, there’s a good chance that it could get quite a few downloads. As someone currently wallowing in obscurity, one of my goals is for as many people to play my game as possible. And if people don’t like it, that’s fine—I can learn from it and move on.

However, if I price it at $0.99, even with the best marketing in the world, there’s a good chance that no one will download it. And if no one downloads it, I’ll never know whether or not they like it. I won’t know how to improve. Most of all—I’ll probably be discouraged from making a second game.

Determining Value

From what I understand, if you undervalue your work, no one is going to take you seriously and if you overvalue your work…well, no one is going to take you seriously then either. Online publications are severely criticized for paying very little (sometimes nothing) to their contributors in exchange for “exposure.” I mostly agree with the criticism; however, I also wonder: is there a point where gaining exposure is worth giving away your work for free? What if that work is your first effort? What’s the best or “proper” way to get noticed? Is there value in just “getting something out there” into the world, even if it’s not the most polished thing ever?

Ads are Icky

Advertisements make me feel gross. However, I’d like to make at least $50 off of this game, so I guess I can’t afford to be principled? Gosh that sounds horrible. I’m trying to keep it as least-scummy as possible: banner-ads only (no interstitials), never during gameplay, with an option to pay to remove ads. Honestly, it still makes my skin crawl. And I’m also concerned that it may push away one of my target markets: young children. Games with ads are bad for young kids because they touch the ads accidentally and get taken out of the game and don’t understand what happened. I guess I would just encourage parents to pay to remove the ads? That feels kind of scummy too. Or maybe it’s just business. ¯_(ツ)_/¯

Changing Models

It seems like it would be difficult to switch my app from being ad-supported to paid-up-front if I changed my mind down the road (after release). Will the people who paid to remove ads be angry that all of those who didn’t now suddenly have an ad-free experience? I guess the only example I have to go by is that of Overcast. I paid for Overcast’s extra features, which are now free for everyone, and I’m not mad about it. I mean, I suppose someone would be unhappy but maybe it wouldn’t be so bad?

Anyway, the article that got me thinking about all of this is “Indie Developers Have Always Needed to Treat Their Businesses Like Businesses” which is a very good, concise read.

tl;dr: I absolutely believe that indie studios should charge good money for their games and apps. I’m less sure of what solo, hobbyist devs like me should do, especially with our first games…the ones that we’ll look back on someday and think “wow, look how far I’ve come!”

Link

Swift Enums

Casey Liss on Swift Enums

Casey is learning Swift for his new job, and as a fellow beginner I found his explanation and examples of Swift enums very helpful. I wasn’t even aware that enums could have associated values until a few weeks ago…it definitely made me want to rewrite some of my code!

Status

Quick progress update: I’ve been treating Corgi Corral as sort of a SpriteKit/GameplayKit sandbox, as I really want to learn about everything these frameworks have to offer. Lately I’ve been exploring particle emitters, which means my winter scene now has falling snow and a small campfire! Next up: creating some more custom menu icons to reduce the amount of text in the game.

Using SpriteKit’s Scene Editor for Simple Animations

When I began working on Corgi Corral, I knew I wanted to keep the game as simple code-wise as humanly possible. I wanted there to be one “LevelScene.swift” file that would handle the game logic for all of the levels in the game, and I didn’t want to clutter up that file with level-specific code for animating background/decorative sprites. In fact, I didn’t really want to write that code anywhere.

Enter the SpriteKit scene editor.

I know many developers prefer positioning things in code over using tools like Storyboards or the level/scene editor, but I personally love the ease of drag-and-drop positioning and the ability to preview what things will look like without building and running the app.

This morning, I decided to create and animate some twinkling lights on the fence that encloses the sheep pen. Here’s the end result (and yes, the sheep are wearing scarves):

Snow scene

I could have written something like this to animate the fence sprites:

let textures = [SKTexture(imageNamed:"twinkle1"), SKTexture(imageNamed:"twinkle2"), SKTexture(imageNamed:"twinkle3")]
let twinkleAction = SKAction.animateWithTextures(textures, timePerFrame: 1.0)
fence.runAction(SKAction.repeatActionForever(twinkleAction))

Instead, I decided to make the fence sprites SKReferenceNodes (in case I want to use them in another level) and animate them using the scene editor. To do that, I created an .sks file that matched the dimensions of the fence and placed the fence inside it. Next, I opened the animation timeline at the bottom of the editor and dragged in an “AnimateWithTextures” action from the object library on the lower right.

SpriteKit animation editor

After that, all I had to do was tweak the parameters in the attributes inspector on the right. I set the duration for 3 seconds and dragged my textures from the media library to the “textures” box in the attributes inspector. Finally, I set the animation to loop forever. When I added added the SKReferenceNodes to my scene, they animated automatically. Piece of cake!

Tutorial Request: SKFieldNode

Attn: Lovely SpriteKit experts who write tutorials

I’ve been looking for a decent tutorial covering SKFieldNodes—a neat, recent (I think?) addition to SpriteKit that includes things like magnetic fields and radial gravity fields. Unfortunately, my searches have come up completely dry, and Apple’s documentation hasn’t been particularly helpful.

What I want to do is this: create a field node with a region matching the size of an SKSpriteNode’s texture. When physics bodies make contact with the texture/region, they’ll spin briefly out of control, much like hitting a banana in Mario Kart. I think I can do this using a small vortex field, but I’m not quite sure how and wish I understood all the various properties better.

So anyway, I’m hoping some kind soul will either write up a tutorial or create a demo app that shows each type of field in a separate scene along with physics bodies to interact with. Please?

In the meantime, if I figure it out, I’ll let you know!

Finding My App’s Memory Leak

My plan was to write a quick post explaining how I figured out the source of my app’s memory leak; however, I’ve run into two problems: 1) I think my app actually has a few other minor leaks, so I didn’t fix it completely and 2) the “Allocations” instrument in the latest Xcode beta is absolutely refusing to work now, so I can’t recreate what I saw the other day and take screenshots. As soon as I’m done writing this, I’m going to file a radar because I was able to reproduce the crash using Apple’s own sample game, DemoBots.

Anyway, there are still a couple things I can show you. First, I ran Corgi Corral on my iPhone 6S and played the same level twice. In between levels, the app transitions to another view controller that gives a summary of your score. As you can see, the second time I played the level the app used more memory than before. Each time I hit “retry,” it increased ever so slightly.

Debug navigator

If I hit the “Profile in Instruments” button during gameplay, my app would immediately crash (which is why I’m filing a radar). However, for awhile I was able to get the “Allocations” tool to collect data on the score summary screen. Now, I can only get it to run on the main menu without crashing.

Transfer to Allocations

For what it’s worth, it doesn’t matter whether I select “transfer” or “restart” — the app still crashes, except on the main menu, where I can at least show you what the memory-analyzing tool looks like when it’s running:

Allocations and leaks

See those little green checkmarks next to “Leak Checks”? When I reached my score summary screen, those were showing up as red icons with an “x” in the middle. When I clicked the red icon, it showed me a list of objects that weren’t being deallocated. The list included many instances of “GKAgent2D,” “GKGoal,” “GKBehavior,” “GKComponentSystem”—enough instances to cover the number of sheep in the level. Evidently, even though the SKSpriteNodes were being removed from the scene (and their agents from the scene’s agent system) when the sheep entered the pen, their GameplayKit agents were refusing to die.

I’m hoping that the next beta of Xcode 7.3 will fix my profiling problem, because I’ve become really interested in learning how to analyze my game’s performance! I’m sure there are many more problems to be found and optimizations to be made. For now, I’m off to file a bug report!

Link

Twitter’s Struggles

Why do normal people struggle with Twitter?

Good summary at The Guardian of how confusing Twitter can be for many users.

I’ve noticed a few more of my real life friends coming back to Twitter and getting value out of it lately. Some of them participate in weekly Twitter chats in their professional communities (mostly education), and others are heavily involved in television fandoms. Many people don’t know that such groups/activities exist, however, so hopefully Twitter can find some ways to make that onboarding process easier so new users can find relevant content more quickly.

One quote that stuck out to me from the article was that after surveying “dozens” of Twitter users, the Guardian found that “[s]ome wanted more attention for their 140-character missives. Some dreaded it.”

I tend to feel an odd mixture of hopefulness and dread when I post on Twitter. I’m hopeful that I’ll make some connections with people, that I’ll come off as genuine and human, and that others will be encouraged by my game developing journey. I dread that something I say will be controversial enough to attract a mob.

Going back to what I said about Slack and Twitter in my previous post: I would guess that many of the people who have stepped away from Twitter dealt with the same dilemma, and decided that the risks outweighed the benefits. Why sacrifice happiness and experience increased anxiety and stress when Slack offers a perfectly fun and safe space to interact with your friends? I don’t blame them at all.

I utterly failed to make this point in my last post, but if all of the kind, thoughtful, reasonable people are spending less time on Twitter (for perfectly valid reasons), it makes Twitter a sad place for everyone, not just me. It also lessens the quality of public discussion. And that’s Twitter’s problem to solve, ultimately, not the people who left.

I suppose it is selfish to wish people would come back to Twitter. And I am perfectly willing to try to find community elsewhere…the question is, where? I have a Slack account, but I’m never going to be a part of the “in crowd” and that’s totally fine. I haven’t been able to find much of an iOS developer community on Facebook.

So I don’t know. I’ll keep poking around. Maybe Peach is where it’s at. ;)

Slack is Making My Twitter Sad

Yesterday I read about Stephen Fry quitting Twitter and ended up tweeting the following:

It bums me out that many of the people I follow on Twitter are now self-admittedly spending most of their time in private Slack channels.

I wanted to expound a little bit on that, because I want to make it clear that I’m not blaming anyone for anything. 

I follow a lot of iOS developers, tech journalists, and podcast hosts on Twitter. Lately, I’ve sensed a change in how many of them use the service (and several of them have mentioned it themselves). What used to be a steady stream of jokes, opinions, and silly banter between friends has slowed to a trickle of safe, carefully edited statements.

And I get it, I really do. Twitter is a toxic environment, especially for minorities and people with lots of followers. As your follower, I know I’m not entitled to your wit or opinions, or to know what’s going on in your private life. You’re a human being, and you have every right to step away from the raging dumpster fire of humanity that is Twitter.

It’s just…I miss you! I miss reading what you have to say. I miss feeling vaguely part of all your weird in-jokes. I live in the middle of nowhere where there is no developer community and even though I never actually tweet at any of you, “hearting” your tweets gives me a small sense of belonging. I realize that sounds sad, but it’s true.

So by all means, enjoy the private party bus that is Slack. But every once in awhile, consider getting off the bus and letting the rest of us party with you too! :)

Status

Lately I’ve been thinking about how I should get the word out about my game both now and when it’s released. I have my self-hosted devlog, but what else? Should I also post on TIGForums, TouchArcade, and/or SlideDB? Do I need to post more GIFs? I don’t have a dime to spend on marketing, but I’d like to do as much as I can otherwise!

February 15th – Progress Update

Corgi Corral iconYikes, I can’t believe it’s already been nearly two weeks since I’ve done this! I admit that I haven’t spent much time working on the game lately, mostly because I just haven’t felt very good. Besides the ever-increasing pregnancy discomforts, I’ve just been feeling sort of discouraged. However, I’m still determined to push through and release the game—no matter what!

Accomplishments

As you can see, I made an icon for the game along with a main menu screen:

Corgi Corral Menu Screen

The title falls from the top of the screen and does a little “bounce” when the app is first launched. As I was setting up the menu, I realized that if I used less text, it would be easier to localize the app into different languages. I switched “Options” to a little gear icon and “Leaderboards” to a simplified Game Center logo. I also changed the “Tap to Start” text to a tapping finger icon:

Screenshot 2-15-16

After that, I shifted my focus to finding the source of a small memory leak. According to Xcode’s debug panel, every time I restarted a level, the app would use about 1 megabyte more memory than it did the previous time. Eventually, I figured out that the app was holding on to a bunch of GameplayKit-related objects for no apparent reason. Like, all of the GKAgent instances should be owned by the sheep SKSpriteNodes, which should have been wiped out when the scene was set to nil. Instead, the game was holding on to their agents, their agents’ behaviors, and all of the GKGoal objects indefinitely.

Now, whenever the game enters its “Game Over” state, I explicitly remove all the GameplayKit-related objects. I think that fixed the problem…or at least, the Allocations instrument isn’t reporting leaks anymore.

What’s Next

Art, art, and more art! Probably going to work on Level 3 scenery, and maybe figure out how to draw a top-down view of a pig. :-)

That’s all for now…thanks for reading!

Link

Working with Xcode Instruments

What every iOS Developer should be doing with Instruments

I was just saying the other day how I’d never opened the Instruments tool in Xcode and lo and behold—this article popped up.

I started taking a look at Corgi Corral; CPU-usage is predictably high when playing the actual 1-minute game (since the accelerometer is collecting data), but goes right back down to a negligible amount on the menu screens.

When I try to assess memory usage, my app crashes immediately upon hitting the “record” button. I’m guessing this is either an Xcode issue, or I missed an important project setting somewhere. At any rate, I can see memory usage in the Debug Navigator and there’s a tiny increase in memory over time that concerns me, so I’ll be investigating that!

More Quirky Animal Games

A few days ago I wrote about my excitement for the upcoming games Night in the Woods and Home Free. Since then, I thought of a couple more animal-related games that are currently in development that I find appealing:

Petting Pets

Petting Pets screenshot

© 2015 Curiobot Corporation

I am a complete sucker for pet games, and this one couldn’t be more straightforward: it’s a game about petting adorable pets. The art style is colorful and fun, and awhile ago the dev team (@PettingPets) asked their Twitter followers to send in pics of their pets along with their names, so hopefully there’s a pet named “Daisy” somewhere in there! The game will eventually be released for Android and iOS.

Sausage Sports Club

I gotta say that this has been one of the most amusing games to watch as it’s taken shape. Sausage Sports Club is a collection of multiplayer sports games starring sausage-shaped animals (and I’m pretty sure those dogs are corgis). The mariachi music and the hilarious physics get me every time! You can track the development of Sausage Sports Club by following @cjacobwade on Twitter and it looks like a website is forthcoming.

Shepherd Dog

I was browsing devlogs yesterday hoping to be encouraged/inspired and came across someone working on a low poly herding game. Obviously it’s very early in development and that title is likely not final, but it was fun to find someone who’s working on something similar…and yet very different. I’ll definitely be checking in on this project from time to time to see how it’s coming along.