SLOUCHCOUCH

Slouch Couch Game Studios is a game making studio specializing in HTML5 and HTML5 mobile games. We make stuff that we like. We make stuff regardless of what plane our players are on.

Game Jam: a Developer’s Tourist Guide

TwitterFacebookGoogle+

Game Jams are incredibly fun. They’re more fun if you do them with a large group of people in the same spot. They’re even MORE fun if you come prepared.

This weekend is both http://www.gamesplusplus.org/, and also the start of http://www.punkcyb.org/. I’m very excited to try to make something cyberpunk next week (runs from March 1st to March 10th), but I’m even more excited to gather in the same building with a big group of local game makers, and work our asses off for 12 hours straight for GamesPlusPlus.

Bemis Games Plus Plus
Games Plus Plus 2012

I’m listing a few tips and tricks for developers who haven’t done a game jam before, or for someone who hasn’t previously tried doing a 12 hour game jam. Most of these tips are in the interest of streamlining your game making process, since 12 hours isn’t a lot of time and you need every scrap of time you can get your productive little hands on. Last year at GamesPlusPlus most of the games I played were only about 50% finished (including my own). Follow these few guidelines for a more favorable experience and for a more finished product.

  1. 1. KNOW YOUR TECH AHEAD OF TIME – This is probably the most important rule. Don’t come in to a jam expecting to “learn as you go”. Spare time is for learning. Game jams are for making games. If you DO want to use new tech, at least spend a few days earlier in the week learning the basics.
  2. 2. If you want to be in a group, try to make the groups ahead of time. Know what you can bring to the table, and know what roles you’ll need others to fill. Developer/Musician who can’t do art? Find an artist. Artist/Developer who doesn’t do music? Find a musician. etc…
  3. 3. If you’re joining a group, try to talk with everyone else ahead of time to get an idea what “types” of games everyone is interested in. It saves everyone time and prevents you from trying to pitch your idea for a rhythm platformer for 10 minutes when half your group quietly hates platformers. That’s 10 minutes you could have spent doing something else.
  4. 4. Know your tech’s limitations. Yes that multiplayer feature sounds awesome, but if you’re not sure if your framework can do multiplayer then you should probably just not. (The best solution would be to know if you can do multiplayer ahead of time)
  5. 5. Show up with an empty game “template(s)”. Most games share a lot of similar elements that can be templated ahead of time. Particles, State Management, Animations, collision, physics, polish…etc… These are all things that you will probably have in your game no matter what the game is. Come with a pre-existing framework, or build these ahead of time. DON’T spend limited game jam time making a particle system from scratch when you could’ve done this last week. (I could easily spend 12+ hours on a particle system alone). 
  6. 6. Can your game idea be accomplished in the given jam time divided by 3? If no then you should probably scope the project down a bit. (ie if you have 12 hours try to shoot for a game you think you can finish in 4 hours). We all know developers are shit at estimating development time.
  7. 7. DESTROY SCOPE CREEP. Yes that’s a very cool feature you just thought of with 3 hours left. Unfortunately you should probably just throw it out unless it’s simple enough to execute in 10 minutes or less.
  8. 8. Be realistic with your teammates. If someone has a cool idea but you think it would take too long to do, make sure you speak up and let them know. Don’t stay quiet in the interest of being friendly.
  9. 9. This is related to #5, but preload your polish elements ahead of time. Polish things I’m going to bring ahead of time are: Screen Shake, Screen Flash, and tweening. Sure screen shake and flashes can be coded in like 10 minutes easily, but why not spend 30 seconds plugging the premade code in instead of spending those 20 minutes writing from scratch? 20 minutes is a lot of time if you only have 12 hours total.
  10. 10. Shower before showing up. Brush your teeth too. I shouldn’t have to say this, but, well…

There are probably a lot more things you “could do” to make your jam experience better, but these are the ones I like to follow as a developer.

Cats
We’re a team!

For tons more information if you’re interested Christer Kaitila (https://twitter.com/McFunkypants) has written a book titled “The Game Jam Survival Guide”. It’s not specific to just developers, and you can pick up off amazon here http://www.amazon.com/The-Game-Jam-Survival-Guide/dp/1849692505.

TwitterFacebookGoogle+

I called the Flappy Bird guy a “weirdo” for giving up $50k a day, and you won’t believe what happened next…

TwitterFacebookGoogle+

Spoiler: I reevaluated my entrepreneurial impetus, I questioned my place in this world with respect to capitalism and success, and I made a video game about it called “Flappitalism”

These were my initial thoughts last week after reading about Dong Nguyen’s decision to pull flappy bird from the iOS app store. As a self-employed game maker the idea of making $50k a day is the holy grail I’ve been searching for for the past 3 years. Dong Nguyen had this holy grail in his hand, just to give it up because he felt bad (turns out it was more complex than this, but at the time that’s what I thought).

The next day the whole situation left me uneasy. Uneasy not because I was upset at this guy for giving up his golden egg laying goose, but I was uneasy because of what can best be described as cognitive dissonance.

Wikipedia: In psychology, cognitive dissonance is the excessive mental stress and discomfort experienced by an individual who holds two or more contradictory beliefs, ideas, or values at the same time.


A little history.

When I was younger I wouldn’t have batted an eyelash at this guy’s decision. In my 20s I was a paragon of punk rock virtues. Skate where I want, end wars, stop buying McDonalds, stop eating animals, question authority, corporate rock sucks, fuck cops, etc.. That was me, rather that used to be me. I didn’t care about money because I was young and punk (and privileged) and I was able to not care about money. As far as I was concerned all I needed was good friends, good music, and I’d be happy.

I’m 36 now, and I still believe a lot of the things I believed in my 20s. I still believe that war is disgusting. I still believe animals aren’t for me to eat. I haven’t bought McDonalds in years. Pop music is ok I guess, but I still question authority every chance I get. Most things for me are the same, except my views of money and success.

Omaha has a fantastic young entrepreneurial culture that I’ve been lucky enough to be a part of for the past 5 years thanks to my now ex-wife. I got to see many of my friends and acquaintances build their businesses and succeed in their own ways. I’ve watched my ex-wife and mother of my daughter build her business from scratch and succeed. I’ve seen all this happen to so many people that it was only natural that i would start wanting the same for myself.

I have value because I’m a human and humans have inherent value. What I make has value because I made it.

I built Slouch Couch with a group of 5 strangers, only two of who I had ever met before, at a local entrepreneur event called Startup Weekend. We built a game in 48 hours (it wasn’t that good) and after that the other guys moved on and I stuck with it. For the past three years I’ve been grinding away making games and chasing that dollar.

Grinding Capitalism.

Grinding capitalism is a funny term I heard recently. I forgot where exactly I first heard it but I think it describes what many of us independent game developers are doing. We wake up, we make games for 6 hours, we stop to eat (most of the time), we pick our kids up from the day care, and we grind a few more hours after bedtime before falling asleep in our clothes. Why do we do it? Most would say we love making games, and for most people this is probably true. Another reason that nobody ever brings up is because we want to make more money. More money means we can make more games. We can pay more independent artists to make art for us. We can pay more musicians to license us music. We can pay more game journos to write reviews of our games (<-- joke). With enough success we can even buy ourselves all gold-plated yachts.

"With enough success" i say. This isn't really something we think about critically enough, and I sure as heck didn't until recently. With independent game development (and most other creative industries) we measure our own successes with how much money our games can make, or how many awards we can win, or how much praise we can get from everyone else in the community. For me I suspect this definition of success is a product of me living in a western capitalist world for the past 36 years. I want my games to be successful. I want them to make a ton of money. I want them to make $50k a day.

I never thought critically about the concept of “success=money” until recently, thanks in part to people like Mattie Brice. This was the source of the cognitive dissonance that was bugging me about Dong Nguyen. My current self was continually defining my worth with how much money I could make, but my past self wouldn’t have given a fuck. My current self was considering myself a failure because my games weren’t making $50k a day. Three years of considering yourself a failure can really take its toll on someone.

Money is the currency with which we buy survival. Money is NOT the currency with which we buy happiness.

My mental health recently has been in decline. My divorce last May, and my struggle to adjust to being a single father of a 3 year-old are two very large factors that have contributed to my current mental state. While those two factors have played a large part, one really can’t ignore the fact that in my capitalist mindset I’ve been silently calling myself a failure for the past few years. Failure or not, this is absolutely unhealthy.


I have value because I’m a human and humans have inherent value. What I make has value because I made it.

I need to stop applying capitalist ideals to my own success and the success of my games. I make games because I love to do it. Do I still think Dong Nguyen is a little weird for pulling Flappy Birds? Yeah maybe a little. Was I wrong for applying my own culture’s ideas of success and capitalism to his decisions? Absolutely.

Am I going to continue trying to make money from my games? Hell yes I am. Will I survive without money from games? Yes, because I am privileged enough to have a day job that lets me pay for my house, pay for food, and pay for medicine for my daughter. Will I be happy if my games start making $50k a day? Maybe, maybe not, but it won’t be because of the money. Money is the currency with which we buy survival. Money is NOT the currency with which we buy happiness. My future success and mental happiness depends on me getting back to my roots, and remembering this simple distinction.

…so I made a game about it called Flappitalism

So there you have it. I had a moment last week where I questioned someone else’s motivations, then questioned myself, then questioned why I was doing what I was doing, and the result is an expression of my experiences with entrepreneurship for the past few years. It’s a simple game that took 3 hours to prototype, 10 hours to make, and another 10 to polish. I hope people play it and I hope people like it, but I won’t consider it a failure no matter what happens.

flappitalism476x201

-Dave

Flappitalism Credits:
Game Design and Programming: Me
Art and Character Design: Devi Ever
Music: Syrian
Title Design: Ryan Malm

TwitterFacebookGoogle+

Physics in Game Design/Development. How I Used Quantum Mechanics to Make an Entity Follow/Orbit Another Entity

TwitterFacebookGoogle+

I have a BS degree in Physics, and often I apply this knowledge to game development, like the time I used a damped harmonic oscillator to simulate screen shaking, or in this case how I used the finite well potential to simulate an entity following around another entity.

The effect I wanted was an entity to lackadaisically follow or track to another entity, but then once it got close enough to that entity it would then strongly attract to that entity in a very small orbit. Here’s a vine of the effect in action:

In quantum mechanics there is a concept known as the Finite Well Potential, or Finite Square Well. It’s really a simplification (as many things are in physics) of the phenomenon of a particle getting stuck in a particular place in space, whether it’s the strong nuclear force gluing a nucleus together, an electron being bound to a nucleus, or a trapping a plasma cloud inside a magnetic bottle.

The basics are simple. You have a particle floating around space free to go wherever it wants. Then all of a sudden that particle is trapped in a well potential and can’t escape without some very large amount of energy. I’m grossly oversimplifying this, so any other physics enthusiasts please cut me some slack.

The reason it’s called a Well, or a Square Well is obvious looking at the image below. It resembles a well.

photo (2)
(again physics buffs, a normal potential graph is usually distance vs Potential, but for my purposes I made the y-axis upside-down Attractive Force because it’s easier for people to grasp. Please don’t yell at me.)

To implement this inside a game is ridiculously easy for any game with any sort of rudimentary physics (position, velocity, and acceleration). Pseudocode below:

  • set some critical distance from the entity, say 150 pixels.
  • if distance to entity > 150 pixels, acceleration towards that entity becomes some weak value, say 10 (px/sec^2)
  • if distance to entity <= 150 pixels, acceleration towards that entity becomes some strong value, say 200 (px/sec^2)

See! Ridiculously easy! Like unfathomably simple.

Here’s some actual game code from the game itself. It’s javascript code using the ImpacsJS game engine.

this.closeness = 150;
this.trackAccel = 50;
update: function(){
  if (this.entityToTrack && Math.abs(this.distanceTo(this.entityToTrack)) >= this.closeness){
    this.accel.x = this.trackAccel * Math.cos(this.angleTo(this.entityToTrack));
    this.accel.y = this.trackAccel * Math.sin(this.angleTo(this.entityToTrack));
  }
  else if (this.entityToTrack){
    this.accel.x = 10*this.trackAccel * Math.cos(this.angleTo(this.entityToTrack));
    this.accel.y = 10*this.trackAccel * Math.sin(this.angleTo(this.entityToTrack));
  }
}

The game, The Sword By My Side, for the band The Thermals, can be played here http://theswordbymyside.com. Thanks to Saddle Creek Records for being awesome clients, and to Ryan Malm for the fantastic art/animations.

TwitterFacebookGoogle+

Modifying a Tweet button dynamically to tweet your game’s score.

TwitterFacebookGoogle+
Screen Shot 2013-12-11 at 11.19.38 AM
This thing right here.

I’m not going to bore anyone with why they should include social sharing buttons in their game or around their game. Instead I’ll just jump into the details about how to modify the tweet button dynamically.

I figured twitter provided some api or something to allow people to do this. Nope. They don’t.

This came about when my client, Saddle Creek Records, didn’t just want a twitter share button, but wanted a button that would report the score. “Ok simple enough” I thought. I figured twitter provided some api or something to allow people to do this.

Nope. They don’t.

Here’s how a simple tweet button is made:

  • go here https://about.twitter.com/resources/buttons and click on stuff to construct your button code. The ‘text’ of the button is set inside this anchor element as the “data-text” attribute.
  • insert the provided anchor element code into your website
  • when someone loads your page, twitter scripts change the anchor into an iframe (usually with id ‘twitter-widget-0′, but you can specify your own ID by giving the original anchor an ID).
  • done.

Since the button is in an iframe as far as I can tell there’s no way to alter the guts of the button due to browser security. So the way I did it was this:

  • blow away the iframe. get rid of it. erase it from history.
  • create a brand new anchor element
  • dynamically add all the attributes to the twitter anchor element to make it look legit and proper.
  • attach the new anchor to the iframe’s parent element.
  • tell the twitter scripts to reload the twitter button.
  • done

Here’s the code:

</pre>
<div class="fltrt" id="tweetStuff"><a class="twitter-share-button" href="https://twitter.com/intent/tweet?text=Play @thethermals 'The Sword By My Side video game!' &url=http://theswordbymyside.com&button_hashtag=SwordByMySide" data-lang="en" data-related="saddlecreek:thethermals">Tweet</a></div>
<pre>

And here’s the javascript function that when called will change the tweet button.


setTweet = function(){
  var myDiv = document.getElementById('tweetStuff');  //this is the parent element of the iframe/anchor
  var iframe = document.getElementById('twitter-widget-0'); //this should be the old iframe you want to get rid of

  if (iframe && myDiv){
    //blow away the old iframe
    iframe.parentElement.removeChild(iframe);
    //make a new anchor from scrath
    var anchor = document.createElement('a');
    anchor.setAttribute('href', "https://twitter.com/intent/tweet?text=I scored " +ig.game.getScore() + " in @TheThermals 'The Sword By My Side' video game! Play here: &url=http://theswordbymyside.com&button_hashtag=SwordByMySide");
    anchor.setAttribute('class', 'twitter-share-button');
    anchor.setAttribute('data-lang', 'en');
    anchor.setAttribute('data-related', 'saddlecreek:thethermals');
    myDiv.appendChild(anchor);
    //run the twitter magic to make a new button 'seamlessly'
    twttr.widgets.load();
  }
}

(note that in line 10 the ‘ig.game.getScore()’ function returns the score of the game)
Then inside your game you can fire the setTweet() function whenever you want. In my game it fires off at the end of the game after the player beats it. They can then tweet their score.

The game, The Sword By My Side, for the band The Thermals, can be played here http://theswordbymyside.com. Thanks to Saddle Creek Records for being awesome clients, and to Ryan Malm for the fantastic art/animations.

swordbymyside

ps: I tried saving the original anchor element in the dom, modifying the ‘data-text’ attribute, then building the button instead of making a whole new anchor element. This worked, but the button image was replaced with just a simple ‘Tweet’ text, and I didn’t feel like investigating why.

TwitterFacebookGoogle+

new game, Broadside!

TwitterFacebookGoogle+

Just finished another html5 mobile game, and i’m prepping it right now to ship off to publishers/portals.

Broadside is a fast-paced, space strategy game. Can you do enough damage to the enemy ship before they do the same to you?
Broadside is a fast-paced, space strategy game. Can you do enough damage to the enemy ship before they do the same to you?

There were a fey features I kept in mind while making Broadside:

  • For ease of play on mobile, it needed to support a single touch action (tap to select turret, tap to select target)
  • I wanted to feature art from the really cool new art/drawing program called Hexels.
  • keep it small, simple, and casual.
  • I wanted giant space ships shooting at other giant space ships slowly and surely, like how I would imagine a space fight between two Star Destroyers
  • optimized for mobile browsers (it actually plays better on a touch screen than with a mouse!)

It took a lot longer than I wanted it to because of me getting busy with other things, but I’m pretty satisfied with the results. At some point I would really love to expand on the idea and make a sequel. New ships, new levels, new weapons, space fighters (imagine Protoss Carriers from the original Starcraft) and maybe even some space opera narrative.

 

To play simply click on the image above or go here http://slouchcou.ch/games/broadside/

TwitterFacebookGoogle+

What’s next after Drugbound? Making TONS of smaller games, that’s what.

TwitterFacebookGoogle+

Drugbound was a really fun learning experience for me. Here are a few things I learned:

  • Don’t set your sights too high.
  • Estimate how long you think a game will take to make, then quadruple it.
  • Don’t let feature creep in.
  • Nobody trusts, likes, or cares about in-app purchases for html5 web games
  • don’t do too many changes to your canvas context each cycle (really brings down performance).
  • don’t make a complex UI using css 3d transitions, because different browsers.

And most importantly for me and my style of working:

  • do NOT spend an entire year on a single game because you’ll get about 1000 other ideas during the course of making the game that you won’t even be able to touch until afterwards.

    SpaceTime is an html5 block color matching game. It was made for One Game A Month in about a week.
    SpaceTime is an html5 block color matching game. It was made for One Game A Month in about a week.

The game was met some modicum of praise and I consider it a success in that I have shipped something. I’m completely glad that I did it and I can’t wait to make more games about even more complex issues we face in the world today.

But for right now, I’ve set my scale much smaller thanks to the folks at One Game a Month. Basically One Game a Month is a nice way to motivate people to make one game per month (or more). In order to do so you have to think of a game that you believe will only take a few days or a week to make, and then work on it all month. I am really a big fan of this format because it allows me to vomit forth all of the neat little ideas I had while making drugbound and make games out of them.

Cave Rush 2600 is an atari-styled running game where you tap to change how gravity affects your robot. It is also very brown.
Cave Rush 2600 is an atari-styled running game where you tap to change how gravity affects your robot. It is also very brown.

Drugbound was my January submission to One Game a Month. The February and March games I made all in about 2 weeks at the end

of february and beginning of March. They are SpaceTime and Cave Rush 2600 respectively. They were both very short games I made just to get some simple games that also work in mobile web browsers, which they do.

If you’re interested in doing One Game a Month it’s completely free and you can jump in at any time of the year. My friend and fellow Omaha game maker/artist Ryan Malm just jumped in a few weeks ago and already made a slick asteroids clone for March, Planetoid Decimator.

TwitterFacebookGoogle+

DRUGBOUND IS RELEASED

TwitterFacebookGoogle+

GAME IS RELEASED! Play it on the web for absolutely free here:

 
DRUGBOUND BUGDROUND GROUNDBUG BOUNDTHUG DRUGBOUND HUGDRUM HUGEPROUD DRUGBOUND

TwitterFacebookGoogle+

Play the latest build of Drugbound NOW

TwitterFacebookGoogle+

Play Latest Drugbound Build Here

Drugbound is officially in open alpha status!  I have all the major gameplay mechanics down and mostly polished. The store is about 30% done and only has a few items for sale currently. Also no achievements yet. Those will all be coming soon in the next alpha release.

So far it works in desktop browsers Chrome, Firefox, Safari, but i’m not sure if it will work in IE 9+ at this point with sound. Safari on a retina display will be weird looking but i’m blaming Apple for a getImageData() bug on that one.

Feel free to play as much as you want and if you’d be so kind leave some feedback or let me know about bugs etc etc.

i am a magical winged horse

Play Me Play Me Play Me

TwitterFacebookGoogle+

A couple of Impactjs plugins for juicing your game. (screen shake and time slowdown)

A couple of Impactjs plugins for juicing your game. (screen shake and time slowdown)
TwitterFacebookGoogle+

If you haven’t seen the Juice it or Lose it talk by Martin Jonasson and Petri Purho you’re really missing out.

It is basically two guys talking about really cool ways you can polish your game to look better, to add life to it, and to make the player feel like she/he is really part of the game world.

Two very big ways that I’m adding juice to my current game is by adding well-timed screen shakes and split-second time slowdowns.  I have made two Impactjs plugins and made them available to anyone else that wants to do the same.

Screen Shake – (source on github)

The first is a Screen Shake.  I feel this doesn’t need a lot of explanation. It shakes the screen as intense as you want, as long as you want. It works like pretending there is a spring on the ig.game.screen.x and ig.game.screen.y values and bounces the screen around according to how a spring would react. You can make the spring stiffer or decay faster, or whatever you want.  One place I use it is whenever a buzzsaw smashes into the ground, adding weight and force to the buzzsaw.

//include in your .requires{} section:
.requires{
    'plugins.screenshaker'
}

//include in your game's init() section somewhere:
myScreenShaker: null,
init: function(){
    this.parent();
    this.myScreenShaker = new ScreenShaker();
}

//include in your game's update() section somewhere:
update: function(){
    this.parent();
    this.myScreenShaker.update();
}

And then to use it just apply a toggling force to the fake spring via the following method. (also note the toggling forces are additive and stack well with eachother!)

    ig.game.myScreenShaker.applyImpulse(300, 500);
    //300 = motion in x direction, 500 = motion in y direction)
    //values can be negative as well.

Time Slowdown – (source on github)

The second juice technique is a time slowdown. I use this for flashing time slowdowns briefly, like when the player dies in a certain way (for example when he gets cut in half by an orbital laser here at 33s into the video. don’t blink or you’ll miss it.)

I also have time slow down momentarily before you reach the end of each level. It’s just a nice simple effect that adds a little juice to the game that i like.  It’s fairly easy to use, and even comes with a SuperTimer class so you can create timers in game that are immune to the slowdown (for example the slowdown’s actual timers are all SuperTimer objects for obvious reasons).

//include in your .requires{} section:
.requires{
    'plugins.timeslower'
}

//include in your game's init() section somewhere:
myTimeSlower: null,
init: function(){
    this.parent();
    this.myTimeSlower = new TimeSlower();
}

//include in your game's update() section somewhere:
update: function(){
    this.parent();
    this.myTimeSlower.update();
}

Then to use it you just call the method below with the four parameters shown:

ig.game.myTimeSlower.setTimeScale(timeScale, x, y, z);
//timeScale => time scale value, between 0 (stopped) and 1 (regular speed)
//x  => gradually go from regular time to timeScale over x seconds (linear slowdown)
//y  => stay at timeScale for y seconds
//z  => gradually go from timeScale time to regular time over z seconds (linear speedup)  

Both of these are freely available to use for whatever reason by anyone, and are licensed via WTFPL.

TwitterFacebookGoogle+

IGF Submission Trailer for Drugbound

IGF Submission Trailer for Drugbound
TwitterFacebookGoogle+

I submitted Drugbound to the Indie Games Festival (IGF). Here’s the trailer video featuring some incredible music by Electric Children.

I was furiously working right up until the deadline putting the video together and making last-minute tweaks to the game.  The cool thing about IGF is you only have to submit to IGF that you have a game, meaning i can constantly continue updating it and making it better as the festival date approaches.

The game is unfinished but I’m very satisfied with what is done so far, and even if I don’t become selected as an IGF finalist my hope is to at least make a few impressions on some of the judges or anyone else that puts eyeballs on my game.

TwitterFacebookGoogle+