Sunday, March 13, 2016

Sunday morning in San Francisco, pre-GDC.

I sat down an hour ago at a Starbucks. The fourth one I tried. I have a few free hours here in San Francisco, the Sunday before GDC (the Game Developer's Conference). It's been rainy, heavy precipitation hitting California for the first time in a while, and that dropping rain slowly made its way through my clothes.

I was planning on working out of the Westfield Mall. I liked the idea of disappearing in the crowd of the huge food court with a coffee and my laptop. But the mall opens at 11 on Sundays, and I had a good 70 minutes before that. I decided to walk and seek out a coffee shop elsewhere, but walking south in downtown SF just gets you weird closed shops covered in various graffiti, or little rundown stores in this most expensive of cities.

Then I started walking north into the union square area, where I knew there were plenty of 'Bucks. Literally every block for many in a row. But they're all pretty small, and I was unable to find a seat.

Here I am back on Market Street, in a much larger Starbucks, a few minutes into cleaning up code on my latest game, Fire Child. There's a very attractive young woman sitting next to me. We're on one of those narrow counters with stools that looks out the window. She's not doing anything except having her coffee and occasionally glancing at her phone. I think she is there hoping to be chatted with. It's an assumption, I don't actually know. And I have work to do, so I'd rather do that.

After a few minutes a man taps me on the shoulder. Because it's a downtown in a big city, I assume a person asking for money, and the man even has a little bit of that look. Kinda rough but detailed tattoos mark his knuckles and peer out from under the sleeves of his baggy black hoodie.

He wants to know about my code. 

And then it quickly becomes apparent that he is indeed a coder. He talks about PHP, we talk a little about Unity, using C# versus Java. The entire time the girl next to me has a look, that not-unexpected look of watching me "deal with a guy from the street". I chat with him for two or three minutes, and then he says he'll let me get back to it and sorry for intruding. He starts to walk away and she says to me, "Hello world." I don't think it was a coding joke. 

She starts to say a little more, but he returns, and she goes silent and turns away.

He talks about the place he usually works out of, suggesting it as an alternative to Starbucks. But I don't live around here, so it wasn't going to be much help. He said he had been writing tons of articles on quickly made blogs and, using SEO, making a lot of money with these sites. He then sold all these sites to make his big web idea, and then real-life took a hit (drugs might have been the cause, they might have been a side effect), and he was basically back at zero. He said thanks and sorry again, and now he's on the other side of this Starbucks tapping away on a laptop with tattooed fingers.

The glam young gal is still sitting there, and does a look with me. You know, where two people look at each other knowingly after dealing with someone troubled off the street. I've done that before, but I had no such feelings about this guy. She says a couple things, and it's apparent we have much less to talk about than I did with him. After a brief moment where I suss out she has a foreign accent, lives in town, and is "in fashion", we have no more to say. A minute later, she gets up from her seat next to me, and walks out.

My socks are still damp from all that walking, those minutes where I was looking for a dry place to take shelter. With my giant backpack loaded with clothes and my laptop and possessions I care about. I cannot begin to know what it's like to look for shelter for days and months and years, but I know that I count on others, and I can do no less than meet someone where they are. And if they're excited to talk code and apps and such, I don't really care what they look like.

Tuesday, October 7, 2014

Standard Cards, Game #2: Feud

(I don't remember the rules of Game #1, but I think it's somewhere on this blog!)

I spent the weekend at in San Francisco. Met smart and interesting people and played and learned table top and social games.

Scoundrels is approaching a shippable/kickstarterable state, so I'm starting to get the itch to design a new tabletop game. In that vein, I've always enjoyed designing games within a standard 52-card poker deck, so today I came up with a quick little game.

Standard Cards, Game #2: Feud (2-player variant)

-Split the deck into suits.
-Take one red and one black suit. Place the King, Queen, and Jack from red in front of the other player and give them the Ace from that suit as well. Do the same for yourself with the black suit.
-Shuffle the remaining number cards from these suits together.
-Split the number cards evenly, and add your Aces to your hand. (You may look at your hand.)

-Choose one of the cards in your hand and lay it face down in front of you. Your goal is to predict the color of your opponent's card. Play an odd card to predict they will play the opposing color, play an even if you predict they'll play the same color. If you win, your opponent discards their card, if they win, you discard yours. (Play the Ace to predict they will play the same color as you. If wrong, you lose.)
-Ties initiate a Feud. Leave the cards on the table and continue play until there is a tie-breaker. All tying cards are now discarded, and the loser discards their final played card as well, while the winner keeps their final card. Additionally, the loser discards a Royal [see "Royals Rules"]. The Feud is now over and play returns to normal.

-Upon one player losing all their hand cards or their King.

Royals Rules:
-The King is worth 3, Queen is worth 2, and the Jack 1.
-When you lose a Feud, you discard the Royal worth the number of tied battles. E.g. if a Feud ends after 2 ties, the loser discards the Queen. If they don't have the Queen, the player discards their lowest Royal. If a Feud ends with 3 or more ties, the loser's King dies and the game is over.
-The Queen and Jack at any time may be swapped into or out of the hand (except they may not be swapped after both cards of the round are revealed or during a Feud). While in the hand, they may be played like any number card. They cannot defend the King, but they win any battle against an opposing color. They lose against the same color.

Hope you enjoy!
-Randy O

Tuesday, January 21, 2014

Fracking: the Minigame

"Hydraulic fracturing is the fracturing of rock by a pressurized liquid." []

During November I found myself watching horrifying and bleak videos about a destructive oil extraction process called "fracking" which is threatening communities around the country, contaminating water supplies and soil. 

We as a society/species are living and breathing and dependent on resources, but how far are we willing to go to gather one resource rather than investing in safer/more renewable resource production?


I thought about fracking a bit. What bothers me is not really knowing how bad the environmental effects might be, how much fracking actually contaminates the environment. It seems to be approved with little fanfare or questions, and then a midwest town suddenly discovers that its drinking water is flammable.

I wanted to make a game about how collecting resources can be dangerous. Over a couple months of pondering, I came to the conclusion that my game would be about a "city" that continually shrinks. To keep the city alive, the player would have to quickly tap on several types of resources spawning around the screen. The player could resort to "fracking" a resource to make it worth more, but this would also spoil an area of the screen permanently, such that any resources spawning in that area were now worthless.


We don't really know how many resources we need to survive in the real world without destroying our future, we can only guess. But a game is controllable. Setting specific worth of resources, generation times, etc, is how I present my vision, my views. So I decided there should be exactly enough resources to keep the city alive indefinitely.

But testing the prototype, I discovered that with enough resources, a good player would never lose. I needed scarcity of resources; the balance needed to be set against the player-character's survival. By giving the player less than they could live on, I forced fracking to delay the inevitable death of the city.

Additionally, I made contaminated areas slowly shrink, based on my coworker Ian's negative response to their permanence. They were a pointless chokehold to him, which is what I wanted players to realize through lots of play. I worried that by lessening their effects, I was misrepresenting how deadly they might be in the real world. Instead, the game became more compelling. When contamination is permanent, you are being told fracking is evil, rather than learning it. And once you've been told something, there is little value in hearing it again. When it is not so clear, you learn it through experience.


As I've grown as a designer, I've become ever more interested in designing games with "replay value". Not in the unpleasant commercial sense, but rather that I don't like a game "telling" me what it's about.  Many of the games I play only once, it feels like I've been given a statement, an answer, by the system[s] of the game. I learn quickly that X is bad and Y is good. Maybe the story or art or music leaves me with questions, but I took all from the mechanics. I'd rather the mechanic also leave me with questions.

By taking player feedback and adjusting only a few numbers this way or that, I was able to make "Fracking" ask questions, instead of stating things explicitly. I find myself replaying it, trying to learn the relative values of fracking, and the alternate, less destructive harvesting mechanic.

I messed with the numerical values of fracking, trying to remove my bias. Fracking now plays an important role in my game. It is dangerous and often helps kill the city, but played cautiously enough it prolongs the city's survival more than without. Making and playing this game has made me consider the concept of fracking in a more pragmatic light. The original game concept that fracking is "evil" has been altered. It is instead a dark gray area. 

Fracking is a dangerous avenue that we are pursuing, but it's not evil. It is only reflective of humanity's ubiquity, our presence encroaching onto every surface and, as with fracking, into every crevice. We grow, we consume, else we die. My little game neglects to represent our growth, instead representing only the shrinking space and resources we have to operate an ever expanding machinery of food and waste and shelter.

I'm still opposed to fracking, primarily because it's not a solution to our bigger problem of oil-dependency. But survival is tough when we don't have the resources to sustain how long and increasingly we've been suckling at mother nature's teat.


"Fracking" will be available soon in an update to my game Distractions, available right now for free on iOS.

Monday, July 22, 2013

Lost in Mechanics

It's easy to dislike one's own work, even when it works. And there are many questions about what the heck does it even mean for mechanics to work or to not work. There are things you could easily argue don't work, and yet they might. Is a game bad because it relies too much on luck? What exactly is the goal of your mechanic? Do you want someone to play your game once and be done, or do you want them to have the urge to play it at any moment. The difference between Angry Birds and Trackmania is enormous, when one forces you to deal with a seemingly random set of physics outcomes, while the other gives you precisely what you want, provided you can indeed press at exactly the right moment.

I've been making luck based games lately, and it's really annoying. I didn't want to do this. I've been creating scenarios where things are just balanced enough that the player is at the whims of the random seed generated that playthrough. I've got a boardgame where every player has such an opportunity to be the winner that it ends up being almost luck-based. Give every player a chance to come back to the victory, and you don't know which player will draw that straw.

There has to be a point where you decide that you're just going to move forward with the mechanic, but it's tough when you can't tell if that mechanic is what you wanted it to be. Making a game about choosing paths in life, I don't know what I'm writing anymore.
this all means jack diddly.
ooooh joy.
more product that's product that doesn't go anyhwere because I can't fuckin move beyond this weird sophomore slump, right? it's easy to draw goats. it's hard to make something new. or to want to make something new.

I left that game behind, that bathtub game behind because I'm making toys. I can't seem to make a system that's got true meaning mixed with control. so here we go again with that. Should I finish this thing? I think I should, but who really knows anymore. I just have to keep pushing, but for now and I can just draw goats. Goats jumping, hhhere we go! Everyone likes something that they know already. I wish i could make the new mechanics more quickly. I could pinpoint whenwhy it works or not.

It's the curse. games are systems, and I don't know where the entry point for the system is . or how You should be affecting it or if you should have a real say, or if you care about how it looks. you shouldn't care how it looks I think. But that's discounting the power of aesthetic. A system is representative, right? or is it entirely abstracted. Oh boy, Okay, I need to just go not think for a couple hours. And get back tro drawering things in the morning.

Saturday, March 16, 2013

Let love be. Beyond all laws and boundaries.

You can argue there's no goal in life, but I have to respond with love. Or I must try. Those heartbeats of space and time, those pulsing rhythms deep in our minds, that is the yearning to love.

We must yearn to love. Life is a never-ending yearning. The heart should yearn for love as much as it does love.

We hurt each other, we hurt ourselves, in that denial of love.

It's not about acceptance, it's not about tolerance. Love is deeper than tolerance, it's understanding. It's an embrace. Love consumes. Love is all. And where there is love, there is life.

Let love be. Beyond all laws and boundaries. Love is one.

Friday, March 15, 2013

Just now Ian came up and spoke to me over my shoulder as I was drawing Escape Goat 2 art. On my headphones the immensely dramatic climax of M83's song "Wait" was pulsing through my tiny earbuds. I quickly tapped the F8 key on my Macbook to pause the beautiful moment of creation and catharsis and art that someone had created thousands of miles from here, across an ocean. We chatted briefly about the programming he had just done, making it easier to fit more art into our game at less cost to file size. We finished talking and I hit F8 again. The pounding climax returned at full force, as the particles of noise instantaneously resumed from their frozen state, the emotion waiting for me to call. It could have waited forever.

Sunday, August 19, 2012

Game Center Leaderboard Dismissal on iPad vs. iPhone

A random piece of knowledge I send off to you for whom it may help.

I used Cocos2d and Ganbaru Game's Game Center helper to integrate Game Center into Dead End, an iOS game of mine.

However, upon converting the game to Universal, I found two problems.

1. GameCenter wouldn't pop up on iPad.
To resolve this, you have to change the modalPresentationStyle for your leaderboard.  The default does not work on iPad.

So this is my showLeaderboard code, with an added line for iPad/iPhone integration.
- (void)showLeaderboardForCategory:(NSString *)category
    if (hasGameCenter)
        GKLeaderboardViewController *leaderboardController = [[GKLeaderboardViewController alloc] init];
        if (leaderboardController != nil)
            myViewController = [[UIViewController alloc] init];
            leaderboardController.leaderboardDelegate = self;
            leaderboardController.category = category;
            leaderboardController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;

            if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
                leaderboardController.modalPresentationStyle = UIModalPresentationFullScreen;
                leaderboardController.modalPresentationStyle = UIModalPresentationFormSheet;
            [[[[CCDirector sharedDirector] openGLView] windowaddSubview:myViewController.view];
            [myViewController presentModalViewController:leaderboardController animated:YES];
        [leaderboardController release];

2. When I was dismissing the leaderboard on iPad, touch controls stopped working.

On iPhone/iPod, the dismissal code looked like:
- (void)leaderboardViewControllerDidFinish:(GKLeaderboardViewController *)viewController
    [myViewController dismissModalViewControllerAnimated:YES];
    [myViewController.view.superview removeFromSuperview];//I added this to Ganbaru's code
    [myViewController release];

On iPad, however, instead of [myViewController.view.superview removeFromSuperview], it should only be [myViewController.view removeFromSuperview].  I'm not sure why, but it works for me.

Thus, to get leaderboard dismissal to work on both iPhone AND iPad, the full code should be:
- (void)leaderboardViewControllerDidFinish:(GKLeaderboardViewController *)viewController
    [myViewController dismissModalViewControllerAnimated:YES];

    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
        [myViewController.view.superview removeFromSuperview];
        [myViewController.view removeFromSuperview];
    [myViewController release];

Hope this is useful for someone!