Propagate

is a beautiful underwater seascape that can be both a calming solitary experience, or an engaging social one.

Watch as diverse species of virtual flora flourish and fade in turn, in a persistent environment, synchronized to users anywhere in the world.

Each species is defined by yourself or others, using the Lua scripting language and our simple API + integrated editor and testing stage. When you've designed a species you're proud of, push it live and see it interact with the ecosystem.

A trivial example:

while 1 do
     grow("up")
end

How it runs

HTML5 Canvas running on the client, communicating via web socket with the server.

Server is running Go and spinning off 100's of Lua VM's to sandbox user-generated code and control plants.

The server and VM's communicate concurrently using channels and go routines.

Challenges

Propagate has a complex (probably over-engineered) architecture, consisting of three major parts. The Client, the Server, and the Lua VM's running sand-boxed flora code. These components all needed to communicate in a thread-safe concurrent manner, and these channels+websockets were the primary challenge and presented lots of iterations and interesting debugging. We had some bizarre stuff happening in the terrarium!

Building a concurrent system meant that we needed to clean up all the concurrent processes our program created. This was challenging because it is hard to design a system that cleans up after itself when moving so quickly to improve features.

Go is not an ecosystem that our entire team had used prior to this event, but we decided to use it as our server side for it's excellent concurrency story. This meant that half our team was getting mentored on Go best practices as we laid down the framework for Propagate, but by Saturday night we were all able to be productive and confident in the code-base.

Finally, tweaking mechanics to achieve a satisfactory ecological balance was an important challenge as Propagate came together. We wanted the ecosystem to be alive and dynamic, meaning that old plants gradually withered away to make room for young. An interesting mechanic that emerged is the way that plant's tendencies to drop spores in close proximity to themselves lead to "forests" of one species

Going forward

We would like to explore algorithmic iteration of Propagate programs, including generational mechanics and fitness values. We also want to expand the ecosystem simulation to include an entire food chain of procedural critters

+ 8 more
Share this project:
×

Updates