diff --git a/CZ/docs/home.md b/CZ/docs/home.md
index 10be3f2a..dd020ab5 100644
--- a/CZ/docs/home.md
+++ b/CZ/docs/home.md
@@ -2,7 +2,7 @@
[Externí Editor](docs/external_editor.md) [První program](docs/first_program.md) [Začínáme](docs/getting_started.md) [Nahrát Zálohu](docs/backup.md) [Výstup](docs/output.md) [1.0 je konečně zde!](docs/patchnotes.md) [Statistiky](docs/stats.md) [Autoři a poděkování](docs/credits.md)
## {{@table_of_contents_section_programming}}
-[Break](docs/scripting/break.md) [Debug](docs/scripting/debug.md) [Komentáře](docs/scripting/comments.md) [Pokračovat](docs/scripting/continue.md) [Slovníky](docs/scripting/dicts.md) [For Loop](docs/scripting/for.md) [Funkce](docs/scripting/functions.md) [If](docs/scripting/if.md) [Import](docs/scripting/import.md) [Lists](docs/scripting/lists.md) [Operátoři](docs/scripting/operators.md) [Name Scopes](docs/scripting/scopes.md) [Sets](docs/scripting/sets.md) [Tuples](docs/scripting/tuples.md) [Proměnné](docs/scripting/variables.md) [While Loop](docs/scripting/while.md)
+[Break](docs/scripting/break.md) [Debug](docs/scripting/debug.md) [Komentáře](docs/scripting/comments.md) [Pokračovat](docs/scripting/continue.md) [Slovníky](docs/scripting/dicts.md) [For Loop](docs/scripting/for.md) [Funkce](docs/scripting/functions.md) [If](docs/scripting/if.md) [In](docs/scripting/in.md) [Import](docs/scripting/import.md) [Lists](docs/scripting/lists.md) [Operátoři](docs/scripting/operators.md) [Name Scopes](docs/scripting/scopes.md) [Sets](docs/scripting/sets.md) [Tuples](docs/scripting/tuples.md) [Proměnné](docs/scripting/variables.md) [While Loop](docs/scripting/while.md)
## {{@table_of_contents_section_unlocks}}
{{unlocksTOC}}
diff --git a/CZ/docs/scripting/for.md b/CZ/docs/scripting/for.md
index 38cfb17e..683f281f 100644
--- a/CZ/docs/scripting/for.md
+++ b/CZ/docs/scripting/for.md
@@ -15,7 +15,7 @@ Cyklus `for` vypadá takto:
`variable_name` může být libovolný název. Je to proměnná, která uchovává aktuální prvek sekvence. `sequence` musí být hodnota, přes kterou lze iterovat, například rozsah čísel. Blok kódu se vykoná pro každý prvek s přiřazenou proměnnou cyklu.
## Sequences
-[Ranges](functions/range) [Lists](docs/scripting/lists.md) [Tuples](docs/scripting/tuples.md) [Dictionaries](docs/scripting/dicts.md) [Sets](docs/scripting/sets.md)
+[Ranges](functions/range) [Tuples](docs/scripting/tuples.md) [Lists](docs/scripting/lists.md) [Dictionaries](docs/scripting/dicts.md) [Sets](docs/scripting/sets.md)
## Example
`for i in range(5):
diff --git a/CZ/docs/scripting/in.md b/CZ/docs/scripting/in.md
new file mode 100644
index 00000000..28413162
--- /dev/null
+++ b/CZ/docs/scripting/in.md
@@ -0,0 +1,57 @@
+# In Statement
+
+You can use an `in` statement to check if a value is available within a `sequence` or a string of characters. A `sequence` needs to be some value that can be iterated over like a range of numbers. If the value is in the `sequence` then then the statement will return `True` and if it is not then it will return `False`.
+
+
+You can also use an `in` statement with a dict or set. When used with a dict it will search for a value in the dict's keys.
+Note: When used in a `for` loop the `in` keyword functions differently. Please see [For Loop](docs/scripting/for.md) to learn about how to use the `in` keyword for those.
+
+## Syntax
+
+An `in` statement looks like this:
+
+`variable_name = variable_name_or_value in sequence`
+
+`variable_name` can be any name you choose and will be given the value of `True` or `False`
+
+Or:
+
+`if variable_name_or_value in sequence:
+ # code block`
+
+Or:
+
+`while variable_name_or_value in sequence:
+ # code block`
+
+`variable_name_or_value` can be any variable you want or any value you want. `sequence` must be one of the things listed below, or a string of characters. An `if` or `while` code block will run if the value is in the provided sequence.
+
+## Sequences
+
+[Ranges](functions/range) [Tuples](docs/scripting/tuples.md) [Lists](docs/scripting/lists.md) [Dictionaries](docs/scripting/dicts.md) [Sets](docs/scripting/sets.md)
+
+## Example - 2x2 Square of Bushes
+
+`clear()
+for x in range(get_world_size()):
+for y in range(get_world_size()):
+
+ if x in (0, 1) and y in (0, 1):
+ plant(Entities.Bush)
+
+ move(North)
+ move(East)`
+
+This will plant a square of `Entities.Bush` in a 2x2 square starting at the origin (0, 0) of the world leaving the rest untouched.
+
+
+## Example - Tilling
+
+`desired_entity = Entities.Carrot
+entities_needing_soil = (Entities.Pumpkin, Entities.Carrot)
+
+if desired_entity in entities_needing_soil:
+if get_ground_type() != Grounds.Soil:
+till()`
+
+This will check if the `desired_entity` is in the `tuple` `entities_needing_soil` so that the drone can know if it needs to check if the current ground type is `Grounds.Soil`. If it is not then it will call the `till` function to change the ground type.
diff --git a/DE/docs/home.md b/DE/docs/home.md
index e9d97e2b..f7dd97cf 100644
--- a/DE/docs/home.md
+++ b/DE/docs/home.md
@@ -2,7 +2,7 @@
[Externer Editor](docs/external_editor.md) [Erstes Programm](docs/first_program.md) [Erste Schritte](docs/getting_started.md) [Laden von Backups](docs/backup.md) [Output](docs/output.md) [Statistiken](docs/stats.md) [Credits](docs/credits.md)
## {{@table_of_contents_section_programming}}
-[Break](docs/scripting/break.md) [Debug](docs/scripting/debug.md) [Kommentare](docs/scripting/comments.md) [Continue](docs/scripting/continue.md) [Dictionaries](docs/scripting/dicts.md) [For-Schleife](docs/scripting/for.md) [Funktionen](docs/scripting/functions.md) [If](docs/scripting/if.md) [Import](docs/scripting/import.md) [Listen](docs/scripting/lists.md) [Operatoren](docs/scripting/operators.md) [Namensbereiche (Scopes)](docs/scripting/scopes.md) [Sets](docs/scripting/sets.md) [Tupel](docs/scripting/tuples.md) [Variablen](docs/scripting/variables.md) [While-Schleife](docs/scripting/while.md)
+[Break](docs/scripting/break.md) [Debug](docs/scripting/debug.md) [Kommentare](docs/scripting/comments.md) [Continue](docs/scripting/continue.md) [Dictionaries](docs/scripting/dicts.md) [For-Schleife](docs/scripting/for.md) [Funktionen](docs/scripting/functions.md) [If](docs/scripting/if.md) [In](docs/scripting/in.md) [Import](docs/scripting/import.md) [Listen](docs/scripting/lists.md) [Operatoren](docs/scripting/operators.md) [Namensbereiche (Scopes)](docs/scripting/scopes.md) [Sets](docs/scripting/sets.md) [Tupel](docs/scripting/tuples.md) [Variablen](docs/scripting/variables.md) [While-Schleife](docs/scripting/while.md)
## {{@table_of_contents_section_unlocks}}
{{unlocksTOC}}
diff --git a/DE/docs/scripting/for.md b/DE/docs/scripting/for.md
index 52b83aec..60f36bbb 100644
--- a/DE/docs/scripting/for.md
+++ b/DE/docs/scripting/for.md
@@ -15,7 +15,7 @@ Eine for-Schleife sieht so aus:
`variablen_name` kann jeder Name sein, den du wählst. Es ist eine Variable, die das aktuelle Element in der Sequenz speichert. `sequenz` muss ein Wert sein, der durchlaufen werden kann, wie ein Bereich von Zahlen. Der Codeblock wird für jedes Element ausgeführt, wobei die Schleifenvariable diesem Element zugewiesen ist.
## Sequenzen
-[Ranges](functions/range) [Listen](docs/scripting/lists.md) [Tupel](docs/scripting/tuples.md) [Dictionaries](docs/scripting/dicts.md) [Sets](docs/scripting/sets.md)
+[Ranges](functions/range) [Tupel](docs/scripting/tuples.md) [Listen](docs/scripting/lists.md) [Dictionaries](docs/scripting/dicts.md) [Sets](docs/scripting/sets.md)
## Beispiel
`for i in range(5):
diff --git a/DE/docs/scripting/in.md b/DE/docs/scripting/in.md
new file mode 100644
index 00000000..1d1ae003
--- /dev/null
+++ b/DE/docs/scripting/in.md
@@ -0,0 +1,57 @@
+# In Statement
+
+You can use an `in` statement to check if a value is available within a `sequence` or a string of characters. A `sequence` needs to be some value that can be iterated over like a range of numbers. If the value is in the `sequence` then then the statement will return `True` and if it is not then it will return `False`.
+
+
+You can also use an `in` statement with a dict or set. When used with a dict it will search for a value in the dict's keys.
+Note: When used in a `for` loop the `in` keyword functions differently. Please see [For Loop](docs/scripting/for.md) to learn about how to use the `in` keyword for those.
+
+## Syntax
+
+An `in` statement looks like this:
+
+`variable_name = variable_name_or_value in sequence`
+
+`variable_name` can be any name you choose and will be given the value of `True` or `False`
+
+Or:
+
+`if variable_name_or_value in sequence:
+ # code block`
+
+Or:
+
+`while variable_name_or_value in sequence:
+ # code block`
+
+`variable_name_or_value` can be any variable you want or any value you want. `sequence` must be one of the things listed below, or a string of characters. An `if` or `while` code block will run if the value is in the provided sequence.
+
+## Sequenzen
+
+[Ranges](functions/range) [Tupel](docs/scripting/tuples.md) [Listen](docs/scripting/lists.md) [Dictionaries](docs/scripting/dicts.md) [Sets](docs/scripting/sets.md)
+
+## Example - 2x2 Square of Bushes
+
+`clear()
+for x in range(get_world_size()):
+for y in range(get_world_size()):
+
+ if x in (0, 1) and y in (0, 1):
+ plant(Entities.Bush)
+
+ move(North)
+ move(East)`
+
+This will plant a square of `Entities.Bush` in a 2x2 square starting at the origin (0, 0) of the world leaving the rest untouched.
+
+
+## Example - Tilling
+
+`desired_entity = Entities.Carrot
+entities_needing_soil = (Entities.Pumpkin, Entities.Carrot)
+
+if desired_entity in entities_needing_soil:
+if get_ground_type() != Grounds.Soil:
+till()`
+
+This will check if the `desired_entity` is in the `tuple` `entities_needing_soil` so that the drone can know if it needs to check if the current ground type is `Grounds.Soil`. If it is not then it will call the `till` function to change the ground type.
diff --git a/EN/docs/home.md b/EN/docs/home.md
index b94716f2..0dd4b259 100644
--- a/EN/docs/home.md
+++ b/EN/docs/home.md
@@ -2,7 +2,7 @@
[External Editor](docs/external_editor.md) [First Program](docs/first_program.md) [Getting Started](docs/getting_started.md) [Loading Backups](docs/backup.md) [Output](docs/output.md) [Stats](docs/stats.md) [Credits](docs/credits.md)
## {{@table_of_contents_section_programming}}
-[Break](docs/scripting/break.md) [Debug](docs/scripting/debug.md) [Comments](docs/scripting/comments.md) [Continue](docs/scripting/continue.md) [Dictionaries](docs/scripting/dicts.md) [For Loop](docs/scripting/for.md) [Functions](docs/scripting/functions.md) [If](docs/scripting/if.md) [Import](docs/scripting/import.md) [Lists](docs/scripting/lists.md) [Operators](docs/scripting/operators.md) [Name Scopes](docs/scripting/scopes.md) [Sets](docs/scripting/sets.md) [Tuples](docs/scripting/tuples.md) [Variables](docs/scripting/variables.md) [While Loop](docs/scripting/while.md)
+[Break](docs/scripting/break.md) [Debug](docs/scripting/debug.md) [Comments](docs/scripting/comments.md) [Continue](docs/scripting/continue.md) [Dictionaries](docs/scripting/dicts.md) [For Loop](docs/scripting/for.md) [Functions](docs/scripting/functions.md) [If](docs/scripting/if.md) [In](docs/scripting/in.md) [Import](docs/scripting/import.md) [Lists](docs/scripting/lists.md) [Operators](docs/scripting/operators.md) [Name Scopes](docs/scripting/scopes.md) [Sets](docs/scripting/sets.md) [Tuples](docs/scripting/tuples.md) [Variables](docs/scripting/variables.md) [While Loop](docs/scripting/while.md)
## {{@table_of_contents_section_unlocks}}
{{unlocksTOC}}
diff --git a/EN/docs/scripting/for.md b/EN/docs/scripting/for.md
index 912fafd3..bef2ce56 100644
--- a/EN/docs/scripting/for.md
+++ b/EN/docs/scripting/for.md
@@ -15,7 +15,7 @@ A for loop looks like this:
`variable_name` can be any name you choose. It is a variable that stores the current element in the sequence. `sequence` needs to be some value that can be iterated like a range of numbers. The code block is executed for every element with the loop variable assigned to that element.
## Sequences
-[Ranges](functions/range) [Lists](docs/scripting/lists.md) [Tuples](docs/scripting/tuples.md) [Dictionaries](docs/scripting/dicts.md) [Sets](docs/scripting/sets.md)
+[Ranges](functions/range) [Tuples](docs/scripting/tuples.md) [Lists](docs/scripting/lists.md) [Dictionaries](docs/scripting/dicts.md) [Sets](docs/scripting/sets.md)
## Example
`for i in range(5):
diff --git a/EN/docs/scripting/in.md b/EN/docs/scripting/in.md
new file mode 100644
index 00000000..617af4cd
--- /dev/null
+++ b/EN/docs/scripting/in.md
@@ -0,0 +1,56 @@
+# In Statement
+
+You can use an `in` statement to check if a value is available within a `sequence` or a string of characters. A `sequence` needs to be some value that can be iterated over like a range of numbers. If the value is in the `sequence` then then the statement will return `True` and if it is not then it will return `False`.
+
+You can also use an `in` statement with a dict or set. When used with a dict it will search for a value in the dict's keys.
+Note: When used in a `for` loop the `in` keyword functions differently. Please see [For Loop](docs/scripting/for.md) to learn about how to use the `in` keyword for those.
+
+## Syntax
+
+An `in` statement looks like this:
+
+`variable_name = variable_name_or_value in sequence`
+
+`variable_name` can be any name you choose and will be given the value of `True` or `False`
+
+Or:
+
+`if variable_name_or_value in sequence:
+ # code block`
+
+Or:
+
+`while variable_name_or_value in sequence:
+ # code block`
+
+`variable_name_or_value` can be any variable you want or any value you want. `sequence` must be one of the things listed below, or a string of characters. An `if` or `while` code block will run if the value is in the provided sequence.
+
+## Sequences
+
+[Ranges](functions/range) [Tuples](docs/scripting/tuples.md) [Lists](docs/scripting/lists.md) [Dictionaries](docs/scripting/dicts.md) [Sets](docs/scripting/sets.md)
+
+## Example - 2x2 Square of Bushes
+
+`clear()
+for x in range(get_world_size()):
+for y in range(get_world_size()):
+
+ if x in (0, 1) and y in (0, 1):
+ plant(Entities.Bush)
+
+ move(North)
+ move(East)`
+
+This will plant a square of `Entities.Bush` in a 2x2 square starting at the origin (0, 0) of the world leaving the rest untouched.
+
+
+## Example - Tilling
+
+`desired_entity = Entities.Carrot
+entities_needing_soil = (Entities.Pumpkin, Entities.Carrot)
+
+if desired_entity in entities_needing_soil:
+if get_ground_type() != Grounds.Soil:
+till()`
+
+This will check if the `desired_entity` is in the `tuple` `entities_needing_soil` so that the drone can know if it needs to check if the current ground type is `Grounds.Soil`. If it is not then it will call the `till` function to change the ground type.
diff --git a/EN/docs/scripting/lists.md b/EN/docs/scripting/lists.md
index 2dd854b2..944423ed 100644
--- a/EN/docs/scripting/lists.md
+++ b/EN/docs/scripting/lists.md
@@ -23,6 +23,12 @@ for number in numbers:
sum += number`
`sum` is now `18`
+You can also check if a value exists in a list. The following example checks to see if `6` is in `numbers`:
+
+`numbers = [8, 6, 1, 10]
+if 6 in numbers:
+ do_a_flip()`
+
The following list methods allow you to add and remove elements:
`elements.append(elem)` adds an element to the end of the list:
diff --git a/EN/docs/scripting/operators.md b/EN/docs/scripting/operators.md
index e3bd20d1..8d994b32 100644
--- a/EN/docs/scripting/operators.md
+++ b/EN/docs/scripting/operators.md
@@ -2,6 +2,7 @@
arithmetic operators: `+, -, *, /, //, %, **`
comparison operators: `==, !=, <=, >=, <, >`
boolean operators: `not, and, or`
+existence operator: `in`
Note: All numbers in the game are floating point numbers. So all arithmetic operators are floating point operators.
`//` is defined to just floor the number after the division.
@@ -9,8 +10,8 @@ Note: All numbers in the game are floating point numbers. So all arithmetic oper
For assignment operators you need to unlock the "Variables" unlock.
## Introduction
-Operators allow you to compare, modify and combine values.
-The arithmetic operators `+, -, *, /, //, %, **` are used to perform common mathematical operations on numbers.
+Operators allow you to compare, modify and combine values.
+The arithmetic operators `+, -, *, /, //, %, **` are used to perform common mathematical operations on numbers.
The comparison operators `==, !=, <=, >=, <, >` are used to compare values. The result is always either `True` or `False`.
The logic operators (also called boolean operators) `not, and, or` are used to combine truth values.
@@ -72,4 +73,15 @@ The logic operators (also called boolean operators) `not, and, or` are used to c
`True or True` evaluates to `True`
`True or False` evaluates to `True`
-`False or False` evaluates to `False`
\ No newline at end of file
+`False or False` evaluates to `False`
+
+## Existence Operator
+
+`in` can only be used with sequences and checks to see if a value is in that sequence.
+
+`1 in (1, 2)` evaluates to `True`
+`not 3 in (1, 2)` evaluates to `True`
+`3 not in (1, 2)` evaluates to `True`
+`"Goodbye" in "Hello World"` evaluates to `False`
+`not "Goodbye" in "Hello World"` evaluates to `True`
+`"Goodbye" not in "Hello World"` evaluates to `True`
\ No newline at end of file
diff --git a/EN/docs/scripting/tuples.md b/EN/docs/scripting/tuples.md
index 32e9070a..82d110f7 100644
--- a/EN/docs/scripting/tuples.md
+++ b/EN/docs/scripting/tuples.md
@@ -6,7 +6,7 @@ To create a tuple, just separate the values with commas:
You can also unpack them into several variables again. In the code below, the tuple `(1,2)` is unpacked into two variables `a` and `b`.
-`a, b = 1, 2`
+`a, b = 1, 2`
Tuples can be indexed like lists, but they are immutable and cannot be changed after creation.
@@ -16,18 +16,30 @@ Tuples can be indexed like lists, but they are immutable and cannot be changed a
prints `2`
`tuple[0] = 3`
-throws an error
-
+throws an error
+
Unlike lists tuples can be used as keys in dictionaries.
`d = {(1,2):(4,5)}
print(d[(1,2)])`
-`prints` (4,5)
+`prints` (4,5)
+
+They can also be used in sets.
+
+`s = {(6,7),(8,9)}
+
+print((6,7) in s)`
+`prints` `True`
+
+Tuples can be used with `if` or `elif` statements to check if a value is in a tuple.
+
+`if 1 in (1, 2):
+ # code block`
They can also be useful for returning multiple values in a function.
`def f():
return 1, 2
-a, b = f()`
\ No newline at end of file
+a, b = f()`
\ No newline at end of file
diff --git a/EN/docs/unlocks/timing.md b/EN/docs/unlocks/timing.md
index 04594fdf..7eecd333 100644
--- a/EN/docs/unlocks/timing.md
+++ b/EN/docs/unlocks/timing.md
@@ -21,6 +21,11 @@ The basic unit of time for code execution is called a "tick". Without speed upgr
In general, operations that combine two values such as `+, -, *, /, //, %, and, or, ...` take one tick to run.
Single value `-` and `not` are free.
+The `in` operator:
+- takes one tick to search a set or dict
+- takes `# comparisons` ticks to search a list or tuple
+- takes `len(string)` to search a string
+- takes `8` ticks to search a tuple
An `if` branch also takes one tick to run (in addition to the time it takes to evaluate the condition expression).
Function calls and variable reads and writes are free but function definitions take 1 tick.
`import` statements are free.
diff --git a/ES/docs/home.md b/ES/docs/home.md
index 873b1f9d..d432ef8e 100644
--- a/ES/docs/home.md
+++ b/ES/docs/home.md
@@ -2,7 +2,7 @@
[Editor Externo](docs/external_editor.md) [Primer Programa](docs/first_program.md) [Para Empezar](docs/getting_started.md) [Cargando Copias de Seguridad](docs/backup.md) [Output](docs/output.md) [Estadísticas](docs/stats.md) [Créditos](docs/credits.md)
## {{@table_of_contents_section_programming}}
-[Break](docs/scripting/break.md) [Depuración](docs/scripting/debug.md) [Comentarios](docs/scripting/comments.md) [Continue](docs/scripting/continue.md) [Diccionarios](docs/scripting/dicts.md) [Bucle For](docs/scripting/for.md) [Funciones](docs/scripting/functions.md) [If](docs/scripting/if.md) [Import](docs/scripting/import.md) [Listas](docs/scripting/lists.md) [Operadores](docs/scripting/operators.md) [Ámbitos de Nombres](docs/scripting/scopes.md) [Conjuntos](docs/scripting/sets.md) [Tuplas](docs/scripting/tuples.md) [Variables](docs/scripting/variables.md) [Bucle While](docs/scripting/while.md)
+[Break](docs/scripting/break.md) [Depuración](docs/scripting/debug.md) [Comentarios](docs/scripting/comments.md) [Continue](docs/scripting/continue.md) [Diccionarios](docs/scripting/dicts.md) [Bucle For](docs/scripting/for.md) [Funciones](docs/scripting/functions.md) [If](docs/scripting/if.md) [In](docs/scripting/in.md) [Import](docs/scripting/import.md) [Listas](docs/scripting/lists.md) [Operadores](docs/scripting/operators.md) [Ámbitos de Nombres](docs/scripting/scopes.md) [Conjuntos](docs/scripting/sets.md) [Tuplas](docs/scripting/tuples.md) [Variables](docs/scripting/variables.md) [Bucle While](docs/scripting/while.md)
## {{@table_of_contents_section_unlocks}}
{{unlocksTOC}}
diff --git a/ES/docs/scripting/for.md b/ES/docs/scripting/for.md
index f2fb0deb..1f9673e5 100644
--- a/ES/docs/scripting/for.md
+++ b/ES/docs/scripting/for.md
@@ -15,7 +15,7 @@ Un bucle for se ve así:
`variable_name` puede ser cualquier nombre que elijas. Es una variable que almacena el elemento actual en la secuencia. `sequence` necesita ser algún valor que se pueda iterar, como un rango de números. El bloque de código se ejecuta para cada elemento con la variable del bucle asignada a ese elemento.
## Secuencias
-[Rangos](functions/range) [Listas](docs/scripting/lists.md) [Tuplas](docs/scripting/tuples.md) [Diccionarios](docs/scripting/dicts.md) [Conjuntos](docs/scripting/sets.md)
+[Rangos](functions/range) [Tuplas](docs/scripting/tuples.md) [Listas](docs/scripting/lists.md) [Diccionarios](docs/scripting/dicts.md) [Conjuntos](docs/scripting/sets.md)
## Ejemplo
`for i in range(5):
diff --git a/ES/docs/scripting/in.md b/ES/docs/scripting/in.md
new file mode 100644
index 00000000..04469dac
--- /dev/null
+++ b/ES/docs/scripting/in.md
@@ -0,0 +1,57 @@
+# In Statement
+
+You can use an `in` statement to check if a value is available within a `sequence` or a string of characters. A `sequence` needs to be some value that can be iterated over like a range of numbers. If the value is in the `sequence` then then the statement will return `True` and if it is not then it will return `False`.
+
+
+You can also use an `in` statement with a dict or set. When used with a dict it will search for a value in the dict's keys.
+Note: When used in a `for` loop the `in` keyword functions differently. Please see [For Loop](docs/scripting/for.md) to learn about how to use the `in` keyword for those.
+
+## Syntax
+
+An `in` statement looks like this:
+
+`variable_name = variable_name_or_value in sequence`
+
+`variable_name` can be any name you choose and will be given the value of `True` or `False`
+
+Or:
+
+`if variable_name_or_value in sequence:
+ # code block`
+
+Or:
+
+`while variable_name_or_value in sequence:
+ # code block`
+
+`variable_name_or_value` can be any variable you want or any value you want. `sequence` must be one of the things listed below, or a string of characters. An `if` or `while` code block will run if the value is in the provided sequence.
+
+## Secuencias
+
+[Rangos](functions/range) [Tuplas](docs/scripting/tuples.md) [Listas](docs/scripting/lists.md) [Diccionarios](docs/scripting/dicts.md) [Conjuntos](docs/scripting/sets.md)
+
+## Example - 2x2 Square of Bushes
+
+`clear()
+for x in range(get_world_size()):
+for y in range(get_world_size()):
+
+ if x in (0, 1) and y in (0, 1):
+ plant(Entities.Bush)
+
+ move(North)
+ move(East)`
+
+This will plant a square of `Entities.Bush` in a 2x2 square starting at the origin (0, 0) of the world leaving the rest untouched.
+
+
+## Example - Tilling
+
+`desired_entity = Entities.Carrot
+entities_needing_soil = (Entities.Pumpkin, Entities.Carrot)
+
+if desired_entity in entities_needing_soil:
+if get_ground_type() != Grounds.Soil:
+till()`
+
+This will check if the `desired_entity` is in the `tuple` `entities_needing_soil` so that the drone can know if it needs to check if the current ground type is `Grounds.Soil`. If it is not then it will call the `till` function to change the ground type.
diff --git a/FR/docs/home.md b/FR/docs/home.md
index 46b0633e..ac90a980 100644
--- a/FR/docs/home.md
+++ b/FR/docs/home.md
@@ -2,7 +2,7 @@
[Éditeur Externe](docs/external_editor.md) [Premier Programme](docs/first_program.md) [Pour commencer](docs/getting_started.md) [Chargement des Sauvegardes](docs/backup.md) [Output](docs/output.md) [Statistiques](docs/stats.md) [Crédits](docs/credits.md)
## {{@table_of_contents_section_programming}}
-[Break](docs/scripting/break.md) [Débogage](docs/scripting/debug.md) [Commentaires](docs/scripting/comments.md) [Continue](docs/scripting/continue.md) [Dictionnaires](docs/scripting/dicts.md) [Boucle For](docs/scripting/for.md) [Fonctions](docs/scripting/functions.md) [If](docs/scripting/if.md) [Importation](docs/scripting/import.md) [Listes](docs/scripting/lists.md) [Opérateurs](docs/scripting/operators.md) [Portées des Noms](docs/scripting/scopes.md) [Sets](docs/scripting/sets.md) [Tuples](docs/scripting/tuples.md) [Variables](docs/scripting/variables.md) [Boucle While](docs/scripting/while.md)
+[Break](docs/scripting/break.md) [Débogage](docs/scripting/debug.md) [Commentaires](docs/scripting/comments.md) [Continue](docs/scripting/continue.md) [Dictionnaires](docs/scripting/dicts.md) [Boucle For](docs/scripting/for.md) [Fonctions](docs/scripting/functions.md) [If](docs/scripting/if.md) [In](docs/scripting/in.md) [Importation](docs/scripting/import.md) [Listes](docs/scripting/lists.md) [Opérateurs](docs/scripting/operators.md) [Portées des Noms](docs/scripting/scopes.md) [Sets](docs/scripting/sets.md) [Tuples](docs/scripting/tuples.md) [Variables](docs/scripting/variables.md) [Boucle While](docs/scripting/while.md)
## {{@table_of_contents_section_unlocks}}
{{unlocksTOC}}
diff --git a/FR/docs/scripting/for.md b/FR/docs/scripting/for.md
index 2e2aa666..4fafd19c 100644
--- a/FR/docs/scripting/for.md
+++ b/FR/docs/scripting/for.md
@@ -15,7 +15,7 @@ Une boucle for ressemble à ceci :
`variable_name` peut être n'importe quel nom que tu choisis. C'est une variable qui stocke l'élément actuel dans la séquence. `sequence` doit être une valeur qui peut être itérée comme un range de nombres. Le bloc de code est exécuté pour chaque élément avec la variable de boucle assignée à cet élément.
## Séquences
-[Ranges](functions/range) [Listes](docs/scripting/lists.md) [Tuples](docs/scripting/tuples.md) [Dictionnaires](docs/scripting/dicts.md) [Sets](docs/scripting/sets.md)
+[Ranges](functions/range) [Tuples](docs/scripting/tuples.md) [Listes](docs/scripting/lists.md) [Dictionnaires](docs/scripting/dicts.md) [Sets](docs/scripting/sets.md)
## Exemple
`for i in range(5):
diff --git a/FR/docs/scripting/in.md b/FR/docs/scripting/in.md
new file mode 100644
index 00000000..7aca88bb
--- /dev/null
+++ b/FR/docs/scripting/in.md
@@ -0,0 +1,57 @@
+# In Statement
+
+You can use an `in` statement to check if a value is available within a `sequence` or a string of characters. A `sequence` needs to be some value that can be iterated over like a range of numbers. If the value is in the `sequence` then then the statement will return `True` and if it is not then it will return `False`.
+
+
+You can also use an `in` statement with a dict or set. When used with a dict it will search for a value in the dict's keys.
+Note: When used in a `for` loop the `in` keyword functions differently. Please see [For Loop](docs/scripting/for.md) to learn about how to use the `in` keyword for those.
+
+## Syntax
+
+An `in` statement looks like this:
+
+`variable_name = variable_name_or_value in sequence`
+
+`variable_name` can be any name you choose and will be given the value of `True` or `False`
+
+Or:
+
+`if variable_name_or_value in sequence:
+ # code block`
+
+Or:
+
+`while variable_name_or_value in sequence:
+ # code block`
+
+`variable_name_or_value` can be any variable you want or any value you want. `sequence` must be one of the things listed below, or a string of characters. An `if` or `while` code block will run if the value is in the provided sequence.
+
+## Séquences
+
+[Ranges](functions/range) [Tuples](docs/scripting/tuples.md) [Listes](docs/scripting/lists.md) [Dictionnaires](docs/scripting/dicts.md) [Sets](docs/scripting/sets.md)
+
+## Example - 2x2 Square of Bushes
+
+`clear()
+for x in range(get_world_size()):
+for y in range(get_world_size()):
+
+ if x in (0, 1) and y in (0, 1):
+ plant(Entities.Bush)
+
+ move(North)
+ move(East)`
+
+This will plant a square of `Entities.Bush` in a 2x2 square starting at the origin (0, 0) of the world leaving the rest untouched.
+
+
+## Example - Tilling
+
+`desired_entity = Entities.Carrot
+entities_needing_soil = (Entities.Pumpkin, Entities.Carrot)
+
+if desired_entity in entities_needing_soil:
+if get_ground_type() != Grounds.Soil:
+till()`
+
+This will check if the `desired_entity` is in the `tuple` `entities_needing_soil` so that the drone can know if it needs to check if the current ground type is `Grounds.Soil`. If it is not then it will call the `till` function to change the ground type.
diff --git a/IT/docs/home.md b/IT/docs/home.md
index efc3591c..7572e889 100644
--- a/IT/docs/home.md
+++ b/IT/docs/home.md
@@ -2,7 +2,7 @@
[Editor Esterno](docs/external_editor.md) [Primo Programma](docs/first_program.md) [Primi Passi](docs/getting_started.md) [Caricamento dei Backup](docs/backup.md) [Output](docs/output.md) [Statistiche](docs/stats.md) [Crediti](docs/credits.md)
## {{@table_of_contents_section_programming}}
-[Break](docs/scripting/break.md) [Debug](docs/scripting/debug.md) [Commenti](docs/scripting/comments.md) [Continue](docs/scripting/continue.md) [Dizionari](docs/scripting/dicts.md) [Ciclo For](docs/scripting/for.md) [Funzioni](docs/scripting/functions.md) [If](docs/scripting/if.md) [Import](docs/scripting/import.md) [Liste](docs/scripting/lists.md) [Operatori](docs/scripting/operators.md) [Scope dei Nomi](docs/scripting/scopes.md) [Set](docs/scripting/sets.md) [Tuple](docs/scripting/tuples.md) [Variabili](docs/scripting/variables.md) [Ciclo While](docs/scripting/while.md)
+[Break](docs/scripting/break.md) [Debug](docs/scripting/debug.md) [Commenti](docs/scripting/comments.md) [Continue](docs/scripting/continue.md) [Dizionari](docs/scripting/dicts.md) [Ciclo For](docs/scripting/for.md) [Funzioni](docs/scripting/functions.md) [If](docs/scripting/if.md) [In](docs/scripting/in.md) [Import](docs/scripting/import.md) [Liste](docs/scripting/lists.md) [Operatori](docs/scripting/operators.md) [Scope dei Nomi](docs/scripting/scopes.md) [Set](docs/scripting/sets.md) [Tuple](docs/scripting/tuples.md) [Variabili](docs/scripting/variables.md) [Ciclo While](docs/scripting/while.md)
## {{@table_of_contents_section_unlocks}}
{{unlocksTOC}}
diff --git a/IT/docs/scripting/for.md b/IT/docs/scripting/for.md
index 7b18f210..b412bc55 100644
--- a/IT/docs/scripting/for.md
+++ b/IT/docs/scripting/for.md
@@ -15,7 +15,7 @@ Un ciclo for si presenta così:
`nome_variabile` può essere qualsiasi nome tu scelga. È una variabile che memorizza l'elemento corrente nella sequenza. `sequenza` deve essere un valore che può essere iterato come un range o numeri. Il blocco di codice viene eseguito per ogni elemento con la variabile del ciclo assegnata a quell'elemento.
## Sequenze
-[Range](functions/range) [Liste](docs/scripting/lists.md) [Tuple](docs/scripting/tuples.md) [Dizionari](docs/scripting/dicts.md) [Set](docs/scripting/sets.md)
+[Range](functions/range) [Tuple](docs/scripting/tuples.md) [Liste](docs/scripting/lists.md) [Dizionari](docs/scripting/dicts.md) [Set](docs/scripting/sets.md)
## Esempio
`for i in range(5):
diff --git a/IT/docs/scripting/in.md b/IT/docs/scripting/in.md
new file mode 100644
index 00000000..3fc02c8d
--- /dev/null
+++ b/IT/docs/scripting/in.md
@@ -0,0 +1,57 @@
+# In Statement
+
+You can use an `in` statement to check if a value is available within a `sequence` or a string of characters. A `sequence` needs to be some value that can be iterated over like a range of numbers. If the value is in the `sequence` then then the statement will return `True` and if it is not then it will return `False`.
+
+
+You can also use an `in` statement with a dict or set. When used with a dict it will search for a value in the dict's keys.
+Note: When used in a `for` loop the `in` keyword functions differently. Please see [For Loop](docs/scripting/for.md) to learn about how to use the `in` keyword for those.
+
+## Syntax
+
+An `in` statement looks like this:
+
+`variable_name = variable_name_or_value in sequence`
+
+`variable_name` can be any name you choose and will be given the value of `True` or `False`
+
+Or:
+
+`if variable_name_or_value in sequence:
+ # code block`
+
+Or:
+
+`while variable_name_or_value in sequence:
+ # code block`
+
+`variable_name_or_value` can be any variable you want or any value you want. `sequence` must be one of the things listed below, or a string of characters. An `if` or `while` code block will run if the value is in the provided sequence.
+
+## Sequenze
+
+[Range](functions/range) [Tuple](docs/scripting/tuples.md) [Liste](docs/scripting/lists.md) [Dizionari](docs/scripting/dicts.md) [Set](docs/scripting/sets.md)
+
+## Example - 2x2 Square of Bushes
+
+`clear()
+for x in range(get_world_size()):
+for y in range(get_world_size()):
+
+ if x in (0, 1) and y in (0, 1):
+ plant(Entities.Bush)
+
+ move(North)
+ move(East)`
+
+This will plant a square of `Entities.Bush` in a 2x2 square starting at the origin (0, 0) of the world leaving the rest untouched.
+
+
+## Example - Tilling
+
+`desired_entity = Entities.Carrot
+entities_needing_soil = (Entities.Pumpkin, Entities.Carrot)
+
+if desired_entity in entities_needing_soil:
+if get_ground_type() != Grounds.Soil:
+till()`
+
+This will check if the `desired_entity` is in the `tuple` `entities_needing_soil` so that the drone can know if it needs to check if the current ground type is `Grounds.Soil`. If it is not then it will call the `till` function to change the ground type.
diff --git a/JA/docs/home.md b/JA/docs/home.md
index 83cad9ef..c44c5b61 100644
--- a/JA/docs/home.md
+++ b/JA/docs/home.md
@@ -2,7 +2,7 @@
[外部エディタ](docs/external_editor.md) [最初のプログラム](docs/first_program.md) [はじめに](docs/getting_started.md) [バックアップのロード](docs/backup.md) [Output](docs/output.md) [統計](docs/stats.md) [クレジット](docs/credits.md)
## {{@table_of_contents_section_programming}}
-[Break](docs/scripting/break.md) [デバッグ](docs/scripting/debug.md) [コメント](docs/scripting/comments.md) [Continue](docs/scripting/continue.md) [辞書](docs/scripting/dicts.md) [Forループ](docs/scripting/for.md) [関数](docs/scripting/functions.md) [If文](docs/scripting/if.md) [インポート](docs/scripting/import.md) [リスト](docs/scripting/lists.md) [演算子](docs/scripting/operators.md) [名前スコープ](docs/scripting/scopes.md) [セット](docs/scripting/sets.md) [タプル](docs/scripting/tuples.md) [変数](docs/scripting/variables.md) [Whileループ](docs/scripting/while.md)
+[Break](docs/scripting/break.md) [デバッグ](docs/scripting/debug.md) [コメント](docs/scripting/comments.md) [Continue](docs/scripting/continue.md) [辞書](docs/scripting/dicts.md) [Forループ](docs/scripting/for.md) [関数](docs/scripting/functions.md) [If文](docs/scripting/if.md) [In](docs/scripting/in.md) [インポート](docs/scripting/import.md) [リスト](docs/scripting/lists.md) [演算子](docs/scripting/operators.md) [名前スコープ](docs/scripting/scopes.md) [セット](docs/scripting/sets.md) [タプル](docs/scripting/tuples.md) [変数](docs/scripting/variables.md) [Whileループ](docs/scripting/while.md)
## {{@table_of_contents_section_unlocks}}
{{unlocksTOC}}
diff --git a/JA/docs/scripting/for.md b/JA/docs/scripting/for.md
index 82121155..5e1bf1a7 100644
--- a/JA/docs/scripting/for.md
+++ b/JA/docs/scripting/for.md
@@ -15,7 +15,7 @@ forループは次のようになります:
`variable_name` は自由に選べる名前です。これはシーケンス内の現在の要素を格納する変数です。`sequence` は、数値の範囲のような反復可能な値である必要があります。コードブロックは、ループ変数がその要素に割り当てられた状態で、すべての要素に対して実行されます。
## シーケンス
-[範囲](functions/range) [リスト](docs/scripting/lists.md) [タプル](docs/scripting/tuples.md) [辞書](docs/scripting/dicts.md) [セット](docs/scripting/sets.md)
+[範囲](functions/range) [タプル](docs/scripting/tuples.md) [リスト](docs/scripting/lists.md) [辞書](docs/scripting/dicts.md) [セット](docs/scripting/sets.md)
## 例
`for i in range(5):
diff --git a/JA/docs/scripting/in.md b/JA/docs/scripting/in.md
new file mode 100644
index 00000000..1bcfb525
--- /dev/null
+++ b/JA/docs/scripting/in.md
@@ -0,0 +1,57 @@
+# In Statement
+
+You can use an `in` statement to check if a value is available within a `sequence` or a string of characters. A `sequence` needs to be some value that can be iterated over like a range of numbers. If the value is in the `sequence` then then the statement will return `True` and if it is not then it will return `False`.
+
+
+You can also use an `in` statement with a dict or set. When used with a dict it will search for a value in the dict's keys.
+Note: When used in a `for` loop the `in` keyword functions differently. Please see [For Loop](docs/scripting/for.md) to learn about how to use the `in` keyword for those.
+
+## Syntax
+
+An `in` statement looks like this:
+
+`variable_name = variable_name_or_value in sequence`
+
+`variable_name` can be any name you choose and will be given the value of `True` or `False`
+
+Or:
+
+`if variable_name_or_value in sequence:
+ # code block`
+
+Or:
+
+`while variable_name_or_value in sequence:
+ # code block`
+
+`variable_name_or_value` can be any variable you want or any value you want. `sequence` must be one of the things listed below, or a string of characters. An `if` or `while` code block will run if the value is in the provided sequence.
+
+## シーケンス
+
+[範囲](functions/range) [タプル](docs/scripting/tuples.md) [リスト](docs/scripting/lists.md) [辞書](docs/scripting/dicts.md) [セット](docs/scripting/sets.md)
+
+## Example - 2x2 Square of Bushes
+
+`clear()
+for x in range(get_world_size()):
+for y in range(get_world_size()):
+
+ if x in (0, 1) and y in (0, 1):
+ plant(Entities.Bush)
+
+ move(North)
+ move(East)`
+
+This will plant a square of `Entities.Bush` in a 2x2 square starting at the origin (0, 0) of the world leaving the rest untouched.
+
+
+## Example - Tilling
+
+`desired_entity = Entities.Carrot
+entities_needing_soil = (Entities.Pumpkin, Entities.Carrot)
+
+if desired_entity in entities_needing_soil:
+if get_ground_type() != Grounds.Soil:
+till()`
+
+This will check if the `desired_entity` is in the `tuple` `entities_needing_soil` so that the drone can know if it needs to check if the current ground type is `Grounds.Soil`. If it is not then it will call the `till` function to change the ground type.
diff --git a/KO/docs/home.md b/KO/docs/home.md
index 37e9b1ac..51bc5cf9 100644
--- a/KO/docs/home.md
+++ b/KO/docs/home.md
@@ -2,7 +2,7 @@
[외부 에디터](docs/external_editor.md) [첫 번째 프로그램](docs/first_program.md) [시작하기](docs/getting_started.md) [백업 불러오기](docs/backup.md) [Output](docs/output.md) [통계](docs/stats.md) [크레딧](docs/credits.md)
## {{@table_of_contents_section_programming}}
-[Break](docs/scripting/break.md) [디버그](docs/scripting/debug.md) [주석](docs/scripting/comments.md) [Continue](docs/scripting/continue.md) [딕셔너리](docs/scripting/dicts.md) [For 루프](docs/scripting/for.md) [함수](docs/scripting/functions.md) [If문](docs/scripting/if.md) [Import](docs/scripting/import.md) [리스트](docs/scripting/lists.md) [연산자](docs/scripting/operators.md) [이름 스코프](docs/scripting/scopes.md) [세트](docs/scripting/sets.md) [튜플](docs/scripting/tuples.md) [변수](docs/scripting/variables.md) [While 루프](docs/scripting/while.md)
+[Break](docs/scripting/break.md) [디버그](docs/scripting/debug.md) [주석](docs/scripting/comments.md) [Continue](docs/scripting/continue.md) [딕셔너리](docs/scripting/dicts.md) [For 루프](docs/scripting/for.md) [함수](docs/scripting/functions.md) [If문](docs/scripting/if.md) [In](docs/scripting/in.md) [Import](docs/scripting/import.md) [리스트](docs/scripting/lists.md) [연산자](docs/scripting/operators.md) [이름 스코프](docs/scripting/scopes.md) [세트](docs/scripting/sets.md) [튜플](docs/scripting/tuples.md) [변수](docs/scripting/variables.md) [While 루프](docs/scripting/while.md)
## {{@table_of_contents_section_unlocks}}
{{unlocksTOC}}
diff --git a/KO/docs/scripting/for.md b/KO/docs/scripting/for.md
index 165666d0..48d64e98 100644
--- a/KO/docs/scripting/for.md
+++ b/KO/docs/scripting/for.md
@@ -15,7 +15,7 @@ for 루프는 다음과 같아요:
`variable_name`은 여러분이 선택한 어떤 이름이든 될 수 있어요. 이것은 시퀀스의 현재 요소를 저장하는 변수예요. `sequence`는 숫자 범위처럼 반복할 수 있는 값이어야 해요. 코드 블록은 루프 변수가 해당 요소에 할당된 상태로 모든 요소에 대해 실행돼요.
## 시퀀스
-[범위](functions/range) [리스트](docs/scripting/lists.md) [튜플](docs/scripting/tuples.md) [딕셔너리](docs/scripting/dicts.md) [세트](docs/scripting/sets.md)
+[범위](functions/range) [튜플](docs/scripting/tuples.md) [리스트](docs/scripting/lists.md) [딕셔너리](docs/scripting/dicts.md) [세트](docs/scripting/sets.md)
## 예시
`for i in range(5):
diff --git a/KO/docs/scripting/in.md b/KO/docs/scripting/in.md
new file mode 100644
index 00000000..fadc709e
--- /dev/null
+++ b/KO/docs/scripting/in.md
@@ -0,0 +1,57 @@
+# In Statement
+
+You can use an `in` statement to check if a value is available within a `sequence` or a string of characters. A `sequence` needs to be some value that can be iterated over like a range of numbers. If the value is in the `sequence` then then the statement will return `True` and if it is not then it will return `False`.
+
+
+You can also use an `in` statement with a dict or set. When used with a dict it will search for a value in the dict's keys.
+Note: When used in a `for` loop the `in` keyword functions differently. Please see [For Loop](docs/scripting/for.md) to learn about how to use the `in` keyword for those.
+
+## Syntax
+
+An `in` statement looks like this:
+
+`variable_name = variable_name_or_value in sequence`
+
+`variable_name` can be any name you choose and will be given the value of `True` or `False`
+
+Or:
+
+`if variable_name_or_value in sequence:
+ # code block`
+
+Or:
+
+`while variable_name_or_value in sequence:
+ # code block`
+
+`variable_name_or_value` can be any variable you want or any value you want. `sequence` must be one of the things listed below, or a string of characters. An `if` or `while` code block will run if the value is in the provided sequence.
+
+## 시퀀스
+
+[범위](functions/range) [튜플](docs/scripting/tuples.md) [리스트](docs/scripting/lists.md) [딕셔너리](docs/scripting/dicts.md) [세트](docs/scripting/sets.md)
+
+## Example - 2x2 Square of Bushes
+
+`clear()
+for x in range(get_world_size()):
+for y in range(get_world_size()):
+
+ if x in (0, 1) and y in (0, 1):
+ plant(Entities.Bush)
+
+ move(North)
+ move(East)`
+
+This will plant a square of `Entities.Bush` in a 2x2 square starting at the origin (0, 0) of the world leaving the rest untouched.
+
+
+## Example - Tilling
+
+`desired_entity = Entities.Carrot
+entities_needing_soil = (Entities.Pumpkin, Entities.Carrot)
+
+if desired_entity in entities_needing_soil:
+if get_ground_type() != Grounds.Soil:
+till()`
+
+This will check if the `desired_entity` is in the `tuple` `entities_needing_soil` so that the drone can know if it needs to check if the current ground type is `Grounds.Soil`. If it is not then it will call the `till` function to change the ground type.
diff --git a/PL/docs/home.md b/PL/docs/home.md
index 6f873965..1e20e066 100644
--- a/PL/docs/home.md
+++ b/PL/docs/home.md
@@ -2,7 +2,7 @@
[Zewnętrzny edytor](docs/external_editor.md) [Pierwszy program](docs/first_program.md) [Pierwsze kroki](docs/getting_started.md) [Wczytywanie kopii zapasowych](docs/backup.md) [Output](docs/output.md) [Statystyki](docs/stats.md) [Twórcy](docs/credits.md)
## {{@table_of_contents_section_programming}}
-[Break](docs/scripting/break.md) [Debugowanie](docs/scripting/debug.md) [Komentarze](docs/scripting/comments.md) [Continue](docs/scripting/continue.md) [Słowniki](docs/scripting/dicts.md) [Pętla For](docs/scripting/for.md) [Funkcje](docs/scripting/functions.md) [If](docs/scripting/if.md) [Import](docs/scripting/import.md) [Listy](docs/scripting/lists.md) [Operatory](docs/scripting/operators.md) [Zasięgi nazw](docs/scripting/scopes.md) [Zbiory](docs/scripting/sets.md) [Krotki](docs/scripting/tuples.md) [Zmienne](docs/scripting/variables.md) [Pętla While](docs/scripting/while.md)
+[Break](docs/scripting/break.md) [Debugowanie](docs/scripting/debug.md) [Komentarze](docs/scripting/comments.md) [Continue](docs/scripting/continue.md) [Słowniki](docs/scripting/dicts.md) [Pętla For](docs/scripting/for.md) [Funkcje](docs/scripting/functions.md) [If](docs/scripting/if.md) [In](docs/scripting/in.md) [Import](docs/scripting/import.md) [Listy](docs/scripting/lists.md) [Operatory](docs/scripting/operators.md) [Zasięgi nazw](docs/scripting/scopes.md) [Zbiory](docs/scripting/sets.md) [Krotki](docs/scripting/tuples.md) [Zmienne](docs/scripting/variables.md) [Pętla While](docs/scripting/while.md)
## {{@table_of_contents_section_unlocks}}
{{unlocksTOC}}
diff --git a/PL/docs/scripting/for.md b/PL/docs/scripting/for.md
index a5802aca..1b9f5645 100644
--- a/PL/docs/scripting/for.md
+++ b/PL/docs/scripting/for.md
@@ -15,7 +15,7 @@ Pętla for wygląda tak:
`nazwa_zmiennej` może być dowolną wybraną przez ciebie nazwą. Jest to zmienna, która przechowuje bieżący element w sekwencji. `sekwencja` musi być wartością, po której można iterować, jak zakres liczb. Blok kodu jest wykonywany dla każdego elementu z zmienną pętli przypisaną do tego elementu.
## Sekwencje
-[Zakresy](functions/range) [Listy](docs/scripting/lists.md) [Krotki](docs/scripting/tuples.md) [Słowniki](docs/scripting/dicts.md) [Zbiory](docs/scripting/sets.md)
+[Zakresy](functions/range) [Krotki](docs/scripting/tuples.md) [Listy](docs/scripting/lists.md) [Słowniki](docs/scripting/dicts.md) [Zbiory](docs/scripting/sets.md)
## Przykład
`for i in range(5):
diff --git a/PL/docs/scripting/in.md b/PL/docs/scripting/in.md
new file mode 100644
index 00000000..2bc607d7
--- /dev/null
+++ b/PL/docs/scripting/in.md
@@ -0,0 +1,57 @@
+# In Statement
+
+You can use an `in` statement to check if a value is available within a `sequence` or a string of characters. A `sequence` needs to be some value that can be iterated over like a range of numbers. If the value is in the `sequence` then then the statement will return `True` and if it is not then it will return `False`.
+
+
+You can also use an `in` statement with a dict or set. When used with a dict it will search for a value in the dict's keys.
+Note: When used in a `for` loop the `in` keyword functions differently. Please see [For Loop](docs/scripting/for.md) to learn about how to use the `in` keyword for those.
+
+## Syntax
+
+An `in` statement looks like this:
+
+`variable_name = variable_name_or_value in sequence`
+
+`variable_name` can be any name you choose and will be given the value of `True` or `False`
+
+Or:
+
+`if variable_name_or_value in sequence:
+ # code block`
+
+Or:
+
+`while variable_name_or_value in sequence:
+ # code block`
+
+`variable_name_or_value` can be any variable you want or any value you want. `sequence` must be one of the things listed below, or a string of characters. An `if` or `while` code block will run if the value is in the provided sequence.
+
+## Sekwencje
+
+[Zakresy](functions/range) [Krotki](docs/scripting/tuples.md) [Listy](docs/scripting/lists.md) [Słowniki](docs/scripting/dicts.md) [Zbiory](docs/scripting/sets.md)
+
+## Example - 2x2 Square of Bushes
+
+`clear()
+for x in range(get_world_size()):
+for y in range(get_world_size()):
+
+ if x in (0, 1) and y in (0, 1):
+ plant(Entities.Bush)
+
+ move(North)
+ move(East)`
+
+This will plant a square of `Entities.Bush` in a 2x2 square starting at the origin (0, 0) of the world leaving the rest untouched.
+
+
+## Example - Tilling
+
+`desired_entity = Entities.Carrot
+entities_needing_soil = (Entities.Pumpkin, Entities.Carrot)
+
+if desired_entity in entities_needing_soil:
+if get_ground_type() != Grounds.Soil:
+till()`
+
+This will check if the `desired_entity` is in the `tuple` `entities_needing_soil` so that the drone can know if it needs to check if the current ground type is `Grounds.Soil`. If it is not then it will call the `till` function to change the ground type.
diff --git a/PT/docs/home.md b/PT/docs/home.md
index 55b9d470..ed3323c9 100644
--- a/PT/docs/home.md
+++ b/PT/docs/home.md
@@ -2,7 +2,7 @@
[Editor Externo](docs/external_editor.md) [Primeiro Programa](docs/first_program.md) [Começando](docs/getting_started.md) [Carregando Backups](docs/backup.md) [Output](docs/output.md) [Estatísticas](docs/stats.md) [Créditos](docs/credits.md)
## {{@table_of_contents_section_programming}}
-[Break](docs/scripting/break.md) [Depuração](docs/scripting/debug.md) [Comentários](docs/scripting/comments.md) [Continue](docs/scripting/continue.md) [Dicionários](docs/scripting/dicts.md) [Loop For](docs/scripting/for.md) [Funções](docs/scripting/functions.md) [If](docs/scripting/if.md) [Import](docs/scripting/import.md) [Listas](docs/scripting/lists.md) [Operadores](docs/scripting/operators.md) [Escopos de Nomes](docs/scripting/scopes.md) [Conjuntos](docs/scripting/sets.md) [Tuplas](docs/scripting/tuples.md) [Variáveis](docs/scripting/variables.md) [Loop While](docs/scripting/while.md)
+[Break](docs/scripting/break.md) [Depuração](docs/scripting/debug.md) [Comentários](docs/scripting/comments.md) [Continue](docs/scripting/continue.md) [Dicionários](docs/scripting/dicts.md) [Loop For](docs/scripting/for.md) [Funções](docs/scripting/functions.md) [If](docs/scripting/if.md) [In](docs/scripting/in.md) [Import](docs/scripting/import.md) [Listas](docs/scripting/lists.md) [Operadores](docs/scripting/operators.md) [Escopos de Nomes](docs/scripting/scopes.md) [Conjuntos](docs/scripting/sets.md) [Tuplas](docs/scripting/tuples.md) [Variáveis](docs/scripting/variables.md) [Loop While](docs/scripting/while.md)
## {{@table_of_contents_section_unlocks}}
{{unlocksTOC}}
diff --git a/PT/docs/scripting/for.md b/PT/docs/scripting/for.md
index cd133210..f018a979 100644
--- a/PT/docs/scripting/for.md
+++ b/PT/docs/scripting/for.md
@@ -15,7 +15,7 @@ Um loop for se parece com isto:
`variable_name` pode ser qualquer nome que você escolher. É uma variável que armazena o elemento atual na sequência. `sequence` precisa ser algum valor que possa ser iterado, como um range ou números. O bloco de código é executado para cada elemento com a variável do loop atribuída a esse elemento.
## Sequências
-[Ranges](functions/range) [Listas](docs/scripting/lists.md) [Tuplas](docs/scripting/tuples.md) [Dicionários](docs/scripting/dicts.md) [Conjuntos](docs/scripting/sets.md)
+[Ranges](functions/range) [Tuplas](docs/scripting/tuples.md) [Listas](docs/scripting/lists.md) [Dicionários](docs/scripting/dicts.md) [Conjuntos](docs/scripting/sets.md)
## Exemplo
`for i in range(5):
diff --git a/PT/docs/scripting/in.md b/PT/docs/scripting/in.md
new file mode 100644
index 00000000..4f6476c3
--- /dev/null
+++ b/PT/docs/scripting/in.md
@@ -0,0 +1,57 @@
+# In Statement
+
+You can use an `in` statement to check if a value is available within a `sequence` or a string of characters. A `sequence` needs to be some value that can be iterated over like a range of numbers. If the value is in the `sequence` then then the statement will return `True` and if it is not then it will return `False`.
+
+
+You can also use an `in` statement with a dict or set. When used with a dict it will search for a value in the dict's keys.
+Note: When used in a `for` loop the `in` keyword functions differently. Please see [For Loop](docs/scripting/for.md) to learn about how to use the `in` keyword for those.
+
+## Syntax
+
+An `in` statement looks like this:
+
+`variable_name = variable_name_or_value in sequence`
+
+`variable_name` can be any name you choose and will be given the value of `True` or `False`
+
+Or:
+
+`if variable_name_or_value in sequence:
+ # code block`
+
+Or:
+
+`while variable_name_or_value in sequence:
+ # code block`
+
+`variable_name_or_value` can be any variable you want or any value you want. `sequence` must be one of the things listed below, or a string of characters. An `if` or `while` code block will run if the value is in the provided sequence.
+
+## Sequências
+
+[Ranges](functions/range) [Tuplas](docs/scripting/tuples.md) [Listas](docs/scripting/lists.md) [Dicionários](docs/scripting/dicts.md) [Conjuntos](docs/scripting/sets.md)
+
+## Example - 2x2 Square of Bushes
+
+`clear()
+for x in range(get_world_size()):
+for y in range(get_world_size()):
+
+ if x in (0, 1) and y in (0, 1):
+ plant(Entities.Bush)
+
+ move(North)
+ move(East)`
+
+This will plant a square of `Entities.Bush` in a 2x2 square starting at the origin (0, 0) of the world leaving the rest untouched.
+
+
+## Example - Tilling
+
+`desired_entity = Entities.Carrot
+entities_needing_soil = (Entities.Pumpkin, Entities.Carrot)
+
+if desired_entity in entities_needing_soil:
+if get_ground_type() != Grounds.Soil:
+till()`
+
+This will check if the `desired_entity` is in the `tuple` `entities_needing_soil` so that the drone can know if it needs to check if the current ground type is `Grounds.Soil`. If it is not then it will call the `till` function to change the ground type.
diff --git a/RU/docs/home.md b/RU/docs/home.md
index d122191c..5e92eeac 100644
--- a/RU/docs/home.md
+++ b/RU/docs/home.md
@@ -2,7 +2,7 @@
[Внешний редактор](docs/external_editor.md) [Первая программа](docs/first_program.md) [Начало работы](docs/getting_started.md) [Загрузка резервных копий](docs/backup.md) [Output](docs/output.md) [Статистика](docs/stats.md) [Авторы](docs/credits.md)
## {{@table_of_contents_section_programming}}
-[Break](docs/scripting/break.md) [Отладка](docs/scripting/debug.md) [Комментарии](docs/scripting/comments.md) [Continue](docs/scripting/continue.md) [Словари](docs/scripting/dicts.md) [Цикл `for`](docs/scripting/for.md) [Функции](docs/scripting/functions.md) [If](docs/scripting/if.md) [Импорт](docs/scripting/import.md) [Списки](docs/scripting/lists.md) [Операторы](docs/scripting/operators.md) [Области видимости имен](docs/scripting/scopes.md) [Множества](docs/scripting/sets.md) [Кортежи](docs/scripting/tuples.md) [Переменные](docs/scripting/variables.md) [Цикл `while`](docs/scripting/while.md)
+[Break](docs/scripting/break.md) [Отладка](docs/scripting/debug.md) [Комментарии](docs/scripting/comments.md) [Continue](docs/scripting/continue.md) [Словари](docs/scripting/dicts.md) [Цикл `for`](docs/scripting/for.md) [Функции](docs/scripting/functions.md) [If](docs/scripting/if.md) [In](docs/scripting/in.md) [Импорт](docs/scripting/import.md) [Списки](docs/scripting/lists.md) [Операторы](docs/scripting/operators.md) [Области видимости имен](docs/scripting/scopes.md) [Множества](docs/scripting/sets.md) [Кортежи](docs/scripting/tuples.md) [Переменные](docs/scripting/variables.md) [Цикл `while`](docs/scripting/while.md)
## {{@table_of_contents_section_unlocks}}
{{unlocksTOC}}
diff --git a/RU/docs/scripting/for.md b/RU/docs/scripting/for.md
index df2d2cbb..b79c1f5c 100644
--- a/RU/docs/scripting/for.md
+++ b/RU/docs/scripting/for.md
@@ -15,7 +15,7 @@
Для `variable_name` можно задать любое имя. Это переменная, которая хранит текущий элемент в последовательности. `sequence` должно быть некоторым значением, которое можно перебирать, например, диапазоном или числами. Блок кода выполняется для каждого элемента, при этом переменная цикла присваивается этому элементу.
## Последовательности
-[Диапазоны](functions/range) [Списки](docs/scripting/lists.md) [Кортежи](docs/scripting/tuples.md) [Словари](docs/scripting/dicts.md) [Множества](docs/scripting/sets.md)
+[Диапазоны](functions/range) [Кортежи](docs/scripting/tuples.md) [Списки](docs/scripting/lists.md) [Словари](docs/scripting/dicts.md) [Множества](docs/scripting/sets.md)
## Пример
`for i in range(5):
diff --git a/RU/docs/scripting/in.md b/RU/docs/scripting/in.md
new file mode 100644
index 00000000..2bcf6564
--- /dev/null
+++ b/RU/docs/scripting/in.md
@@ -0,0 +1,57 @@
+# In Statement
+
+You can use an `in` statement to check if a value is available within a `sequence` or a string of characters. A `sequence` needs to be some value that can be iterated over like a range of numbers. If the value is in the `sequence` then then the statement will return `True` and if it is not then it will return `False`.
+
+
+You can also use an `in` statement with a dict or set. When used with a dict it will search for a value in the dict's keys.
+Note: When used in a `for` loop the `in` keyword functions differently. Please see [For Loop](docs/scripting/for.md) to learn about how to use the `in` keyword for those.
+
+## Syntax
+
+An `in` statement looks like this:
+
+`variable_name = variable_name_or_value in sequence`
+
+`variable_name` can be any name you choose and will be given the value of `True` or `False`
+
+Or:
+
+`if variable_name_or_value in sequence:
+ # code block`
+
+Or:
+
+`while variable_name_or_value in sequence:
+ # code block`
+
+`variable_name_or_value` can be any variable you want or any value you want. `sequence` must be one of the things listed below, or a string of characters. An `if` or `while` code block will run if the value is in the provided sequence.
+
+## Последовательности
+
+[Диапазоны](functions/range) [Кортежи](docs/scripting/tuples.md) [Списки](docs/scripting/lists.md) [Словари](docs/scripting/dicts.md) [Множества](docs/scripting/sets.md)
+
+## Example - 2x2 Square of Bushes
+
+`clear()
+for x in range(get_world_size()):
+for y in range(get_world_size()):
+
+ if x in (0, 1) and y in (0, 1):
+ plant(Entities.Bush)
+
+ move(North)
+ move(East)`
+
+This will plant a square of `Entities.Bush` in a 2x2 square starting at the origin (0, 0) of the world leaving the rest untouched.
+
+
+## Example - Tilling
+
+`desired_entity = Entities.Carrot
+entities_needing_soil = (Entities.Pumpkin, Entities.Carrot)
+
+if desired_entity in entities_needing_soil:
+if get_ground_type() != Grounds.Soil:
+till()`
+
+This will check if the `desired_entity` is in the `tuple` `entities_needing_soil` so that the drone can know if it needs to check if the current ground type is `Grounds.Soil`. If it is not then it will call the `till` function to change the ground type.
diff --git a/TW/docs/home.md b/TW/docs/home.md
index 6f7fd14b..3bc63a14 100644
--- a/TW/docs/home.md
+++ b/TW/docs/home.md
@@ -2,7 +2,7 @@
[外部編輯器](docs/external_editor.md) [第一個程式](docs/first_program.md) [入門指南](docs/getting_started.md) [載入備份](docs/backup.md) [輸出](docs/output.md) [統計資料](docs/stats.md) [致謝](docs/credits.md)
## {{@table_of_contents_section_programming}}
-[break 陳述式](docs/scripting/break.md) [偵錯](docs/scripting/debug.md) [註解](docs/scripting/comments.md) [continue 陳述式](docs/scripting/continue.md) [字典](docs/scripting/dicts.md) [for 迴圈](docs/scripting/for.md) [函式](docs/scripting/functions.md) [if 陳述式](docs/scripting/if.md) [匯入](docs/scripting/import.md) [串列](docs/scripting/lists.md) [運算子](docs/scripting/operators.md) [命名作用域](docs/scripting/scopes.md) [集合](docs/scripting/sets.md) [元組](docs/scripting/tuples.md) [變數](docs/scripting/variables.md) [while 迴圈](docs/scripting/while.md)
+[break 陳述式](docs/scripting/break.md) [偵錯](docs/scripting/debug.md) [註解](docs/scripting/comments.md) [continue 陳述式](docs/scripting/continue.md) [字典](docs/scripting/dicts.md) [for 迴圈](docs/scripting/for.md) [函式](docs/scripting/functions.md) [if 陳述式](docs/scripting/if.md) [In](docs/scripting/in.md) [匯入](docs/scripting/import.md) [串列](docs/scripting/lists.md) [運算子](docs/scripting/operators.md) [命名作用域](docs/scripting/scopes.md) [集合](docs/scripting/sets.md) [元組](docs/scripting/tuples.md) [變數](docs/scripting/variables.md) [while 迴圈](docs/scripting/while.md)
## {{@table_of_contents_section_unlocks}}
{{unlocksTOC}}
diff --git a/TW/docs/scripting/for.md b/TW/docs/scripting/for.md
index 13ee5155..93de0a99 100644
--- a/TW/docs/scripting/for.md
+++ b/TW/docs/scripting/for.md
@@ -19,7 +19,7 @@ for variable_name in sequence:
`variable_name` 可以是你選擇的任意名稱。它是一個,用來儲存序列中目前元素的變數。`sequence` 必須是可被迭代的值,例如數字範圍。程式碼區塊會對序列中的每一個元素執行一次,且迴圈變數在每次執行時會被指派為該元素。
## 序列
-[範圍](functions/range) [串列](docs/scripting/lists.md) [元組](docs/scripting/tuples.md) [字典](docs/scripting/dicts.md) [集合](docs/scripting/sets.md)
+[範圍](functions/range) [元組](docs/scripting/tuples.md) [串列](docs/scripting/lists.md) [字典](docs/scripting/dicts.md) [集合](docs/scripting/sets.md)
## 範例
diff --git a/TW/docs/scripting/in.md b/TW/docs/scripting/in.md
new file mode 100644
index 00000000..1391617a
--- /dev/null
+++ b/TW/docs/scripting/in.md
@@ -0,0 +1,57 @@
+# In Statement
+
+You can use an `in` statement to check if a value is available within a `sequence` or a string of characters. A `sequence` needs to be some value that can be iterated over like a range of numbers. If the value is in the `sequence` then then the statement will return `True` and if it is not then it will return `False`.
+
+
+You can also use an `in` statement with a dict or set. When used with a dict it will search for a value in the dict's keys.
+Note: When used in a `for` loop the `in` keyword functions differently. Please see [For Loop](docs/scripting/for.md) to learn about how to use the `in` keyword for those.
+
+## Syntax
+
+An `in` statement looks like this:
+
+`variable_name = variable_name_or_value in sequence`
+
+`variable_name` can be any name you choose and will be given the value of `True` or `False`
+
+Or:
+
+`if variable_name_or_value in sequence:
+ # code block`
+
+Or:
+
+`while variable_name_or_value in sequence:
+ # code block`
+
+`variable_name_or_value` can be any variable you want or any value you want. `sequence` must be one of the things listed below, or a string of characters. An `if` or `while` code block will run if the value is in the provided sequence.
+
+## 序列
+
+[範圍](functions/range) [元組](docs/scripting/tuples.md) [串列](docs/scripting/lists.md) [字典](docs/scripting/dicts.md) [集合](docs/scripting/sets.md)
+
+## Example - 2x2 Square of Bushes
+
+`clear()
+for x in range(get_world_size()):
+for y in range(get_world_size()):
+
+ if x in (0, 1) and y in (0, 1):
+ plant(Entities.Bush)
+
+ move(North)
+ move(East)`
+
+This will plant a square of `Entities.Bush` in a 2x2 square starting at the origin (0, 0) of the world leaving the rest untouched.
+
+
+## Example - Tilling
+
+`desired_entity = Entities.Carrot
+entities_needing_soil = (Entities.Pumpkin, Entities.Carrot)
+
+if desired_entity in entities_needing_soil:
+if get_ground_type() != Grounds.Soil:
+till()`
+
+This will check if the `desired_entity` is in the `tuple` `entities_needing_soil` so that the drone can know if it needs to check if the current ground type is `Grounds.Soil`. If it is not then it will call the `till` function to change the ground type.
diff --git a/UA/docs/home.md b/UA/docs/home.md
index 388f91c3..d212f222 100644
--- a/UA/docs/home.md
+++ b/UA/docs/home.md
@@ -2,7 +2,7 @@
[Зовнішній редактор](docs/external_editor.md) [Перший код](docs/first_program.md) [Початок роботи](docs/getting_started.md) [Завантаження копій](docs/backup.md) [Вивід](docs/output.md) [Статистика](docs/stats.md) [Титри](docs/credits.md)
## {{@table_of_contents_section_programming}}
-[Break](docs/scripting/break.md) [Налагодження](docs/scripting/debug.md) [Коментарі](docs/scripting/comments.md) [Continue](docs/scripting/continue.md) [Словники](docs/scripting/dicts.md) [Цикл for](docs/scripting/for.md) [Функції](docs/scripting/functions.md) [If](docs/scripting/if.md) [Імпорт](docs/scripting/import.md) [Списки](docs/scripting/lists.md) [Оператори](docs/scripting/operators.md) [Області видимості імен](docs/scripting/scopes.md) [Множини](docs/scripting/sets.md) [Кортежі (tuple)](docs/scripting/tuples.md) [Змінні](docs/scripting/variables.md) [Цикл while](docs/scripting/while.md)
+[Break](docs/scripting/break.md) [Налагодження](docs/scripting/debug.md) [Коментарі](docs/scripting/comments.md) [Continue](docs/scripting/continue.md) [Словники](docs/scripting/dicts.md) [Цикл for](docs/scripting/for.md) [Функції](docs/scripting/functions.md) [If](docs/scripting/if.md) [In](docs/scripting/in.md) [Імпорт](docs/scripting/import.md) [Списки](docs/scripting/lists.md) [Оператори](docs/scripting/operators.md) [Області видимості імен](docs/scripting/scopes.md) [Множини](docs/scripting/sets.md) [Кортежі (tuple)](docs/scripting/tuples.md) [Змінні](docs/scripting/variables.md) [Цикл while](docs/scripting/while.md)
## {{@table_of_contents_section_unlocks}}
{{unlocksTOC}}
diff --git a/UA/docs/scripting/for.md b/UA/docs/scripting/for.md
index 64854184..dfa2c274 100644
--- a/UA/docs/scripting/for.md
+++ b/UA/docs/scripting/for.md
@@ -15,7 +15,7 @@
`variable_name` може бути будь-яким ім'ям, яке ви оберете. Це змінна, яка зберігає поточний елемент послідовності. `sequence` має бути значенням, яке можна перебирати, наприклад, діапазоном чисел. Блок коду виконується для кожного елемента, при цьому змінна циклу отримує значення цього елемента.
## Послідовності
-[Діапазони](functions/range) [Списки](docs/scripting/lists.md) [Кортежі](docs/scripting/tuples.md) [Словники](docs/scripting/dicts.md) [Множини](docs/scripting/sets.md)
+[Діапазони](functions/range) [Кортежі](docs/scripting/tuples.md) [Списки](docs/scripting/lists.md) [Словники](docs/scripting/dicts.md) [Множини](docs/scripting/sets.md)
## Приклад
`for i in range(5):
diff --git a/UA/docs/scripting/in.md b/UA/docs/scripting/in.md
new file mode 100644
index 00000000..bf7859de
--- /dev/null
+++ b/UA/docs/scripting/in.md
@@ -0,0 +1,57 @@
+# In Statement
+
+You can use an `in` statement to check if a value is available within a `sequence` or a string of characters. A `sequence` needs to be some value that can be iterated over like a range of numbers. If the value is in the `sequence` then then the statement will return `True` and if it is not then it will return `False`.
+
+
+You can also use an `in` statement with a dict or set. When used with a dict it will search for a value in the dict's keys.
+Note: When used in a `for` loop the `in` keyword functions differently. Please see [For Loop](docs/scripting/for.md) to learn about how to use the `in` keyword for those.
+
+## Syntax
+
+An `in` statement looks like this:
+
+`variable_name = variable_name_or_value in sequence`
+
+`variable_name` can be any name you choose and will be given the value of `True` or `False`
+
+Or:
+
+`if variable_name_or_value in sequence:
+ # code block`
+
+Or:
+
+`while variable_name_or_value in sequence:
+ # code block`
+
+`variable_name_or_value` can be any variable you want or any value you want. `sequence` must be one of the things listed below, or a string of characters. An `if` or `while` code block will run if the value is in the provided sequence.
+
+## Послідовності
+
+[Діапазони](functions/range) [Кортежі](docs/scripting/tuples.md) [Списки](docs/scripting/lists.md) [Словники](docs/scripting/dicts.md) [Множини](docs/scripting/sets.md)
+
+## Example - 2x2 Square of Bushes
+
+`clear()
+for x in range(get_world_size()):
+for y in range(get_world_size()):
+
+ if x in (0, 1) and y in (0, 1):
+ plant(Entities.Bush)
+
+ move(North)
+ move(East)`
+
+This will plant a square of `Entities.Bush` in a 2x2 square starting at the origin (0, 0) of the world leaving the rest untouched.
+
+
+## Example - Tilling
+
+`desired_entity = Entities.Carrot
+entities_needing_soil = (Entities.Pumpkin, Entities.Carrot)
+
+if desired_entity in entities_needing_soil:
+if get_ground_type() != Grounds.Soil:
+till()`
+
+This will check if the `desired_entity` is in the `tuple` `entities_needing_soil` so that the drone can know if it needs to check if the current ground type is `Grounds.Soil`. If it is not then it will call the `till` function to change the ground type.
diff --git a/ZH/docs/home.md b/ZH/docs/home.md
index 40e5f6c3..d82d8bf7 100644
--- a/ZH/docs/home.md
+++ b/ZH/docs/home.md
@@ -2,7 +2,7 @@
[外部编辑器](docs/external_editor.md) [第一个程序](docs/first_program.md) [入门指南](docs/getting_started.md) [加载备份](docs/backup.md) [Output](docs/output.md) [统计数据](docs/stats.md) [制作人员](docs/credits.md)
## {{@table_of_contents_section_programming}}
-[Break 语句](docs/scripting/break.md) [调试](docs/scripting/debug.md) [注释](docs/scripting/comments.md) [Continue 语句](docs/scripting/continue.md) [字典](docs/scripting/dicts.md) [For 循环](docs/scripting/for.md) [函数](docs/scripting/functions.md) [If 语句](docs/scripting/if.md) [导入](docs/scripting/import.md) [列表](docs/scripting/lists.md) [运算符](docs/scripting/operators.md) [命名作用域](docs/scripting/scopes.md) [集合](docs/scripting/sets.md) [元组](docs/scripting/tuples.md) [变量](docs/scripting/variables.md) [While 循环](docs/scripting/while.md)
+[Break 语句](docs/scripting/break.md) [调试](docs/scripting/debug.md) [注释](docs/scripting/comments.md) [Continue 语句](docs/scripting/continue.md) [字典](docs/scripting/dicts.md) [For 循环](docs/scripting/for.md) [函数](docs/scripting/functions.md) [If 语句](docs/scripting/if.md) [导入](docs/scripting/import.md) [In](docs/scripting/in.md) [列表](docs/scripting/lists.md) [运算符](docs/scripting/operators.md) [命名作用域](docs/scripting/scopes.md) [集合](docs/scripting/sets.md) [元组](docs/scripting/tuples.md) [变量](docs/scripting/variables.md) [While 循环](docs/scripting/while.md)
## {{@table_of_contents_section_unlocks}}
{{unlocksTOC}}
diff --git a/ZH/docs/scripting/for.md b/ZH/docs/scripting/for.md
index ca39d265..37e4ade5 100644
--- a/ZH/docs/scripting/for.md
+++ b/ZH/docs/scripting/for.md
@@ -15,7 +15,7 @@ for 循环语句的格式如下:
`variable_name` 是你自定义变量的名称,它是存储序列中的某个元素。`sequence` 是存储序列,存放多个元素,比如一个数字范围。每当 1 个元素被存储序列遍历 1 次,循环体就会运行 1 次。
## 存储序列
-[范围](functions/range) [列表](docs/scripting/lists.md) [元组](docs/scripting/tuples.md) [字典](docs/scripting/dicts.md) [集合](docs/scripting/sets.md)
+[范围](functions/range) [元组](docs/scripting/tuples.md) [列表](docs/scripting/lists.md) [字典](docs/scripting/dicts.md) [集合](docs/scripting/sets.md)
## 示例
`for i in range(5):
diff --git a/ZH/docs/scripting/in.md b/ZH/docs/scripting/in.md
new file mode 100644
index 00000000..5ba00b0d
--- /dev/null
+++ b/ZH/docs/scripting/in.md
@@ -0,0 +1,57 @@
+# In Statement
+
+You can use an `in` statement to check if a value is available within a `sequence` or a string of characters. A `sequence` needs to be some value that can be iterated over like a range of numbers. If the value is in the `sequence` then then the statement will return `True` and if it is not then it will return `False`.
+
+
+You can also use an `in` statement with a dict or set. When used with a dict it will search for a value in the dict's keys.
+Note: When used in a `for` loop the `in` keyword functions differently. Please see [For Loop](docs/scripting/for.md) to learn about how to use the `in` keyword for those.
+
+## Syntax
+
+An `in` statement looks like this:
+
+`variable_name = variable_name_or_value in sequence`
+
+`variable_name` can be any name you choose and will be given the value of `True` or `False`
+
+Or:
+
+`if variable_name_or_value in sequence:
+ # code block`
+
+Or:
+
+`while variable_name_or_value in sequence:
+ # code block`
+
+`variable_name_or_value` can be any variable you want or any value you want. `sequence` must be one of the things listed below, or a string of characters. An `if` or `while` code block will run if the value is in the provided sequence.
+
+## 存储序列
+
+[范围](functions/range) [元组](docs/scripting/tuples.md) [列表](docs/scripting/lists.md) [字典](docs/scripting/dicts.md) [集合](docs/scripting/sets.md)
+
+## Example - 2x2 Square of Bushes
+
+`clear()
+for x in range(get_world_size()):
+for y in range(get_world_size()):
+
+ if x in (0, 1) and y in (0, 1):
+ plant(Entities.Bush)
+
+ move(North)
+ move(East)`
+
+This will plant a square of `Entities.Bush` in a 2x2 square starting at the origin (0, 0) of the world leaving the rest untouched.
+
+
+## Example - Tilling
+
+`desired_entity = Entities.Carrot
+entities_needing_soil = (Entities.Pumpkin, Entities.Carrot)
+
+if desired_entity in entities_needing_soil:
+if get_ground_type() != Grounds.Soil:
+till()`
+
+This will check if the `desired_entity` is in the `tuple` `entities_needing_soil` so that the drone can know if it needs to check if the current ground type is `Grounds.Soil`. If it is not then it will call the `till` function to change the ground type.