Tag: Cleveland

Color Is Everything: a Ludum Dare 31 Post-Mortem

Originally published here.

Play Color Is Everything

Preconceived notions

Going into this weekend, I knew I wanted to make a game that would serve as a statement about the intolerable state of civil rights in the present-day United States. It seems like almost every day there’s another story about police using excessive and all too often deadly force, often unnecessarily or for very little provocation. We live today in a police state where citizens rights are routinely denied, due process and the right to a fair and speedy trial have been forgotten, and out government doesn’t merely seem unwilling or incapable of doing anything about it, it refuses to do anything about and then punishes those who speak out and demand it — as evidenced by a mockery of a Grand Jury investigation into the police shooting of an unarmed 18 year old named Michael Brown in Ferguson, Missouri, last month, and a 12 year old boy in my home town of Cleveland, Ohio that happened just as the news hit that there would be no trial in the Michael Brown shooting incident. No trial, and then force used to break up peaceful demonstrations which turned them into riots.

One of the finalist themes was Color Is Everything, and I thought that would work perfectly if it was chosen, but for some reason I didn’t expect it to — I just never feel that lucky, I guess. So I looked at the other themes and considered how I might fit my protest statement into a game that satisfied the other themes, and I thought that I could use “Entire game on one screen” if it came up, but I never expected that it would. When it did, I was surprised, but happy because out of all the other themes it was the one that afforded the most freedom of game concept, so long as I could fit everything on one screen.

Design

In designing the game, I focused almost exclusively on the message that I wanted to send, and the actual game play was secondary. I wish I could have spent more time on refining the game, because as it is I don’t feel that it plays very well. But I needed to be very careful about the content of the message. I’m not sure if I got it right or not, but I tried as best I could to come up with a statement that I could put into a game that I could create in under 48 hours.

Early on I choose to sacrifice graphics, and go with a purely abstract game. I did not want to sensationalize with blood splatter, and after briefly considering creating animated anthropomorphic figures, but worried that whatever I might create in a short timeframe would be insufficient and might resemble offensive stereotypes. I decided to go fully abstract and use simple squares of symbolic, literal black and white to represent my people. While it was very easy to make, it afforded me time to consider how to put the message I wanted into the game. I wanted to drive home the point that you can’t tell whether a person is a criminal based on their appearance, that it is their actions that make a person a criminal. Although, really, crime is almost incidental to the reality I’m depicting — the game is really about a dystopian society where police who are sworn to protect and serve the public are allowed to get away with killing people because a corrupt system looks for any excuse to look the other way when they happen to be black.

I had a basic idea that you’d be a policeman, and you’d just patrol around on the screen while people stood about or walked around, and you’d have to figure out who among them is a criminal, and then try to arrest them or, if you wanted, you could shoot them. I gave the game three ending conditions: if you run out of bullets, if you are killed, or if you kill an innocent (white) person. And I implemented a scoring system which I felt reflects the real-world valuation we place on white and black citizens. Arresting or killing a black innocent has no consequences in the game. But arresting an innocent white person deducts points, while killing an innocent white person ends your career in an instant.

Keeping score

I struggled quite a bit with figuring out how to value the arrest and kill scores for black and white criminals. In the end, I took a base value of 100 points, because it’s a nice, round number, and then I adjusted it to reflect the bias in the legal system. I don’t know how well I did, there, but here’s how I came up with the point values: Using wikipedia, I found an article dealing with race and crime in the united states. In it, I found that the data presented in the article was fairly messy, taking numbers from different years, etc. but it said that the incarceration rate for black males is 4749 per 100,000 — about 4.8% of all black men in this country are in prison — while the incarceration rate for white males is only 487 per 100,000, or about 0.5%. I also needed to adjust for the proportion of the population that these groups represent. According to the 2010 US Census, the population classified as white represents about 63% of the total population, while blacks represent about 12%. Multiplying these percentages together, I got 0.630.05 = 0.00315, and 0.120.048 = 0.00576. Dividing these two numbers into each other, I got 0.00315/0.00576 = 0.546875, and 0.00576/0.00315 = 1.828571428571429, which I rounded to 0.5 and 1.8, respectively. I took those numbers and multiplied them by the base point value of 100, to make a black arrest worth 180 points, and a white arrest to be worth 50 points. Coming up with these numbers gave me a sick feeling.

Killing a person scores much 100x as much points as arresting them, to reflect that ending a person’s life is a higher stakes proposition than simply arresting them. Perversely, this creates incentive to shoot people, if you’re going for a high score, and for the highest score, to preferentially seek out black targets.

I never tell the player that they ought to try for a high score, but I allow the structure of the game to suggest to the player that this is what they ought to do. I expect that most people will try to play this way at first, and perhaps if they think about what the game is telling them, they might try not to shoot as much. It’s possible to play with a strategy of only arresting people, although you will score much slower, you can play longer as long as you manage to avoid being shot yourself by criminals. If you don’t care about arresting the wrong people, you can probably survive indefinitely, and in the long run the extra points you get for arresting black criminals will outweigh the penalty incurred for arresting innocent white people. In thinking about this more, it makes me question why I gave the population equal proportions of black and white people, and criminals and innocents. It might have been a more accurate simulation to give these populations the same proportions as the census and crime statistics show. But while the census figures are less likely to contain institutional bias, the crime numbers really only track incarceration, not criminality, and I don’t know where to find numbers that would reliably measure the proportion of a population that are criminals, broken down by race. So, it’s a limitation of the design, I suppose, but I’m not sure how to do better there. If I had done this, though, it would have pushed the bias toward targeting blacks much higher, because white criminals would be very rare, white innocents would be very common, and blacks would be the only safe targets for arrest and/or extra-judicial killing. This might need to go into the post-compo update, if I continue developing the game.

To provide the player with a bit of incentive to use their gun, I gave the criminals guns as well, with which they can commit murder, and some of them will try to shoot you, so there is some of the self-defense and defending the lives of others in the game, just as it is talked about in the real world whenever one of these shootings takes place. If I had to do it over again, I’d probably use the crime statistics tracked in the game to penalize your score, so that you would have a bit more direct reason to try to identify and stop the criminals. This will probably be addressed in a post-compo version as well.

The Play Experience

My process in coming up with this design was slow and meditative, so I probably spent more time thinking about the design, what it implied in terms of the message it would send, and then carefully creating a design that imparted the right message. Comparatively speaking, I spent very little time actually playing the game, and I think that shows in the play experience. I’m not really satisfied with how the game plays. The AI is extremely rudimentary, and if you allow the game to continue spawning people and don’t wipe them all up by constantly arresting or killing them, very quickly it gets to the point where there’s too much happening on the screen, and you can’t take it all in, which makes your decisions and actions less meaningful. As well, when the screen fills up, very quickly you end up accidentally colliding with people who are walking around oblivious to you, and obviously that removes the aspect of intentionality from the act of arresting them, detracting from the game’s message.

I think, if I did the design over again, I’d try to make the game slower, so that the player would be able to think about their actions and decide to do them, rather than react in a twitchy manner. Perhaps I’d reduce the number of people that can be on screen at one time (there’s currently no limit, which is bad), and I might also slow down the action so that only a smaller number of people are actively doing anything — I considered making the AI’s move in a turn-based fashion, so you could have time to monitor each individuals actions and try to figure out if they’re a criminal or not, which would give the game more of a detective-y feel to it. I’d definitely like to improve the AI a bit more so that it would make the game less random.

Overall, I’m not all that satisfied with the game as a play experience, I think it could be much better — but working on the project allowed me to work through my feelings on the current events. And, working through those thoughts was a more necessary thing for me this weekend. There’s a lot that is wrong with our country right now, especially in government and law enforcement. Reform is badly needed, and seems like a remote possibility at best. It seems like the system of checks and balances, and the rights that we are all guaranteed exist only on paper right now.

Ingenuity Fest

This weekend is Ingenuity Fest in downtown Cleveland, held this year at North Coast Harbor. Cleveland Game Developers has a space, and we’re hanging out, demoing games and promoting our projects and talking about our craft. A number of our members brought tech demos and projects to show off.

One of the most fun games I’ve seen in some time, BaraBariBall, is on display here in our space. It is not, unfortunately, one of our creations, but it is a lot of fun. It’s a bit like Super Smash Bros., but simplified and with a graphical style reminiscent of the Atari 2600. I really like the graphical style. The animation is particularly well done. And the controls are superb. I never could get into Smash Bros. due to its overly complex controls. Any time I played it, all I could do is mash buttons and hope for the best. With BaraBariBall, the controls are greatly simplified, and this makes the game much more fun. It’s now more of a contest of reflexes and tactics, and less about memorizing and mastering strange controller contortions that unlock special moves.

I can’t wait for this to come out so I can buy it.

We also have JS Joust set up. Again, this isn’t something one of our group created, but it’s fun. It uses the PS3 ice cream cone controller and a Mac OS X computer.

Cleveland Game Developers Matt Perrin, Brian Gessler, and Jarryd Huntley have all brought in projects that they’re working on.

Matt Perrin whipped up an interesting project just for Ingenuity, which he calls Monster Sumo. You draw your own graphics on a sheet of paper, then take a photo with a camera phone and upload your monster to a server. Then you can do battle with another monster created by your opponent. I suggested that this would be a lot of fun to play with a Kinect interface, but for now it’s just controlled with a more traditional input device — I’m not sure if it’s keyboard, or gamepad, or possibly either.

Brian Gessler brought a prototype game that uses Kinect. He described it as kindof a reverse Breakout, where you’re trying to push the wall up and the computer is trying to break holes in it. It looked interesting but unfortunately the laptop he was running it on was having trouble playing it at full speed. Brian promised to do some performance optimization before bringing it back tomorrow.

Jarryd Huntley had a game rigged up to play on an Oscilloscope, in homage to Willie Higinbotham’s original ur-pong, Tennis for Two. Unfortunately, his oscilloscope died just before the festival, and he is trying to source a spare on short notice so he can demo the game.

Cleveland GiveCamp 2011

This past weekend (7/29-7/31) I participated in my first Cleveland Give Camp event! This was the second year of Cleveland’s Give Camp, and I had heard about it too late to participate in it last year. Once again, it conflicted with the PyOhio conference, which I went to in 2010, and hope to be able to again, so hopefully event planners will try to do better to avoid conflicts in the future. Not that it’s always possible

I was slightly apprehensive about how it would all work out, being my first time doing it. It didn’t seem like it would be possible. In just 72 hours, I was supposed to join a team of developers whom I’d likely never met before, and collaborate on a small IT project on behalf of an Ohio nonprofit organization who had a worthy project. The projects were evaluated ahead of time so that the Give Camp organizers could select candidates who could be helped within the constraints of the event’s format. This was a well planned weekend, and we were able to be productive. In fact, all 22 projects were successfully completed this year, up from 14 last year. In total, over $500,000 in professional services were donated. Burke Lakefront Airport and LeanDog generously hosted the event, which was funded by a raft of corporate sponsors. Volunteers camped out and worked all weekend, and in exchange we got fed and thanked and made to feel appreciated. This seemed to be pretty fair.

Most of the projects were to create web sites. There were a few that were mobile applications or databases. Of the web sites, most if not all seemed to use WordPress. I’ve been using WordPress for my own site for more than a year now, and have liked it. I like it even more now! WordPress is so powerful, flexible, and easy to use. I may gush about that later.

Team 14

In our opening meeting, we were assigned to teams. In my team, we had a project leader, and a couple developers, and I served as the team’s designer. When we sat down to go over the project, it took me a few minutes to realize that eyes were on me to tell the developers what to do; I had expected there would be a little more direction from the project leader, but after we had dinner on Friday and sat down together to meet with our customer contact, Lisa, we just went around and briefly introduced ourselves, and were let go.

Lisa told us about her organization, Adaptive Sports Programming of Ohio, and we took a quick tour of their old website. I spent about five minutes clicking links and skimming, and quicker than I knew how, I came up with a bullet list of the top 5 or 6 categories of information, and proposed that we try to re-organize the site’s content in that fashion. I noticed that much of the site’s content was geared toward linking to other resources. This is an older approach to web strategy, and seemed to me a bit outdated, a bit reminiscent of the early Geocities-era world wide web, when the manually maintained index of Yahoo! ruled. Maintaining all that content was a lot of work — checking for dead links and whatnot, and, I reasoned, was not effective in the current era, since most people find content on topics they’re interested in through google or through social networks. I proposed dropping as much of this “resource” content as the customer felt comfortable, and putting the priority into emphasizing the other categories, most importantly: donations, how to get involved, and events that their organization was directly involved with.

To my surprise, and to everyone’s credit, there wasn’t any resistance to this idea. I was a bit worried that Lisa might feel like I was about to destroy “her baby”, or simply disagree about the importance or purpose of various parts of the old site, but she was ready to put her trust in us with us right away, and the rest of the group seemed to like my proposal as well.

Throughout the weekend, we (and I emphasize “we”) quickly made decisions together in a most expedient manner, without egos butting heads or any of the typical bad human behaviors that I’ve seen over the years which have wrecked teams and projects. Someone would have an idea or see a problem, get someone else’s opinion on it, and propose a course of action, and it would either be adopted readily or if someone else had some additional thought on it, this was added to the original proposal, and we went with it. I never felt like I was pushing on anyone else on the team or stepping on anyone’s toes. It was great. The couple or three wrong turns we made along the way didn’t cause us any real harm as a result, and when we changed course both abandoning the old idea and adopting its successor went very smoothly.

One of the concessions we did have to make was that we weren’t able to migrate all of the content from the old site over to the new site. By the end of the weekend we realized we would not be able to get 100% of the new content for the site up by the time we were finished. Too many decisions needed to be made about the content, which were best left in the hands of the site owner, which is what we did. We ended up building a good, but mostly empty, new “house” for her to move into.

In retrospect, our project might have gotten more accomplished if we’d had someone do a content inventory and figure out what to do with it all. My initial idea that we could simply re-organized and adjust emphasis according to the priority of the site’s missions was a good thought, but as we got deeper into the content on the old site, it became apparent that simply copying and pasting it was not going to be effective. The old site had a lot of content on it, not all of which was going to come over. The volunteers on the team couldn’t make decisions about significant amounts of it without the site owner.

I had the thought late Friday that once we got the new site up and running on WordPress, we might be able to get Lisa trained on managing content in WordPress, and have her get familiar with it by bringing over the content herself after we got her started. This didn’t end up happening, either. There was too much else to do, Lisa needed to be involved in other decisions, and her availability for the weekend wasn’t as total as the rest of the team. Much of the content needed to be re-thought, not just re-organized. We didn’t have a dedicated copy writer on the team, and even if we did we might not have known what content to re-work and what to ignore without direct involvement from the site owner.

I think we can consider what we ended up with a successful IT project. We produced a redesigned web site, built on open source, which promises to be easier to manage in the future, and handed it off in “move-in ready” condition. It’s certainly an improvement over the infrastructure that they had in place previously.

The Takeaway

Keep it simple, less is more

There was a good bit less coding on this project than I would have guessed, going in to the weekend. In fact, I gauge our success in no small part by how much we did not need to code to get the project done. Code we wrote was code that someone would have to maintain, and the way Givecamp projects work, there is no provision for support once the weekend is over. We didn’t want to leave Lisa stuck with a project that would need ongoing code maintenance, and no one to do it for her. Accordingly, a lot of the things we could have considered doing for the project, we dismissed in favor of finding an off the shelf solution that we could mash up to create what we needed.

This was definitely the right way to go. The amount of customization we needed to do in order to get the site working and looking the way we needed was not zero, but we did keep it minimal. What customizations we did make were documented and handed off to the site owner. It was all, as far as I know, css, php, or javascript — all of which are interpreted, and thus can be modified without need for recompiling. We spent the bulk of our time looking for plug-ins and figuring out how to configure them, testing things out, and fixing this or that with the least amount of customization that was needed. This was a good application of the “what’s the simplest thing that could possibly work” principle.

Whence TDD?

We did not elect to take a TDD approach, but it is really not apparent how we could have had we wanted to. With so much existing code provided for us in the form of the WordPress application, the themes, and plugins, embedded youtube videos, and so on, there really wasn’t much of anything to write a test case against. I’d be interested to hear from someone more experienced in WordPress and TDD to provide some ideas on how to take a TDD approach to building a WordPress site. If you want to use TDD, do you need to start from the ground up, or at least find a stack that will lend itself to the TDD approach? When you’re dealing with platform built out of interpreted code, and with the final interpretation of html, css, and javascript are all up to the client, what value do your test cases have?

WordPress still doesn’t guarantee success or quality

I love WordPress for how easy it is to use. It has sufficiently abstracted the web stack that you can do a tremendous amount with it, without having to write one line of code. It is well maintained, and yields web sites that are easy to maintain. That said, it still does not guarantee optimum results. It takes skill and knowledge to deliver that.

At the end of the weekend, the 22 projects that the Givecamp volunteers built were presented for all to see. While all 22 projects were completed, and about 18 of them were web sites, most if not all of which were built on a WordPress platform, I did observe limitations of what can be accomplished in a single weekend. Without singling any project out, I could see some design issues in the final products that were completed by Sunday afternoon. I could only observe the most obvious design problems — bad typography, disproportionate layout and whitespacing. And granted, typography on the web is still in a pretty horrible state which CSS3 will hopefully address. I don’t mean to come off as negative or nitpicky. Still, there were a few sites which I saw that had obvious problems that probably could have been fixed with a few minutes (at most, hours) of CSS tweaking. Even our own site was not 100% perfect, and I’m confident there is no such thing as a weekend web site that can’t be improved with a little more labor.

Not every team might have had the eye or the skill or the time, and I’m certain that every group delivered a product that was better than what it was replacing (which in some cases might have been nothing at all) and was appreciated by the recipients of our giving. But I hope that future givecamps will have more designer resources to go around. And copy writers! In fact, I’m tempted to say that the WordPress ecosystem is so successful at solving the developer side of the problem that future givecamps might well be better off with more copy writers and editors than developers.

Success on Monday, Sadness Tuesday?

Given how happy and successful everyone seemed to be at the end of the weekend, and how… well, Dilbertesque the real world seems to be, I had to wonder if somehow all the success story I was seeing around me all weekend wasn’t somehow an illusion. Like, why do real companies have such a hard time with IT projects? I’ve never had such an easy, happy time working on a real-world project as I did this weekend. And I can’t really chalk it up to having the right people. No complaints about our team, but we were just put together and had never worked before. We weren’t an established, well-oiled machine.

My biggest worry about the effectiveness of an event like Givecamp is that, no matter how much you can accomplish in one weekend, ultimately the long-term success of these projects is in the hands of the organizations we gave them to. We can give them a great start, but without proper maintenance and attention, any website will quickly languish and become irrelevant And without a web-savvy content maintainer, that ain’t gonna happen. No matter how easy and intuitive a developer thinks they have made something, there’s always non-technical people whose purpose in life seems to be to prove the cynical adage about nature building a bigger “idiot” whenever an engineer thinks they’ve idiotproofed something.

I’ve seen proud development teams hand products off to users, who manage to break things in some novel and heretofore unforseen manner within seconds too many times to expect that this should somehow not happen here without good reason. I think one such good reason is that WordPress is good, mature, and healthy. But not every project was done in WordPress. At least two were done in C# with MS Access backends and one was done in iOS. I’m really curious as to the viability of the Access apps.

I was talking with event organizer extraordinaire, Mark W. Schumann, about this, and he’d had some thoughts along these lines as well. We’re both really curious to measure the long-term success of these projects. Because, let’s face it, as good as it makes us feel to donate a weekend and do good deeds, we want our efforts to be as effective at solving the problems they were designed to solve six months or a year from now as our efforts were appreciated when we handed it off. It’ll be interesting to see what we can see a year from now. I’d really like to see some quantified measurements next year.