Categories
Game Development Geek / Technical Linux Game Development Marketing/Business

Gearing Up for Release: Platform-specific Issues

I started a three-month project at the beginning of the year, and I’m now in the eighth month. I reported on the reasons why it was taking so long last month.

But I’m feeling pretty good about it, and while I still have some balance issues to work out, and it’s a bit ugly, I’m preparing for the actual release.

The thing is, I haven’t really done a serious release before, and since I want to do a simultaneous cross-platform release, I’m finding issues unique to each platform.

The platforms I currently support:

  • GNU/Linux
  • Android
  • Windows

What I want to support:

  • Mac OS X
  • iOS

I’ll start with Apple platforms, then talk about the environment I use natively. Other platforms will be discussed in the next post later this week.

Mac/iOS: no development or testing environments

I would love to create a Mac port. I know it is theoretically possible to create a cross-compiler to generate a Mac version, but it seems I need Mac-specific libraries, which requires owning a Mac.

I don’t own a Mac, and while I know of virtual Mac services you can subscribe to online, I haven’t bothered to look too seriously into them. I would also like to be able to test the game, and so I would need to use a Mac in order to see how it really runs, especially after running into the Windows-specific issues above.

As for iPhone or iPad, I’m in a similar position. I don’t own an iOS-based device. As I’m using libSDL2, I know it is possible to port to it, even without a Mac, but I would need to look into how to do so, and I would still need to invest in the devices to test on.

I am saving up for these things, but at the moment I don’t have them and I don’t want to spend time on them until I know what I’m doing.

And in the past it’s been difficult to hear back from people willing to be paid for porting a game for me, and volunteers have had difficulty figuring out how to put my project together on their system. I might look into it again, because that was years ago, and it’s a different world today.

GNU/Linux: distributing dependencies and architecture compatibilities

I develop and test the game on my Ubuntu GNU/Linux system, and the main thing to worry about there is that I can distribute the game and have it work out of the box on other distributions.

My game uses libSDL2 and related libraries. While I installed them on my system using my package manager, I can’t assume that my customers will have them installed as well.

Basically, I need to build custom dependencies, as per Troy Hepfner’s excellent article series on Linux Game Development, and then distribute them with my game.

Quite frankly, rather than worry about an installer to put everything in the correct locations on someone’s system, I think providing a basic tarball might be fine. Rather than provide .deb or .rpm or customer shell installers for each type of system, and then worrying about following the correct Linux Filesystem Hierarchy Standard, you allow the player to put the game in the directory of their choosing, extract it, and play.

But then I need to worry about how the tell the system to load the libraries. Running an application on Windows, the system generally looks in the local directory for libraries to depend upon. Unfortunately, Linux-based systems don’t do so, and while there is a way to point it towards your libraries using the LD_LIBRARY_PATH environment variable, I also know that it is frowned upon to do so due to the security and compatibility issues it can introduce.

On the other hand, many popular commercial games on my system do just that. For instance, looking at the directory for Don’t Starve, I see:

$ cat bin/dontstarve.sh
#!/bin/bash
export LD_LIBRARY_PATH=./lib64
./dontstarve

The fact that it is in this shell script wrapper is better than the original concern of changing the default environment variable in a more or less permanent way, which can cause version conflicts and such. It’s your program. You know what it needs, and any other applications that run will not be affected.

Still, supposedly the better way is to tell your binary at build time where to look, which isn’t very difficult. It requires -rpath=\$ORIGIN/[directory where you put your libs]. $ORIGIN expands into the directory that your binary is located.

So if the extracted tarball would have the following structure:
– foo-bin
– libs
– libfoo.so
– libbar.so

Then I would build foo-bin with -rpath=$ORIGIN/libs.

Of course, now foo-bin MUST be in the same directory as libs, but in practice, it’s fine. When was the last time you moved parts of a game’s files to different relative locations and expected it to continue to work?

I’m sure there’s issues with this approach as well, but with these two approaches, there’s plenty of precedent.

The only unknown I have is dealing with 32-bit vs 64-bit systems. Ubuntu has multiarch support, but I’ve seen comments on forums about people not being able to run an application due to architecture issues.

Don’t Starve distributes separate 64-bit and 32-bit builds. FTL, on the other hand, distributed both the 64-bit and 32-bit binaries and libraries together, and using a shell script, it determined which platform you were on at runtime to point LD_LIBRARY_PATH to the appropriate directory.

And other games distribute all desktop platforms together in one file, so if you bought the game, you bought it for Windows and Linux and Mac, whichever one you wish to play on. I like this option, especially since I hate the idea that I have to pay for a game twice in order to play on two different platforms.

I know some companies make their living by porting games and then selling them directly, but it’s not a business model I prefer.

Next time

In the next post, I will talk about issues specific to Android and Windows.

Categories
Game Development Personal Development

The Satisfaction of Building It Yourself

I like building my games with my own tech.

There was a game jam in which I used Stencyl, but otherwise, all of my projects have been based on my own hand-coded C++ with libSDL. I spent time figuring out how to write a basic game loop, how to design my software architecture, how to create simple buttons to interface with, and more.

It’s time I could have been spending designing games rather than implementing them. I know this fact.

And yet, I persist.

Over the years, I’ve been told to switch to Flash, or use an engine like Torque 2D or Unity. When XNA was released, I remember wondering if C# was going to become the dominant programming language in game development.

But my C++ game engine is still with me, and still relevant. Granted, it’s not as full-featured as some systems, and the asset pipeline is still a manual effort. But what it does feature is well-tested, and I know how it works.

There’s something about learning how to build it from scratch that makes development more enjoyable. My A* pathfinding algorithm might make oddly suboptimal paths, but learning how the algorithm works and figuring out how to implement it was a fantastic experience.

Debug Path

As you can see from this 2010 development shot of what ultimately became Stop That Hero!, the AI hero should have followed something like that yellow line rather than the path it actually took.

It’s sort of like doing my own home repairs. There are some things I’ll leave to well-paid experts, but other things shouldn’t be too difficult to do. For instance, replacing the toilet’s fill valve and flapper took a small trip to the hardware store to get a replacement part and then a few minutes of work.

A bigger project I finished recently involved putting lockable doors on shelves we have in the basement. My wife and I are getting licensed to become foster parents, and part of the requirements for our home’s safety include keeping flammable materials such as paint in a locked storage area.

Rather than buy a big expensive cabinet, I thought, “We already have these wooden shelves in the basement. How hard could it be to put up a piece of wood with some hinges and a padlock?”

Basement Shelf With Paint Cans

I measured the area I needed to cover. I bought the wood and had the guy at the store cut it for me as I didn’t own a power saw myself. I learned the screws for the hinges were longer than the wood was deep, and I found that you could get 1x4s to frame the wood to make it look nice while also giving the door the thickness needed for those screws.

Gizmo helping with 1x4s

Plywood, 1x4s, and a drill

Framed plywood

Spray painted doors

Door mounted with hinges

Finished product

In the end, the doors looked nice enough and were functional, although they are not perfectly centered, as you can see. It turned out that the dimensions I measured didn’t take into account parts of the shelf protruding in ways that would prevent the doors from fitting perfectly. The good news is that they look homemade. B-)

Now, it took some time. I had to go to the hardware store a couple of times to get all of the materials, and I had to spend time on it when I could have been doing something more important, like working on finishing my game before we have foster children in the house. Did this time and effort translate into a better return on investment than the $90 cabinet I thought we could avoid buying?

No. In fact, we probably overspent on the wood and other materials for other projects.

But there are some benefits to having done it myself.

One, I learned 1x4s are not actually 1 inch by 4 inches. I never knew this fact, but when you buy wood, you need to expect your 1x4s will be 0.75 inches by 3.5 inches. It’s about how the wood is when it is cut and rough versus when it is dry, planed, and made ready for sale. It’s just one of those things that I now know for future projects. Luckily, the screws I had to attach the 1×4 to the plywood weren’t too long, but that could have been another trip to the hardware store since I was expecting the nominal dimensions to be the actual dimensions.

Two, I discovered that I can improvise a carpentry job. I had not made plans, yet I was able to put together some decent looking doors. When I ran into trouble, such as finding out that the doors wouldn’t fit where I expected them, I was able to shift them to different parts of the existing shelf and keep going. I could easily have given up when I found out that the doors were just a little too big, but I made it work. If I was doing kitchen cabinetry, I would have been more careful, but this project was more about the functionality than the aesthetics.

Three, I have the pride of saying, “I built that myself.” There’s nothing like that feeling.

My game development efforts might result in projects that are somewhat askew like my basement shelf doors are. It might take me longer. The end result might be less than what I could have gotten had I leveraged someone else’s efforts.

I know.

But I am a much stronger developer than I was in the past mostly because of all of the from-scratch efforts I have put in. I did the research myself. I explored from first principles rather than taking the shortcut of an existing path. I understand the trade-offs involved in design decisions rather than accepting decisions made for me.

And in the end, when I release a game, I can say proudly, “I built that myself.”

It won’t likely be important to my customers. And it won’t likely be important to you. But as an indie game developer, I don’t have to pay attention to your criteria for what’s the best approach.

I can build it myself, a process I enjoy.

And next time, I will be more experienced and knowledgeable than I was before.

Categories
Games Geek / Technical

Becoming an Accidental Fan

When I was a child, I had an allowance.

I had an interest in Archie comics, so sometimes my $2 per week would go towards an Archie Double Digest, but other times I would save up until I had enough money to buy myself a Nintendo game.

At the time, for you young ones who didn’t know, the games would go for about $50. If you do the math, that’s a long time to wait, but there was always birthday money, some of which I got to spend on what I wanted before the rest was thrown into savings for me, so it wasn’t always interminable until I could get my next game.

But as a child, and probably before I had Nintendo Power to tell me what games were being released, I didn’t always have a game in mind to buy. I just knew that by the time I saved up the money, I would go into the store with my parents and look at the walls of the video game aisle until I found something that looked like what I wanted.

I recall one time seeing a blue box with pock-marked fighter plane shooting through a hole in the sky with a space background behind it, guns blazing and everything. I thought it was an F-15 flight simulator that I had seen an ad for in a really old issue of Electronic Gaming Monthly.

I was a kid. I didn’t know what an F-15 was. I just knew it was a plane that shoots other planes, and that I wasn’t playing Top Gun at my friend’s house with its incredibly difficult carrier landing sequences. So I thought I was getting another cool shooty-plane game.

It turned out to be Thunderbirds.

I had never heard of Thunderbirds, but I remember really enjoying the game with its various ships in different environments. You only had so many in-game days to fight your way through your choice of different areas to defeat Hood’s plan to rain destruction on the world, and that extra layer of mechanics made an impression on me.

Then I discovered that the game was based off of a television show from the 60s involving marionettes who spoke and made their emotions clear on their faces using “SUPERMARIONATION!” Not to be confused with Super Mario Nation.

It was exciting for me to know that I can enjoy this world in another way, especially when I was in college and TechTV aired the series with a pop-up-video-esque bits of trivia about how the scenes were made or how the characters interacted.

When the Thunderbirds live-action movie was released, starring Bill Paxton and Ben Kingsley, in the summer of 2004, close to my birthday, I tried to arrange an outing to go see it. Unfortunately, when my birthday arrived, I found it was no longer in theaters, due to how terrible it was performing. I still haven’t seen it, although even knowing it is supposed to be bad and that the creator of Thunderbirds hated it, I still would watch it.

What’s even more disappointing was that at the time, Team America: World Police was being advertised, and when I first saw the trailer for it, I immediately thought, “Oh! They’re making a Thunderbirds movie!” And then it revealed it wasn’t Thunderbirds at all. I haven’t seen it, either.

But the point was that buying a game without any idea of what I was getting into was a gateway into a world I didn’t know existed. Every so often the theme music gets stuck in my head, despite the fact that it has been years since I played game or watched an episode of the show, and my favorite ship is still the Thunderbird 2.

I accidentally became a fan because of a somewhat misleading piece of box art.

Another game I bought with my allowance money without knowing what I was getting into was Wizardry: Proving Grounds of the Mad Overlord. I saw the skeletons with swords and the very cool looking dragon on the cover, and I thought, “Yep, I’ll get that.”

And then found that I didn’t understand how to play. At the time, I might have been 9 or 10 years old, and I was used to games in which you played them and tried over and over to get through. I had no concept of the idea of building up experience and exploring a maze, mapping it out manually as you went because it was too much to try to memorize.

It was years later when I gained a new appreciation for the game, and it became one of my favorite RPGs. At some point, I discovered used copies of NES and Super NES games in the series, and when I discovered Interplay had published The Ultimate Wizardry Archives, which includes the DOS versions of Wizardry I, II, III, IV (in which you play as the villain Werdna from the first game), V, VI, and VII. It also had Wizardry Gold, which was basically Wizardry VII prettied up for Windows.

What’s funny is that despite liking Wizardry and owning every game in the main series, most of these games I only played a little bit. I never finished the first one, and I thought I should do so before moving on to the next. So aside from trying them out, and being somewhat disappointed that the music and graphics from the NES version were missing from the DOS versions, I’ve made these games wait for me.

And then there was Wizardry 8. I remember reading that it was being made, and that Sir-Tech was looking for a publisher.

And then I remember reading that they couldn’t find a publisher.

And then it was years of periodically learning that they still hadn’t found a publisher. I remember one article claiming that while the game would be highly polished due to the extra time the developers have, the graphics engine was going to look dated by the time it found a way to be released.

And then it was released! And I got my copy!

And then I learned that Japan has a huge fanbase for Wizardry, partly because the original developers had the technical foresight to make it easy to translate the text of Proving Grounds. What it means is that the Japanese periodically continued to get new games related to that world, including an MMO, which lasted all of a month when it was available in the US.

Even today, I periodically look up Wizardry in case I learn any new bits of trivia. I enjoyed The Digital Antiquarian’s history of the Making of Wizardry and Jay Barnson’s Wizardry 8 playthrough complete with developer interviews. I remember finding out that there’s a We Love Wizardry album which recreates the NES music with an orchestra, which I am of course listening to right now.

Let’s be clear. I’m a fan of Wizardry, but I feel like I don’t have enough playtime with the series to be a huge fan.

But still. Because I thought swords and skeletons looked neat as a child, I got to become a fan ready to explore entire worlds. And get the theme music stuck in my head out of nowhere.

It’s funny, because today I would be afraid to admit that I bought and played a game sight unseen. With so many games, and so many reviewers, it seems strange to not at least ask someone about a game or to look it up before handing over my money on an unknown.

On the other hand, sometimes it is great to discover a gem on your own, and then to discover that there’s an entire collection of jewels to enjoy that come along with it.

Categories
Geek / Technical

Creating Good Commit Messages for Your Project’s Repo

I never thought too much about the commit messages I write. There’s the obvious idea of writing clear messages, much like writing a good headline for a blog post or a good subject line for an email. Otherwise, I did whatever made sense.

Many years ago, I remember learning about CVS and version control in general. I didn’t start using it until I learned Subversion, and eventually I switched to Git.

As a primarily lone wolf indie game developer, I don’t think too much about how other people might read my source repository. I think about how I might use it, and my repo is mainly a place to make sure that major mistakes aren’t going to cost me a ton of time to figure out how to revert.

Basically, the evolution of my project is bookmarked at key points along the way. As I write more code and find I introduced a problem, I can check the diff to see how I did so. If I can’t figure it out, I have the option to throw away what I’ve done and start from a known state.

It works better if I bookmark my progress frequently and not have large commits containing what is actually a bunch of different changes.

And frequent bookmarks mean that I can give concise yet specific names to those bookmarks. I think I’m pretty good at naming what I’ve just done.

But then I found How to Write a Git Commit Message by Chris Beams, and I like what he had to say on this topic.

First, there’s the idea of the context of the change. At my day job, I think the issue I flag most often in code reviews for my teammates is naming their tests, variables, and functions in a way that gives context to what they’re doing. I especially hate test names that essentially tell me what the code already tells me.

WhenFooIsClickedThenCouponCode3IsCalled is not a good test name because it doesn’t tell me why. It just tells me what a reading of the code would tell me. What is calling CouponCode3 supposed to accomplish? THAT’S the thing that I want the test name to tell me.

WhenFooIsClickedThenItemIsPurchasedWithEmployeeDiscount would be much better. It does so by using the CouponCode3 function, which is also terribly named in this contrived example so fix that issue, too, please.

When it comes to commit messages, I see similar naming problems, but I haven’t thought much about it. But if you’re looking for a previous change, which is better:

Fixed crash bug

or

Fix crash when handling sprite rotation

Obviously the second one communicates more context. If I had to read through commit logs to find a past change, I want more commit messages that read like it.

He provides 6 other tips, and one of them is to write your commit subject line in the imperative.

It’s the reason why I found the article in the first place as this tip was shared on Twitter:

A properly formed git commit subject line should always be able to complete the following sentence:

If applied, this commit will your subject line here

For example:

If applied, this commit will refactor subsystem X for readability
If applied, this commit will update getting started documentation
If applied, this commit will remove deprecated methods
If applied, this commit will release version 1.0.0
If applied, this commit will merge pull request #123 from user/branch

Notice how this doesn’t work for the other non-imperative forms:

If applied, this commit will fixed bug with Y
If applied, this commit will changing behavior of X
If applied, this commit will more fixes for broken stuff
If applied, this commit will sweet new API methods

A lot of the article deals with writing entire bodies for commit messages. Other than maybe having a separate line to indicate who reviewed the code at the day job, I’ve never found a need to write more than a one-liner for my own projects. It would be overkill to expect myself to give that much context to myself.

But I’ve otherwise been winging it up until I read this article, and the general style guidelines make sense to me, so I’ve started to adopt it.

Here’s some commit messages from early on in my raking game project:

  • Android seems to not truly restart app; clear containers on startup.
  • Changed to higher resolution; using brighter 3rd-party grass sprite.
  • Added damping factor to individual entities to allow for custom friction.

And here’s some recent ones:

  • Provide background for Ultimate Item speaker image.
  • Fix weather generator so Stormy days result in Windy days more often.
  • Warn player when yards are filling up with too many leaves.

They could still be better, but keeping in mind the imperative style and finishing that sentence above means my commit messages are more consistent, which makes it easier for me to write them in a way that gives context to what the change is doing and makes it easier for me to read them later when I am trying to find the one past changeset that is relevant to whatever I am working on at the moment.

Categories
Politics/Government

Why Are American Police Carrying Out Executions against American Citizens? #BLM

One of the things we’re taught to believe as American citizens is that we cherish our freedoms and our rights. Life, liberty, and the pursuit of happiness. Freedom of speech. Freedom of religion.

And if we’re accused of a crime, we get to face our accusers and have a fair shot at defending ourselves. It’s in the base Constitution, and in the 6th expansion pack it even says “In all criminal prosecutions, the accused shall enjoy the right to a speedy and public trial, by an impartial jury of the state and district wherein the crime shall have been committed.”

We’re presumed innocent until proven guilty.

We’re taught, “Look at THOSE countries. The oppression by the government, the jack-booted thugs executing people without trial or with sham trials where the deck is stacked against the accused. We have it much better here.”

We Americans have it good, right?

But some of us don’t.

In fact, many of us look the other way when again and again and again and again the police carry out executions against people of color. We look the other way when it happens in broad daylight. We look the other way when there is video footage showing it happening.

Somehow, even when the evidence says, “You can’t look the other way”, we find a way to look the other way.

It doesn’t matter whether or not the victim is a teenager or a grown adult. It doesn’t matter if the victim was a model citizen or had a colorful past. It doesn’t matter if the victim was fleeing or standing or sitting or had his hands up.

It doesn’t matter, because if we are being accused of a crime, we as Americans expect to be able to defend ourselves before we’re found guilty of the crime. In court. With a fair trial.

To stand that trial, we expect to be alive. We should NOT have to worry that our lives are forfeit just because someone suspects we might be bad guys.

Worrying that the government will bring about my death if I breathe wrong when accosted by police is not how it is supposed to work in this country. That’s for other, lesser countries with totalitarian governments.

And yet, we live in a country where some of our fellow citizens are not being afforded the right to a trial by jury.

We live in a country where some of our fellow citizens are being told that the basic rights guaranteed by the third article of the Constitution and the 6th amendment do not apply to them if a police officer decides to act as judge, jury, and executioner.

We live in a country that has tolerated actions that we are supposed to look down upon.

So what kind of country are we living in?

Because the totalitarian-type actions happen predominantly to Black people, we ignore them. We justify it by looking for reasons why they got themselves killed by police officers, people who after all have a tough job and risk their lives to keep us safe.

As a White male, I live in a completely different America. My America looks a lot like the one I was taught about growing up.

And because of my White privilege, I can look the other way when there is too much cognitive dissonance. When what I want to believe about America and what the daily experience and death toll for Black people in that same America are at odds, I can choose to say, “No, I live in the greatest country in the world, so it must be something else that’s going on.”

I can stay silent when I witness what happened to Philando Castile.

I can stay silent when I witness what happened to Alton Sterling.

I can stay silent when I witness what happened to Eric Garner.

To Michael Brown.

To Tamir Rice.

To Eric Harris.

To Samuel DuBose.

To Freddie Gray.

To Walter Scott.

To Laquan McDonald.

I can stay silent, because it doesn’t happen to me.

After all, I live in a completely different America in which I don’t have to fear being executed by a police officer for a routine traffic stop.

I live in a completely different America where even if I was violent and a threat to the people around me, and even if I killed officers trying to detain me, I could be sure that I would be arrested, alive, and ready to stand trial.

Executions in the streets? They only happen in other countries.

Including that other America I can pretend doesn’t exist.

Because Black people are being regularly harassed, beaten, terrorized, and executed by police officers, and because those actions get covered up often enough by those same police officers, there is a movement called Black Lives Matter.

Because in this America, it’s clear that they don’t matter to the majority of Americans.

Because if Black lives really mattered in America, we wouldn’t be silent about the injustice of death sentences being metered out by police without a trial. We wouldn’t keep saying, “Keep calm. Let’s wait for all the facts,” while simultaneously reaching for tenuous justifications and defending the indefensible.

It doesn’t matter whether or not the victim was a good guy or a bad guy.

We live in America. We don’t execute people in the streets. It’s not how it is supposed to be in this country. And we shouldn’t tolerate it when it happens in our name.

Categories
Marketing/Business Personal Development

Shoveling Someone Else’s Manure

In 2009, when I was running my own indie game development business full-time, I thought I would invest in my own education and paid for the premium subscription content of a popular Internet business and marketing podcast.

I thought that I would get through the material quickly as I had the freedom to dedicate all of my time to it. Then I could cancel it after one month of payments. Maybe two.

I ended up sticking around for much longer, and I can’t say it wasn’t useful, but the entire time I felt frustrated by the format. I can’t quickly peruse audio and video, and that was what most of the content consisted of. And as for the content itself, I felt like I had to get through lots of “witty” banter between the hosts to get to the gold nuggets, if there were any.

But I can’t complain too much about the content. I was clearly not their target customer. It was meant for people who might have no experience with software or computers, so it might work for other people just fine.

There were forums populated with such apparently satisfied customers who wanted to learn what it takes to run a successful business, and some made some good success based on applying what they learned.

Except it seemed like almost each and every one of them was making their success by taking what they learned from the premium subscription and repackaging and selling it to others in their respective niches.

One person was doing OK with selling on eBay before she took up the lessons, and by the end of it, she was making a good living selling an info product on how to run a successful Internet business with basically all of the same lessons from this premium subscription. You know, but geared towards eBay.

And she was just one example. It seemed like no one wanted to apply the lessons to run their own existing business more effectively. Instead, they seemed to have stopped doing whatever they were struggling with before and started their new business as Internet marketing experts based on what they learned from a premium subscription information product about being an Internet marketing expert.

To be fair, in the land of the blind, the one-eyed man is king. To the right audience, these people WERE experts. They now knew something that most other people didn’t. I’m not a C++ expert when compared to the people who speak at CppCon, but I am expert enough when it comes to where I am employed, and especially when it comes to my family who are “not computer people” at all.

But the thing that bothered me about the other subscribers to the premium subscription was that their expertise wasn’t really theirs. They learned some tricks and techniques from somewhere else, but they didn’t apply it to their own businesses. So what do they really know?

At least I spend a significant amount of time actually using my expertise, so when someone asks me something about C++, I have some real authority and experience to back it up. They basically turned around and shoveled their new marketing know-how to the ignorant people who were willing to pay them for the information. “If you want to be successful, uh, here’s what these other guys told me.”

And boom. Now not only are they experts, but they’re commercially successful experts with a paying audience, which only grows their authority.

The personal development field sometimes has a bad reputation in this regard. Some people are great successes who might be trying to share some insight into how they became great successes.

But other so-called successful people really only seemed to have become a success when they started writing books and giving speeches telling other people how to be successful.

I subscribe to Sunday Dispatches by Paul Jarvis, and in this past Sunday’s newsletter he talked about the “advice gold rush”. Apparently seven years later the problem I described above has only gotten worse, and in many industries. Jarvis linked to a colorfully-titled article complaining about it called The Creative World’s Bullshit Industrial Complex:

Being industry famous should be the result of some contribution to the world that the industry respects and wishes to learn from. Or insights unique and useful that it genuinely makes people’s lives better.

Increasingly “creative coaches” and people with “keynote speaker” in their Twitter bios are making their quest to earn authority a higher priority than the very reason they got into this in the first place. Fueling the Complex is alluring catnip that feels like you’re advancing your career the same way answering a bunch of emails just feels productive.

I’m not innocent. I know I’ve done my share of contributing to the Complex on this blog, especially early on. I shared advice as if I had some experience actually applying that advice in my own work, and in reality I was just shoveling someone else’ manure.

But my most satisfying and gratifying work is when I wrote about my own hard-won experiences. When I write about my own failures no matter how huge or my own successes no matter how minor, they’re mine to share. I can say I know what I’m talking about and have some small chance that I’m right.

When I have those experiences, often that’s when I truly understand what someone else was saying all along. That’s when I can make the associations between someone’s advice and my reality.

Categories
Game Design Game Development

The Seventh Month of a Three Month Project

In January, I said I had created a plan. This plan was to release a minimum viable product (MVP) and get it in the hands of at least one customer in at most 90 days.

My thinking behind this plan was that I should be able to put together a fairly complete game easily in that time, get it in front of paying customers, and get useful data about the market to help me decide what to do in the next three months. Maybe I would flesh out the game more, adding features and enhancements based on customer feedback. Maybe I would switch to a different project entirely if no one cared about this one. When I get real customer data from my 90 day project, I would interpret the data and make an informed decision then.

My project is now past its 180th day. Oof.

What happened?

Pride, partly, and the lack of a relatively satisfying game experience. I didn’t want to release a broken, ugly piece of software, and when my original deadline was arriving, I decided I couldn’t release it in the state it was in.

MVPs are meant to be fairly complete products. They might be missing key features, such as copy and paste in a smart phone, or might have some clunkiness, but they are meant to be something you can hand to a customer so you can get feedback from them. You can ask for feedback about different aspects of the game, but real customer behavior requires real customers, not just people who claim they would pay for something when asked in a survey.

So what was wrong with what I was making? I wasn’t worried about a lack of animations or polish. I was worried about a lack of satisfying game play. Various features were in the game, but they weren’t working together very well.

My plan did not initially accommodate the need for time spent on balancing the game mechanics and economy, and while I knew I would always playtest and tweak, I didn’t realize how far off the mark the initial implementation would be. My game didn’t just feel out of balance. It felt broken. I couldn’t release it in that state.

I’ve been in this situation before. My first major commercial game Stop That Hero! was originally supposed to be a one month project that I woefully underestimated. I worked on it for well over a year before my indie game development business ran out of money. I kept slipping my self-imposed deadlines constantly, and I just kept working harder to try to bring the game to a finish line that kept getting further and further away.

There are other similarities between STH! and my current project. STH! was a Ludum Dare game originally that I decided to flesh out into a full commercial project after getting some good feedback, and my current project started out as a physics-based One Game a Month project with similarly good feedback. Both projects were being built using my own code instead of leveraging an existing engine (eventually Daniel Cook will hug me, and I will check it off of my indie game development bucket list). And in both cases, I worked on them mostly solo.

But there are some differences.

STH! was built when I was running my indie game development business full-time. I spent more time in one day working on that game than I do sometimes in one week for my current project now that I have a day job, am married, and have other responsibilities. Looking at my numbers, I think I could have built my current project in its current state within a few weeks of full-time effort, and I would probably have plenty of time to play other games as well.

But STH! was primarily about feature development, especially since I opted to start from scratch, and it was a long time before I got to the point where I could even play the game, let alone figure out if I need to change anything about it as a result of playtests.

For my current project, I developed a few simple prototypes early on. I created a quick text-based version of the game that took me moments to put together, and I spent a few days tweaking and changing it. I had a few systems that I was able to test out quickly and determine if the concept would work.

And I focused on getting something playable quickly ever since. For many months, I’ve been able to play the game, show it to people, and get feedback, although I haven’t had any serious playtesting sessions.

While STH! was delayed due to missing key functionality for a long time, this game is delayed due to what might be called “informed feature creep”. I say informed because I am not just adding features when I think of them but only after recognizing that they would make the basic game more complete.

But it does have the effect of changing what is considered “minimum” for my minimum viable product. Focusing on the need to ship helps me decide if a new idea is a must-have or not.

While my initial project plan was a good first effort, I clearly missed the target.

But it was more out of underestimating what had to be done than in underestimating what I knew had to be done. Everything I scheduled time for more or less got done when I said it would, but playing the game showed me gaps and problems that needed to be addressed with work I didn’t anticipate at the start.

And that’s to be expected. You should learn about your project as you work on your project, and there will always be changes to the plan as it hits reality. You should expects lots of changes and tweaks to the design of your game.

I knew game development requires playtests and balancing, but I forgot to address it in my project plan. Whoops.

And that oversight is why I’m in my seventh month of my three month project. That, and the fact that it takes me weeks to do what could probably take me mere days if I was 100% focused on the project.

Categories
Game Development

Where Do You Find the Time to Play AND Make Games?

Like many indie game developers, I have a day job.

It pays the bills, but in exchange it asks me to dedicate a significant portion of my time to it during a given week.

I am married. I like being married to my wife. Since love is spelled T-I-M-E, in order to continue being married to my wife, a portion of my time is also spent just being with my wife.

We have a house. Now, before you buy a house, everyone is excited that you’re looking. They ask about neighborhoods you are considering and let you know about realtor friends they have.

But once you buy a house, suddenly everyone’s tune changes to the sarcastic song of “Oh, have fun doing all the maintenance on it! That’s home-ownership for ya!”

Like, they knew. They knew the entire time, and yet they never said anything until you joined them in their misery! So a portion of my time is spent mowing the lawn, fixing things like dryer vent ducts and minor plumbing issues, and general cleaning.

I like to sleep a full night. Well, I don’t actually. I wish I could use that time for other things, but I know sleep has a bunch of benefits. So aside from the occasional all-nighter in an emergency, a portion of my time is spent being uselessly unconscious.

So between a day job, commuting, married life, home ownership maintenance, eating, and sleeping, I find it difficult enough to schedule enough time to make games on the side. Cut back on idle time spent on Twitter and Facebook, cut out TV watching, cut writing in my blog, and there’s still only so much time left in a day.

And there aren’t even any children in the picture yet.

So how do some of you find time to actually play games?

It amazes me to read that other part-time indie game developers not only have time to play a new release but to also finish it within a week and give their well-conceived thoughts on it.

I once read about an interview with a prominent game designer who was asked what his favorite video games were, and he admitted that he didn’t play games. I remember wondering at the time how it is possible that someone could be in the industry but not play the games made by that industry.

But if you’re busy, and you are trying to make time for what’s important, then the less important stuff gets cut.

When my choice is to make games or play games, even if the temptation is high for play, making gets priority. I can play later. Or I can make time to play, but it will be limited.

For instance, this past Saturday I played board games with a bunch of people. The evening was dedicated to it, and then it was over.

Other times, I have played Mario Kart or Smash Bros with friends, or I’ve found myself with some free time and decided to use it to play a single-player game.

But those times are rare. They’re definitely not daily, and I don’t find myself playing a game for many evenings in a row until I’ve finished it.

That’s because I’ve dedicated those evenings to making games. Or mowing, but assuming the grass is fine, then it’s dedicated to making games.

It’s not that I don’t want to play games. In fact, I do want to play the many games in my collection, including games I still have from the NES. I have this delusion that one day I’ll have time to sit down and properly finish Final Fantasy and all the Wizardry games. I was playing X-COM, but only when it was released on Humble Bundle, but I never did get around to playing Civilization: Beyond Earth. Heck, I bought Civilization 3 at a physical store many years ago, and it has yet to be installed on my computer. Despite my poor game-playing track record, I love playing games, and I would play them more if sleep wasn’t so important.

Playing games is also good for research. How do you make games if you don’t know what is already being done, or what the trends are, or what conventions to follow to avoid reinventing the wheel?

Playing games keeps me informed. When someone talking about game design refers to Super Mario Bros or StarCraft, I’m on the same page. When they say something about flagpole jumping or Kerrigan’s betrayal, I know exactly what they’re talking about.

But when they refer to StarCraft 2 or Fallout 3 or really almost any major game released in the past couple of years, I’m going to have trouble understanding references if they aren’t explained.

It’s kind of embarrassing. Growing up, I was the “kid who knew everything about Nintendo”, but today I would have no street cred.

But I find myself choosing between making games and playing games, and playing games isn’t chosen often in favor of making progress on my own creative projects.

So if you are one of those people who somehow makes time for both, please write a comment below to let me know: how do you do it? Do you find that some areas of your life are out of balance as a result, or do you somehow make it all work? Do you purposefully take a period of time off from your indie game development to play a new game to completion, or do you play games regularly and squeeze in game development in the time left over?

Categories
Game Design Game Development Geek / Technical

A Book on Procedural Content Generation

Sometime back, I discovered Procedural Content Generation for Games, a book about using the computer to create or help to create game content such as levels, landscapes, rules, story lines, or any number of things.

The chapters are available in PDF form on the website for free. Each corresponds with a lecture for a university course the book was designed for, so it is a bit academic. It’s also a little rough, as the point of it being released for free online is to get feedback. These chapters are drafts and not necessarily how they’ll be when officially published.

The book hasn’t been released yet in hardcover, but Amazon’s link shows it as a 2017 edition. And since textbooks are like cars (I once had an accounting textbook that said it was an edition for a year that hasn’t arrived yet), apparently it means it might be released later this year?

I don’t know. There isn’t too much current info on the book. The latest blog post announcing new chapters was from 2013, and the link to the course website is broken.

But the chapters drafts are still available, and they offer some good insight into the algorithms and approaches used in existing games such as Rogue, Spelunky, Elite, Spore, and Minecraft.

Whether you’re interested in the Mario AI framework they describe, or learning how race tracks can be generated to appeal to certain player types, or how to use L-systems and formal grammars in general to generate plants and other features of your games, you could do worse than read through this freely available resource.

Categories
Personal Development Politics/Government

Being a Real Ally for Marginalized People in the Game Industry

I’m a white, straight, cisgender man. But I didn’t used to be.

In the past, I was just me. A unique individual human being just living his life like everyone else.

Then I started becoming aware of the fact that as a man, I live a completely different life compared to women.

I had my butt pinched once. It was by a woman passing by in a club when I was in Cancun on spring break in high school. It was such a novelty that I didn’t know how to react at the time other than with curious amazement that it happened.

All women, on the other hand, have experienced unwanted harassment from men. Some have experienced quite a bit, and some have received unwanted physical contact, and some have been physically hurt for resisting, and some have died.

And that’s just one general way in which we live different lives.

Then I started becoming aware of the fact that as a white man, I live a completely different life compared to people of color.

I got pulled over for speeding when I was in high school. I was nervous, and I got off with a warning. I had been pulled over for speeding maybe four more times, and I got a warning almost every time. One time I recall two officers on each side of my car, and another squad car appearing, and I wondered why there was so much overwhelming force. Everything was fine, though.

Black men, however, have to tell their children how to behave when, not if, they get pulled over so as not to give the officer any reason to believe they are in danger and an excuse to shoot first, ask questions later. Black drivers may drive the speed limit even if traffic is speeding around them to avoid getting into such dangerous situations in the first place. Some still get pulled over for Driving While Black. Some get harassed, some get physically hurt, and some die.

And that’s just one general way in which we live different lives.

Then I started becoming aware of the fact that as a cisgender man, I live a completely different life compared to transgender people.

One time in middle school I accidentally walked into the girls’ bathroom. It was on a different floor, and I didn’t realize I was in the wrong bathroom until I was washing my hands and noticed the lack of urinals and some strange dispensers on the wall. If I had been caught, I probably could have explained that it was an accident, and if I got in trouble anyway, it would probably have been a minor punishment.

Transgender people have entire states passing laws preventing them from peeing where they are most comfortable, which is scary because just peeing in a public bathroom has been a dangerous situation historically for them. Some have been physically beaten and some have died because other people became uncomfortable that someone different was in their bathroom.

And that’s just one general way in which we live different lives.

I used to just be a regular human being, but then I became aware of my privilege.

Privilege is about Society, not You Personally

I have a lot of privilege. I don’t have to pay attention to any of those things happening to people who aren’t white, male, and cisgender. I can continue to live my own life oblivious to it, because horrible things just generally don’t happen to me merely by virtue of me existing, and if something happens to a friend who happens to not be white or male or cisgender, well, it was probably a one-off because if it happened to me, it would be a one-off.

That’s privilege. It doesn’t mean I was given anything in life. It means societal norms are such that when I was born, I get to play the game of life on easy mode. No extra obstacles are thrown in my way due to me being me. No one is out to put me in my place, because my place by default is on top. I still have to play the game and exert effort, but I don’t have to work twice as hard to get half as much. People don’t look at me and assume I can’t possibly know what I need to know to do a job, so job interviews for software development positions don’t require nearly as much effort by me to impress as it might be for, say, a woman.

I don’t have to feel guilty about being privileged, as I didn’t specifically do anything to obtain that privilege. But I should be aware of it because how I tolerate the systems that allow that privilege means I’m basically tolerating the status quo for all of the marginalized people out there.

As uncomfortable as it may be to acknowledge this, my passive tolerance does, in fact, make me part of the problem.

But being made aware of it wasn’t easy.

Privilege is Invisible

I think it’s a much more profound challenge than it seems at first blush. It’s hard to communicate with people who have a very different frame of reference in life.

People with privilege don’t recognize that they have it, and so when they come into contact with someone who isn’t in their privilege bubble, it’s a jarring shock.

Privileged people see the world as meritocratic, and the idea that anyone has a disadvantage due to systemic issues is ridiculous specifically because they don’t see the system. To them, it’s just How Things Are.

They say things like “Why don’t you do what I did and work hard to get what you want instead of whining and hoping someone will give it to you?” without realizing that they were given the opportunity to work hard to get what they wanted without having to ask for it. They don’t see themselves as privileged because they worked hard.

They don’t see how what might be a minor and temporary inconvenience for them is yet-another-blow to someone’s dignity and welfare.

There’s that saying, “He was born on third base and acts like he hit a triple.” In a way, that’s everyone who has privilege. For people without privilege, many weren’t even allowed in the lineup.

For some (many?), being told that they need to go back to the plate to swing the bat and hit the ball before they can take a base, just like everyone else, is a setback.

Oh, and by the way, now there are more people who are allowed to participate.

It doesn’t feel like equality so much as the privileged person losing something. They start looking wistfully to the past as when things were better (specifically for them), and without getting too political about it, that’s how certain politicians seem to get so much traction with passionate voters by appealing to their bigotry.

People without privilege are much more aware of it because it is a constant issue in their lives. To them, someone with privilege must seem very obtuse. “How can they possibly not see what I see?”

It’s because their privilege is invisible to them.

So you have privileged people who don’t know they are privileged who might not have a mean bone in their bodies, and they might think of themselves as genuinely good. Yet they are part of the system. Being made aware of this fact, that they have privilege and there are systemic problems for people who don’t, and they should take some responsibility for being part of that system that allows for it, is a potentially ugly process.

Many go into denial because, hey, they are genuinely good people and don’t hate anyone! Some of their best friends are [insert non-privileged group here]! They didn’t personally do anything wrong!

And they might even be right on all of those counts, but it’s uncomfortable for them to believe that they fell down on the job of being more active in terms of even acknowledging privilege exists because it sounds like they should feel personally guilty about it.

So, if they ignore their privilege, the world goes back to the way it was when everything was a matter of pure merit and hard work, and it’s not their fault that other people are less well off.

Privilege is invisible to those who have it. Confirmation bias helps. And communication and spreading awareness is an uphill battle as a result.

Ok, You Have Privilege. Now What?

I think one challenge I’m finding is what to do now that I am aware of my privilege.

And I mean do, because being aware and not changing how I behave and act feels like it is worse than being unaware and blissfully ignorant.

I’ve been doing some research, partly for my own growth, and partly as research for my church’s efforts to ensure they are a welcoming organization for transgender people. A lot of the action steps I’m finding out there for allies are along the lines of “Don’t say this, don’t assume that, do make space.” All good, but after that, I feel like there should be more to it.

Like, ok, I get it. Don’t be a jerk, and treat everyone you meet as a human being. Learning about hurtful and appropriate language and micro aggressions and existing systemic oppression are details, but there has to be more to it, right?

I’m not saying my education is complete, nor do I want to downplay the importance of those details, but it’s one thing to see and recognize privilege, and another to do something about it.

But I feel like there’s a next step that I’m responsible for figuring out because no one is talking about it.

Most articles I’ve found for allies boil down to one of either two things: a list of do’s and don’t’s to help you be aware of your privilege, or a diatribe about how allies are failing at being real allies. It seems like every ally-related article I find focuses exclusively on the “be aware” part, or it laments how allies are falling short of actually doing more than making themselves feel better about being so progressive. There’s almost nothing out there that feels like set of a tangible actions and behaviors that would make a lasting difference.

The video game industry struggles like many industries with marginalized identities. Mattie Brice is a games critic and activist I’ve followed on Twitter for a long time who has written about this topic often. Recently she tweeted a link to her article which captures why things haven’t improved substantially despite the number of marginalized voices creating games these days.

Brice argues that despite progress on a number of fronts, it seems the status quo is still pretty much what it was, and it seems to be because that’s what supposed activists actually want.

That is, people asking for more diverse representations in games expect to play the same games we’ve always played. You know, only this time Ubisoft could figure out how to budget for the production of female models.

Right now liberal games people find the values of marginalized perspectives quaint, nice flavor that could be adapted or added on to what we already have, but not the main dish. So they aren’t necessarily against radical viewpoints, and definitely encourage them to exist, but only unsupported so change is as slow as possible.

This forces people who have the most to lose and are currently in danger to take the majority of the weight of moving things along.

This idea that marginalized people shoulder the brunt of the work of rising up against the systemic problems is something I was made aware of while talking about ways transgender people could feel more welcome at my church. I didn’t want to speak for these people as I worried it wasn’t my place to do so, but it’s exhausting for them to do everything on their own because they are fighting an uphill battle.

If I had to constantly talk about being a white, straight, cisgender man, and constantly defend every action or thought as a white, straight, cisgender man, it would, in fact, be exhausting. But since society sees me as the default, I don’t have to exert that energy.

So as an ally, what I could do is amplify marginalized voices rather than merely sit back silently. They have their own voices, and I can do much more than wait for them to feel comfortable enough to speak in a hostile environment. I can make the environment more friendly. I could share what they say.

But I could also do more.

We know that these people get less resources, both from games and society as a whole, and not changing how you consume and practicing what you value continues that divide. Said liberal masses are forcing marginalized creators into critical positions by being apathetic at best about the literal support the give while contributing to entities that maintain the status quo.

Marginalized creators don’t often have access to the marketing might of major publishers, and as a person of privilege, it’s easy for me to not even be aware that these creators exist, which contributes to their marginalization without my awareness.

From this article, I’m thinking that one of the tangible things I can do as someone with privilege is to make the extra effort to find marginalized voices. So when I think about buying a new science fiction book, for instance, rather than choose from a bestsellers list or merely on Amazon’s recommendations, I could actively seek out science fiction books written by authors I might not know about.

That’s not a difficult thing to do, but until Brice’s article, it hadn’t occurred to me to do it.

And if I address this in each aspect of my life, from where I eat to what I read children before bedtime to what movies I decide to watch to what I personally create, then I’m hopefully doing more than mere awareness and actually practicing what I value.

I’m going to continue to look for more, but being more conscious about where my dollars go is one tangible, impactful thing I can do to make privilege more visible. It doesn’t sound so hard, but I’m surprised there isn’t more about it out there.

Being that I have the awareness of my privilege to ignore injustice, it’s a moral decision not to ignore it. Being in a position of privilege, I feel obligated to do more than the bare minimum of merely not being a jerk. It will probably be exhausting work, but it’s already exhausting for the people who don’t have the privilege to avoid the work. It is wrong to sit on the sidelines and think I’m still a good person while other people suffer indignity, harassment, injustice, and death.