Tutorials/Creating custom rules

From LifeWiki
Jump to navigation Jump to search
Radiation.png This article is a stub. You can help LifeWiki by expanding it.
Ambox notice.png This article needs to be expanded with: information about icons in ruletables.
Ambox notice.png This article needs to be expanded with: information about variables in ruletables.

Such as: var a={0,1,2}

So, you already know about Golly and rules?

Creating custom rules: the rule table

Maybe you want to create a rule entirely from scratch, e.g. for use in Golly. Golly has the ability to run a very large class of rules using RuleLoader, described by a special syntax which you will now learn how to employ.

To create a new rule, you first need to know how to create RuleTables, which are the transitions that occur every generation, AKA Rules. For this tutorial, we are going to recreate Life, but with the name "Tutorial". To start, open your favorite text editor and type:

@RULE RuleName

where RuleName is the name of your rule; let's call this rule Tutorial, for tutorial purposes. Next, add the table, i.e. your actual transitions for the rule. Do this before getting to the actual transitions.

@TABLE
n_states:2
neighborhood:Moore
symmetries:permute
  • @TABLE: This tells Golly that the table starts here.
  • n_states: This is how many states your rule has, INCLUDING state 0, the dead state/background, so 2 states will have live and dead states and 1 state will only have the background.
  • neighborhood: This is the neighborhood the rule uses, can be Moore, Hexagonal, vonNeumann, or oneDimensional, for the full list see the RoadMap
  • symmetries: This is the arrangements accepted for each transition, none will make it so for example, if you want birth at 4 neighbors, you will have to write out every single arrangement of 4 neighbors. Permute makes it easy, we will come back to that later.

Now, transition time! Here, we will make Life, B3/S23. To make a transition, type a string as so:

Starting State, N Neighbor State, NE Neighbor State, E Neighbor State, SE Neighbor State, S Neighbor State, SW Neighbor State, W Neighbor State, NW Neighbor State, New State

So, for Life's "B3", we write:

0, 1,1,1,0,0,0,0,0, 1

This means that if a state 0 cell has 3 neighbors, it will become state 1. This is also where permute comes in; if we didn't have permute, say none, it would only make the cell live if it is exactly the same as we put it, live on the North, North East, and East only, but permute makes it so all B3 states are filled.

Now we'll make transitions for death. We don't do it for survival because survival means no transition happens to the cell. Live cells in life survive if they have 2 or 3 live neighbors, hence die (from loneliness, one imagines) if they have only 0 or 1, or (from overcrowding) if they have 4 or more.

1, 0,0,0,0,0,0,0,0, 0
1, 1,0,0,0,0,0,0,0, 0
1, 1,1,1,1,0,0,0,0, 0
1, 1,1,1,1,1,0,0,0, 0
1, 1,1,1,1,1,1,0,0, 0
1, 1,1,1,1,1,1,1,0, 0
1, 1,1,1,1,1,1,1,1, 0

Note another common way to achieve this is doing the survival and killing all the cells, and if two lines disobeys the first will always be used. Now you will need variables for that (they do not have to be a1 or a2, they can be whatever you want to call them, but it’s good to keep things organized). This method is very useful dealing with rules with multiple states.

var a1 = {0,1}
var a2 = {0,1}
var a3 = {0,1}
var a4 = {0,1}
var a5 = {0,1}
var a6 = {0,1}
var a7 = {0,1}
var a8 = {0,1}
var a9 = {0,1}
1,1,1,0,0,0,0,0,0,1
1,1,1,1,0,0,0,0,0,1
a1,a2,a3,a4,a5,a6,a7,a8,a9,0


Anyways, using the first method the entire file should now look like this:

@RULE Tutorial

@TABLE
n_states:2
neighborhood:Moore
symmetries:permute
0, 1,1,1,0,0,0,0,0, 1
1, 0,0,0,0,0,0,0,0, 0
1, 1,0,0,0,0,0,0,0, 0
1, 1,1,1,1,0,0,0,0, 0
1, 1,1,1,1,1,0,0,0, 0
1, 1,1,1,1,1,1,0,0, 0
1, 1,1,1,1,1,1,1,0, 0
1, 1,1,1,1,1,1,1,1, 0

Save this file and open it using the RuleLoader algorithm, or select all of it and paste it into Golly, and voilà, you've recreated Conway Life!

Making multiple states in the same ruletable which simulate different rules each (referred to as a rule mashup) is also an acceptable move.

Icons and Colors

Colors

By default, each state is colored so that state 0 is a dark grey, and all other states form a gradient from red (state 1) to yellow (the final state). If you don't like the default colors of your states, you can change them to different colors. For this, you use @COLORS :

@COLORS
0 0 0 0
1 255 255 255

Each argument in @COLORS is structured as follows, using the RGB color model:

<state> <red> <green> <blue>

Colors can be useful if you have a lot of states and it would be confusing to give nearby states similar colors.

Examples of Custom Rules