Wednesday, April 17, 2013

Tool Time!

I'm adding this post to remind myself of all the tools I use and need on any dev environment I setup ever.   There are so many useful things, and they're easy to forget.  Then, you spend 20 minutes hunting them down again when you need them.

Of course, this list is sparse right now because I can't remember all the tools I use...

Bash:
https://coderwall.com/p/oqtj8w

Sunday, March 31, 2013

Why I hate JavaScript.

Okay, I feel like I should elaborate on why I hate JavaScript, so THIS post is going to be a collection of JavaScript failures from around the net.  True, you may say that they're the result of poor programmers writing bugs, but I'm going to do my best to show examples where it's probably not the programmer's fault.


CASE ONE: DUO LINGO

Duo Lingo is pretty good.  Certainly, it seems to be well coded (though, in all fairness, it's not excessively complicated client-side).  Howerver, sometimes it fails, and when it fails, it fails hard.  Here's a screen where the user is supposed to type what is spoken.  Unfortunately, it doesn't play anything.  Not even when you click the button.  Why is this?  I think maybe it's because JS is terrible and the code to play the sound may have failed to load in one way or another.

Here's how to continue on despite this setback, if you're interested.  In Chrome, right-click the speaker button (#1 in the picture) and select "Inspect element" (In other browsers, you're going to have to find the code for the speaker button.  You should just have to view > source and search for "speaker-audio").  This will pop up the panel above.  Then, right-click the link (#2 in the picture) and select "open link in new tab" (on other browsers, copy and paste this link into a new tab).

And voilĂ  (I just looked up how to spell that... I'm learning Spanish, not French...)!  There you have it.  The sound is there.  The link is in the code.  The button exists.

JavaScript sucks.

Wednesday, March 27, 2013

I hate JavaScript.

JavaScript is bad.  AWFUL.  If you don't believe me, pick up any book, watch any video, read any tutorial on learning JavaScript and wade through the intro that apologizes for all the bad parts of JS.  Even one of the most recommended books for learning JS clarifies that it's about "the good parts."

Unfortunately, as they say "it's the language of the internet."  Eventually, we all come in contact with it, whether we want to or not.  I'm just making this post to link to all the resources I find that help make sense of the world's most prevalent and terrible language.

JavaScript:
Getting Started (the good parts): http://amzn.com/0596517742
Evangelist: http://yuiblog.com/crockford/
Detecting null/undefined/non-existent: http://lisazhou.wordpress.com/2008/06/17/javascript-detect-null-object/

Popular JS Frameworks:
http://backbonejs.org/
http://marionettejs.com/
http://handlebarsjs.com/
http://twitter.github.com/bootstrap/
http://jquery.com/
http://jqueryui.com/
http://meteor.com/
http://angularjs.org/
http://emberjs.com/
http://embeddedjs.com/
http://expressjs.com/
http://meteor.com/

CSS:
Style Inheritance: http://www.vanseodesign.com/css/css-specificity-inheritance-cascaade/
Style Reset (remove browser defaults): http://meyerweb.com/eric/thoughts/2007/05/01/reset-reloaded/
 SASS (better way of writing CSS): http://sass-lang.com/ 
Compass: http://compass-style.org/



Additional Tools:
Server-side JS: http://nodejs.org/
Grunt Task Runner: http://gruntjs.com/
NPM (Node Package Manager): https://npmjs.org/
Underscore JS library: http://underscorejs.org/ 
Wrapping it all together with Yeoman: http://yeoman.io/
Angular Tutorials: http://egghead.io/
Angular with Express and Node: http://briantford.com/blog/angular-express.htm
Full Stack for Node: http://towerjs.org/


Additional Info:
Video and Book about Single Page Web Applications: http://www.youtube.com/watch?v=OrIFaWJ9Glo

Monday, February 25, 2013

New Site!

I'm not sure how best to transition this blog to my website or if I'm going to do that at all.  But if you're here now, and wonder what I'm doing, then you might want to check out my site:


From now on, I will be updating that with my current apps.  I still don't know how I'll link it and this blog, but I'll figure that out later.

Saturday, February 9, 2013

Star Panda - Delivered!



           

Click the above links to see the apps in Apple's App Store!


Wow, it's been about five months since my last app release....

At this point, making apps is not difficult, it's just very, very time consuming, and of course, life gets in the way.  Between this app and the last, I learned quite a bit of Japanese and spent three weeks touring Japan.

Anyway, this latest app was made for my good friend Natalie.  It was part of this pay-it-forward, craft-along thing.  Eventually, I'll be making another app for another friend as a part of it.  More on that later.

As for Star Panda, it's a fun little arcade game wherein you tour space attempting to collect cute animal friends and avoiding evil space bats and lizards.

  

Again, I was obsessed with a control scheme and made a game explicitly to explore it.  The panda's controls are modeled after the super sheep in Worms Armageddon.  I've always liked how learning to control them was an art in itself.


This was one of the most interesting releases I've had.  I got denied by Apple because my app did not use Game Center.  I had no idea they did that.  Certainly, I've never heard of an app being denied for not supporting Game Center before.  I ended up adding it in, which was exceedingly easy with Corona, but it was still a bummer having to wait another two weeks to release it.



I may start integrating Game Center into all my apps.  At the very least, they won't get denied anymore for not having it.

Well, time to get back to work.  I'm hoping to up my output this year, and those games aren't going to write themselves...

Sunday, September 30, 2012

The Last Thumb Fighter - Delivered!

           

Click the above links to see the apps in Apple's App Store!

I've finally completed my first mobile game, The Last Thumb Fighter!  It has been seven months in the making.  I should really spend more time writing apps...

Anyway, it's done, and instead of talking about what it is, I'm going to let you go check it out above.  For those that are interested, I'm going to talk a bit about development.


It all began with a simple thought.  That thought was, "Y'know, I love playing games with my friends, and there's no game that you could just pop out when you're hanging out at a bar and play with each other."  Of course, there probably are some out there, but who has the time to search the app store for them?

So, that got me thinking about how you might play a game with your friends, and I stumbled upon this idea of holding the device between the two of you, each with one thumb on it.  Everyone I described this two had the same feedback, "That would be awkward, and there's not enough room for it."  And every time I got this feedback, I pulled out my iPod and made them hold it between us, and it just works.

That's gave birth to the idea, and shortly thereafter I began the prototype.  The first iteration was just two circles shooting circles at each other.  There was no game there, but the interaction just felt so right.  You can judge for yourself whether or not the game's a success, but I think that regardless of how you feel about the overall product, you'll agree that interaction is successful.


From there, development went remarkably smoothly.  I took the lessons of my last project into this and made a list of all the things I need to do, and one by one, I implemented each item and checked it off the list.

I hit a few stumbling blocks, from which I learned a few things, which I will share with you now.

1. Corona handles drawn images better than circles.  With just a few newCircle calls, you can bring your app to its knees.  Fortunately, there's an easy solution: draw your circles in your favorite paint program and use them instead.  I recommend doing this early on because there are some subtle differences in how you handle the two, and it's no fun searching and replacing all the circles in your code.

2.  Corona's button widgets are odd.  They seem to be built for single interactions.  You'll notice that before the co-op and multiplayer, you and your friend can select your ships at the same time.  This created some funky bugs where the input bounced back and forth between simultaneously clicked buttons, resulting in the ship selections changing randomly.  I ended up scrapping Corona's buttons in favor of my own.  It turns out, my custom class was pretty easy to write.  It's not as fully featured, but it gets the job done.


3.  Sound is hard.  There are definitely some little gotchas in implementing sound.  Take a very careful look at how the samples work when you write your own.  I actually learned much more about this when I created the update for Wizard's Magic Ball, but more on that later.  However, what I'm really talking about is writing music.  I haven't ever done that before, and I learned as much or more about sound than I did about everything else in this project.  At some point, I'll have to do a post about how I write and record music.

4.  Corona is remarkably easy to upgrade and well documented.  No, this wasn't a stumbling block, but it helped me through several.  I upgraded Corona once during this project when the New iPad came out, and there was a tiny change (for the better) to the button widget.  That was the only thing I had to change.  And throughout the project, I relied heavily on Corona documentation, which is fantastic.  Great documentation can make up for many faults in an SDK.

And there you have it.  There's so much more I could say about this project, but I'm not sure what would be useful or interesting to someone stumbling across this blog.  I'm sure I'll be mentioning it often in the future (assuming I do more than a single blog post per release).  If you've read this far and you have questions, fire away.  I'd love to start a dialogue about indie game development.

P.S.  I'm not one for taking away dev time to write blogs, but I have the upgrade to Wizard's Magic Ball and my adventures with other SDKs like Moai to talk about in the future, so barring any unforeseen laziness (or more likely, busyness making apps), look forward to posts about those in the future.

Saturday, September 29, 2012

Wizard's Magic Ball 2.0 - Delivered!

If you've got my Wizard's Magic Ball app, then you may have noticed an update today.

That update is a neat, new customization feature.  It allows you to write and record your own answers for the Wizard's Magic Ball.  If you're unhappy with what you've recorded, you can always restore the default voices (though, you have to save again if you want the default to stay on).

Also, if you look at the screenshot to the left, you'll probably notice the difference in color between the "yes" and "no" answers. This is to indicate which group the answers are in for rigging.  If you rig for "no," you'll get an answer for the orange group, and if you rig for "yes," you'll get an answer from the green group.

Go try it!

Also, look for a couple of very special updates tomorrow....

*Sneak*

(Oh, side note: this is not yet released on Android.  That will happen sometime soon...)