docs: explain why base levels can't be edited from admin

The 96 base levels have JavaScript test() functions in their checks
that validate gameplay objectives. These can't be serialized to a
database — they need to stay as code. Custom levels from admin panel
work for tutorials/challenges but without the star check system.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Jose Luis
2026-03-21 21:07:39 +01:00
parent 12569dba76
commit acbe4257ae

View File

@@ -146,4 +146,35 @@ Reaktor es una plataforma web de sintesis modular que combina un **sandbox creat
---
## Notas Tecnicas
### SynthQuest: Niveles base vs niveles custom
Los **96 niveles base** (12 mundos × 8 niveles) estan hardcoded en ficheros JS (`packages/client/src/game/levels/world1.js` ... `world12.js`). Estos niveles **no se pueden editar desde el admin panel** porque contienen funciones `test()` en JavaScript que validan si el jugador ha completado el objetivo:
```javascript
checks: [
{
star: 1,
desc: 'Conecta el oscilador a la salida',
test: (mods, conns) => {
// Logica JS que inspecciona los modulos y conexiones
return conns.some(c => c.from.moduleId === osc.id && ...);
},
},
]
```
Estas funciones `test()` no se pueden serializar en una base de datos — son codigo ejecutable que depende del contexto del engine. Para editar los niveles base hay que modificar directamente los ficheros JS y hacer deploy.
Los **niveles custom** creados desde el admin panel se almacenan en PostgreSQL y permiten definir titulo, descripcion, modulos disponibles y patch base (importado del Sandbox). Sin embargo, **no soportan checks/objetivos custom** porque requeririan escribir funciones JS. Los niveles custom se pueden usar para:
- Tutoriales simples tipo "monta este circuito"
- Challenges de la comunidad
- Contenido adicional sin sistema de estrellas
Para añadir niveles con sistema de estrellas completo, hay que crear un fichero `worldN.js` con los checks en JS.
---
*Documento vivo — actualizar conforme avanza el desarrollo.*