Game Design

Introducing Volcanoes, a New Game Prototype, Ready For Feedback

Elevator Pitch:

A two-player abstract strategy game where you race to grow a ridge of volcanoes halfway around a planet. What’s unique about this game? Three things:

Pentakis Icosidodecahedron
  1. Played on a sphere-like shape called a Pentakis Icosidodecahedron. It’s like a 20-sided die, but each triangle face is cut into four triangles. So there are a total of 80 spaces on the board. And the board wraps around in all directions.
  2. Volcanoes erupt once they get to level five, destroying neighboring-opponent-volcanoes and accelerating neighboring-friendly-volcano growth.
  3. Two plays per turn with growth phases between turns.

What kind of game is it?

It’s similar to a connection game (like Hex). But one player’s connection doesn’t necessarily block the opponent’s connection, so perhaps it’s more of a race that feels connection-game-ish. But it also has capturing (via volcano eruptions), so that can feel a little Go-ish.

Video Introduction:

How do turns and growth work?

The red arrow rotates clockwise after each of the six turn, then repeats that cycle until the game ends.

Orange and blue volcanoes alternate placing their volcanoes on the board. But each color gets two turns in a row, with a neutral growth phase in between. (See Turn Clock illustration.) Volcanoes start at level one when they are first played. You can also spend your turn increasing the growth of one of your existing volcanoes.

How do eruptions work?

When volcanoes get to level five, they erupt with the following effects:

  1. adjacent enemy volcanoes are destroyed (removed)
  2. adjacent friendly volcanoes advance one level on the growth track (this can trigger more eruptions)
  3. the level-five-volcano that erupted resets to level one on the growth track

Try the game!

You can download a digital prototype of the game, if you have a computer that runs Windows. There’s an installer (named something like this: Setup-Volcanoes-v0.4.2.exe). Or you can just download the zip (named something like this, unzip to a folder and run the Volcanoes.exe file in that folder. I recommend playing against these four AIs (ordered from strongest to weakest):

  1. Parallel MCTS Beeline
  2. Monty Carlo Beeline 3
  3. Monty Carlo Beeline 4
  4. Parallel MCTS

Thanks and Kudos

My buddy Scott Clayton, an amazing programmer, made the beautiful digital prototype linked above. Without his help, this game would probably still be languishing in my game design folder. His work enabled me to make significant progress. It’s amazing how great it is to be able to test ideas with a bunch of AIs kicking the tires.

Join the Discussion

I’ve posted this article to three different forums for discussion. Please join the discussion at one or more of these websites:

  1. BGG Abstract Games Forum
  2. Reddit Abstract Games subreddit
  3. Facebook Abstract Nation Group

Data Science

Why I’m starting a Data Science Masters program

Today is the first day of my first semester as a Data Science Masters student.

Why am I starting a Data Science Masters program?

Because I want to be able to unlock insights about whatever data problem I’m faced with. (And aren’t they all data problems? I’m joking—kind of…) Here are two general problems I hope to learn to solve:

  1. improve online conversion rates
  2. balance game system designs

How did I get here?

I got into data via art. In the mid-2000s, I followed the work of artists like Joshua Davis. He inspired me to start playing around with Flash and Processing. I fancied myself a digital artist. I might have called the images I made around this time “data visualizations,” but they were actually visual art (that happened to have some data under the hood). I didn’t yet know of the idea of making sense of data and telling a story about that data.

Then, I read Ben Fry’s Visualizing Data which opened up a whole new world. I considered studying with Ben Fry’s former mentor John Maeda at the MIT Media Lab. Instead, I ended up following a different path; mostly focusing on designing websites. That lead to an interest in organizational processes, business, and earning an MBA.

Now I find myself ready to commit to data science. I work with lots of interesting analytics experts at my day job. I keep wanting to jump in and learn how they do what they do. This Data Science program is how I plan to finally do that.

I plan to write about what I learn—at least once a week—and post those writings here. Please follow along and feel free to comment or ask questions.

Data Visualization

Create Table Lens Display with R and ggplot2

I’m trying to recreate this graph (from the cover of Show Me the Numbers) with R and ggplot2:


A kind fellow (named Vivek Patil) on the ggplot2 mailing list got me started with some code:

tea=c("Arabian","French Roast")
Sales=c(10000, 15000)

ggtitle("Sales vs Plan")+ coord_flip() +theme_few()+scale_fill_few("medium")+
theme(legend.position="None", axis.title.y=element_blank(),axis.title.x=element_blank())

coord_flip()+ggtitle("Variance to Plan")+theme_few()+scale_fill_few("medium")+
theme(legend.position="None",axis.text.y = element_blank(),axis.title.y=element_blank(),


That code generates this graph:

Graph from starter code

I built on that by adding more data, saving it to a CSV file and then running the ggplot2 again. Here is the CSV data:

2,French Roast,15000,12000,3000,0.2500,Coffee
3,Green Tea,18000,15000,3000,0.2000,Tea
4,Mint,19000,16000,3000,0.1875,Herbal Tea
5,Italian Roast,19000,17000,2000,0.1176,Espresso
7,Earl Grey,36000,30000,6000,0.2000,Tea
9,Chamomile,40000,35000,5000,0.1429,Herbal Tea
12,Lemon,50000,42000,8000,0.1905,Herbal Tea

Here is the code:

df <- read.csv(file="DisplayTableData.csv", header=TRUE, sep=",")

  ggtitle("Sales vs Plan")+ coord_flip() +theme_few()+scale_fill_few("medium")+
  theme(legend.position="None", axis.title.y=element_blank(),axis.title.x=element_blank())

  coord_flip()+ggtitle("Variance to Plan %")+theme_few()+scale_fill_few("medium")+
  theme(legend.position="None",axis.text.y = element_blank(),axis.title.y=element_blank(),


And here is the graph:

Graph from starter code2
As you can see, I’ve got some more work to do. I’m reading through the docs and trying things out. Hopefully, my next post will show complete working code.