Player Documentation
This page explains how to play and program a robot in Learn From Scraps without reading the project source code.
Core Idea
Each robot has a script. At the start of its turn, the engine executes the entry function my_turn, or one of its localized aliases. Actions called from the script spend action points, move the robot, attack, heal, read the map, or modify terrain.
Minimal example:
my_turn {
say("Ready")
move_forward()
sword_swing()
}
Turn Flow
- The robot starts its turn with available action points.
- Actions run in script order.
- Some actions become more expensive when repeated during the same turn, such as
move_forward, move_backward, jump, and dash. - If an action cannot fully apply, the engine may still spend AP and log a gameplay warning depending on the action.
- Getters such as
get_pos_x() or scan_tile(x, y) are not combat actions. They read game state.
Map and Tiles
Maps use short tile codes:
| Code | Meaning | General Effect |
|---|
FL | Floor | Normal walkable tile. |
WL | Wall | Destructible wall depending on the action. |
IW | Indestructible Wall | Blocking and non-destructible wall. |
HO | Hole | Hazard or blocker depending on the action. |
SP | Spikes | Trap/spike tile that damages robots landing on it. |
WA | Water | Currently treated as an obstacle by perception. |
Programming Your Robot
Use my_turn as the entry point:
my_turn {
if (scan_tile(1, 0) = "enemy") {
sword_swing()
} else {
move_forward()
}
}
You can define helper functions:
def attack_if_close {
if (scan_tile(1, 0) = "enemy") {
sword_swing()
}
}
my_turn {
attack_if_close()
}
Reading the Environment
Perception blocks help scripts make decisions:
get_pos_x() and get_pos_y() return your position.scan_tile(x, y) returns empty, ally, enemy, obstacle, or out_of_bounds.is_tile_empty(x, y) returns whether a tile can be considered empty.get_tile_type(x, y) returns a tile code such as FL or WL.get_tile_occupant_type(x, y) returns ally, enemy, unknown_entity, none, obstacle, or out_of_bounds.get_tile_occupant_id(x, y) returns the visible occupant id, or an empty string.get_entity_x(id), get_entity_y(id), get_entity_health(id), is_entity_alive(id), and get_entity_team(id) read a known entity.
Main Actions
- Movement:
move_forward, move_backward, turn, face_north, face_south, face_east, face_west, jump, dash. - Offense:
sword_swing, spear, kick, pistol, grenade, bazooka, lighter, fire_wave, tazer, lazer, ultra_lazer. - Support:
heal, cooling_system, repair_system, say. - Terrain:
place_trap, dig.
Localized Aliases
English action names remain the default examples in this page. The backend also accepts ASCII French and Spanish aliases for player scripts:
- French examples:
mon_tour, fonction, repeter, tourner, avancer, reculer, regarder_nord, charger, lancer_grenade, soigner, creuser, dire. - Spanish examples:
mi_turno, funcion, repetir, girar, avanzar, retroceder, mirar_norte, embestir, lanzar_granada, curar, cavar, decir.
The full reference is available in Blocks Reference.
Status Effects
overheat deals damage over several turns and can be removed with cooling_system().short-circuit reduces AP and can be removed with repair_system().
Tips
- Use
say("message") to visually debug a strategy. - Start with short scripts.
- Read the map with getters before taking risky actions.
- Keep enough AP to reposition after an attack.
- Area and projectile actions can affect multiple cells depending on their pattern.
Documentation Joueur
Cette page explique comment jouer et programmer un robot dans Learn From Scraps sans devoir lire le code du projet.
Principe
Chaque robot possede un script. Au debut de son tour, le moteur execute la fonction d'entree my_turn, ou son alias localise mon_tour. Les actions appelees dans ce script consomment des points d'action, modifient la position du robot, attaquent, soignent, lisent la carte ou changent le terrain.
Exemple minimal :
my_turn {
say("Ready")
move_forward()
sword_swing()
}
Tour de jeu
- Le robot commence son tour avec ses points d'action disponibles.
- Les actions sont executees dans l'ordre du script.
- Certaines actions coutent plus cher si elles sont repetees dans le meme tour, par exemple
move_forward, move_backward, jump et dash. - Si une action est impossible, le moteur peut depenser les AP puis journaliser un avertissement de gameplay selon l'action.
- Les getters comme
get_pos_x() ou scan_tile(x, y) ne sont pas des actions de combat : ils servent a lire l'etat du jeu.
Carte et tuiles
Les cartes utilisent des codes courts :
| Code | Sens | Effet general |
|---|
FL | Floor | Tuile normale praticable. |
WL | Wall | Mur destructible selon les actions. |
IW | Indestructible Wall | Mur infranchissable et non destructible. |
HO | Hole | Trou, dangereux ou bloquant selon l'action. |
SP | Spikes | Pieges/pics, infligent des degats quand un robot arrive dessus. |
WA | Water | Eau, traitee comme obstacle par la perception actuelle. |
Programmer son robot
Utilisez my_turn comme point d'entree :
my_turn {
if (scan_tile(1, 0) = "enemy") {
sword_swing()
} else {
move_forward()
}
}
Vous pouvez creer des fonctions :
def attack_if_close {
if (scan_tile(1, 0) = "enemy") {
sword_swing()
}
}
my_turn {
attack_if_close()
}
Lire l'environnement
Les blocs de perception permettent de prendre des decisions :
get_pos_x() et get_pos_y() donnent votre position.scan_tile(x, y) renvoie empty, ally, enemy, obstacle ou out_of_bounds.is_tile_empty(x, y) indique si une tuile peut etre consideree vide.get_tile_type(x, y) renvoie le code de tuile comme FL ou WL.get_tile_occupant_type(x, y) renvoie ally, enemy, unknown_entity, none, obstacle ou out_of_bounds.get_tile_occupant_id(x, y) renvoie l'id visible de l'occupant, ou une chaine vide.get_entity_x(id), get_entity_y(id), get_entity_health(id), is_entity_alive(id) et get_entity_team(id) lisent une entite connue.
Actions principales
- Mouvement :
move_forward, move_backward, turn, face_north, face_south, face_east, face_west, jump, dash. - Attaque :
sword_swing, spear, kick, pistol, grenade, bazooka, lighter, fire_wave, tazer, lazer, ultra_lazer. - Support :
heal, cooling_system, repair_system, say. - Terrain :
place_trap, dig.
Alias localises
Les exemples historiques de cette page gardent les noms d'action anglais, mais le backend accepte aussi des alias ASCII pour les scripts de joueurs :
- Francais :
mon_tour, fonction, repeter, tourner, avancer, reculer, regarder_nord, charger, lancer_grenade, soigner, creuser, dire. - Espagnol :
mi_turno, funcion, repetir, girar, avanzar, retroceder, mirar_norte, embestir, lanzar_granada, curar, cavar, decir.
La reference complete est dans Reference Blocs.
Effets de statut
overheat inflige des degats pendant plusieurs tours et peut etre retire avec cooling_system().short-circuit reduit les AP et peut etre retire avec repair_system().
Conseils
- Utilisez
say("message") pour deboguer visuellement une strategie. - Testez d'abord des scripts courts.
- Lisez la carte avec les getters avant de lancer une action risquee.
- Gardez assez d'AP pour vous repositionner apres une attaque.
- Les actions a zone ou projectile peuvent toucher plusieurs cases selon leur pattern.
Documentacion Jugador
Esta pagina explica como jugar y programar un robot en Learn From Scraps sin leer el codigo fuente del proyecto.
Idea principal
Cada robot tiene un script. Al inicio de su turno, el motor ejecuta la funcion de entrada mi_turno, o uno de sus alias localizados. Las acciones llamadas desde el script gastan puntos de accion, mueven el robot, atacan, curan, leen el mapa o modifican el terreno.
Ejemplo minimo:
funcion mi_turno {
decir("Listo")
avanzar()
golpe_espada()
}
Flujo del turno
- El robot empieza su turno con puntos de accion disponibles.
- Las acciones se ejecutan en el orden del script.
- Algunas acciones cuestan mas si se repiten durante el mismo turno, como
avanzar, retroceder, saltar y embestir. - Si una accion no puede aplicarse por completo, el motor puede gastar AP y registrar una advertencia de gameplay segun la accion.
- Los getters como
get_pos_x() o scan_tile(x, y) no son acciones de combate. Sirven para leer el estado del juego.
Mapa y casillas
Los mapas usan codigos cortos:
| Codigo | Significado | Efecto general |
|---|
FL | Suelo | Casilla normal transitable. |
WL | Muro | Muro destructible segun la accion. |
IW | Muro indestructible | Muro bloqueante y no destructible. |
HO | Agujero | Peligro o bloqueo segun la accion. |
SP | Pinchos | Trampa que dana a los robots que caen encima. |
WA | Agua | Actualmente se trata como obstaculo por la percepcion. |
Programar tu robot
Usa mi_turno como punto de entrada:
funcion mi_turno {
si (scan_tile(1, 0) = "enemy") {
golpe_espada()
} sino {
avanzar()
}
}
Puedes crear funciones auxiliares:
funcion atacar_si_cerca {
si (scan_tile(1, 0) = "enemy") {
golpe_espada()
}
}
funcion mi_turno {
atacar_si_cerca()
}
Leer el entorno
Los bloques de percepcion ayudan a tomar decisiones:
get_pos_x() y get_pos_y() devuelven tu posicion.scan_tile(x, y) devuelve empty, ally, enemy, obstacle o out_of_bounds.is_tile_empty(x, y) indica si una casilla puede considerarse vacia.get_tile_type(x, y) devuelve un codigo de casilla como FL o WL.get_tile_occupant_type(x, y) devuelve ally, enemy, unknown_entity, none, obstacle o out_of_bounds.get_tile_occupant_id(x, y) devuelve el id visible del ocupante, o una cadena vacia.get_entity_x(id), get_entity_y(id), get_entity_health(id), is_entity_alive(id) y get_entity_team(id) leen una entidad conocida.
Acciones principales
- Movimiento:
avanzar, retroceder, girar, mirar_norte, mirar_sur, mirar_este, mirar_oeste, saltar, embestir. - Ataque:
golpe_espada, lanza, patear, pistola, granada, lanzar_granada, bazuca, encendedor, ola_de_fuego, taser, laser, ultra_laser. - Soporte:
curar, sistema_de_enfriamiento, sistema_de_reparacion, decir. - Terreno:
poner_trampa, cavar.
Los nombres de acciones en ingles tambien siguen funcionando. La referencia completa esta disponible en Reference Blocs.
Efectos de estado
overheat causa dano durante varios turnos y puede retirarse con sistema_de_enfriamiento().short-circuit reduce los AP y puede retirarse con sistema_de_reparacion().
Consejos
- Usa
decir("mensaje") para depurar visualmente una estrategia. - Empieza con scripts cortos.
- Lee el mapa con getters antes de tomar acciones arriesgadas.
- Guarda suficientes AP para reposicionarte despues de un ataque.
- Las acciones de area o proyectil pueden afectar varias casillas segun su patron.
LiteralScraps Guide
LiteralScraps is the scripting language executed by the engine. Its current grammar is defined in backend/LFS.Scripting/Grammar/LiteralScraps.g4.
Entry Point
A script must contain exactly one entry function:
my_turn {
move_forward()
}
Accepted entry aliases:
my_turnmon_tourmein_zugmi_turnominha_vez
Functions
Functions can be declared with def, function, definir, définir, fonction, funktion, funcion, función, or função.
def step_twice {
move_forward()
move_forward()
}
my_turn {
step_twice()
}
Functions can receive parameters:
def speak(message) {
say(message)
}
my_turn {
speak("Hello")
}
Variables
A variable is created or replaced with =.
my_turn {
x = get_pos_x()
y = get_pos_y()
say("Position checked")
}
Conditions
Accepted keywords include if, si, wenn and else, sinon, sonst, sino, senão.
my_turn {
if (scan_tile(1, 0) = "enemy") {
sword_swing()
} else {
move_forward()
}
}
Loops
repeat repeats a block a fixed number of times.
my_turn {
repeat(2) {
move_forward()
}
}
while repeats while a condition remains true.
my_turn {
while (get_pos_x() < 3) {
move_forward()
}
}
Loop aliases:
repeat, repeter, répéter, wiederhole, repetirwhile, tantque, solange, mientras, enquanto
Return Values
return, retourne, retour, zurück, devuelve, and retorna return a value.
def enemy_ahead {
return scan_tile(1, 0) = "enemy"
}
Expressions
LiteralScraps supports:
- integer or decimal numbers
- double-quoted strings
- variables
- function calls
- parentheses
- operations
+, -, *, / - comparisons
>, <, =, !=, >=, <= - boolean logic with
& and |
Common Errors
- More than one entry function in the same script.
- Calling an unknown action.
- Calling a getter with the wrong number of arguments.
- Calling
say() without a message. - Calling
grenade with one argument: it accepts grenade() or grenade(x, y). - Using
for syntax: the token exists in the grammar, but the current parser does not expose a for statement rule.
Guide LiteralScraps
LiteralScraps est le langage de script execute par le moteur. Sa grammaire actuelle est definie dans backend/LFS.Scripting/Grammar/LiteralScraps.g4.
Point d'entree
Un script doit contenir une seule fonction d'entree :
my_turn {
move_forward()
}
Aliases d'entree acceptes :
my_turnmon_tourmein_zugmi_turnominha_vez
Fonctions
Les fonctions peuvent etre declarees avec def, function, definir, définir, fonction, funktion, funcion, función ou função.
def step_twice {
move_forward()
move_forward()
}
my_turn {
step_twice()
}
Les fonctions peuvent recevoir des parametres :
def speak(message) {
say(message)
}
my_turn {
speak("Hello")
}
Variables
Une variable est creee ou remplacee avec =.
my_turn {
x = get_pos_x()
y = get_pos_y()
say("Position checked")
}
Conditions
Les mots-cles reconnus sont if, si, wenn et else, sinon, sonst, sino, senão.
my_turn {
if (scan_tile(1, 0) = "enemy") {
sword_swing()
} else {
move_forward()
}
}
Boucles
repeat repete un bloc un nombre fixe de fois.
my_turn {
repeat(2) {
move_forward()
}
}
while repete tant qu'une condition reste vraie.
my_turn {
while (get_pos_x() < 3) {
move_forward()
}
}
Aliases de boucle :
repeat, repeter, répéter, wiederhole, repetirwhile, tantque, solange, mientras, enquanto
Retour de fonction
return, retourne, retour, zurück, devuelve et retorna renvoient une valeur.
def enemy_ahead {
return scan_tile(1, 0) = "enemy"
}
Expressions
LiteralScraps accepte :
- nombres entiers ou decimaux
- chaines entre guillemets doubles
- variables
- appels de fonctions
- parentheses
- operations
+, -, *, / - comparaisons
>, <, =, !=, >=, <= - logique booleenne avec
& et |
Erreurs frequentes
- Plus d'une fonction d'entree dans le meme script.
- Appeler une action inconnue.
- Appeler un getter avec le mauvais nombre d'arguments.
- Appeler
say() sans message. - Appeler
grenade avec un seul argument : elle accepte grenade() ou grenade(x, y). - Utiliser une syntaxe
for : le token existe dans la grammaire, mais la regle for n'est pas active dans le parser actuel.
Guide LiteralScraps
LiteralScraps es el lenguaje de script ejecutado por el motor. Su gramatica actual esta definida en backend/LFS.Scripting/Grammar/LiteralScraps.g4.
Punto de entrada
Un script debe contener exactamente una funcion de entrada:
mi_turno {
avanzar()
}
Aliases de entrada aceptados:
my_turnmon_tourmein_zugmi_turnominha_vez
Funciones
Las funciones se pueden declarar con def, function, definir, définir, fonction, funktion, funcion, función o função.
funcion avanzar_dos_veces {
avanzar()
avanzar()
}
mi_turno {
avanzar_dos_veces()
}
Las funciones pueden recibir parametros:
funcion hablar(mensaje) {
decir(mensaje)
}
mi_turno {
hablar("Hola")
}
Variables
Una variable se crea o se reemplaza con =.
mi_turno {
x = get_pos_x()
y = get_pos_y()
decir("Posicion revisada")
}
Condiciones
Las palabras clave aceptadas incluyen if, si, wenn y else, sinon, sonst, sino, senão.
mi_turno {
si (scan_tile(1, 0) = "enemy") {
golpe_espada()
} sino {
avanzar()
}
}
Bucles
repeat y repetir repiten un bloque un numero fijo de veces.
mi_turno {
repetir(2) {
avanzar()
}
}
while y mientras repiten mientras la condicion sigue siendo verdadera.
mi_turno {
mientras (get_pos_x() < 3) {
avanzar()
}
}
Aliases de bucles:
repeat, repeter, répéter, wiederhole, repetirwhile, tantque, solange, mientras, enquanto
Valores de retorno
return, retourne, retour, zurück, devuelve y retorna devuelven un valor.
funcion enemigo_delante {
devuelve scan_tile(1, 0) = "enemy"
}
Expresiones
LiteralScraps soporta:
- numeros enteros o decimales
- cadenas entre comillas dobles
- variables
- llamadas a funciones
- parentesis
- operaciones
+, -, *, / - comparaciones
>, <, =, !=, >=, <= - logica booleana con
& y |
Errores comunes
- Mas de una funcion de entrada en el mismo script.
- Llamar a una accion desconocida.
- Llamar a un getter con un numero incorrecto de argumentos.
- Llamar a
decir() o say() sin mensaje. - Llamar a
grenade con un argumento: acepta grenade() o grenade(x, y). - Usar sintaxis
for: el token existe en la gramatica, pero el parser actual no expone una regla de sentencia for.
Blocks Reference
This reference describes the blocks currently supported by the backend. It is based on the LiteralScraps grammar, perception builtins, and configs_json/GameConfig.json.
Image placeholders show where visuals can be added later. They are plain text instead of Markdown image links so missing files do not render as broken images.
Language Blocks
| Block | Syntax | Usage | Image placeholder |
|---|
| Turn entry | my_turn { ... } or mon_tour { ... } | Entry point executed at the start of the robot turn. Only one entry is allowed per script. | assets/images/blocks/language/my-turn.png |
| Function | def name { ... } / function name { ... } / définir name { ... } | Isolates reusable logic. Can receive parameters. | assets/images/blocks/language/function.png |
| Call | name() or name(arg1, arg2) | Calls a user function, getter, or action. | assets/images/blocks/language/function-call.png |
| Variable | name = expression | Stores a temporary value during script execution. | assets/images/blocks/language/variable-set.png |
| Condition | if (condition) { ... } else { ... } | Runs a block depending on a condition. Aliases: if, si, wenn; else, sinon, sonst, sino, senão. | assets/images/blocks/language/if-else.png |
| Repeat | repeat(3) { ... } | Repeats a block a fixed number of times. Aliases: repeat, répéter, wiederhole, repetir. | assets/images/blocks/language/repeat.png |
| While | while (get_pos_x() < 3) { ... } | Repeats a block while the condition remains true. Aliases: while, tantque, solange, mientras, enquanto. | assets/images/blocks/language/while.png |
| Return | return expression | Returns a value from a function. Aliases: return, retourne, retour, zurück, devuelve, retorna. | assets/images/blocks/language/return.png |
| Operations | a + b, a - b, a * b, a / b | Computes a numeric expression. | assets/images/blocks/language/operators.png |
| Comparisons | >, <, =, !=, >=, <= | Compares two expressions. | assets/images/blocks/language/comparators.png |
| Logic | condition & condition, condition | condition | Combines boolean conditions. | assets/images/blocks/language/boolean-logic.png |
Getters and Perception
| Getter | Syntax | Return / usage | Image placeholder |
|---|
| Position X | get_pos_x() | Current robot X coordinate. | assets/images/blocks/getters/get-pos-x.png |
| Position Y | get_pos_y() | Current robot Y coordinate. | assets/images/blocks/getters/get-pos-y.png |
| Scan tile | scan_tile(x, y) | Returns empty, ally, enemy, obstacle, or out_of_bounds; also records tile knowledge. | assets/images/blocks/getters/scan-tile.png |
| Is tile empty | is_tile_empty(x, y) | Returns whether the tile is readable, not an obstacle, and has no living entity. | assets/images/blocks/getters/is-tile-empty.png |
| Tile type | get_tile_type(x, y) | Returns a tile code such as FL, WL, IW, HO, SP, WA, or an empty string if unknown. | assets/images/blocks/getters/get-tile-type.png |
| Occupant type | get_tile_occupant_type(x, y) | Returns ally, enemy, unknown_entity, none, obstacle, or out_of_bounds. | assets/images/blocks/getters/get-tile-occupant-type.png |
| Occupant id | get_tile_occupant_id(x, y) | Returns the visible occupant id, or an empty string. | assets/images/blocks/getters/get-tile-occupant-id.png |
| Entity X | get_entity_x("id") | Returns X for a known entity, otherwise -1. | assets/images/blocks/getters/get-entity-x.png |
| Entity Y | get_entity_y("id") | Returns Y for a known entity, otherwise -1. | assets/images/blocks/getters/get-entity-y.png |
| Entity health | get_entity_health("id") | Returns known HP, otherwise -1. | assets/images/blocks/getters/get-entity-health.png |
| Entity alive | is_entity_alive("id") | Returns whether the known entity is alive. | assets/images/blocks/getters/is-entity-alive.png |
| Entity team | get_entity_team("id") | Returns the known team index, otherwise -1. | assets/images/blocks/getters/get-entity-team.png |
Movement Actions
| Action | Script aliases | AP cost | Usage / limits | Image placeholder |
|---|
| Turn | turn, tourner | 0 | turn(degrees) rotates the robot. Without an argument, runtime defaults to 90 degrees. | assets/images/blocks/movement/turn.png |
| Face North | face_north | 0 | Faces north. | assets/images/blocks/movement/face-north.png |
| Face South | face_south | 0 | Faces south. | assets/images/blocks/movement/face-south.png |
| Face East | face_east | 0 | Faces east. | assets/images/blocks/movement/face-east.png |
| Face West | face_west | 0 | Faces west. | assets/images/blocks/movement/face-west.png |
| Move Forward | move_forward, avancer | baseCost + usageCount, base 1 | Moves forward one tile. Numeric arguments can modify step count. | assets/images/blocks/movement/move-forward.png |
| Move Backward | move_backward, reculer | baseCost + usageCount, base 1 | Moves backward one tile. Numeric arguments can modify step count. | assets/images/blocks/movement/move-backward.png |
| Jump | jump, sauter | previousCost + usageCount, base 2 | Jumps two tiles with the path-forward pattern. | assets/images/blocks/movement/jump.png |
| Dash | dash, precipitation | previousCost + usageCount * 2, base 2 | Dashes up to three tiles, deals 3 collision damage through line-contact. | assets/images/blocks/movement/dash.png |
Offensive Actions
| Action | Script aliases | AP cost | Usage / limits | Image placeholder |
|---|
| Sword Swing | sword_swing, coup_d_epee | 1 | Front melee arc, 10 damage. | assets/images/blocks/offense/sword-swing.png |
| Spear | spear, lance | 2 | Contact line up to 2 cells, 9 damage. | assets/images/blocks/offense/spear.png |
| Kick | kick, coup_de_pied | 2 | Front melee cell, 7 damage, pushes 3 tiles with wall/hole bonuses. | assets/images/blocks/offense/kick.png |
| Pistol | pistol, pistolet | 2 | Line projectile up to 8 cells, 6 damage, blocked by WL, IW, SHIELD. | assets/images/blocks/offense/pistol.png |
| Grenade | grenade | 4 | grenade() defaults 5 cells forward; grenade(x, y) targets coordinates. Radius 1 explosion, 12 damage, can hit user and destroy walls. | assets/images/blocks/offense/grenade.png |
| Bazooka | bazooka, lance_roquettes | 5 | Projectile up to 10 cells, 20 damage, destroys destructible walls, can hit user. | assets/images/blocks/offense/bazooka.png |
| Lighter | lighter, briquet | 3 | Front melee, applies overheat at 100%, no direct damage. | assets/images/blocks/offense/lighter.png |
| Fire Wave | fire_wave, vague_de_feu | 4 | Radius 1 ring around the robot, 10 damage, overheat at 35%. | assets/images/blocks/offense/fire-wave.png |
| Tazer | tazer, taser | 2 | Front melee, 12 damage, short-circuit at 35%. | assets/images/blocks/offense/tazer.png |
| Lazer | lazer, laser | 4 | Laser line up to 10 cells, pierces enemies, 12 damage, short-circuit at 35%, blocked by walls. | assets/images/blocks/offense/lazer.png |
| Ultra Lazer | ultra_lazer, ultra_laser | 7 | Laser line up to 12 cells, 25 damage, pierces enemies and walls, short-circuit at 100%, once per turn. | assets/images/blocks/offense/ultra-lazer.png |
Support and Terrain
| Action | Script aliases | AP cost | Usage / limits | Image placeholder |
|---|
| Place Trap | place_trap, poser_piege | 4 | Places spikes on the empty FL tile in front of the robot; trap damage 4. | assets/images/blocks/terrain/place-trap.png |
| Heal | heal, soigner | 2 | Heals 6 HP, capped at max HP; logs a warning if already full life. | assets/images/blocks/support/heal.png |
| Cooling System | cooling_system, systeme_de_refroidissement | 3 | Removes overheat; if missing, spends AP and logs a warning. | assets/images/blocks/support/cooling-system.png |
| Repair System | repair_system, systeme_de_reparation | 3 | Removes short-circuit; if missing, spends AP and logs a warning. | assets/images/blocks/support/repair-system.png |
| Dig | dig, creuser | 2 | Targets the front tile; changes WL -> FL or FL -> HO; IW, SP, WA, HO, out-of-bounds, and occupied targets log a warning. | assets/images/blocks/terrain/dig.png |
| Say | say, dire | 0 | say("message") displays/logs a message. Requires exactly one argument. | assets/images/blocks/support/say.png |
Effects
| Effect | Current source | Behavior |
|---|
overheat | lighter, fire_wave | Deals 10 damage per turn for 3 turns; removed by cooling_system. |
short-circuit | tazer, lazer, ultra_lazer | Reduces AP by 20% for 2 turns; removed by repair_system. |
Important Rules
- Non-throwable actions do not accept target coordinates.
- Throwable actions with the
throw-point pattern, currently grenade, accept 0 or 2 arguments. - Ally damage depends on
combatOptions.friendlyFire; self-hit depends on action parameters. - Getters are logged as information, not as actions.
Reference Blocs
Cette reference decrit les blocs actuellement supportes par le backend. Elle est basee sur la grammaire LiteralScraps, les builtins de perception et configs_json/GameConfig.json.
Les placeholders d'image indiquent ou ajouter les visuels plus tard. Ils ne sont pas des liens Markdown afin d'eviter les images cassees.
Blocs de langage
| Bloc | Syntaxe | Usage | Placeholder image |
|---|
| Entree de tour | my_turn { ... } ou mon_tour { ... } | Point d'entree execute au debut du tour du robot. Une seule entree est autorisee par script. | assets/images/blocks/language/my-turn.png |
| Fonction | def name { ... } / function name { ... } / définir name { ... } | Isole une logique reutilisable. Peut recevoir des parametres. | assets/images/blocks/language/function.png |
| Appel | name() ou name(arg1, arg2) | Appelle une fonction utilisateur, un getter ou une action. | assets/images/blocks/language/function-call.png |
| Variable | name = expression | Stocke une valeur temporaire pendant l'execution du script. | assets/images/blocks/language/variable-set.png |
| Condition | if (condition) { ... } else { ... } | Execute un bloc selon une condition. Alias: if, si, wenn; else, sinon, sonst, sino, senão. | assets/images/blocks/language/if-else.png |
| Repeat | repeat(3) { ... } | Repete un bloc un nombre fixe de fois. Alias: repeat, répéter, wiederhole, repetir. | assets/images/blocks/language/repeat.png |
| While | while (get_pos_x() < 3) { ... } | Repete un bloc tant que la condition reste vraie. Alias: while, tantque, solange, mientras, enquanto. | assets/images/blocks/language/while.png |
| Return | return expression | Renvoie une valeur depuis une fonction. Alias: return, retourne, retour, zurück, devuelve, retorna. | assets/images/blocks/language/return.png |
| Operations | a + b, a - b, a * b, a / b | Calcule une expression numerique. | assets/images/blocks/language/operators.png |
| Comparaisons | >, <, =, !=, >=, <= | Compare deux expressions. | assets/images/blocks/language/comparators.png |
| Logique | condition & condition, condition | condition | Combine des conditions booleennes. | assets/images/blocks/language/boolean-logic.png |
Getters et perception
| Getter | Syntaxe | Retour / usage | Placeholder image |
|---|
| Position X | get_pos_x() | Coordonnée X du robot courant. | assets/images/blocks/getters/get-pos-x.png |
| Position Y | get_pos_y() | Coordonnée Y du robot courant. | assets/images/blocks/getters/get-pos-y.png |
| Scanner une tuile | scan_tile(x, y) | Renvoie empty, ally, enemy, obstacle ou out_of_bounds; enregistre aussi la connaissance de la tuile. | assets/images/blocks/getters/scan-tile.png |
| Tuile vide | is_tile_empty(x, y) | Renvoie si la tuile est lisible, non obstacle et sans entite vivante. | assets/images/blocks/getters/is-tile-empty.png |
| Type de tuile | get_tile_type(x, y) | Renvoie un code comme FL, WL, IW, HO, SP, WA, ou une chaine vide si inconnu. | assets/images/blocks/getters/get-tile-type.png |
| Type d'occupant | get_tile_occupant_type(x, y) | Renvoie ally, enemy, unknown_entity, none, obstacle ou out_of_bounds. | assets/images/blocks/getters/get-tile-occupant-type.png |
| Id d'occupant | get_tile_occupant_id(x, y) | Renvoie l'id visible de l'occupant ou une chaine vide. | assets/images/blocks/getters/get-tile-occupant-id.png |
| X d'une entite | get_entity_x("id") | Renvoie X pour une entite connue, sinon -1. | assets/images/blocks/getters/get-entity-x.png |
| Y d'une entite | get_entity_y("id") | Renvoie Y pour une entite connue, sinon -1. | assets/images/blocks/getters/get-entity-y.png |
| Vie d'une entite | get_entity_health("id") | Renvoie les PV connus, sinon -1. | assets/images/blocks/getters/get-entity-health.png |
| Entite vivante | is_entity_alive("id") | Renvoie si l'entite connue est vivante. | assets/images/blocks/getters/is-entity-alive.png |
| Equipe d'une entite | get_entity_team("id") | Renvoie l'index d'equipe connu, sinon -1. | assets/images/blocks/getters/get-entity-team.png |
Actions de mouvement
| Action | Alias script | Cout AP | Usage / limites | Placeholder image |
|---|
| Turn | turn, tourner | 0 | turn(degrees) tourne le robot. Sans argument, le runtime applique 90 degres par defaut. | assets/images/blocks/movement/turn.png |
| Face North | face_north | 0 | Oriente le robot vers le nord. | assets/images/blocks/movement/face-north.png |
| Face South | face_south | 0 | Oriente le robot vers le sud. | assets/images/blocks/movement/face-south.png |
| Face East | face_east | 0 | Oriente le robot vers l'est. | assets/images/blocks/movement/face-east.png |
| Face West | face_west | 0 | Oriente le robot vers l'ouest. | assets/images/blocks/movement/face-west.png |
| Move Forward | move_forward, avancer | baseCost + usageCount, base 1 | Avance d'une tuile. Les arguments numeriques peuvent modifier le nombre de pas. | assets/images/blocks/movement/move-forward.png |
| Move Backward | move_backward, reculer | baseCost + usageCount, base 1 | Recule d'une tuile. Les arguments numeriques peuvent modifier le nombre de pas. | assets/images/blocks/movement/move-backward.png |
| Jump | jump, sauter | previousCost + usageCount, base 2 | Saute de deux tuiles avec le pattern path-forward. | assets/images/blocks/movement/jump.png |
| Dash | dash, precipitation | previousCost + usageCount * 2, base 2 | Fonce jusqu'a trois tuiles, inflige 3 degats en collision via line-contact. | assets/images/blocks/movement/dash.png |
Actions offensives
| Action | Alias script | Cout AP | Usage / limites | Placeholder image |
|---|
| Sword Swing | sword_swing, coup_d_epee | 1 | Arc melee devant le robot, 10 degats. | assets/images/blocks/offense/sword-swing.png |
| Spear | spear, lance | 2 | Ligne de contact jusqu'a 2 cases, 9 degats. | assets/images/blocks/offense/spear.png |
| Kick | kick, coup_de_pied | 2 | Case melee devant, 7 degats, pousse de 3 tuiles avec bonus contre mur/trou. | assets/images/blocks/offense/kick.png |
| Pistol | pistol, pistolet | 2 | Projectile ligne jusqu'a 8 cases, 6 degats, bloque par WL, IW, SHIELD. | assets/images/blocks/offense/pistol.png |
| Grenade | grenade | 4 | grenade() cible par defaut 5 cases devant; grenade(x, y) cible des coordonnees. Explosion rayon 1, 12 degats, peut toucher l'utilisateur et detruire des murs. | assets/images/blocks/offense/grenade.png |
| Bazooka | bazooka, lance_roquettes | 5 | Projectile jusqu'a 10 cases, 20 degats, detruit les murs destructibles, peut toucher l'utilisateur. | assets/images/blocks/offense/bazooka.png |
| Lighter | lighter, briquet | 3 | Melee devant, applique overheat a 100%, pas de degats directs. | assets/images/blocks/offense/lighter.png |
| Fire Wave | fire_wave, vague_de_feu | 4 | Anneau rayon 1 autour du robot, 10 degats, overheat a 35%. | assets/images/blocks/offense/fire-wave.png |
| Tazer | tazer, taser | 2 | Melee devant, 12 degats, short-circuit a 35%. | assets/images/blocks/offense/tazer.png |
| Lazer | lazer, laser | 4 | Ligne laser jusqu'a 10 cases, perce les ennemis, 12 degats, short-circuit a 35%, bloque par murs. | assets/images/blocks/offense/lazer.png |
| Ultra Lazer | ultra_lazer, ultra_laser | 7 | Ligne laser jusqu'a 12 cases, 25 degats, perce ennemis et murs, short-circuit a 100%, une fois par tour. | assets/images/blocks/offense/ultra-lazer.png |
Support et terrain
| Action | Alias script | Cout AP | Usage / limites | Placeholder image |
|---|
| Place Trap | place_trap, poser_piege | 4 | Place des pics sur la tuile FL vide devant le robot; degats de piege 4. | assets/images/blocks/terrain/place-trap.png |
| Heal | heal, soigner | 2 | Soigne 6 PV, limite aux PV max; journalise un warning si le robot est deja full life. | assets/images/blocks/support/heal.png |
| Cooling System | cooling_system, systeme_de_refroidissement | 3 | Retire overheat; si absent, depense les AP et journalise un warning. | assets/images/blocks/support/cooling-system.png |
| Repair System | repair_system, systeme_de_reparation | 3 | Retire short-circuit; si absent, depense les AP et journalise un warning. | assets/images/blocks/support/repair-system.png |
| Dig | dig, creuser | 2 | Cible devant le robot; transforme WL -> FL ou FL -> HO; IW, SP, WA, HO, hors carte et occupe journalisent un warning. | assets/images/blocks/terrain/dig.png |
| Say | say, dire | 0 | say("message") affiche/journalise un message. Requiert exactement un argument. | assets/images/blocks/support/say.png |
Effets
| Effet | Source actuelle | Comportement |
|---|
overheat | lighter, fire_wave | Inflige 10 degats par tour pendant 3 tours; retire par cooling_system. |
short-circuit | tazer, lazer, ultra_lazer | Reduit les AP de 20% pendant 2 tours; retire par repair_system. |
Regles importantes
- Les actions non throwable n'acceptent pas de coordonnees cible.
- Les throwables avec pattern
throw-point, actuellement grenade, acceptent 0 ou 2 arguments. - Les degats allies dependent de
combatOptions.friendlyFire; l'auto-hit depend des parametres de l'action. - Les getters sont journalises comme informations, pas comme actions.
Reference Blocs
Esta referencia describe los bloques soportados actualmente por el backend. Esta basada en la gramatica LiteralScraps, los builtins de percepcion y configs_json/GameConfig.json.
Los placeholders de imagen indican donde se pueden anadir visuales mas tarde. Son texto plano en lugar de enlaces Markdown para evitar imagenes rotas si los archivos no existen.
Bloques de lenguaje
| Bloque | Sintaxis | Uso | Placeholder imagen |
|---|
| Entrada de turno | my_turn { ... } o mi_turno { ... } | Punto de entrada ejecutado al inicio del turno del robot. Solo se permite una entrada por script. | assets/images/blocks/language/my-turn.png |
| Funcion | def name { ... } / function name { ... } / funcion name { ... } | Aisla logica reutilizable. Puede recibir parametros. | assets/images/blocks/language/function.png |
| Llamada | name() o name(arg1, arg2) | Llama a una funcion de usuario, un getter o una accion. | assets/images/blocks/language/function-call.png |
| Variable | name = expression | Guarda un valor temporal durante la ejecucion del script. | assets/images/blocks/language/variable-set.png |
| Condicion | si (condition) { ... } sino { ... } | Ejecuta un bloque segun una condicion. Aliases: if, si, wenn; else, sinon, sonst, sino, senão. | assets/images/blocks/language/if-else.png |
| Repeat | repetir(3) { ... } | Repite un bloque un numero fijo de veces. Aliases: repeat, répéter, wiederhole, repetir. | assets/images/blocks/language/repeat.png |
| While | mientras (get_pos_x() < 3) { ... } | Repite un bloque mientras la condicion sigue siendo verdadera. Aliases: while, tantque, solange, mientras, enquanto. | assets/images/blocks/language/while.png |
| Return | devuelve expression | Devuelve un valor desde una funcion. Aliases: return, retourne, retour, zurück, devuelve, retorna. | assets/images/blocks/language/return.png |
| Operaciones | a + b, a - b, a * b, a / b | Calcula una expresion numerica. | assets/images/blocks/language/operators.png |
| Comparaciones | >, <, =, !=, >=, <= | Compara dos expresiones. | assets/images/blocks/language/comparators.png |
| Logica | condition & condition, condition | condition | Combina condiciones booleanas. | assets/images/blocks/language/boolean-logic.png |
Getters y percepcion
| Getter | Sintaxis | Retorno / uso | Placeholder imagen |
|---|
| Posicion X | get_pos_x() | Coordenada X del robot actual. | assets/images/blocks/getters/get-pos-x.png |
| Posicion Y | get_pos_y() | Coordenada Y del robot actual. | assets/images/blocks/getters/get-pos-y.png |
| Escanear casilla | scan_tile(x, y) | Devuelve empty, ally, enemy, obstacle o out_of_bounds; tambien registra conocimiento de la casilla. | assets/images/blocks/getters/scan-tile.png |
| Casilla vacia | is_tile_empty(x, y) | Devuelve si la casilla es legible, no es un obstaculo y no tiene una entidad viva. | assets/images/blocks/getters/is-tile-empty.png |
| Tipo de casilla | get_tile_type(x, y) | Devuelve un codigo como FL, WL, IW, HO, SP, WA, o una cadena vacia si es desconocido. | assets/images/blocks/getters/get-tile-type.png |
| Tipo de ocupante | get_tile_occupant_type(x, y) | Devuelve ally, enemy, unknown_entity, none, obstacle o out_of_bounds. | assets/images/blocks/getters/get-tile-occupant-type.png |
| Id de ocupante | get_tile_occupant_id(x, y) | Devuelve el id visible del ocupante, o una cadena vacia. | assets/images/blocks/getters/get-tile-occupant-id.png |
| X de entidad | get_entity_x("id") | Devuelve X para una entidad conocida; si no, -1. | assets/images/blocks/getters/get-entity-x.png |
| Y de entidad | get_entity_y("id") | Devuelve Y para una entidad conocida; si no, -1. | assets/images/blocks/getters/get-entity-y.png |
| Vida de entidad | get_entity_health("id") | Devuelve los HP conocidos; si no, -1. | assets/images/blocks/getters/get-entity-health.png |
| Entidad viva | is_entity_alive("id") | Devuelve si la entidad conocida esta viva. | assets/images/blocks/getters/is-entity-alive.png |
| Equipo de entidad | get_entity_team("id") | Devuelve el indice de equipo conocido; si no, -1. | assets/images/blocks/getters/get-entity-team.png |
Acciones de movimiento
| Accion | Aliases script | Coste AP | Uso / limites | Placeholder imagen |
|---|
| Turn | turn, tourner | 0 | turn(degrees) rota el robot. Sin argumento, el runtime usa 90 grados por defecto. | assets/images/blocks/movement/turn.png |
| Face North | face_north | 0 | Orienta el robot hacia el norte. | assets/images/blocks/movement/face-north.png |
| Face South | face_south | 0 | Orienta el robot hacia el sur. | assets/images/blocks/movement/face-south.png |
| Face East | face_east | 0 | Orienta el robot hacia el este. | assets/images/blocks/movement/face-east.png |
| Face West | face_west | 0 | Orienta el robot hacia el oeste. | assets/images/blocks/movement/face-west.png |
| Move Forward | move_forward, avancer | baseCost + usageCount, base 1 | Avanza una casilla. Los argumentos numericos pueden modificar el numero de pasos. | assets/images/blocks/movement/move-forward.png |
| Move Backward | move_backward, reculer | baseCost + usageCount, base 1 | Retrocede una casilla. Los argumentos numericos pueden modificar el numero de pasos. | assets/images/blocks/movement/move-backward.png |
| Jump | jump, sauter | previousCost + usageCount, base 2 | Salta dos casillas con el patron path-forward. | assets/images/blocks/movement/jump.png |
| Dash | dash, precipitation | previousCost + usageCount * 2, base 2 | Embiste hasta tres casillas, inflige 3 de dano de colision mediante line-contact. | assets/images/blocks/movement/dash.png |
Acciones ofensivas
| Accion | Aliases script | Coste AP | Uso / limites | Placeholder imagen |
|---|
| Sword Swing | sword_swing, coup_d_epee | 1 | Arco melee frontal, 10 de dano. | assets/images/blocks/offense/sword-swing.png |
| Spear | spear, lance | 2 | Linea de contacto hasta 2 casillas, 9 de dano. | assets/images/blocks/offense/spear.png |
| Kick | kick, coup_de_pied | 2 | Casilla melee frontal, 7 de dano, empuja 3 casillas con bonus contra muro/agujero. | assets/images/blocks/offense/kick.png |
| Pistol | pistol, pistolet | 2 | Proyectil en linea hasta 8 casillas, 6 de dano, bloqueado por WL, IW, SHIELD. | assets/images/blocks/offense/pistol.png |
| Grenade | grenade | 4 | grenade() apunta por defecto 5 casillas hacia delante; grenade(x, y) apunta a coordenadas. Explosion de radio 1, 12 de dano, puede golpear al usuario y destruir muros. | assets/images/blocks/offense/grenade.png |
| Bazooka | bazooka, lance_roquettes | 5 | Proyectil hasta 10 casillas, 20 de dano, destruye muros destructibles, puede golpear al usuario. | assets/images/blocks/offense/bazooka.png |
| Lighter | lighter, briquet | 3 | Melee frontal, aplica overheat al 100%, sin dano directo. | assets/images/blocks/offense/lighter.png |
| Fire Wave | fire_wave, vague_de_feu | 4 | Anillo de radio 1 alrededor del robot, 10 de dano, overheat al 35%. | assets/images/blocks/offense/fire-wave.png |
| Tazer | tazer, taser | 2 | Melee frontal, 12 de dano, short-circuit al 35%. | assets/images/blocks/offense/tazer.png |
| Lazer | lazer, laser | 4 | Linea laser hasta 10 casillas, atraviesa enemigos, 12 de dano, short-circuit al 35%, bloqueado por muros. | assets/images/blocks/offense/lazer.png |
| Ultra Lazer | ultra_lazer, ultra_laser | 7 | Linea laser hasta 12 casillas, 25 de dano, atraviesa enemigos y muros, short-circuit al 100%, una vez por turno. | assets/images/blocks/offense/ultra-lazer.png |
Soporte y terreno
| Accion | Aliases script | Coste AP | Uso / limites | Placeholder imagen |
|---|
| Place Trap | place_trap, poser_piege | 4 | Coloca pinchos en la casilla FL vacia delante del robot; dano de trampa 4. | assets/images/blocks/terrain/place-trap.png |
| Heal | heal, soigner | 2 | Cura 6 HP, limitado por los HP maximos; registra una advertencia si ya tiene vida completa. | assets/images/blocks/support/heal.png |
| Cooling System | cooling_system, systeme_de_refroidissement | 3 | Quita overheat; si no existe, gasta AP y registra una advertencia. | assets/images/blocks/support/cooling-system.png |
| Repair System | repair_system, systeme_de_reparation | 3 | Quita short-circuit; si no existe, gasta AP y registra una advertencia. | assets/images/blocks/support/repair-system.png |
| Dig | dig, creuser | 2 | Apunta a la casilla frontal; cambia WL -> FL o FL -> HO; IW, SP, WA, HO, fuera de mapa y objetivos ocupados registran una advertencia. | assets/images/blocks/terrain/dig.png |
| Say | say, dire | 0 | say("message") muestra/registra un mensaje. Requiere exactamente un argumento. | assets/images/blocks/support/say.png |
Efectos
| Efecto | Fuente actual | Comportamiento |
|---|
overheat | lighter, fire_wave | Inflige 10 de dano por turno durante 3 turnos; se quita con cooling_system. |
short-circuit | tazer, lazer, ultra_lazer | Reduce los AP un 20% durante 2 turnos; se quita con repair_system. |
Reglas importantes
- Las acciones que no son throwable no aceptan coordenadas de objetivo.
- Las acciones throwable con el patron
throw-point, actualmente grenade, aceptan 0 o 2 argumentos. - El dano a aliados depende de
combatOptions.friendlyFire; el auto-impacto depende de los parametros de la accion. - Los getters se registran como informacion, no como acciones.