SimulatingWorldsCA PDF
SimulatingWorldsCA PDF
Master’s Thesis
TOMÁŠ PAGÁČ
Master’s Thesis
TOMÁŠ PAGÁČ
Tomáš Pagáč
iii
Acknowledgements
I would like to thank doc. RNDr. Barbora Kozlíková, Ph.D. and Mgr.
Jiří Chmelík, Ph.D. for their help with this thesis and for guiding me
through my studies. I am also grateful to my family for supporting
me both emotionally and financially all this time.
iv
Abstract
The thesis aims to study games featuring simulated worlds and ex-
plore the possibilities of simulating worlds using cellular automata.
Several games simulate liquids, gases, boolean logic, or electric cir-
cuitry on a grid. The thesis examines the functional requirements of
these simulations and the limitations of their techniques. Different
variants of cellular automata are explored for the suitability of simu-
lating similar behavior. Defining transition rules that lead to desirable
behavior is difficult. I implemented two variants of cellular automata
and created a visual editor to assist rule creation. The viability of the
visual editor is evaluated by potential users.
Keywords
v
Contents
Introduction 1
1 Theory 3
1.1 Cellular automaton . . . . . . . . . . . . . . . . . . . . . 3
1.1.1 Lattice . . . . . . . . . . . . . . . . . . . . . . . . 3
1.1.2 Neighborhood . . . . . . . . . . . . . . . . . . . . 4
1.1.3 Cell states . . . . . . . . . . . . . . . . . . . . . . 4
1.1.4 Configuration . . . . . . . . . . . . . . . . . . . . 4
1.1.5 Transition rules . . . . . . . . . . . . . . . . . . . 4
1.1.6 Computation . . . . . . . . . . . . . . . . . . . . 5
1.2 Reversibility . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.3 Four classes of cellular automaton rules . . . . . . . . . 6
1.4 Rule 110 . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.5 Game of Life . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.6 Computation and visualization . . . . . . . . . . . . . . 7
1.7 Implementation in games . . . . . . . . . . . . . . . . . 8
1.8 Block cellular automaton . . . . . . . . . . . . . . . . . . 9
1.8.1 Billiard ball model cellular automaton . . . . . . 10
1.8.2 Advantages for games . . . . . . . . . . . . . . . 10
1.9 Lattice gas cellular automaton . . . . . . . . . . . . . . . 11
1.9.1 Visualization . . . . . . . . . . . . . . . . . . . . 12
1.9.2 Advantages for games . . . . . . . . . . . . . . . 12
1.10 The boundary condition . . . . . . . . . . . . . . . . . . 12
1.11 Overview and discussion . . . . . . . . . . . . . . . . . . 13
1.12 Further impact of cellular automata . . . . . . . . . . . . 14
2 Case study 15
2.1 Falling-sand games . . . . . . . . . . . . . . . . . . . . . 15
2.2 Noita . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.3 Terraria . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.4 Minecraft . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.5 Discussion . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3 Implementation 21
3.1 Development setup . . . . . . . . . . . . . . . . . . . . . 21
vi
3.2 Naive model . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.3 General model . . . . . . . . . . . . . . . . . . . . . . . . 22
3.3.1 Chunks . . . . . . . . . . . . . . . . . . . . . . . . 22
3.3.2 Layers . . . . . . . . . . . . . . . . . . . . . . . . 23
3.3.3 Computation . . . . . . . . . . . . . . . . . . . . 23
3.3.4 Visualization . . . . . . . . . . . . . . . . . . . . 24
3.3.5 Basic optimizations . . . . . . . . . . . . . . . . . 26
3.4 Block cellular Automaton . . . . . . . . . . . . . . . . . 27
3.5 Lattice gas cellular automaton . . . . . . . . . . . . . . . 28
3.6 Two-layer top-down experiment . . . . . . . . . . . . . . 30
3.6.1 Creating a top-down environment . . . . . . . . 30
3.6.2 Cellular automaton setup . . . . . . . . . . . . . 31
3.6.3 Transition rules . . . . . . . . . . . . . . . . . . . 31
3.6.4 Number representation issues . . . . . . . . . . . 33
3.6.5 Result . . . . . . . . . . . . . . . . . . . . . . . . 33
3.7 Simplifying transition rules . . . . . . . . . . . . . . . . 34
3.7.1 One algorithm for all materials . . . . . . . . . . 34
3.7.2 Chaining simple operations . . . . . . . . . . . . 35
3.7.3 Grouping materials . . . . . . . . . . . . . . . . . 35
3.8 Visual rule editor . . . . . . . . . . . . . . . . . . . . . . 37
3.8.1 User Interface Setup . . . . . . . . . . . . . . . . 37
3.8.2 Materials and groups . . . . . . . . . . . . . . . . 37
3.8.3 Rule editing . . . . . . . . . . . . . . . . . . . . . 38
3.8.4 Rule generation . . . . . . . . . . . . . . . . . . . 40
3.8.5 World editor . . . . . . . . . . . . . . . . . . . . . 41
3.8.6 Lattice gas cellular automaton editor . . . . . . . 43
3.9 Evaluation . . . . . . . . . . . . . . . . . . . . . . . . . . 44
3.9.1 Block cellular automaton editor . . . . . . . . . . 44
3.9.2 Lattice gas cellular automaton editor . . . . . . . 46
5 Conclusion 51
A An appendix 52
Bibliography 53
vii
List of Figures
viii
3.5 In-engine screenshots of the top-down CA (explained in
Section 3.6.1). There is a terrain layer with shadows and
semitransparent water visible. . . . . . . . . . . . . . . . . 25
3.6 Water flowing down the terrain. Active rectangles are
visualized in red color. . . . . . . . . . . . . . . . . . . . . 26
3.7 Neighborhoods in BCA computation. Orange-colored blocks
modify neighboring chunks. Red-colored blocks reach
outside the world boundary. . . . . . . . . . . . . . . . . . 27
3.8 Neighborhoods in LGCA computation. Orange-colored
cells modify neighboring chunks. Red-colored cells reach
outside the world boundary. . . . . . . . . . . . . . . . . . 29
3.9 A cube in isometric, cabinet, and top-down projection
(from left). . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.10 Height of each cell and its interpretation. (Implementa-
tion allows for more angles between the ones shown.) . . 31
3.11 Equalizing water level on a terrain. . . . . . . . . . . . . . 32
3.12 Top-down terrain painted using a square brush and a
smoothing brush. . . . . . . . . . . . . . . . . . . . . . . . 33
3.13 Defining rules using simple operations and groups (screen-
shot taken in Visual Studio Code). Simple operations are
assigned to group configurations in order of definition. . 35
3.14 Material editor user interface. . . . . . . . . . . . . . . . . 38
3.15 BCA rule editor user interface. . . . . . . . . . . . . . . . . 39
3.16 Two examples of equivalent rules that get normalized into
their leftmost form. . . . . . . . . . . . . . . . . . . . . . . 40
3.17 World editor and generator user interface. . . . . . . . . . 42
3.18 Naive and greedy collider (left), marching squares col-
lider (right). . . . . . . . . . . . . . . . . . . . . . . . . . . 43
3.19 LGCA rule editor user interface. . . . . . . . . . . . . . . . 44
3.20 A random scenario where water interacts with sand. The
sand sinks in the water. Simulation progresses from left
to right. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
3.21 A random scenario where water, oil, and two gases inter-
act. The oil floats on top of the water, and gases mix and
rise. Simulation progresses from left to right. . . . . . . . 45
3.22 A scenario where fire burns forests, burned forests turn
into dead land, and eventually regrow. Simulation pro-
gresses from left to right. . . . . . . . . . . . . . . . . . . . 46
ix
3.23 A random scenario where water flows down. In areas with
too many water particles, the particles can move through
the stone. Simulation progresses from left to right. . . . . 47
3.24 A random scenario where dark and light particles interact.
When they collide, the dark particle goes down, and the
light particle goes up. Simulation progresses from left to
right. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
3.25 A random scenario with a green material drawn over. The
particles rotate and reflect in different ways. The green
particles replicate in some situations. . . . . . . . . . . . . 48
x
Introduction
1
Introduction
a visual interface for defining cell states and transition rules. This
interface should allow for creating behaviors more intuitively, making
the development of custom simulations easier and less error-prone.
Lastly, I get feedback on the implementation from professionals in the
industry.
2
1 Theory
This chapter defines CAs, their properties, and how they can be mod-
ified. We look into past research and how it can be used in game
development.
1.1.1 Lattice
3
1. Theory
1.1.2 Neighborhood
Each cell in a CA has one of finitely many states. Binary states are often
used to symbolize empty and filled, or dead and living cells. Sometimes
continuous states or states consisting of multiple values are used.
When discussing models with many states, namely those mimicking
particle interactions, these states will be referred to as materials.
1.1.4 Configuration
4
1. Theory
is used for all cells. All transition rules can be listed because both
cell states and the neighborhood are finite. Therefore, a new cell state
for each neighborhood can simply be selected from a table. An in-
teresting modification is to select from multiple possible new states
based on probability; this CA is called a probabilistic or stochastic CA
[4]. Defining transition rules to achieve desired behavior is not trivial
because the system’s behavior cannot be easily predicted. Usually,
rules are defined by hand, but there have been attempts to create them
programmatically by using evolutionary algorithms [5].
1.1.6 Computation
1.2 Reversibility
5
1. Theory
Wolfram [9] separated CA transition rules into four classes. The classes
depend on the apparent structure of configurations arising in longer
computations from most initial configurations. Rules in these classes
lead roughly to:
1. Homogeneous state.
2. Simple or periodic structures.
3. Chaotic patterns.
4. Complex structures.
The classification is not exact, but it serves as a basis for possible
behaviors. In games with many states serving as materials, the CA
would likely fall into the 4. class, where most of or all CAs are capable
of universal computation. In isolation, different materials would fit
into different classes, for example:
1. Stationary materials.
2. Piling materials and simple fluids.
3. Gases.
4. Logic circuits.
Games not only need to program behavior for each of the materials
but also interactions between the different materials.
6
1. Theory
7
1. Theory
8
1. Theory
Defining rules this way gets cumbersome with more states and
rules. Finding the code responsible for a bug can be challenging be-
cause the rules can change cells other than the cell they operate on.
Asymmetry in asynchronous execution
To advance the model, we iterate over the lattice. The order in which
the cells are processed matters. Because states can move between cells,
one state will be considered multiple times if it moves ahead of the
iterated cells. One state can move all the way to the boundary in one
computational step. If the rules are symmetrical along an axis, the
iteration order will make the outcome asymmetrical. An example of
this is shown in Figure 1.5. A flag could be added to each state to
ensure the state is only considered once, but it does not solve the
asymmetry, as shown in Figure 1.6.
9
1. Theory
Figure 1.7: Transition rule form and block shifting in Margolus neigh-
borhood.
The billiard ball model in a BCA (BBMCA) and the BCA itself were first
introduced by Margolus [14]. The billiard ball model was originally
a continuous model. Margolus had shown that it could be adapted
for discrete space and time, given some restrictions. It is a model of
hard-sphere movement and collision. In the BBMCA, the spheres can
carry signals and perform boolean operations. A computer can be
built using moving spheres and stationary states acting as mirrors.
The BBMCA is reversible.
The BCA has certain advantages over the standard CA. Conservation of
mass is vital – matter should not spontaneously multiply or disappear,
which is harder to ensure in a standard CA.
In a BCA with Margolus neighborhood, designing rules is compar-
atively simple. We only need to handle the interaction of four states,
and all others are ignored. We change all four cells together, and there
is no other rule impacting these cells. As a disadvantage, we cannot
see all adjacent cells for any cell in one step. Conversely, in a standard
CA (for example, with Moore neighborhood), each cell gets informed
by adjacent cells but can only change itself.
10
1. Theory
In a standard CA, all cells are evaluated at once, but they can only
decide their own state. For example, imagine a situation where water is
pouring down a hole. The empty cell knows it will be filled with water,
but the cells above do not know which of them should be emptied
(Figure 1.8). Suitable rules could be designed, but it would be very
easy to make a mistake and break the conservation of mass. The rules
would have to prioritize movement between some cells, while in BCAs,
this prioritization is handled by block partitioning.
On the other hand, when using the Margolus neighborhood, the
change in cell state depends on the currently used partitioning, which
could also lead to confusion.
11
1. Theory
momentum. An LGCA preserves mass iff the transition rule does not
change the number of non-empty particles.
1.9.1 Visualization
12
1. Theory
13
1. Theory
14
2 Case study
This chapter studies world systems of specific games and how they
could be implemented using CAs. The selected games are well known
for their dynamic and highly interactive worlds. Except for the falling-
sand games, all games listed use procedurally generated worlds that
are destructible by the player.
15
2. Case study
2.2 Noita
16
2. Case study
2.3 Terraria
17
2. Case study
2.4 Minecraft
18
2. Case study
There are also many interactions between the cellular world and en-
tities such as player or non-player characters. Mechanisms like buttons
or redstone repeaters can be controlled by player action, non-player
characters can modify materials, and some materials work with global
state or distance to the player character.
All in all, Minecraft combines simple and complex behaviors and
has many interactions between the cellular world and entities outside
of it. Due to this, there are many edge cases and quirks in Minecraft.
However, it has not made the game any less popular. On the contrary,
it may have made the world seem more natural than simple CA rules
would be able to.
2.5 Discussion
19
2. Case study
20
3 Implementation
21
3. Implementation
3.3.1 Chunks
The world can be divided into chunks (tiles) to allow keeping only
a part of the world in the memory. Issues with this are described in
Theory Section 1.10. Despite the issues, it is unusual to ’waste’ memory
and computational power on parts of the world that are out of view.
Figure 3.1: The CA world organizes the chunks and directs the simula-
tion. The CA world handles access to the CA from the outside.
22
3. Implementation
Chunk size (number of cells per side) has a large impact on perfor-
mance. Several contributing factors are processor cache size, number
of processor cores, chunk loading/generating speed, or camera move-
ment. Experimenting with chunk size is recommended every time a
game significantly changes.
3.3.2 Layers
3.3.3 Computation
23
3. Implementation
3.3.4 Visualization
The goal is to show cells as pixels on the screen. Mapping cells to pixels
is straightforward in a square lattice CA. In the implementation, each
24
3. Implementation
chunk is mirrored by a display chunk. The display chunk has the same
number of layers as the CA chunk, but each layer is a texture instead
of an array of cells. The textures are then rendered with the top layer
in front. After each computation step, the textures are updated and
uploaded to the GPU. The textures are updated in parallel similarly to
the CA chunks, and here no synchronization is needed because each
chunk has its own texture and does not access other chunks.
The user defines the mapping from material to color in the texture.
A simple mapping is defining a color for each material by hand, which
I do in the visual rule editor (Section 3.8). For a setup with multiple
layers, I write an index of the material into one channel of the color
(the texture must support integral values or floating-point values with
unlimited range). In an experiment with material properties, I also
write them into available color channels.
25
3. Implementation
Figure 3.6: Water flowing down the terrain. Active rectangles are visu-
alized in red color.
26
3. Implementation
27
3. Implementation
case; the easy solution is to pass all layers to the function and let it
decide on which layers can interact and how.
While computing a BCA step, whole blocks are iterated instead
of cells. We need to know if the current step is odd or even to decide
whether to use shifted blocks (Figure 3.7). The step count is an addi-
tional state that regular CAs do not need. If, for some reason, the BCA
took two steps with shifted (resp. non-shifted) blocks in a row, the
results would differ from computation with alternating steps. Saving
the configuration (world state) without this information could be a
source of bugs.
Blocks going over the world boundaries are ignored. Materials
next to the boundaries can still interact in differently shifted blocks. If
arbitrary states were used in the missing cells, materials could move
outside the boundary, making them disappear or be overwritten when
that part of the world is loaded or generated.
Care must be taken on the chunk boundaries. While the blocks
in BCAs do not overlap, making it impossible for transition rules
to affect cells of other blocks, for correct computation, the chunks
must be making the same step. It is not an issue if synchronization
occurs between steps, but if multiple steps are taken in parallel, blocks
overlapping multiple chunks could sample states of a wrong step. A
similar problem can occur with the active rectangle optimization – if
the even (resp. odd) step changes no materials, that does not mean
the odd (resp. even) step will too. Cells can only be removed from the
active rectangle when both odd and even steps have no effect.
While BCAs operate on blocks of cells and shift the blocks to propagate
changes, LGCAs operate on single cells and swap adjacent particles to
propagate changes. Instead of a cell having a material, each particle has
a material. The cell state in LGCAs consists of particles arriving from
different directions. In my implementation, I use the four standard
directions (top, bottom, left, right) and a stationary central particle.
I added the central particle to enable cells to come to a stable state,
increasing performance.
28
3. Implementation
29
3. Implementation
30
3. Implementation
31
3. Implementation
32
3. Implementation
3.6.5 Result
33
3. Implementation
34
3. Implementation
We can define some simple operations on the block and then use them
to define the transition rules. Each combination of states can map into
a series of these operations. Some of the operations are:
• Identity
• Swap two cell states
• Swap top and bottom row
• Swap left and right column
• ’Rotate’ the block contents
Instead of a complicated algorithm, there is a list of operations.
The operations can be chained or combined while keeping the clarity
of what exactly is happening when any combination of materials
is encountered. The transition rules are basically defined by hand
without any abstraction in this form. Even though the rules are easily
understandable, with more materials, the number of rules explodes;
defining them all would be tedious.
Figure 3.13: Defining rules using simple operations and groups (screen-
shot taken in Visual Studio Code). Simple operations are assigned to
group configurations in order of definition.
35
3. Implementation
36
3. Implementation
The material editor window allows adding materials and groups and
setting up their properties (Figure 3.14).
Materials have a name and a color. The name is only used for
convenience in the editor, while the color is used in actual rendering.
Color is used for simplicity; the material pixels could be textured or
visualized in other ways. Materials can be marked for collisions – rigid-
body physics colliders are generated between marked and unmarked
materials (Section 3.8.5).
Groups have a name and a list of materials. Their names are used
for convenience too. Materials can be added to or removed from a
group when the group is selected.
37
3. Implementation
The rule editor serves for rule editing and management. The main
focus is an editable rule. It consists of two BCA blocks, depicting a
configuration before and after a transition. They can be called the input
38
3. Implementation
block and the output block. A material or a group can be selected and
’painted’ on a block (Figure 3.15).
The interface is straightforward – the situation before and after
the transition is clearly visible, and we can directly interact with it.
Preserving mass is as easy as seeing if the same colors are on both
sides of the ’equation.’ The materials have user-defined colors, and
the groups use generated colors designed to be distinctive.
To make groups more flexible, I added group variants. Each group
has four variants that can be cycled by clicking repeatedly. The variants
are a constraint for rule generation – in one rule, all instances of a
group variant resolve into the same material. There are four variants
because a block has four materials. More variants cannot be paired
between the input and the output block. This ensures that a material
does not transition into another material of the same group when it is
39
3. Implementation
Figure 3.16: Two examples of equivalent rules that get normalized into
their leftmost form.
40
3. Implementation
The world generator and editor are made for testing and improving
the rules (Figure 3.17). The user can choose from four algorithms:
• Simplex noise – smooth noise.
• White noise – purely random noise.
• Simplex + white noise – smooth noise with some harsh transi-
tions.
• Random rules – randomly selected compiled rules.
The user can select the size of the generated world and feature
size. For simplex noise, it determines the size of generated shapes.
For white noise and random rules, feature size determines the size of
squares with one value, respectively, one rule. Except for the random
rules option, the actual materials are selected from a list of materials
that can be filtered. There is an option to display active rectangles and
physics colliders.
The world editor allows for directly changing materials in the
world by painting them. It can also instantiate rigid-body objects.
Rigid-body physics
Collision meshes for rigid-body physics can be generated when
generating the world. Whether a material is considered solid can
41
3. Implementation
42
3. Implementation
Figure 3.18: Naive and greedy collider (left), marching squares collider
(right).
The BCAs and LGCAs editors are almost identical. Instead of defining
the transition rules for a block, the rules are defined for particles inside
a cell. The materials and groups are the same.
The transition rules are generated according to the same principles
but with five materials instead of four. The generated symmetries have
to take into account the ’center’ particle, which always stays in the
center. A fifth group variant could be added, but I found no need for
it.
The default transition rule is different from BCAs (in my implemen-
tation). In BCAs, the block remains unchanged by default. However,
if transition rules do nothing in LGCAs, the particles keep moving
between two cells. Therefore, it could be better to swap the ’left’ and
the ’right,’ the ’top’ and the ’bottom’ particles, making particles move
in a straight line by default. This default behavior only applies to
configurations that have no rule explicitly defined by the user.
The world generator has to generate a direction in addition to a
material. For simplex noise, the direction is generated from the noise
gradient. For white noise, the direction is random. The world editor
allows the user to choose which direction the painted particles should
move.
43
3. Implementation
3.9 Evaluation
44
3. Implementation
Figure 3.20: A random scenario where water interacts with sand. The
sand sinks in the water. Simulation progresses from left to right.
Figure 3.21: A random scenario where water, oil, and two gases interact.
The oil floats on top of the water, and gases mix and rise. Simulation
progresses from left to right.
detailed rules can be created using specific materials. General rules for
groups cannot define behavior between specific materials in a group.
As an example of interaction between specific materials, I set sand to
sink in water and oil to float on water, as shown in Figures 3.20 and
3.21. I also tried creating different kinds of logic, for example, a simple
forest fire simulation (Figure 3.22). Similar interesting behaviors are
easily achievable, but it is hard to say whether they would be useful
in a game.
What could be a disadvantage for some games are patterns of
empty cells appearing in models where materials behave like particles
(visible in Figures 3.20 and 3.21). Materials need empty space to move
into, so they have to wait for adjacent materials to move away, creating
the patterns of empty cells.
A big limitation of this BCA is its small neighborhood. While it
makes the transition rules simple, it tends to create unnatural-looking
behaviors. This can be seen well in Figure 3.21 where gases and flu-
45
3. Implementation
Figure 3.22: A scenario where fire burns forests, burned forests turn
into dead land, and eventually regrow. Simulation progresses from
left to right.
Creating the same behaviors as in BCA was an issue for me. It is easy
to define how particles react to collisions but hard to make them move
in some direction and then settle down. We often want the materials
46
3. Implementation
Figure 3.23: A random scenario where water flows down. In areas with
too many water particles, the particles can move through the stone.
Simulation progresses from left to right.
Figure 3.24: A random scenario where dark and light particles interact.
When they collide, the dark particle goes down, and the light particle
goes up. Simulation progresses from left to right.
47
3. Implementation
sition rules, the users spent more time playing with the editor than
was the case with BCA. They mostly created simple rules and went
on to draw particles in the world, creating interesting visuals (Figure
3.25). They considered the LGCA good for creating interactive visual
art but questionable for use in games.
Overall, LGCA may be easier to understand but harder to use in
practice. It may be better suited for visual art generation.
48
4 Discussion and future work
49
4. Discussion and future work
50
5 Conclusion
The thesis explored CAs, and the use of CA-like models in game world
simulation. Such simulated worlds make gameplay more dynamic and
add space for player creativity. They are usually implemented with
little regard for ease of reasoning about the system, making extending
and debugging it hard. CAs define the result of any situation, and the
order of computation is clear; These properties make reasoning about
the system much easier. I implemented a BCA and LGCA simulation
with chunks processed in parallel and multiple layers of cells. Then I
created a visual editor for defining their states and transition rules.
During the implementation, I found that using multiple layers
or additional state in cells results in high mental complexity. Even
when using a simple CA, defining transition rules was unpleasant and
error-prone.
Because CAs lend well to visualization, I created a visual editor to
make defining materials and transition rules more intuitive. The state
before and after a transition can be viewed and edited directly. I made
material groups as an abstraction to help define common behaviors.
The visual editor works well, but the complexity is still here. To-
gether with groups, I implemented a few ways to reduce the number
of rules that need to be defined manually, such as symmetry options
and rule variants. The actual rules are generated from the defined
rules, bringing their own issues such as definitions being resolved into
conflicting rules.
There remain many ways to improve the approach. The most obvi-
ous one is to extend the rule generation to assist better and automate
more kinds of rules. There are also limitations to both BCA and LGCA,
some of which cannot be overcome. Some users have trouble under-
standing the implications of certain CA properties. Other variants
of CAs have different mechanics and limitations, so they are worth
exploring.
Overall I consider this project a success. Although there would
have to be more improvements and considerations for the implemen-
tation to be used in practice, it shows the potential of using the right
representation and visual form for the job.
51
A An appendix
52
Bibliography
53
BIBLIOGRAPHY
54
BIBLIOGRAPHY
21. PURHO, Petri. Exploring the Tech and Design of ’Noita’ [online].
2019 [visited on 2022-03-15]. Available from: https : / / www .
gdcvault . com / play / 1025695 / Exploring - the - Tech - and -
Design.
22. PURHO, Petri. Noita: a Game Based on Falling Sand Simulation
[online]. 2019 [visited on 2022-03-15]. Available from: https:
//80.lv/articles/noita-a-game-based-on-falling-sand-
simulation/.
23. Terraria Wiki - Liquids [online]. 2022 [visited on 2022-03-15]. Avail-
able from: https://terraria.fandom.com/wiki/Liquids.
24. Minecraft Wiki - Redstone mechanics [online]. 2010 [visited on 2022-
03-23]. Available from: https://www.youtube.com/watch?v=
jaoSzCfa9OM.
25. Minecraft - Redstone Conway’s Game of Life (Simulation Game) [on-
line]. 2022 [visited on 2022-03-23]. Available from: https : / /
minecraft.fandom.com/wiki/Redstone_mechanics.
55