Ludum Dare 24 – Riot Control

Saturday, August 25th, 2012

After a couple of hours of thinking and drinking, I’ve finally hit upon an idea that I think is feasible and interesting for the Ludum Dare theme “Evolution.”

I’m a mild ochlophobe, which means I have difficulty with large, densely populated crowds. As such, reading the research paper Crowd Disasters as Systemic Failures: Analysis of the Love Parade Disaster was terrifying and it has remained lodged in my mind ever since.

All of this is a long winded way of saying I’ve had crowds on my mind lately. So when Evolution was announced, a thousand ideas came and went (“Lemmings + Genetic Algorithms!”, “Temple of Doom and Speciation!”) until I settled on something interesting, but also simple enough I stand a chance of implementing it in a weekend: selecting paths through a city for rioters such that they pick up new and diverse elements from the city while avoiding cops and opposing elements.

Still vague and high level, but the idea will be to trace a path through the lines of a Voronoi diagram (which should theoretically resemble the winding streets of an old European city)so that a cloud of dots can traverse it and “absorb” some of the elements of the Voronoi polygons it walks adjacent to.


I had a marvelously fun time at my first Ludum Dare. To say I fell short of my goal is the kind of breathtaking understatement not seen since the Bush era. But I WILL BE DAMNED IF THAT WILL KEEP ME FROM SUBMITTING THIS AND CALLING MYSELF A WINNER!

PARTICIPATION!

Rather than a blow-by-blow recounting of the events of the past 48 hours (see the end for that), I’m just going to have some general thoughts.

TOP MISTAKES I DIDN’T INTEND TO MAKE (as there were many I intentionally made like learning my tools during the competition)

  • Not coming up with an abstraction for game states early on. This basically prevented me from adding any kind of explanatory text / game over screen towards the end of the project.
  • Waiting too long for fun. I often had the joy of “Oh, I made this happen!” during development, but I didn’t actually have fun playing the game until nearly the end.
  • Using no one particular abstraction for time. Some portions of the game are tuned to the system clock, some to physics cycles, and a couple to FPS. As such, I basically can’t guarantee the game will play the same on any other computer or do things like slow the game down for testing (it plays pretty damn fast)

TOP SUCCESSES I DIDN’T INTEND TO HAVE

  • Using minimalist abstract art for placeholders. Sure the game looks like an angry gun battle between Pez dispensers, but I find that rather charming and don’t regret it one bit.
  • Incorporating a physics engine. At first I thought I could hack together the physics I needed and was just using Chipmunk for fun, but I discovered unexpected joys from this. (I LOVE the way enemies get toppled by bullets)

Other miscellaneous insights.

GAME DEVELOPMENT IN RUBY IS REALLY, REALLY FUN

Ruby allows me to go incredibly fast (by my standards anyway, shut up thanks) and change the hell out of my code with very few impediments. The fact that it is mostly geared to OO lends itself extremely well to the problem domain. Definitely far more pleasurable than my old games from 6-7 years ago written in Java and C++.

I WANT TO WRITE SOME DOCS FOR INTEGRATING GOSU AND CHIPMUNK

I really enjoyed working with Gosu and Chipmunk in Ruby and want to contribute back to both projects. I lost a ton of time to bugs in integrating the two and trying to understand the concepts behind them (lost a great deal of time stumbling towards CP::Shape#rehash_static_shapes alone). While there’s great reference documentation for both projects and incredibly responsive maintainers, there’s precious little in the way of quick-start / conceptual overview.

I’M MORE INTERESTED IN ALTERNATIVE FRAMEWORKS

While I really like Gosu and Chipmunk, it feels as if they’re a bit of a dead-end for the kinds of projects I’m interested in. Gosu in particular is an awkward fit for pixel-perfect drawing and the resulting blur in my project still bugs me. Not to mention that packaging my project would have been a pain. In particular, I want to give EaselJS and Play4N a look, as well as perhaps just using my own pixel drawing with something like LWJGL.

Thanks to the organizers for making this happen, and I look forward to the next time!


Here’s a shot of me gloating over my victim!

Woohoo! Not only did I resolve my aforementioned issues with the box models (primary problem is that Chipmunk always describes position by the center of an object - Gosu typically does top-left corner), but now you can shoot things at things. Exciting, er, things!

In addition to shooting your enemies, you can jump into their faces to knock them over and kill them. Since they are basically Pez dispensers a rather satisfying toppling takes place.

Now I’m at a cross-roads. I’ve ticked off most of the features I had listed before, but I’m far from a completed game. I think from here I go in one of two directions in order to have something I can call a “game” without resorting to this definition:

game (n.): a trick or joke.

One way towards gamedom would be turning this into a little two-player deathmatch game. That is a tiny world, after all. The other fast alternative would be to gradually flood the small arena with more and more enemies and basically see how long the player can hold out against the masses in an effort to thin the crowd (back towards my original idea of “This world is too small for the both of us, everyone else and me.”)

I’m going to clean this up a bit for the rest of the evening and sleep on it.


Ludum Dare 23 - Bullet Time

Monday, April 23rd, 2012

With my jumping bug put to rest, on to shooting things! With this, I got my first amusing bug (aside from that brief time I had people jumping off the screen)

Shoot to the right, all is well. Shoot to the left, though, and you hit yourself before quickly launching yourself off the screen.

Suicidal tendencies aside, this has revealed a few issues in my program. I almost certainly have some disconnects between the box models of my physics model of the world, and the display thereof. That bullet shouldn’t be so high on the player model (people don’t generally fire guns by holding them at face-level, as far as I know)

One of the fun parts of using decoupled libraries for display vs physics.


gate

Monday, April 23rd, 2012

Tianmen Shan (Heaven’s Gate Mountain). Hunan Province, China.

Someday, I will see this personally.


Ludum Dare 23 - Final Features

Monday, April 23rd, 2012

Rather than worry too much about making something a “game” under any definition, I spent most of today hacking around on whatever interested me. Primarily this has been map support, allowing me to take this:

… and turn that into this:

Tiling of the surface turns out to be a major problem for movement, though. Between each square tile is an invisible seam that will still trip up your movement. Solving this would be conceptually-simple - simply join these blocks together and output them as large rectangles rather than squares. However, that sounds like an opportunity to introduce more bugs and problems, so I’ll let this sleeping dragon lie.

Really, I’m just about done with the “game” parts. I want to add in the concept of player death and give the motionless agents the ability to shoot bullets every so often, but both of these should be easy enough. After that, I only want to do some cleanup (sound effects, music if I’m so inclined, and an intro screen on game launch.)


tl;dr - screenshot at end, code at github.com/citizenparker/the-two-of-us

More like my first four hours, as I really enjoy sleep. =)

As you may know, I’ve been participating in this weekend’s Ludum Dare competition. I say competition, but I should really say “quote” “competition” (quote quote quote) as I am really only competing against my inability to make games and personal inertia. It’s largely inspire by the “Punk’s Not Dead” entries at Rock Paper Shotgun.

In other words, this:

sparker: I don’t anticipate getting anywhere or building anything great. At most I plan on being able to look back on my work, sigh, and say “Well, that happened.”

sean Lofty goal. You can also treat it more as a kickstart to your game

sparker: Bah

sparker: I can 100% guarantee completely abandoning whatever I build, almost on principle

sparker: Also, I pledge to provide no more than 60-90 seconds of content that a jury of peers would consider “fun”

So, a recap on the few twelve hours then, yeah?

This year’s theme is “Tiny World.” I struggled a bit coming up with a theme I liked. For creativity, I always follow the rule “Write down 5 things immediately and then throw them away.” This turned out to be a struggle and I lost the first 90 minutes to this. However, I’ve landed on something I like, a silly platformer where you set out to destroy the world with increasingly destructive weapons because “this world is too small for the two of us. Sorry, everyone else, but you have to go.”

I’m violating the first rule of Game Jams by learning my tools on the fly, but so far it’s going well-ish. Gosu has been refreshingly easy to pick up and run with. I have some viewport and scaling issues I need to resolve today, but I have bullish confidence. Chipmunk has been a bit more challenging only because documentation on the Ruby bindings is largely lacking, incomplete, or out-of-date. Brian Marick’s quote “An example would be handy right about now” keeps running through my head.

I think my goal post-LD may be writing a tutorial on building a platformer in Ruby with Chipmunk. I’ll have to land on a coding style and structure for this that I’m pleased with. Currently that’s not the case.

Anyway, that’s it for now. Goals for the next four hours are as follows:

  • Movement
  • Shooting a basic gun
  • Killing and being killed

Code at github.com/citizenparker/the-two-of-us, and screenshot below!


drawception

Saturday, March 10th, 2012

This is pretty much the best thing I’ve ever drawn. Thanks, Drawception, for the inspiration.


Great Presentations

Monday, October 24th, 2011

I spent some quality time this weekend digging into a few presentations that I thought I’d share with you.

Let’s start with the Shibuya Rubyist Lunch lightning talk from RubyConf 2011. It’s short, about three minutes, and will set the right tone for what’s to come. You can’t help but feel joy when you see the enthusiasm of the audience and speaker for one another. This video encapsulates why I love the Ruby community dearly.

Rich Hickey’s talk from Strange Loop 2011, “Simple Made Easy,” is the best presentation I’ve seen in years. Rich makes the case that we have abandoned the concept of “simple” entirely in a slavish pursuit of “easy.” It’s incredibly thought-provoking - see Uncle Bob’s follow-up, for instance. It also gives the best context yet for Rich’s disregard for testing. Definitely have to watch this sometime - it’s already given us a new word, “complect.”

Also from this year’s Strange Loop is Nathan Marz with an overview of the new Storm framework. This platform for distributed real-time computation looks incredibly promising. I need to dig into this further, but this could potentially solve many different problems I’m looking at today. It’s not quite the brain-burner that Rich’s talk can be, so it makes a wonderful “cool-down.”


MadisonRuby Miscellanea

Saturday, August 20th, 2011

Just wanted to take a moment and capture some random thoughts about MadisonRuby.

Thanks everyone who came to Dan’s and my talk today at MadisonRuby. This has been a tremendous conference so far and I’m honored to be a part of it. If you have any follow-up questions, I’d love to continue the conversation. Feel free to contact me or find me on Twitter.

Madison is perhaps the loveliest town I’ve ever been to. Although I’m not sure I get the whole cheese thing. I’ve spent a fair amount of time elsewhere in Wisconsin and so I’m familiar with cheesemania. However, Madison takes this to a whole new level. My heart no longer pumps but instead goes “squelch” every so often.

Special moments abound at this conference. It’s an incredible conference with a special ethos - lots of hugs and affection everywhere. Sometimes I forget there’s special connections everywhere in the Ruby community. It’s such a marvelous experience, thanks guys. Big Tiger in particular, you’ve been totally awesome. I am in your debt for these moments.

I’ve included some of my favorite MadisonRuby moments below courtesy of twip.us - you can view their entire MadisonRuby collection here.

← Older Newer →