Ambienome – Technology

In my previous post, I described the concept and roadmap for my new project, Ambienome. In this post, I’ll be describing the technology (programming language and libraries) I’m using, and why I chose them.

Even though I have seven years of experience with Ruby, and my own game library, Rubygame, already available and ready to use, I’ve decided not to write Ambienome in Ruby. Instead, I’m writing it in Common Lisp, using OpenGL and OpenAL for graphics and audio. Continue reading Ambienome – Technology

New Project: Ambienome

I’ve started a new project: Ambienome. This is a game (or, rather, a toy) I’ve wanted to create for years — I blogged about it in May 2007 and November 2009 — and now I’m finally making a serious attempt.

I’ll be blogging about my development progress, both to solidify my ideas by putting them into words, and to keep myself “accountable” for maintaining progress. I’m starting off with a two-part announcement and introduction to the project. In this part, I’ll describe Ambienome’s concept and a tentative list of progress milestones. In the second part, I’ll write about the tools (programming language and library) I’m using, and why I chose them.


Ambienome will be a freeform creative toy/playground, where players design and interact with colorful, musical, AI-driven aquatic creatures. The concept is heavily inspired by Toshio Iwai’s Electroplankton, and by Will Wright’s Spore.

I loved Electroplankton, but wished there was a way to create new types of creatures, to have multiple types of creatures in the same scene, and to save and share scenes with my friends. Spore’s easy-to-use method for creating new creatures out of parts, and integrated system for saving, uploading, and downloading creations online, suggested a workable model for creating and sharing Ambienome creatures and scenes.


This is a very novel kind of project for me, and it will have many challenges to overcome and problems to solve. I can’t even guess how long it might take to finish, so I’m not going to bother speculating about a project timeline. But, I have plotted out some of the major milestones for the project, in terms of functionality to be implemented:

  1. Players can interact with a variety of built-in creatures, and watch/hear them interact with each other.
  2. Players can assemble new types of creatures from a variety of built-in parts.
  3. Players can import and export creations (creatures and scenes), to share with other players.
  4. Players can upload and download creations from a central site (a la Sporepedia), and rate and comment on other players’ creations.
  5. Players can design custom parts, and share them with other players.
  6. Multiple players can build and interact with the same scene simultaneously, over the network.

I consider 1-3 to be essential, and the rest to be icing on the cake. I’ll do at least one release per milestone. I haven’t decided yet whether this will be an open source project or not. If it seems to be turning out well, I might try to make some money off it.

Currently, I’m still laying the foundation, implementing low-level functionality. For reasons I’ll discuss in the next post, I’ve chosen not to use Ruby or Rubygame for this project. So, in many ways I’m starting from square one, reimplementing the basics: opening a window, handling input events, drawing to the screen, managing the game loop, etc. Well, not exactly square one — I’m building atop other libraries, and I can borrow the basic concepts from Rubygame, so I don’t have to solve those problems all over again.

In the next post, I’ll be writing about the programming language and libraries I’ll be using, and why I chose them.