Let’s try this one more time… I’d like to try doing some microblogging on my site and I’m hoping this 1) posts to Twitter and 2) is excluded from my main RSS feed. I definitely need to find a better way to cross-post to Twitter (right now I’m using WordPress’s “Publicize” tool), so maybe I’ll try IFTTT.
Bored With All The Games
I love listening to the gaming podcast Isometric (if you love video games, you should check it out!). One of the popular refrains on the show is that violence as a primary game mechanic is getting really, really old. I whole-heartedly agree, and have a rather long list of other things that I’m also tired of in games, such as wizards, spells, dudes with swords, dungeons, the mere mention of mana, and the bastardization of any verb to make it sound like “flappy” (i.e. crossy, jumpy, etc.).
I know I just described the entire fantasy RPG genre and pretty much every iOS game, but bear with me.
There’s been an interesting resurgence of point-and-click adventures games lately (which I realize aren’t for everyone). Games like Broken Age and Armikrog are funny, poignant, and visually unique. In a world where everyone and their dog is making 8-bit retro dungeon crawlers, achieving uniqueness shouldn’t be that hard. And yet.
I was scrolling through my RSS feed this morning for the first time in a few days and decided to start with the 140 unread articles from TouchArcade. As I scrolled through the new and upcoming iOS game releases, I was struck by how many of them just looked the same to me. I swear some of them even have the same hooks:
- Battle epic bosses
- Over [insert stupidly high number] challenging levels
- Collect treasure
- Unlock [number] unique [characters, levels, modes, etc.]
- Customize your hero [this usually means “buy new outfits via IAP” and also the hero is probably a dude]
Obviously, there are plenty of games that don’t slavishly follow this formula and for those I am thankful. And I’m not saying that Corgi Corral is some sort of amazing innovation—it’s not. In fact, it’s already been done. But it seems like video games are stuck in an endless cycle of nostalgia, with every new creation paying homage to some beloved childhood experience. There has to be a way to break free of that.
With that said, here are 3 games I’m looking forward to that don’t remind me of anything from the past:
- Night in the Woods. Is NITW a point-and-click adventure or a platformer? The answer is yes, and also, who cares? It features animal people and seems to nail the feeling of living in a small, dying town (which is a pretty common experience, but who makes games about rural communities? nobody, that’s who).
- Home Free. There are games out there where you can play as a dog, but none that are nearly this ambitious. I just hope that the developer digs deep in his heart and decides to add corgis to the game, even though we didn’t meet the short-legged dog stretch goal. ;)
- Wandersong. I just backed this one today, because it looks really interesting and fun. Music-as-a-mechanic is way more appealing to me than just another run-of-the-mill hack-n-slash.
I was about to say “I’d love to see more games like these,” but that’s exactly the problem (everyone copying each other). So I guess I’ll say that I’d like to see even more games that take risks in terms of visuals, story, mechanics, and length. For all of you working on something you think is totally weird: keep up the good work!
Disclaimer: Every night, my husband and I play Call of Duty multiplayer for a couple hours. And you don’t even want to know how many hours I’ve sunk into Guild Wars 2. So it’s not like I’m totally anti-establishment or whatever.
Pug’s Quest
I can’t help but promote the work of other developers making games about vertically-challenged dogs. TouchArcade calls Pug’s Quest a “pixel-powered pug puzzle platformer” and I think that sounds like the best thing ever. Keep an eye on it!
Why It’s Still Hard to Get Started with App Development
Since the announcement of Swift at WWDC in 2014, there has been an explosion of tutorials designed to introduce non-programmers to the world of iOS app and game development. Just take a look at my “Swift Resources” page and you’ll see what I mean (and that’s only a fraction of them!). There are app camps aimed at both kids and adults, projects that can be completed entirely in Swift playgrounds, and more books than you can shake a stick at—yet for beginners, the whole experience can go from rewarding to frustrating rather quickly.
Hello World
The first projects you complete as a total newbie can be super fun and satisfying. They can take you from never having written a line of code in your life to having a working to-do app on your phone that YOU made. That feels awesome! Most tutorials focus on simple apps like checklists and Flappy Bird clones, but that’s to be expected and it helps build confidence, language literacy, and the ability to think like a programmer.
The problem is, most beginners don’t decide to pursue app development because they have a simple idea. Yes, of course everyone has to start somewhere, but there seems to be a need for resources that help bridge between beginner material and intermediate and advanced concepts.
The Internet is Scary…and Expensive
Creating a game or an app that does not rely on Internet connectivity to function may be the best place to start, but it’s not where many people want to finish. If you have an idea for any kind of social app or an app that uses another company’s API, the difficulty curve suddenly gets very, very steep. It also starts to get expensive.
Think about a weather app. A weather app needs to pull weather data down from a service. The best of these services, such as Dark Sky’s public API, aren’t free—or are free only up to a certain point. When you’re a single person paying out of pocket for API access, you pretty much have to charge money for your app (or hope that it doesn’t become popular). But wait: if you charge only once, that may not be enough to cover your costs down the road. So what then? Do you require people to subscribe to your weather app? You can see how pricing can become a problem.
Now think about an app with any kind of social component. Apple’s App Store Review Guidelines rightly include this requirement:
17.5 Apps that include account registration or access a user’s existing account must include a privacy policy or they will be rejected
Ok, but how do you write a privacy policy? After all, you just learned programming; now you have to learn policy writing? Additionally, you have to have a place to store that user account data. Do you operate your own server, or pay to host the data somewhere else? The former requires a LOT more learning (not to mention liability), while the latter has proven to be risky in its own ways (see the shutdown of Parse).
Advanced Concepts
This isn’t to say that there aren’t resources out there for learning about complex things like concurrency, unit testing, debugging, etc. But let me just say that I’ve been working on this for awhile and I still don’t understand the three things I just mentioned. Part of the reason is that many of the tutorials I’ve found assume prior knowledge that I just don’t have. The “Instruments” tool in Xcode? Yeah…I’ve never opened it. Another hard concept is syncing, especially if you want your app to function both online and offline. These are things that most apps and app developers rely on, and yet the path from to-do app to whatever-you’re-dreaming-of is significantly murkier and harder to navigate than the one from non-programmer to “Hello World.”
Reality Check
No, you don’t need a Computer Science degree to program an app. But you might need a Computer Science degree to make the app you want to make. And if not a degree, then perhaps a careful viewing of some of Stanford’s free iTunes courses. Because while a well-written one-page tutorial can teach you how to make your own version of Tetris or Space Invaders, it probably can’t bring you to a full understanding of multi-threading, or server management, or working with Notifications, or what the heck all those weird build settings in Xcode mean. (Note: I still need to follow through on this advice myself!)
So is it possible to be a self-taught app developer and create a complex, Internet-connected app? Of course. But it’s probably going to take longer than you think and when it does: don’t be discouraged. You’re not stupid. Keep asking questions and getting feedback, make and release smaller projects in the meantime, and don’t give up!!
February 2nd – Progress Update
Between baby-related activities and the ridiculous snowstorm that swept through the Midwest last night, I haven’t had a chance to work on Corgi Corral for a few days. However, a lot of things came together rather quickly last week, so I do have some progress to report (no screenshots, though).
Accomplishments
- After the time runs out, the game now displays your score, high score, and the name of the medal you’ve earned (bronze, silver, gold or none). The medal name will eventually be replaced by an image.
- On the Options screen, there is a toggle to turn the sound effects on and off (and it works!).
- iAds are set to appear on menus, but not in-game. I don’t plan to use a backup ad service, so countries that don’t display iAd won’t ever see them, which is fine.
What’s Next
I’m to the point where I can’t stand not having menu art or an app icon…so yeah. Looks like it’s time to close Xcode, open Affinity Designer, and try to make some passable artwork! I’m about as much of an artist as I am a programmer (which is to say, I sit squarely in the “amateur” category), so we’ll see how this goes! Just wait til I get to the music… ;)
Goodbye Blogsy
Blogsy is no longer in the App Store
The news of Facebook shutting down Parse yesterday has understandably taken over the conversation in developer circles; however, I also wanted to point out this sad news. Blogsy was one of the first iPad apps I ever downloaded and although the interface looks super dated now (kinda iOS 6-ish), it was really the only iOS blogging app that could even come close to meeting my needs for WordPress.
We tried to come out with a new version of Blogsy (Blogsy II) which would work with the latest version of iOS. Unfortunately, due to the changes in iOS, Blogsy II would become sluggish and basically unusable after dragging in only a few media items (photos or vidoes).
There is still a need for a quality WordPress blogging app on iOS. In particular, I need one that can upload images to WordPress’s media library (including GIFs, which is currently not possible w/the official app). It needs to support different post formats, allow me to edit HTML, and support code insertion plugins like Crayon Syntax Highlighter. Such an app will probably never exist, but a girl can dream, right?
iTunes Affiliate Kimono
Opening the iTunes affiliate komono
Dr. Drang helpfully reports his earnings from the iTunes Affiliate Program. I signed up for the IAP a couple of months ago and have earned a grand total of $2.23. Someday, I hope my blog can get enough traffic to reach the $24/month average that Dr. Drang has achieved!
At the moment, however, this blog gets about 1,000 monthly views—over half of which are due to a popular question on Stack Overflow that links to it. Guess I just gotta keep writing!
App Store as an Economy
Good post by David Barnard:
For years, developers have petitioned Apple to allow paid updates and timed trials, and to change other App Store policies. But Apple has made very few meaningful changes to the sorts of policies that would empower developers to experiment with new business models, build more innovative apps, and better assess and manage business risk.
At some point, something’s gotta give…right?
Using “guard”
if let
statements in Corgi Corral with guard
, but now I see even more places where it would be appropriate.
January 25th – Progress Update
It’s been a week since I last blogged; here’s what I’ve been up to!
Accomplishments
- I created some art assets for the second level/scene, which has an autumnal theme. The screenshot below shows a funny bug (now fixed) in which a sheep would spawn in the wheelbarrow and be unable to escape.
- The corgi now blinks when idle and barks occasionally during the game.
- I created a struct called “LevelConfiguration” that reads information from a property list. The list contains information like how many animals should spawn, what the time limit should be, what sounds should be used, etc.
- For scene management, I decided to abandon the idea of a SpriteKit-only solution and ran back to something I’m more familiar with: UIKit and Storyboards. I set up bare-bones view controllers with simple UIButtons and UILabels that players can use to navigate to and from the main menu, options screen, etc. They’re not pretty, but they work, and now all I have to do is create art assets for them:
- After the timer for a level runs out, the game now waits 3 seconds and displays a score summary screen with options to retry the level, select a different level, or return to the main menu.
Under Consideration
Here are a couple of things I’m mulling over:
- Whether to have the different levels/scenes progressively unlock, or to make them all available from the beginning.
- Implementing a “medals” system similar to the one used in Flappy Bird with bronze, silver, and gold levels depending on how many critters you herd into the pen. And then maybe you’d need at least a bronze medal to unlock the next level? I don’t know. Still thinking about it.
What’s Next
Now that I have a very simple menu structure set up, it should be relatively painless for me to set up things like iAd, sharing a score via the share sheet, and adding an option to turn off the sound effects. My goal from now until the baby is born in March is to make it so that the only thing I have left to do is add the art, music, and remaining sound effects.
It looks like I started the Xcode project on November 20th, which means I’ve been working on this for a little over two months now (and sometimes only for a couple hours a week). With that in mind, and knowing that it’ll take me a long time to do graphics and music, I’m hoping it’s reasonable to expect the game to be ready to ship sometime before my birthday in July!
January 18th – Progress Update
Time for a game progress update!
Things I’ve gotten done
- The game now detects the angle you are holding your device when you start playing and sets that as the starting point for accelerometer updates. Previously I had hard-coded some neutral orientation values.
- Game states! Now the game is more gamey and less proof-of-concepty. You can tap to start the game, pause and resume it, and start a new game after a “game over” message is displayed. It’s all pretty bare bones but it works.
- Animations. I’ve never animated anything before so they’re kinda rough, but the corgi now “runs” and the sheep blink at random times when idle.
- Sound effects. I edited some sheep sounds from freesound.org and put them in the game. Personally, I think they’re hilarious. I also learned how to convert audio files to Apple’s Core Audio Format via the command line.
Things I decided not to do
- Add “flocking” behavior to the sheep. I tried adding some separation, cohesion, and alignment goals to the sheep and I actually didn’t like how it made them behave. There’s nothing wrong with the goals themselves, but when combined with the “wandering” and “fleeing” goals, they just don’t function well enough. It’s also kind of funnier to have the sheep running every which way without any concern for one another.
- Animate a “+1” when a sheep enters the pen. I decided to animate the score label instead; it quickly scales up and down when the score increases. The sheep also “baaa” when they enter the pen, which I think is much more satisfying.
Things I plan to work on next
The game is now to a point where I have to start working on its overall structure. In other words, it’s going to have to be more than just one scene file and a “LevelScene.swift” class. I need to set it up to accommodate multiple levels and multiple scenes (such as “Menu” and “Options”).
I think I need to make some sort of “level configurator” that loads the details for each level from a .plist. Then I need to create some kind of “scene manager” that can switch between the menu, options, level selection, and also load the correct level. This is all incredibly new to me so I imagine it will take quite awhile to figure out. In fact, this is the part I’ve been dreading because I hardly know where to start. I think I’ll spend time examining Apple’s “DemoBots” sample code (which just came out, so it’s written in Swift and includes the latest APIs) to see how they set up the level loading and switching.
I’ll let you know what I come up with! :)
Time to Make a Game Plan
Most seasoned game devs would probably say that you should start the development process by writing a game design document (GDD). The GDD describes your game’s hooks, characters, objectives, audience, etc. in enough detail that it can serve as the primary reference for you and your team.
Well, I don’t have a team, or a design document. Instead, I started with a concept and hoped to eventually turn it into a game. Now that I have a better idea of how that concept works in practice, I figure it’s time to start nailing down some of the specifics.
Initial elevator pitch: Corgi Corral is a casual, tilt-based herding game that offers fun for all ages. You play as an adorable Welsh Corgi with one job: to herd as many frenzied animals into their pen as possible before time runs out. Avoid obstacles, chase away predators, and try to beat your best score in 9 colorful levels.
Some more game details: I haven’t figured out the perfect time limit for each level yet, but I’m guessing it will be 1-2 minutes. It’s gotta be quick: something you can play while waiting in line.
I’m planning to implement two power-ups that spawn randomly and infrequently:
- A little clock that you can tap on to add 5 seconds to the game time
- A “magnet” power up that temporarily draws all of the animals toward the middle of the screen (and away from the edges…yay!). This will either look like a magnet and make a “buzzing” sound when you tap it, or a sheep/cow bell that rings when you tap it. I’m leaning towards the latter, because I think it better fits the character of the game.
As for the aforementioned predators, I’m thinking they’ll wander onto the screen and move slowly toward the pen. If they reach the pen, you lose a couple points from your score. All you have to do to make them go away is chase them off screen.
Monetization: I’ve been going back-and-forth about this a LOT. Personally, I prefer to play games that are paid-up-front with no in-app purchases. However, this is my first game, and although I’d like to add levels in the future, the initial experience will be relatively limited. Right now it’s more important for me to get something out there than to make something mind-blowing. So, with that in mind, I think Corgi Corral will be tastefully ad-supported. By “tastefully” I mean that ads will only be shown on the main menu and the “game over” screen…never during gameplay. And there will of course be an option to remove ads altogether.
So, there you have it! I’m going to spend the rest of my game dev time today with my notebook and pen, knocking out a few more things that will help me move forward such as: what game states I need to set up, what options I will need to record in NSUserDefaults, what information I need to include in the plist for each level, and what scores or achievements the game should highlight.
Your First Project
I really identified with this post by Ben Burnes:
A beginner’s skill level is years behind where they’ll need to be to create something with the level of detail and quality they often desire. This leads to a dangerous cycle of never being satisfied with the progress you’ve made and being reluctant to release anything publicly.
It’s not easy to accept that my first game is going to be rubbish compared to what I might create in the future, especially when I feel like I’m working so hard on it and learning so much.
But the truth is that I have a looooong way to go and this first effort will not be my best work. However without it, my best work will never become a reality! So, I keep on keeping on.
Apple Previews iOS 9.3
Holy crap, looks like it’s time to hop back on the beta train. (If you haven’t read this over at MacStories, do it now.)
f.lux-like capabilities and multi-user iPad support?
I repeat: holy crap.
Swift “final” by default
I just finished listening to the latest episode of ATP where the hosts had an interesting discussion about the proposal to mark classes “final” by default in Swift. Let me first say that this whole topic is way over my head as a beginning programmer1. However, I just wanted to touch on my surprise and confusion when one of the guys basically said that subclassing is kinda on its way out. My reaction in a nutshell was: wait, what? Subclassing is pretty much all I do. What’s the alternative?
Here’s a little snippet from the SpriteKit Programming Guide.
Note the last bullet point:
- You create custom scenes by subclassing the
<a href="https://developer.apple.com/library/ios/documentation/SpriteKit/Reference/SKScene_Ref/index.html#//apple_ref/occ/cl/SKScene" target="_self" data-renderer-version="2">SKScene</a>
class.
It’s so matter-of-fact, right? To me, that says: this is what you do; this is the programming pattern you use. Obviously, SKScene was designed to be subclassed. Most of the SpriteKit framework was, actually (see the entire section on “Use subclassing to create your own node behaviors” within SpriteKit Best Practices). Search the iOS developer library for the word “subclass” and see how often Apple gives specific advice on how to subclass one of their framework classes.
From the UIColor class reference:
Most developers should have no need to subclass
UIColor
. The only time doing so might be necessary is if you require support for additional colorspaces or color models. If you do subclass, the properties and methods you add must also be safe to use from multiple threads.
Don’t get me wrong: I understand that this proposal only concerns the default setting and that this doesn’t mean that Apple will automatically lock their frameworks down completely. But that’s kinda what the discussion was about on ATP, and well…I guess I just wanted to point out that in the case of games, subclassing is more or less essential. Heck, Apple’s brand new GameplayKit framework relies enormously on subclassing for its Entities and Components system. Basically, it’s expected that you’re going to subclass GKComponent for each separate behavior/functionality that you need to assign to an entity.
Anyway, all of this is to say that if this proposal is accepted, I would expect that more often than not Apple’s framework classes would be marked “not final”…or whatever the opposite of final is. It seems to me like they’re already very explicit about what they don’t want you to subclass, and that those things are few and far between. For example:
You must not subclass the
NSIndexSet
class.
Not a lot of room for confusion there. But I guess we’ll see what happens once the “NS” prefix is dropped and everything is rewritten with a Swiftier mentality. Maybe Apple will lock more things down. At this point, however, I just don’t see why they would, and making “final” the default seems like it would create more headaches and more work than anything else, with the benefit being a sense of additional safety that perhaps hasn’t proved to be necessary.
- Seriously, don’t quote me. I literally don’t know what I’m talking about. ↩