Procedural Inkblot Generator

My favorite games have always been ones that combine cooperation, social interaction, and verbal communication - notable favorites include Spaceteam and Keep Talking and Nobody Explodes. I think this stemmed from a childhood spent participating in Odyssey of the Mind - a team-based creative problem-solving program. 

After a long and hilarious night spent playing KTANE, I started to brainstorm some of my own ideas for games that would take advantage of complex communication. I wanted to find something that would stretch the limits of communication between people - and then I thought about Rorschach inkblots. 

If you're not already familiar with the history of Rorschach inkblots: they're the premise of a psychological test developed by Hermann Rorschach sometime around the 1920s. Subject's perceptions of bilaterally symmetrical inkblots are recorded and used as a basis for psychological interpretation. It's been critiqued as pseudoscience, but the magic of abstract inkblots is still there - everyone sees something different in them. 

The Rorschach test capitalizes on one of my favorite psychological phenomena - pareidolia. Pareidolia is the tendency to see familiarity or patterns where none exists - and it often manifests as perceived images of animals and faces (think: the man on the moon).

I figured this would be an interesting basis for a game, but in order to prototype any game mechanics or ideas, I needed a lot of inkblots. 

I wasn't going to draw them by hand, and I didn't want to pull them online from other sources - so I decided to procedurally generate them. 

I don't have much experience in programming. I've dabbled a bit in Python by working through MIT's amazing OpenCourseWare class "Intro to Computer Science & Programming (6.00SC)" but I wasn't sure it was the right tool for this. I had vaguely heard about Processing as a good programming language for visual designers, so I decided to try it. 

I broke the problem into a few steps (this is much cleaner in retrospect than it was as I was working through it):

  1. Draw a circle on the screen
  2. Mirror the circle
  3. Randomly generate multiple circles (inkblots) of different sizes and mirror them
  4. Distort the inkblots so they were more irregular (this meant converting everything from ellipses to custom shapes, where I could manipulate individual vertices). 
  5. Run the generator multiple times and save a batch of images

It took a few weekends of work and a few wrong turns, but I finally got something that I'm happy with!

I'm in the process of cleaning up the code and putting it on GitHub, but in the meantime, here are a few sample images from one of my batches:

A sample of some inkblots generated by the Processing sketch.

A sample of some inkblots generated by the Processing sketch.

Next step: start designing a game around these inkblots!