Monday, May 27, 2013

Late May Post

Hey guys.  It’s been a little while since my last post.  That’s mostly because I've been really busy.  I could probably pick one of ten things going on and fill this post with just that.  This will probably be the last non Dawnshine related blog that I link to the Dawnshine Facebook page.  Those of you that are FB fans of Dawnshine but not Stigma Games and you still want to read these, Like SG too.

The programmers on our team are good, but generally programmers I encounter come in two kinds: experienced enterprise programmers who how to code really well, but have never made a game before and young programmers who've either come out of academia or are self taught on something very specialized and lack that overall level of experience.  I can hand over the designs to one of our games to a programmer of either type, but unless I tell them what tools, languages, engines, libraries, etc, to use, they don’t know how to proceed.  Well, if they’re the programmer, they should figure that stuff out, right?  Not really.  It’s a lot more complicated than you might think.  To explain how, let me give you an insight into what programmers are like.

Programmers aren't always interested in creating things that are marketable.  They’re interested in challenging themselves to create something that solves a problem.  Sometimes that problem has already been solved and they have no idea.  Sometimes that problem is so specialized, it doesn't really need to be solved.  And sometimes that solution is amazing, but hard to turn into something practical.  But because of this, there are dozens of new programming languages, engines, sockets, server protocols, operating systems, and libraries created by programmers every day.  Some of them catch on, but most don’t.  Knowing which of these should be used, in which situation, and in conjunction with what, is really tough.

Now consider that new programmers I bring in are generally expecting an organized environment where they can learn what to do.  Generally what I would do if we were fully funded is hire an experienced lead programmer to give them tasks to do and train them.  Well, considering that we’re all working from home without a studio, we can’t really do that.  This falls to me to make these types of decisions, point a programmer in the right direction (what I think is the right direction) and either they follow it or they wonder why no one is holding their hand and they sort of fade away.

In either case, I’m trying to learn this stuff.  I've probably mentioned the Hacker Lab before.  I used to only go there for game related topics, but I've found it really useful to hit up the general coding topics.  Even if it’s not directly game related, it’s really helpful in understanding the difference between using XML to dynamically query an SQL and using JSON, knowing when the canvas tool is too slow and you have to use WebGL, how effective is a NodeJS set up server?  I still have a lot to learn.  In the meantime, Unity is free.  That’s what we’re using for most our games until we find something we like better.  A few miles from my house, KlickNation, now owned by EA Games, is using Unity for their mobile games.  If it’s good enough for EA… hmm.

I've been considering the Leadwerks engine.  I’ve been keeping my eye on it for about a year now.  I find it compelling for a couple reasons.  One, you can use C++ and Lua directly with it—two languages I’m comfortable with.  And two, and more importantly, the Leadwerks development company is located in Sacramento.  I've hung out with the president of the company recently and talked to him about it.  He’s offered us an amazing discount.  I've also talked to our programmers about it, and they’re interested in trying it out.  The problem is that C++ might be the industry standard, but usually programmers would rather use Java / C# than C++.  The main reason why is garbage collection, although inheritance issues are also easier in Java / C#.

Ok, so what is garbage collection?  In object oriented programming, you create classes that are a list of fields of what an object might have.  If the class is “dog,” maybe you have the breed, the weight, the age of the dog, the name of the dog, the name of the current owners, etc.  Then you instantiate a dog, aka, you say, “Ok, so I’m going to use this class and create a dog named ‘Lucky,’ who will be ___ breed, weigh ____ much…” and so on.  There, you just created an object.  A …um, dog object.  Objects can be less interesting than that, like the annoying pop up window or even more basic--the size and position of the pop up window can be a separate “object.”  Now let’s say the program allocated memory to this object so it could be used, but now you’re now done with it.  You want to de-allocate that memory so that something else can use it.  Cool.  In C++, as part of the class you defined, you have to lay out how the object no longer in use will be destroyed.  If you don’t program things correctly to destruct the object at the correct time, you could get a memory leak until finally the Blue Screen of Death.

Now you might be thinking… “Hmm, I haven’t gotten a BSoD in a really long time.”  Part of the reason for that is Java / C# does garbage collection automatically and Java and C# are what a lot of Windows programs are written in these days.  In Java / C#, if an object no longer has anything able to access it, then it will be destructed automatically so that it will never cause a memory leak.  For a programmer to never have to worry about destructing objects again, it’s a pretty cool thing.  But as with anything, there has to be a downside, and that is that a language that runs garbage collection runs slower.  Unity uses C#, meaning that ultimately, it will usually run slower than a pure C++ built game.  How complicated does the game have to be before the player will notice the performance hit?  That’s one of those things, you program games long enough, and you know the answer to questions like that.  We’re a young team and we have years of mistakes to learn from.

 Let’s do some Sacramento news.  A couple weeks ago, Sacramento got an official IGDA chapter.  Gabriel Guittierrez (luckily I have his business card right in front of me or I never would have spelled his last name correctly) of Nascent Games is the Chapter President.  I met Gabriel about a year ago.  He seems like a really nice guy.  I've been helping him out with creating content for the IGDA website.  Stuff like, if you live in Sacramento, want to get involved in making games but have no idea where to go, what you need to know, and who to talk to?  Having one site that’s specific to Sacramento and answers stuff like that can be really helpful.  There are a lot of talented people here, but they have no idea how to get started.  Oh, anyone reading this that doesn't already know me, feel free to email me and ask me some of those questions.  My email is brian at stigma games.  I’ll try and help if I can.  I will say I get an email from a new person about every day or two, so it can sometimes take me a couple days to respond.  But if I can help aspiring game developers in the area get started on the right path, feel free to ask me stuff.

We’re still working on Dawnshine.  I’m working on an ability, class progression system (I know, “What?! You’re just now doing that?”) down to the last detail, and a naming convention for the Neg Wath people based on their tribal affiliation, moiety kinship, spirit animal, and gender.  I’ve also been separating phones that make up the Neg Wath language.  I’m not going to create a fictional language for them, but if I can isolate consistent sounds for the Neg Wath, their names for things will all sound Neg Wath-y.  There are hundreds of sounds possible for humans to make, far more than our adorable little 26 letter alphabet might have you believe.  Every little thing you can do to make a sound, there’s a technical term for.  I had to take a year worth of linguistics as part of my Anthro degree, though I never thought I’d ever need to know the difference between a voiced alveolar fricative and a non voiced one (one’s a “z” and the other an “s”).  But this is actually really helpful.  When it’s all done, players will at least subconsciously know it’s done right.

That would be cool that you pick those things with your character and hit the Random Name Generator and it gives you something that fits with lore.

As a side note, a younger, more naive me once went to the career pavilion at GDC, trying to explain to the interns posing as hiring managers why they should hire an Anthropologist to create their game lore.  That worked out as well for me as it sounds.

As for our other game projects, I’m hoping we’ll be able to announce something soon.  One of our games has been playable on a phone for months now.  Stay tuned.