Baba Is You
Baba Is You is an indie sokoban puzzle game developed by Arvi 'Hempuli' Teikari. First released itch.io in 2017 for the Nordic Game Jam. It was later fully released in 2019 a Steam game.
Introduction
Baba is You is a spin on the popular sub-genre of puzzles called "Sokobans", where the defined rules are modifiable, and anything can be redefined.
Objects in Baba is You are layed out as objects on the same two-dimensional level grid. The rules of the level (more commonly known as Text) are also laid out on the same grid, and define how objects behave.
When text parses correctly, it forms a "rule".
Text is split into six categories.
- Nouns
-
Nouns refer to in-game objects, like how
BABA
refers to the white critter called Baba, and howROCK
refers to the brown rock. - Operators
-
Operators reside between nouns and properties - i.e
BABA is YOU
,is
is the operator, defining that the nounBABA
is the propertyYOU
- or between other operators. - Properties
-
Properties define how nouns should behave. In the instance for
YOU
, any noun with that property takes in player input for movement, and any noun with the propertyPUSH
can be pushed around by other objects. - Prefixes
-
Prefixes are placed before rules to (typically) conditionally affect a rule.
POWERED
will only let the proceeding rule take effect if an object in the level is the propertyPOWER
.OFTEN
andSELDOM
are RNG based, and will sometimes allow the proceeding rule to take effect. - Letters
-
Letters are... letters. Not too special, but can be used to form nouns and properties. Do note that
C L O C K
will refer to both the Clock and Lock objects if parsed correctly. This is true for other examples too.
Text in a level typically is formatted as so (left to right or top to bottom):
PREFIX NOUN OPERATOR (NOUN OR PROPERTY)
Operators
Operators are what makes the game functional in the first place.
Word | Function |
---|---|
is |
Defines a noun to be something else.X is NOUN transforms X into NOUN .X is not X removes all instances of X from the level.Alternatively, X is X does not allow X to transform into other nouns.
|
and |
Used to do one of such:
|
not |
Negates the properties of an operator, sets the scope to be everything but the selected noun, defines a noun to never be another noun or property, as well as other smaller cases. |
Examples
Infinite loop
Note: This is not referring to infinitely repeating loops. This refers to a special case where the game attempts to parse (a) rule(s) that never stops looping.
An example of the setup which can cause the infinite loop is provided below.
[BABA object] is NOT WORD BABA is WORD
Here, Baba is being defined as WORD
(which allows Baba to be parsed as it's text counterpart). As soon as that happens, Baba is defined as not WORD
, which nullifies the statement BABA is WORD
, in turn causing [BABA object] is NOT WORD
to be unable to parse, which means BABA is WORD
can define Baba as WORD
again, and so on.
No, the Halting Problem is not solved, the game just stops parsing after it notices it's looping a liiiitle too much.
Turing completeness
Baba is You is able to simulate Conway's Game of Life using only 6 text objects, and 3 rules.
ROCK not near ROCK and ROCK is EMPTY ROCK near ROCK and ROCK and ROCK and ROCK is EMPTY EMPTY near ROCK and ROCK and ROCK and not near ROCK and ROCK and ROCK and ROCK is ROCK
Given an infinite play-area, Baba is You can run anything, essentially making it turing complete.