Friday, February 27, 2015

Tidy Text Adventures - The Walkthrough

I've been getting up early. Or earlier. 

My entire life I've been a night person. I think it formed a core part of my identity.


The late nights, the triple-ringed eyes, the lack of functionality before midday.

They were my work hours. Everybody is asleep. I crank out a bunch of work. Indulging in those second and third winds. 

But it just doesn't work like that anymore. Maybe it's a function of age. Maybe it's a function of the energy I put into my office job. Maybe a mixture.

So I get up early. Two-and-a-half hours earlier than usual. And I work. And... it works.

I'm too tired to be easily distractable. I haven't suffered the thousand tiny failures that demotivate. The day is fresh and it's an easy choice: 


"Launch Twitter and the first thing you'll have done is fail. Launch some Work and you will have a 100% success rate."

So this morning I received an email asking for some help with a tool I made many many years ago.

Tidy Text Adventures - a "Christmas 2012" project with these enormous aspirations of eventually making the point-and-click adventure tool for Unity.

It never happened, life and all. But the tool was completed and is OK, in a retro way.


You can play a demo of the text adventure in action - a little realistic electronic ditty I call:

Hello, Strawman

Huh. Two-and-a-half years after the fact I realize the demo has "Development Build" in the corner. Embarrassing.

I actually made a pretty huge framework for this game. It had Google App Engine backend integration and loaded stories from the server - so I could publish small text adventures every week. 

Like an interactive blog. Every week, a little slice of my life - creative non-fiction style.

Again: Life.

To answer the query of "How does this work?" I wrote out a full overview of the demo - code line numbers, function calls - the whole business. It was... an hour of typing.

And I thought: Hell, maybe the wider internet would benefit from the summary. Who knows?

So... stop reading here, friends. Unless you're like... really into reading code summaries.

...or if you just can't get enough of my tone.

-Joshua





Tidy Text Adventures: The Email, The Walkthrough, The Code, The Demo, The Keyword Richness.





An overview of the tool logic can be found here - but I bet you're all over that already ;)

The scene logic:
  1. Open your TTA Project
  2. Open the scene: Tidy Text Adventures\Examples\Example_Scene
  3. Click on the Main Camera object in your hierarchy
  4. There is a single script here: TTA_UI - this drives the entire demo game.
  5. This script has a field for the text asset generated by TTA (we will use this to load the game)
  6. Your game world files are saved to your Unity project under Tidy Text Adventures\Worlds
  7. Double-click on the TTA_UI script.
  8. Now it's time to talk through the logic!
I'm going to use approximate line numbers from the TTA_UI script file so we can walk through it together.

Initializing the game world:
  1. The demo UI uses a simple state machine to track what we should be drawing.
  2. The first thing we do is set the state to Title - the first screen of the game.
  3. The whole game relies on the class TTA_World - this holds the state of our world, all our objects - everything.
  4. Line 63: At this point we need to create the game world from our text file.
  5. Line 65: We check for a save file using: TTA_Utilities.HasWorldSave(textAsset.name)
  6. Line 66: If we have an existing save, we can load a TTA_World from it using:TTA_Utilities.LoadSavedWorld(textAsset.name);
  7. Line 69: If we have no existing save, we can create a new TTA_World usingTTA_Utilities.WorldFromString(textAsset.text);
  8. Now we have a super important thing to do! We need to give the game engine three delegates - so it can call back to us with New GameQuit Game and Game Over events.
  9. Line 73: We do this by passing three delegates to TTA_InputTranslation.InitializeTranslation(NewGame,QuitGame,HandleVictory);
  10. In the TTA_UI demo, these functions are located at lines 27, 31 and 35 respectively.
  11. You can see the UI handling of these states at lines 123, 127 and 131 respectively.
  12. Okay! So now we have our game world loaded! But how do we do things with it?
  13. Next step: Output!
Your first text output:
  1. TTA provides you with TTA_OutputEntry classes to handle the text returned from the engine.
  2. This is driven by the TTA_InputTranslation class. It takes natural language and returns game content based on your game world.
  3. Line 75: The first thing we will do is request the Title output from TTA_InputTranslation.GetTitleStatus(world); 
  4. This takes the world we created earlier as an argument.
  5. This returns a list of TTA_OutputEntry to you. For each user input, there will be many TTA_OutputEntry objects returned - one for each aspect of the input (e.g: A room description and also an item description).
  6. Line 231: I keep this list of output and draw then using GUI.
  7. TTA_OutputEntry is a very simple class containing the text string and a type - so you can style the text however you like. Open the file TTA_OutputType.cs to see the full list of output types.
  8. Great! We've got out first input for the Title screen. What now?
  9. We need to get into the game itself!
  10. Line 296: I do this by waiting for a keypress from the user. You can do this however you like.
  11. Based on this, I set the demo UI state to Game and request the very first game screen from the world.
  12. Line 79: This is achieved using TTA_InputTranslation.GetBeginningStatus(world);

Playing the game:

  1. So now we are in the game! We've loaded the world, we've shown the title and we've shown the welcome / beginning status message.
  2. It's time to process some user input.
  3. Line 256: I wait on user input with a Unity text field
  4. Line 260: And when the user presses "Go", I handle this input.
  5. Line 331: At this point, we take the string that the user has written and turn it into something we can use.
  6. Note: I have made this part unnecessarily complicated in order to give the developer total language control. Get ready!
  7. Line 344: We break the input into a list of TTA_Word using TTA_InputTranslation.ProcessInput(input,world);
  8. TTA_Word is a string that is processed to see if it contains an object or a command (e.g: "Fish" or "Use" etc).
  9. Line 347: We filter this list using TTA_InputTranslation.FilterInput(sentence,world) to remove all words that are nothing / don't make sense. This function returns the filtered list to you.
  10. Now that we have a list of potential actions and objects, we want to turn this into something we can actually use.
  11. Line 350: We now translate this list of filtered words into a TTA_InputResultusing TTA_InputTranslation.TranslateSentence(sentence,world);
  12. TTA_InputResult is an actionable thing - it reflects the use-case / action / objects that you created in your editor interface, or may be a system command like "Look".
  13. Great! We've now got the action you want to do. Let's turn it into text that we can print!
  14. Line 354: We call TTA_InputTranslation.ProcessInputResult(result,output,world) - and give it the result we just came to, the previous list of output that we received from the engine, and the world itself.
  15. At this point - you may receive one of the events we subscribed to earlier: New Game, Quit or Game Over. We'll come back to that later.
  16. The function we just called (TTA_InputTranslation.ProcessInputResult) is the function that will change your game world. Any actions that perform game logic (take, use) will be performed now.
  17. This occurs at line 654 of TTA_InputTranslation.cs.
  18. The function responsible for changing the world is TTA_World.ProcessCommand(TTA_InputResult);
  19. The function that saves the world is: TTA_Utilities.SaveWorld(world);
  20. Why do we pass the translator the previous list of output?
  21. Imagine you first type: "Look". You receive a description of the world as a TTA_OutputEntry.

    Now you type "You are a fish-head". But this is invalid! So you will receive "I'm afraid I can't do that" as a TTA_OutputEntry. 
    But you may want to make sure you still have that original description on screen.

    The TTA_InputTranslation.ProcessInputResult function is clever enough to know when to clear your history and when to add to it.

    You can pass an empty list here if you don't want the engine to do this, and handle it however you like.
  22. Whoa! You've now taken a string typed by your player, turned it into words, turned those words into actions, executed those actions on your world and retrieved some text to show your player. Nice!
  23. That's it! Repeat this process until....

Events! New Game, Quit Game, Game Over.

  1. At the very beginning, we subscribed to receive a call when one of three events occur: New Game, Quit Game and Game Over.
  2. Line 109: Based on the game state, I call one of a few GUI functions. You can see the state / function calls here, and drill down further as you like.
  3. Line 151: When handling New Game - the demo presents a warning - retrieved fromTTA_Language through world.language.newGameWarning.
  4. Line 170: If the user chooses to begin a new game, we delete their current save using TTA_Utilities.ClearSave(textAsset.name) and start back at the beginning (showing the Title).
  5. Line 177: If the user chooses not to begin a new game, we just move back to the regular game.
  6. Line 190: When handling Quit Game - the demo presents a warning - retrieved from TTA_Language through world.language.quitMessage.
  7. Line 170: If the user chooses to quit, we just move back to the Title in the demo.
  8. Line 177: If the user chooses not to begin a new game, we just move back to the regular game.
  9. Line 270: Handling Game Over is easy. You will have already received the Game Over text content as your TTA_OutputEntry.
  10. The demo gives the user two choices at this stage. Quit or New Game.
  11. In either case, we reset the current world using TTA_Utilities.ClearSave(textAsset.name)
  12. Done! You have successfully handled an entire cycle of a Tidy Text Adventure!

One last thing: Scoring
  1. As a super after-thought, I added a very primitive score system to TTA.
  2. Score is retrieved from your TTA_World via world.maximumScore andworld.currentScore.
  3. Score is calculated based on how many total UseCases the user has completed while playing the game.
  4. UseCases are marked with countTowardCompletion when creating them in the TTA Editor.
  5. UseCases that are not marked will not count toward the score.

And that's a full run-through of TTA!

Phew, my fingers are tired. 

Thursday, January 1, 2015

2014: And then the other things

And then 2014 was an enormous work year. Work. Of all colors.
I mean... if it's not work, it's likely not a productive way to be burning your time, right?

Beyond 'Paying the Rent'

Followers of my action-packed life story will recall that I work a regular office job as a Game Developer for the vast majority of my time.

And that effort was a huge one in 2014. I lead up the development of Far Cry 4: Arena Master - a companion app for Far Cry 4.
It was a massive project - and working with Ubisoft Montreal was a hugely educational experience.

I think we killed it, in the end. I 100%'d Far Cry 4 this month, and the companion app was... actually useful, which ticks the major box for justifying the controversial existence of companion apps.

And the team made the Far Cry 4 credits under "Ubisoft Montreal Development Team" which made the twenty or so minutes watching the scrolling names with my aching finger over "Print screen" totally worth it.

There I am, man. Along with the most excellent people I work with.
And this is me 100%'ing Far Cry 4. There was no reward. Like life.
Credits on a AAA console game is a kinda cool thing to exit 2014 with. Along with ending sentences with prepositions.

Far Cry 4 is a whole different topic. I'll leave it 'til the "GOTY-ish Post About Games in 2014" that inevitably pops up in any early-January blog.

So there was that. It was a good project. Intense. Long hours. The regular project things.

It kind of... occupied a good amount of my energy reserves. Usually I'm all about the "Get home, work on a whole different thing" mentality - but man... I'm getting old, there's a limited amount of energy available.

Crossing Media... Mediums? Media.

November is "National Novel Writing Month". It's exactly what it sounds like. One month, 50,000 words.

I'd been waiting for this since January, 2014.

I've got this not-so-secret aspiration to be a writer. Game development has been my way to explore writing in a way that is a little more relevant to the modern world and... has an industry that will... pay me.

This is why our games are so text-heavy. It's a whole thing.

And so November rolls around and man... writing a novel has been my almost life-long aspiration.

So we (@TheDopplerDuck and I) buckled / knuckled down and did it.

1,666 words a day.

Sounds easy, right?

Man, I went into November so full of... ignorant confidence.

There is this ... tendency of people who have built skills in one field (say, development) - to assume that the hard work from one field translates to another.

"I do OK at making games, so I should be just as OK at writing".

I don't have a name for it. Arrogance. Hubris. Something.

But man, it doesn't work that way.

1,666 words a day is hard. Writing is hard. I've written, man. I've written a good amount. But... regardless, it's heavy and tricky and there is a really strange "forest for the trees" psychological challenge in that you can't objectively read your own work.

I can't... emphasize the difficulty enough. The things that you take for granted as a reader: tense, perspective, dialogue, characterization. Consistency. Eliminating plot-holes. It's hard. Enormous respect to authors everywhere.

NaNoWriMo does an amazing job at motivating you. Their website is nicely gamified. Check out this business. My 2014 NaNoWriMo novel profile.

For the click-averse. This is what you see during NaNoWriMo. It will be the thing that energizes you, more than likely. Potentially it even resuscitates you.

Achievements, stats, bar graphs? Come on man - that's amazing. Endless competition against a diagonal line. What more could you want?

It was a hard month. No two ways about it. But we finished. You can read the raw first chapter of my novel on Medium (hey, that's a platform that really grew in the latter half of 2014!).

It's called Blue Meat Blues. It's a... post-apocalyptic splatter-punk piece of pulp and social cynicism. It's heavy and violent and dirty and the characters are consistently unlikable and ... it gets so dark that even I thought "Man, too far".

And there's a sort of... back-of-the-cover summary here and a terrible synopsis for a contest that I didn't come close to winning here.

Synopses are hard! Capture the plot, tone, raw emotion of 50,000 words in 500 words? Dude. I might use Twitter, but I'm not that level of concise yet.

But hell. 50,000 words. We did it. And... that is just an amazing thing. NaNoWriMo. Get into it.

Building Momentum... in Life

And so work wraps up and Xmas rolls around, and I'm here in the final four days of my vacation.

The goal for any vacation - I figure, is to build up enough momentum on a project that it organically continues to roll when your vacation is over.

Our conceptualization process here is pretty... chaotic. Not even just "pretty" chaotic. It's wholly chaotic. We plan out these grand game designs, we concept them up, we make models and assets and such, and then... they die.

And I think it's just something about me. It's my issue. Once something is planned too thoroughly it loses the excitement and spontaneity of exploration and discovery. Something like that.

Cube & Star came from an off-the-cuff disagreement on Skype.

The Game for 2015

And so we did the same thing during Xmas of 2014. We planned out a game. We made models and ... figured out the game loops.

And then I stood in the kitchen one day, thinking about air hockey, and build up a voxel-style, Crossy Road-inspired prototype.

And it felt... fun. It was active and game-y, polar opposite to Cube & Star. And so we kind of... started on it in earnest.

And this time - inexplicably, we've been... using proper prototyping. You know... one of us plays, the other tweaks gameplay values until it looks and feels right.

We're usually so systemic. Everything is emergent and AI'y and not really rapid prototypable.

And the prototype that I'm talking about is illustrated in the following barrage of GIFs.

GIFs, huh? What a comeback! It's like... internet speeds escalate, GIFs become a fast way to convey moving content.

I remember thinking: "Once websites start using MP4s or such instead of GIFs we're really onto something" - and man, Twitter does exactly that. The bold new times, right?

Anyway anyway. Here are some chronological prototype GIFs. Evolution, huh?

Kicking out the feel of the vehicles. Drifty, like a hockey puck. That vehicle is kinda cute, huh?
Exploring the palette and the camera.
Building up the visual style of the world, expanding the feel of the vehicle controls.
"The Three Cs"

Camera, Character, Control.

From Ubisoft's game dev theories, expounded in this Gamasutra article.

I like that, man. It's super valid. Get it looking, feeling and responding nicely first. No AI. No systems. Even if they are the most entertaining thing to develop.




So many GIFs, man!

That's going to thrash this page's load times.

And so that is where we stand as at the 1st of January, 2015.

Building up the prototype into an alpha in time for the festival / contest season. Editing our respective NaNoWriMo novels. Ageing at the regular daily rate.

Life!

Next up... What I learned from Games in 2014. Which is kinda of... my "GOTY 2014" post. Except learning from and liking are often different things.

-Joshua


2014: The Curtain Drops

Time is a funny thing, man. Life is a funny thing.

I always had this idea that with every year - participating in the economy would get easier. The effort associated with being alive and keeping the lights on would become lighter.

But that's not how life works, evidently.

I mean, maybe it is how it works. Maybe it's an "eye of the beholder" situation.

That would make sense, I guess. That's probably the artist "thing". The... perpetual hunger. The drive to... make new things, to be better than before.

Hey - that turned around, didn't it? It started out low and kind of twisted around into a message of hope?

You can't script that, man. Welcome to the regression session.

2014! Talking 2014. Recapping. Summarizing. Xmas-letter style.

Jesus. I really dropped the ball blog-wise in 2014. I don't think I tweeted much, either. There are reasons. They'll be revealed in the fullness of time.

But man, look at that terrible chronological sidebar.

No blogs for May, June, August, September or December.

Ah well. What is it they say in AA?

"One day at a time."
"Let go and let God".

Is that AA? It could be something else. I swear somebody said it to me. Equally applicable to anybody's life situation, I would say. Would be a great mantra in an Orwellian re-education center.

I'd like to be a data clerk in a re-education center. I feel like that'd be a good combination of solitude, psychological curios and a Brazil-styled filmic tone.

I'm going to break this out over a bunch of posts. It's going to be long... text-heavy... and likely cerebral. Just... let it spill out over the keyboard.

Cube & Star: An Arbitrary Love



The Big One. You know it. We released Cube & Star: An Arbitrary Love on Valentine's Day of 2014 to Steam - Linux, PC, Mac and the Humble Store.

It feels like it was a very long time ago, now. But I remember it was a whole thing. From December to February - an excruciating push toward completing something and defining something that was by nature... vague.

But we did it. I mean... that's an achievement, right?

And you know... I'm pretty happy with it. It's not a broad-appeal product. It's... hard to digest. But when I pick it up and play it now - 300 days later, I get a little kick out of some of the dialogue and the general way the systems work.

So I mean... that's good. That's the goal. Make something, be relatively proud, move on.

And then like... man, I really don't remember when - but we released the game to the Mac App Store. It was such a knee-jerk action (and hassle) that I don't even have a link to it. Terrible, right?

Cube & Star: An Arbitrary Love - iPad

And then I ported the game to iPad. It was a massive endeavor. And I'm pretty sure it was solely for the challenge of optimizing it. I mean, the game isn't exactly... Bioshock in terms of graphical complexity but there are a tonne of active object in there - lots of AI and systems and such.

Memory management, spreading processing out over many many frames, it was a real challenge. A thoroughly enjoyable challenge. I dig optimization. I dunno... watching frame times fall from 100ms to 20ms is really satisfying. Almost... gamified.

I made the tough call to strip out the spherical effect from iPad to save performance, but I'll likely update it to change it now that I have.....

Cube & Star: An Arbitrary Love - PSVita / Android / Wii U

We're jumping ahead now. I ported Cube & Star to PSVita - which was much harder to do than iPad (performance reasons). And in the process - I built the game to Android and Wii U. This was... two weeks ago.

And now it's at that bizarre stage where.... the heavy lifting has been done. There's no challenge left. So it's exceedingly hard to pick the project up and run the final mile.

That's life, you know? The brain needs a challenge, lest it become a potato.

And then?

I don't know, man.

I released a few patches, fixed some irritating bugs, met with the same level of amazing critical popularity (none) that you would expect from something so abstract and... unapproachable.

And that was Cube & Star: An Arbitrary Love, for 2014!

You know, it wasn't the thin year that it felt like - staring back at it from New Year's Eve.

I mean, there are three releases left to go (PSVita, Android, Wii U) but... if I can manage to get the flu or something and hunker down for a few solid days, we'll be there.

Man, PSVita is probably something that I should dedicate a whole post to. It's a really nice piece of (underpowered) hardware.

And Hohokum is a really great game. It's the first game I played on Vita and it's super worth-while.

Look at that drifting, buried game recommendation!

See you in the next post... which will be about... the random things, I guess. Life, love and artistic aspirations.

Oh oh. And "What I Learned in 2014". A GOTY-styled thing.

Yeaaaah. That's what people do.

-Joshua

Man I'm sure I have a widget I should be putting here. A "Buy this game" widget. That would be the clever thing to do.

I probably also should go back through and link out to Youtube and Twitter and the Cube & Star Steam and Humble pages. That would be a savvy business thing to do, right?

See how I linked that little soliloquy up? Talk about meta, right?

Thursday, November 13, 2014

Binding your Creativity with the shackles of Reality

Full disclosure: I'm writing this blog for dual reasons - to break my streak of not-blogging, and to pick up a free account for Sensor Tower (free if you write an honest review on your blog). My post is going to be about the importance of basing your work on solid market research, and Sensor Tower, in this case - is a market research tool for mobile games.

Full double disclosure: This isn't a.... proclamation or a commandment. There are thousands of success stories that create their own genres and give the audience something bold and new and ... transcend time and space. The advice I'm going to give below is for the 99.9% of independent developers who are looking to make a dollar. Maybe two dollars. And down the line, maybe enough to become one of those aforementioned developers.

On to the blog post.

You know... there's a danger in being an unchecked independent game developer. There's a danger in being an unchecked anything. There's a tendency - a very strong tendency, to just... gut-check your decisions and launch with wild abandon into making... whatever wild thing your creative mind has latched onto.

And that's fine, right. That's fine. That's probably the real golden benefit of being independent and passionate and such. You can make whatever you like - regardless of market forces or the laws of reason.

But there's something to be said for freedom within boundaries. There's something to be said for narrowing the stream or for... framing that wild creativity in a way that will both satisfy your egocentric desire to create something and potentially, hopefully - satisfy a market need and earn you money.

Because money today means freedom tomorrow. Right?

Right.

So I've been thinking about this a lot. I've been that egocentric off-market developer. I've spent a good amount of my life working without regard for market, chasing a tiny niche of... misanthropic philosophy dropouts with residual LSD trauma.

Flash-forward to today.

I've turned a corner, friends. It takes a lot of energy to make a game. It takes an enormous amount of energy to make a game. No matter how marginal or arbitrary or niche the game, it takes a lot from you. Time can't be regained and enthusiasm is a scant resource.

So I figure: Why not spend all of that energy and time and enthusiasm creating something that both satisfies the creative urge, the urge to create things in your own image, and apply it creating something that - at least slightly, serves an existing market. Something that is primed from its inception to actually... maybe... just slightly.... be successful.

Let's talk about Apple's App Store, as a game market. You know it. It's noisy and high-volume and there's a definite player-base but they don't "hang out" in the same places - they're spread out and wide and largely unreachable via direct marketing. 

As a developer with little-to-no marketing spend, no Apple contacts and no PR handling - organic traffic (via App Store search) is your biggest source of traffic. It's responsible for something like... man... 65%+ of App discovery, followed by a mixture of word-of-mouth and myriad marketing streams. No reference, I cannot remember where I read this. But it was like... the day before yesterday, so I'm confident in the thrust of the data.

So App Store Optimisation - the optimization of your keywords and assets (screenshots, icons) is the thing that will get people into your game and... playing.

People don't download games, they buy screenshots - and to get them to see those screenshots, you have to get your icon and game title on their screen.

And, for the sake of discussion - we're going to say that's through search.

To summarize at this point of the long, rambling discussion: Your keywords (including title, description) and your Category (Action, Racing) are the lowest-level mechanism that you can control to get players into your game.

How does this fundamentally change your game design philosophy, and how does a tool like Sensor Tower impact on this?

Genre. You need to stick to a Genre. It sounds restrictive. It sounds... old-fashioned. It sounds like it somehow puts shackles on your amazing creative mind, but I guarantee: Genres have existing markets. They come with an inbuilt audience. I'm talking real fundamental, verb-driven genres - Racing Games, RPGs, Shooting Games.

So step one - your design process has shifted. You pick a genre.

Enter Sensor Tower (or more: "Enter: Market Research") You validate that genre choice with data. 

And for this, I find the most interesting / powerful tool offered by Sensor Tower is the Keyword Research tool.

You type in a keyword, it returns a list of games that match it - and it gives you estimated traffic vs. estimated difficulty in ranking well for both iPad and iPhone and total results for both (thousands and thousands, likely).



I've queried "Zombie Shooting" here, narrowing "Shooting" (a very general genre) with a theme pre-emptively. The really interesting numbers here are Traffic (estimated queries for this term) and difficulty (difficulty ranking for this term).
At this stage I do two things: Run my eye down the list of games and look at defining characteristics. We're talking... icon visual style, titles, themes. But that in the mental bank. Because you'll need this later.

Keep running keywords through there. Example: Racing game, Driving game, Zombie driving, Car game, Driving car - you know what I mean - be the consumer - the person who will be playing your game. What would they type?

That's a big thing: Don't think about how you want to describe your game. Think about how the player that you want will actually find it. 

So you've picked a genre. And now you've taken note of how busy the genre is and how difficult it may or may not be to penetrate.

Let's assume you're happy with that.

Great. Genre. Now you need a theme

This will impact your visual style, your gameplay and your general presentation. This is drilling down on your genre. Sure - big general games like "Where's My Water" and "Angry Birds" and "Flappy Bird" do well and make huge numbers, but there are any number of unheard-of strongly-genred strongly-themed games pulling respectable numbers on predictable, genre-hungry traffic.

Think back to the styles and themes you saw coming back while searching your genre keywords. This is going to be a gut-meets-creativity-meets-market decision.

What will stand out in the market you've just seen, what will be happily-consumed by the market you've just seen - and most importantly - what can you create that will compete well against the market you've seen.

Now - take that theme and run it through the keyword research tool again.

I've gone with "apocalypse" for a theme here. The word is too long, in my opinion, to be typed on a phone, but the traffic is good and the number of apps returned is low (for the app store).

Check the traffic, check the results - and most importantly, drill down on the games that are returned (click on them, easy) and see how they perform. You want to see games that are Grossing nicely and idling at a good position in the overall charts.

At this point I drill down on games - particularly those I haven't heard of, and look at their monetization model (note: Free with IAP), their worth (a super interesting little estimate) and their ranks in the grossing charts. Note - it's all right there on screen. That's beautiful.

Is the theme something that people would search?

An obvious, cynical one: Zombie Car Driving Game

But the market is wide and there are many, many non-cynical, hungry markets.

RPGs are a super interesting market, currently the RPG charts are dominated by non-RPGs (bleed over from games with large audiences with very very small RPG elements that only just qualify them for the category). Beneath this is a rich cluster of small but rabid markets.

Explore them. That's what the tools are for. What is being searched for a lot but has not had fresh blood for months? Maybe years?

There's a home, there.

So that's my little... I don't know, semi-rant semi-overview of using Sensor Tower to validate and reinforce your game design at the very early stages. Build on solid foundations.

Sensor Tower has a bunch of other things - tracking and keyword optimization for your games that are live, research into your competitors and such - but to me, the most interesting point is the seed point.

I've used almost all of the tools for this sort of thing (App Store Optimization and tracking) - SearchmanAppAnnieMobileDevHQ (the latter I believe scared me off with a "Choose your Plan" screen).

Sensor Tower is a nice all-encompassing tool. Searchman is a close second in terms of keyword research, I would say. I'd say if you combined it with some solid eye-to-App Store time and a less exploratory tool like App Annie you would have a really good grasp on the market and its mood.

It's... that weird schizophrenia - the desire to make money, to live truly independent, and the (mostly contrary) desire to have unfettered creativity and create anything.

And somewhere in the middle... I guess that's where the reality lies.

Sunday, October 19, 2014

Crushing your Dreams



I've spent the last month or so casually working with Joshua on a little mobile game idea I had.

I wanted to make something small and concise that still had plenty of space to create a rich world through the art.

And so Temple Crush was born.

So here's the rundown of what Temple Crush is:
Temple Crush is an infinite "thwomp-er" where you must use split-second timing to avoid being crushed, satisfy your lust for gold, and liberate the souls of long lost animals.You slip between angry crush blocks, wait for your window of opportunity, avoid certain death, accumulate masses of golden owls, and - should the worst occur - commune with the spirits of the temple's long-dead pets and liberate them from purgatory.
There were a bunch of things that inspired Temple Crush: Flappy Bird; Super Mario Brothers; Castle Crashers. 

We were discussing Swing Copters and Flappy Bird - trying to pinpoint the appeal of the games. Flappy Bird is notoriously hard but the player always feels like its their fault when they fail.

They both use one mechanic as the focus of the game, making the game easy to pickup and play.  

Brainstorming ideas I thought it would be interesting to create a game based around dodging falling blocks, like the Thwomps from Super Mario Bros.

It would be one simple mechanic - based on the player's pure reflexes rather than chance, easy to pick up and understand.

(Joshua: But deceptively hard to implement. Seriously. A game of chains of falling blocks that is hard but still beatable, with scaling difficulty. No randomisation)




The animal spirits were a later addition to the game - an opportunity to add a bit of extra cute to the game.

I loved the Animal Orbs from Castle Crashers, they were a big influence but I didn't want the animal spirits to have any abilities, I just wanted them to add a bit of flavour. 

It's been a while since I've done any game art - the last finished game I worked on was Ball of Woe.

I've done plenty of mockups since then and started many projects that haven't seen the light of day. But this project is the closest I've come to finishing a game.

I hadn't looked at my old work for a long time, but for Temple Crush I thought I would make life easy for myself and create my environments based on a tile pack I made way back before Ball of Woe - these tiles were actually the basis for the levels in Ball of Woe as well.

(Joshua: The colors were already nicely matched, the themes were there. Seriously. Balancing colors between progressive environments is hard. It's a sort of... gradient proposition)

So I got my old files out and started going over them, adding detail and making them more in line with my current style.

I was really amazed at how much my art has developed and changed - comparing the old tiles with the new versions was pretty eye-opening.

Even though I felt like I've been running around in circles, my art style and skill level has leveled up a lot.

It makes me glad that I've kept working and trying new things even when the ideas prove too ambitious or not ambitious enough to finish.

I feel like I'm finally getting to a point with my art where what I'm putting down on the page matches what's in my head. I'm really excited to finish this game and get it out into the world.

-Jessica

Tuesday, July 22, 2014

Human form of Potato Battery

It's July 22nd, from where I sit. It's been three months since I blogged last.

A grim scenario.

Usually productivity and blog frequency are inversely proportional.

Not in this situation, friends. Not in this situation.

I've been working, you see. At a job. And that in itself is a fine thing. It pays the rent. It gets you out of the house. It goes part of the way to limiting the amount you can twist your brain diving deep on Reddit.

But it has to be balanced. Like everything in life. You can't just eat pigs-in-a-blanket all day long.

You've got to build something. Otherwise - what are you sustaining through your office work?

Nothing. It's that sick cycle of:

Work-to-pay-the-rent-so-that-you-have-a-base-from-which-to-commute-to-work.

Echoes of "A Wild Sheep Chase", right?

But I've done, some things, I guess. Between the gesture and the motion fell some sort of work. Twisted literary references.

So let's take a look at what I've done. 

Cube & Star. Mac App Store. It's .... full coverage.
I went ahead and released Cube & Star: An Arbitrary Love to the Mac App Store.

It's an interesting ecosystem that I've never really looked at before.

Time will tell if it ... amounts to anything.

Or if it was all sound and furious typing, signifying nothing.

Man. What is with the references today?


A slightly flatter, slightly closer Cube & Star for iOS.
And then I went ahead... wait... this came before the Mac App Store.

Well, in any case.

I went ahead and released Cube & Star: An Arbitrary Love for iPad.

And that... was just a whole thing of optimization and compromises and such.

But it works!

And it looks nice on those screens, man.


Let's leave on a sort of joyful little image, right?
And then the world just sort of....

Got away from me.

In between the last blog post and now I turned 30. And it had all the pomp and meaning and significance that every number I've ever read has carried with it.

And I just... worked at my office-job. Just working. You know... carrying the slabs of sandstone for somebody-else's pyramid.

Man.. that metaphor makes a lot of sense when you think about it.

If you create a society in which people encourage and respect you for being that sandstone-carrying (read: steady-career-occupant) - then... you're creating a self-sustaining pool of people from which to build your pyramids.

Man. That's a clever system.

Stability.

Annnyway. I'm bracing for a comeback, man.

Stay tuned.

Something will happen.

-Joshua