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):
- Draw a circle on the screen
- Mirror the circle
- Randomly generate multiple circles (inkblots) of different sizes and mirror them
- Distort the inkblots so they were more irregular (this meant converting everything from ellipses to custom shapes, where I could manipulate individual vertices).
- 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.
Next step: start designing a game around these inkblots!