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.
No comments:
Post a Comment