BeBS.net

This is a collection of Geoff's various hobby projects, both past and present. Unless otherwise
noted, these are written and maintained exclusively by Geoff in his spare time. Since spare time
is scarce, don't be surprised if any given project hasn't been updated in forever.

Highlighted Projects

Take 8 funny pictures through a single-elimination tournament to determine who is the
funniest! Playable on any modern web browser (including mobile devices), this game includes
a few interesting features such as global ranking of the images regardless of tournament
format and a color commentator who uses this information to talk about the match.

This is a work-in-progress demonstrating some of the best of what I've been using
professionally lately. The server-side components are written in Python, and the front-end
has a full-featured from-scratch MVC framework. Unit tests exist for all components,
though coverage keeps bouncing around as I keep playing with various experiments. The API
is fully documented, though only enough of it is implemented to run the game in its first
iteration.

This is an open source project, and I hope that others will be able to use it in the future
as a reasonable demonstration of how modern web applications can be put together, and how
well-defined APIs permit interoperable clients to be easily written.

Just 5 Minutes

Picture this: dynamically-generated Super Mario Bros. with rogue-like RPG elements and a
panic-inducing time limit, running on the Ouya or other Android devices. Just 5 Minutes
started as an exercise in learning 2D game programming for the Android, building off of
Notch's (in)famous "Infinite Mario" codebase.

This has been waiting on getting decent commercially-usable artwork for roughly forever,
though recently some usable sprites became available over at
Open Game Art. Stay tuned on seeing
this one show up on the Ouya store.

A twin-stick shooter with its heart firmly planted in Robotron and its tongue firmly
planted in cheek. The key feature on this game is that the weapon has more than 10
different attributes, each of which can be tweaked individually. This means that the
guns in the game behave in all sorts of surprising and amusing ways, such as strange
squiggly paths or even just a cloud of bullets that surrounds and protects the player.

This began as two experiments in one: how does a 2d game engine really work, and how does
the HTML 5 canvas work. A more ambitious Android version suitable for playing on the Ouya
is in the works, but in the meantime the original on the site is still fun to play.

Take Cards Against Humanity, put it on the web, and let people make their own answer cards.
Mix, and let fester with the best (worst?) of whatever the internet can come up with. This
game is playable both on the website, and is
available on the Play Store.

The cards get rated against each other, and an automated process regularly culls the lowest
performers. In principle, this lets the "best" cards float to the top, while cards that
nobody ever picks get filtered out over time. In practice, the cards at the top tend to
be the most outrageously horrible things imaginable.

Technology-wise, the server uses node.js and socket.io on the back-end, and was largely an
experiment to see what all the fuss was about with node and websockets. The website came
first, with the Android client being added afterwards when I wanted to tinker with Android's
intent system a bit.

WARNING: The content on this game is 100% uncurated and
unfiltered. Yes, there's a limit on the text length, but people have created some cards
in that space that would make the devil blush.

When writing the enhanced version of All NPCs MUST DIE!, I quickly realized that I needed
something to help with pre-rendered animated sprite compositing and pallette-swapping.
I also realized that no sprite animation tool out there did exactly what I wanted. So, I
built this small tool in Python to help with those needs. Even without needing the
"export to spritesheet" function, it's kind of fun just to play with as an animated
paper-doll generator.

Paperdoll-type sprites can be easily added from a variety of source formats by specifying
which frames are located where within the source sheet. The tool even permits licensing
and attribution information to be added to the definition files, so that when art is
exported all one has to do to cover attribution requirements is to copy/paste that into the
final product's credits.

Included with the tool is a small library of artwork, courtesy of
Open Game Art.

When Left 4 Dead was originally announced, I immediately pictured a "Dawn of the Dead"-style
survival horror game. When it was released, I was pleasantly surprised to see a more
Danny Boyle-style action-horror game, but the original imagined vision stuck with me.
The Romero Mod is a realization of that original (incorrect) vision, focusing on a slower
pace and inducing a fear of large crowds of zombies into the players through a variety of
subtle effects.

In many ways, Romero Mod is my best-received project. While it's true that people are very
excited about the core game design principles at work, I do feel my part in its success is
somewhat mitigated by the fact that it rests on the success of Left 4 Dead 2. Nonetheless,
it's a blast to play with friends, especially if they're used to the core game and just go
running into the hordes guns blazing.

This is a real-life semi-cooperative card game in the same vein as Munchkin (only less
silly). It was self-published via the Game Crafter, and will probably be revived as a
Kickstarter campaign at some point in the future.

The site hosts an online-playable - though incomplete - version of the game, written using
node.js and socket.io. My goal is to eventually flesh out the game a little more, and then
use it to promote a Kickstarter-funded print run of the actual game.

Dead Projects

Any of these might come back to life at some point in the future, but don't hold your breath.

My most ambitious project, PseudoQuest is a full-featured retro-styled web MMO RPG.
It's also my oldest project, and now the most dated. Written starting back in 2004
initially as a project to teach myself PHP and MySQL, this game achieved some limited fame
courtesy of some free advertising from my then-employer, Xfire. Over 11,000 users
registered for the game, and for a while there it had over 300 daily active uniques.

Technically, it's still alive, though literally nobody plays anymore. There are links to
purchase in-game currency that are still live, but the payments won't actually be
processed.

At one point in time, PseudoQuest had a client on the iPhone, though I've let that expire.

PQ Dojo

One of the more interesting features in PseudoQuest was the ability to do real-time PvP
in a traditional RPG turn-based style. The players loved this feature so much that I
created a copy of the game that existed only to facilitate PvP fights.

Dough Nuts!

My first self-published card game! Players work together to save a bus full of children
from being plunged head-first off a cliff, by baking a giant pile of doughnuts underneath
the bus. If they succeed, the player who made the most money in the meantime wins. If
they fail, the children die and everyone loses.

I've still got a couple thousand of these cluttering up my house, if you want a copy or 25.
(This was published before the existence of print-on-demand games publishers).

Cubist

"How hard could it be to make a Minecraft clone?" Well, the answer is: for the basics,
not very. It had been a very long time since I'd written anything using OpenGL (3d math
tends to make my head spin), but I thought I'd take another stab at it. It took me 2 days
to get a single cube rendered on-screen the way I wanted, and another 2 or 3 hours to get a
full world rendered using them. Cubist is written in Python, and is where I learned all
about the GIL's limitations: when I decided that generating the meshes was too slow
and tried to use threads to parallelize things, I discovered that I'd have to resort to
multiprocessing to get the job done.

I got as far as dynamically generating "infinite" terrain using a variety of noise maps,
some semi-fancy GL shaders (esp. for a non-3d programmer, I think), basic physics /
collision, a day/night cycle for lighting, and acceptable performance for adding / removing
blocks. I started in on a big refactor to make this network-playable, but then paused to
pursue other projects and haven't returned to this in a long while.

I keep thinking that maybe I'll come back to this, adding features such as the
aforementioned networking support and an easy-to-use mod library and management system. It
sure was pretty.

BeBS

The namesake for this domain, BeBS will always hold a special place in my heart. Some of
the earliest code I ever ran on the internet, BeBS was a full-featured Citadel BBS clone,
written in C++ and running on BeOS. I even wrote a door game for it, a miniature
Legend of the Red Dragon clone called "Scary Caverns". As part of writing Scary Caverns,
I put together an SDK for writing doors, but (predictably) nobody took me up on writing any.

While it's unlikely that I'll ever run Haiku as a server just for the purpose of running
BeBS, I do occasionally think about it. More likely, I'll just fork the modern-day
Citadel to add proper MySQL back-end support. You know, because what I really need
is another project... ;)

Who is this guy?

Geoff is the proverbial jack-of-all-trades, with skills covering everything from leading
engineering organizations to coding to product ownership to game design.

What is this stuff?

Each project here is an exploration - of a concept, of a technology, or just to see if it can be
done. The skills learned from one project carry over into other projects, and the cycle is
complete!