The Game of Nomic
2018
A description of the game of Nomic.
Nomsu’s inspiration (and name) comes from a game called Nomic that was invented by the philosopher Peter Suber (“Nomsu” = Nomic + Suber) as a thought experiment about paradoxes in law. Nomic is a game where you start with a small set of rules, such as:
All players begin with 10 points.
During each round, all players submit a proposal for a change to the rules. Have one player read the proposals aloud. Players vote “yea” or “nay” on each proposal. The proposal (or proposals) with the most “yea”s becomes part of the rules, and a new round begins.
Whenever a player’s proposal is adopted, that player gains 3 points.
The game ends if any player reaches 25 points, or if it’s impossible to determine how play will proceed.
When the game ends, the player with the most points wins.
The specific set of rules is less important than the fact that the rules contain a mechanism for changing the rules, and rule changing is a central part of the gameplay. Players might submit proposals like:
If a player’s proposal comes in second place, they gain 1 point.
Any time a player says the word “what” they lose 1 point.
After each round, randomly select one of the previously rejected proposals to become a part of the rules.
The most interesting part of Nomic is that all of the rules are subject to change. It is perfectly valid to submit rule changes like:
Replace rule 4 with: The game ends when one player reaches 20 points.
Replace rule 2 with: During each round, elect a president, who proposes a rule change that will be enacted unless at least 2/3rds of players veto it.
As time passes and new rules get added, the game can get very complex. It’s a ton of fun, and it can teach you a lot about legal systems, game theory, and game design.
Playing Nomic for the First Time
When I first played Nomic, I played it in a Slack group over the course of a month, and what started as a simple set of 12 rules (modified to fit asychronous online play, rather than short, in-person games) grew into more than 80 rules, including rules that referenced an additional set of 75 random outcomes for when certain events occurred. We built up a whole mythology and had a lot of ups and downs, finding places where the rules didn’t work and fixing them as we went. Even when the rules were badly broken or exploitable, it was still very fun.
Of course, you can imagine that that sort of complexity became hard to keep
track of. It became a hassle to maintain an up-to-date record of whose turn it
was, how many points everyone had, and even what the current set of rules
was. Since we were playing on Slack, I decided to use an existing
Slackbot to keep track of the score. That helped a lot, but it wasn’t very
flexible, and we still had to manually keep track of a lot of other things. So,
I decided to roll up my sleeves and write my own simple Slackbot to handle some
of the bookkeeping. It supported some basic functionality like commands for
!give @person 5 points
and !most points
to track
points, !random player
to randomly select players, and
!end turn
to keep track of whose turn it was. This worked great,
but it still had some irritating limitations. I had to manually update the code
and restart the bots every time the rules changed, and it was possible for the
code and the rules to drift out of sync. At some point, I had the idea to
provide a mechanism for the players to tell the bot to update itself
for some of the rudimentary random outcomes. This made maintaining the bot much
less work, but it was still very inflexible.
Eventually the game ended, a winner was crowned, and I moved on with my life. Time passed, and I was working on various projects (my games 30 Second Life, Unshuffle, and Triptoy, but from time to time, my mind would wander back to Nomic, and the Slack bot I had made to keep things running smoothly. I really wished the system was more powerful, and could handle things like collecting and tallying votes, determining the winning proposals, and updating its own source code accordingly.
I particularly liked the user-friendly natural syntax of my original Slack
bot commands like !give @person 2 points
, and like many
programmers, I also have strong opinions about programming languages.
So, I decided to make my own language for playing Nomic. Its main design goals
were to be easy to read and good at accepting modifications to its own code
while running. And thus, Nomsu was born.