El validador y sus códigos
Qué revisa greengames validar y en qué orden, la forma de un problema y la lista completa de códigos GB con su nivel, su mensaje y cómo resolver cada uno.
Corresponde aFormato 1, API 1 Para quien escribe código Esta página se genera desde las fuentes del SDK.
En esta página
Qué revisa y en qué orden#
Revisa, en este orden: que los archivos existan y sean JSON; que el script se pueda unir; los tipos del script con TypeScript (solo conoce JavaScript estándar y la API: fetch o setTimeout son errores de tipo); los esquemas; y las reglas del formato. Cada problema es un objeto:
interface Problema {
nivel: 'error' | 'aviso'; // un error impide empaquetar y probar
codigo: string; // estable: GB001, GB210...
archivo: string; // 'juego.json', 'escenas/principal.json', 'scripts/principal.ts', 'pruebas/bot.json'
ruta: string; // dentro del archivo: 'piezas[3].tamano' o 'linea 40, columna 16'
mensaje: string;
sugerencia?: string; // cómo corregirlo
}--json escribe { "<slug>": { "valido": boolean, "errores": Problema[], "avisos": Problema[] } }.
Los problemas del script traen el archivo y la línea del código fuente (scripts/principal.ts, linea 48), no del script unido. Un error de esquema en una escena no produce errores falsos de piezas o zonas inexistentes. Con --idioma en (o validarPaquete(paquete, { idioma: 'en' })) el mensaje y la sugerencia salen en inglés; codigo, archivo, ruta y nivel no cambian.
En español los mensajes salen sin tildes, tal como los escribe la herramienta: así los puedes buscar en esta página.
Grupos de códigos#
| Grupo | Códigos | Qué revisan |
|---|---|---|
| Lectura | GB001 a GB003 | JSON mal escrito, archivo que falta, id distinto del directorio |
| Manifiesto | GB101 a GB122 | esquema, dificultades, tablas, escena inicial, portada, textos iguales en ambos idiomas; máximo de jugadores y modos de multijugador |
| Escenas | GB200 a GB248 | esquema, ids repetidos, colores, esferas y cilindros, movimiento, apariciones sin suelo; aire reservado, colores, bloques y biomas que no existen o se repiten, tabla sin biomas de tierra, estructuras; piezas con forma lamina y mapas de baldosas |
| Script | GB300 a GB330 | imports no permitidos, error de sintaxis, tamaño, vacío; usa algo que no existe en la sala (red, DOM, temporizadores, eval, async); avisos por Date y Math.random; avisos: nunca llama a terminar, no registra alIniciar; claves de texto, piezas, zonas, apariciones o tablas que no existen; errores de tipos de TypeScript |
| Guion del bot | GB400 a GB419 | esquema, destinos que no existen, condiciones incompletas |
| Paquete | GB501 a GB521 | formato, cantidad de escenas, recursos, tamaños |
| Láminas | GB600 a GB606 | esquema de cada lámina, medidas de los cuadros, colores de su paleta, animaciones y cantidad de láminas |
| Modelos, texturas y sonidos | GB700 a GB742 | contenedor, direcciones externas (GB703), extensiones no admitidas (GB704), datos libres (GB705), partes no admitidas (GB706), triángulos (GB707), huesos (GB708), nodos y partes (GB709), texturas (GB710, GB711), clips (GB712, GB713), caja (GB714), colisión (GB715); Cantidad y tamaño de modelos, texturas y sonidos; total de binarios (GB723); triángulos de modelos por escena (GB730), piezas que nombran un modelo, clip o textura que no existe; formato, recurso que no existe, recursos sin crédito (aviso); el formato de cada modelo (.glb), sus ajustes de colisión, las texturas y los sonidos del juego, sus presupuestos, las piezas con forma modelo y los créditos |
Lectura#
| Código | Nivel | Qué significa | Cómo resolverlo |
|---|---|---|---|
| GB001 | error | el archivo no es JSON valido: {msg} | Abre el archivo en la línea y la columna que indica ruta. Revisa comas sobrantes o faltantes, comillas dobles en todas las claves y que no haya comentarios. |
| GB002 | error | no existe el archivola ruta del script sale del directorio del juego | Crea el archivo que nombra archivo. Un juego necesita juego.json, escenas/, scripts/, recursos/ y pruebas/; el script es el de la ruta que dice "script" en juego.json, y esa ruta no puede salir del directorio del juego. |
| GB003 | error | el id "{id}" no coincide con el nombre del directorio ("…") | Escribe en "id" el nombre del directorio, o renombra el directorio para que coincida con el id. |
Manifiesto#
| Código | Nivel | Qué significa | Cómo resolverlo |
|---|---|---|---|
| GB101 | error | El archivo no cumple el esquema (juego.json). El mensaje es uno de los de Errores de esquema. | Corrige en juego.json la propiedad que indica ruta. Ver Manifiesto. |
| GB110 | error | "min" ({min}) no puede ser mayor que "max" ({max}) | En jugadores, deja min menor o igual que max. |
| GB111 | error | la dificultad "{id}" esta repetida | Da a cada dificultad un id distinto. |
| GB112 | error | "{dificultadInicial}" no esta en "dificultades" | Escribe en dificultadInicial el id de una de las dificultades, o quita esa clave si el juego no declara dificultades. |
| GB113 | aviso | el juego declara {dificultades} dificultad(es); el catalogo pide tres | Declara tres dificultades, por ejemplo facil, normal y dificil. Es un aviso: el juego se empaqueta igual. |
| GB114 | error | la tabla "{id}" esta repetida | Da a cada tabla de puntajes un id distinto. |
| GB115 | aviso | el juego no declara ninguna tabla de puntajes; el catalogo pide que cada juego tenga puntaje | Agrega una tabla a puntajes, por ejemplo { "id": "puntos", "nombre": {...}, "orden": "mayor", "formato": "numero" }. |
| GB116 | error | no existe la escena "{escenaInicial}" | Crea escenas/<escenaInicial>.json o corrige el nombre en escenaInicial. |
| GB117 | error | no existe el recurso "{portada}" | Pon la imagen en la ruta que dice portada, dentro del directorio del juego, o corrige la ruta. |
| GB118 | error | falta la clave "…" (existe en "es")falta la clave "…" (existe en "en") | Agrega la clave que falta: textos.es y textos.en deben tener las mismas claves. |
| GB119 | error | las variables no coinciden entre idiomas: es usa {…} y en usa {…} | Usa las mismas variables entre llaves en el texto en español y en el texto en inglés de esa clave. |
| GB120 | aviso | el catalogo pide que el juego funcione con teclado, tactil y mando | Declara teclado, tactil y mando en true dentro de controles y prueba el juego con cada uno: el reproductor ya traduce los tres a las mismas acciones. |
| GB121 | error | el maximo de jugadores es 16 | Baja jugadores.max hasta el máximo que indica el mensaje. Ver Límites vigentes. |
| GB122 | error | Un modo de multijugador pide más jugadores que jugadores.max.el juego admite {max} jugador(es) ("jugadores.max") y el modo local pide {max}el juego admite {max} jugador(es) ("jugadores.max") y el modo en linea pide {max} | Sube jugadores.max o baja el max del modo que nombra ruta (multijugador.local.max o multijugador.enLinea.max). Ver Manifiesto. |
Escenas#
| Código | Nivel | Qué significa | Cómo resolverlo |
|---|---|---|---|
| GB200 | error | El archivo no cumple el esquema (escenas/<id>.json). El mensaje es uno de los de Errores de esquema. | Corrige en esa escena la propiedad que indica ruta. Ver Escenas. |
| GB201 | error | el id "{id}" no coincide con el nombre del archivo ("{clave}") | Escribe en "id" el nombre del archivo de la escena, sin .json. |
| GB202 | error | la dificultad "…" no existe en juego.json | En la lista dificultades que indica ruta, usa solo ids declarados en dificultades de juego.json. |
| GB203 | error | "desde" debe ser menor que "hasta" | En ambiente.niebla, deja desde menor que hasta. |
| GB204 | error | el id "{id}" ya lo usa piezas[…] | Da a cada pieza un id único en la escena. Si son varias piezas del mismo tipo, usa una etiqueta común y quita el id. |
| GB205 | error | hay {dinamicas} piezas dinamicas y el maximo es 150 | Deja como "fija" todo lo que no necesite moverse con la física. |
| GB206 | error | la aparicion "{id}" esta repetida | Da a cada aparición un id distinto. |
| GB207 | aviso | no hay ninguna pieza solida bajo la aparicion "{id}" […]: el jugador caeria al vacio | Pon la aparición sobre una plataforma: su posicion es donde quedan los pies. |
| GB208 | error | la zona "{id}" esta repetida | Da a cada zona un id distinto. |
| GB210 | error | el color "{color}" no existe en la paleta | Usa un color de la paleta (la sugerencia del problema propone el más parecido) o agrega el tuyo en paleta de la escena. |
| GB211 | error | una esfera necesita las tres medidas iguales, pero tiene […]una zona esferica necesita las tres medidas iguales | Escribe las tres medidas de tamano iguales: es el diámetro. |
| GB212 | error | un cilindro necesita ancho y largo iguales (el diametro), pero tiene […]una zona cilindrica necesita ancho y largo iguales | Escribe el ancho y el largo de tamano iguales (el diámetro). El eje del cilindro es Y; para acostarlo usa rotacion. |
| GB213 | error | "movimiento" no funciona con fisica "dinamica": a esa pieza la mueve la fisica | Quita movimiento, o cambia fisica a "fija" (o a "ninguna" si es decorado). |
| GB214 | aviso | "solida": false no hace falta en una pieza con fisica "ninguna" (ya es decorado sin colision) | Quita "solida": false: una pieza con física "ninguna" ya no choca. |
| GB220 | error | una pieza con forma "lamina" necesita decir cual: falta "lamina" | Agrega "lamina": "<id>" a la pieza, con el id de una lámina de laminas/ (la sugerencia lista las que hay). Si no hay ninguna, crea laminas/<id>.json. Ver Escenas. |
| GB221 | error | no existe la lamina "{lamina}" | Corrige el id (la sugerencia propone el más parecido o lista las láminas del juego) o crea laminas/<id>.json. También lo da una baldosa que nombra una lámina que no existe. |
| GB222 | error | la lamina "{lamina}" no tiene la animacion "{animacion}"la lamina "{lamina}" tiene {cuadros} cuadro(s) y se pide el {animacion} | Usa una animación que la lámina declare en animaciones (la sugerencia las lista) o un número de cuadro que exista: los cuadros se cuentan desde 0. En una baldosa, corrige cuadro. |
| GB223 | aviso | una lamina con fisica "dinamica" choca como una caja de su mismo tamano | No impide empaquetar. Si la lámina es decorado, usa "fisica": "ninguna"; si de verdad debe moverla la física, ten presente que choca como una caja de su tamaño. |
| GB224 | aviso | "lamina" solo se usa con "forma": "lamina" (esta pieza es "{forma}") | No impide empaquetar. Quita "lamina" de la pieza, o cambia su "forma" a "lamina" si querías una imagen plana. |
| GB230 | error | hay mas de un mapa con el id "{id}" | Dale a cada mapa de la escena un id distinto. |
| GB231 | error | la fila usa la baldosa "…", que no esta en "baldosas" del mapa | Declara ese carácter en baldosas del mapa o cámbialo en la fila que indica ruta. El vacío se escribe con . o con un espacio. |
| GB232 | error | la baldosa "…" no dice como se dibuja | Agrega a la baldosa "material" (un color) o "lamina" (el id de una lámina). |
| GB234 | error | la colision "{col}" solo existe en mapas verticales ("plano": "xy")la colision "suelo" solo existe en mapas de suelo ("plano": "xz") | Usa una colisión que exista en ese tipo de mapa. En un mapa de suelo ("plano": "xz"): solida, suelo, peligro o ninguna. En uno vertical ("plano": "xy"): solida, plataforma, peligro, escalera o ninguna. Ver Escenas. |
| GB235 | error | los mapas de la escena suman {celdas} baldosas y el maximo es 200000 | Reparte el mundo en varias escenas o deja vacío lo que no se ve. Ver Límites vigentes. |
| GB236 | aviso | "paralaje" solo se aplica a capas de fondo"paralaje" solo se aplica en mapas verticales ("plano": "xy") | No impide empaquetar. paralaje solo actúa en capas de fondo de mapas verticales: agrega "fondo": true a la capa (las capas de fondo no chocan) o quita paralaje. |
| GB240 | error | el id de bloque "aire" esta reservado para el vacio | Usa otro id para ese bloque. aire es el vacío: se escribe sin declararlo. |
| GB241 | error | el color "…" del bloque "{id}" no existe en la paleta ni es un color "#rrggbb" | Usa un nombre de la paleta, uno de paleta de la escena o un color "#rrggbb". La sugerencia propone el más parecido. |
| GB242 | error | el bloque "{id}" no esta en "bloques" del terreno | Declara ese bloque en bloques del terreno o corrige el id donde indica ruta. La sugerencia lista los declarados. |
| GB243 | error | el bioma "{id}" esta repetidola estructura "{id}" esta repetida | Dale a cada bioma y a cada estructura un id distinto. |
| GB244 | error | la tabla de biomas no tiene ninguno de tierra | Deja al menos un bioma sin zona (o con "zona": "tierra"): es donde aparecen los jugadores. |
| GB245 | error | el bioma "{b}" no esta en la tabla de biomas | Usa en biomas de la estructura solo ids de la tabla de biomas. La sugerencia lista los declarados. |
| GB246 | aviso | el bloque "{id}" tiene forma "cruz": una cruz nunca es solidael bloque "{agua}" llena el mar pero no es liquido | Es un aviso. Quita solido de un bloque con forma cruz (o usa la forma cubo), y agrega "liquido": true al bloque que llena el mar para que se pueda nadar en él. |
| GB247 | error | "alto" va de menor a mayor, pero dice […] | Escribe alto del árbol de menor a mayor: [mínimo, máximo]. |
| GB248 | error | la fila usa "…", que no esta en "leyenda" de la estructura | Declara ese carácter en leyenda de la estructura o cámbialo en la fila que indica ruta. . no toca nada y _ deja aire. |
Script#
| Código | Nivel | Qué significa | Cómo resolverlo |
|---|---|---|---|
| GB300 | error | El script no se pudo unir. Además de los mensajes que siguen, puede traer el error de sintaxis o de import que encontró la herramienta al unirlo.un script en TypeScript necesita unirse antes de correrel script importa otros archivos o usa export | Corrige la línea que indica ruta. Un script solo puede importar @greengames/sdk y archivos relativos del propio juego. Si el script está en TypeScript, únelo con greengames empaquetar. |
| GB301 | error | el script unido pesa … KB y el maximo es 512 KB | Mueve los datos grandes a las escenas (piezas, datos) y deja en el script solo la lógica. |
| GB302 | error | el script esta vacioel paquete no trae script | Escribe el script: como mínimo registra juego.alIniciar(() => { ... }) y llama a juego.terminar(...) cuando la partida acabe. |
| GB310 | error | el script usa {nombre} (`…`), que no existe dentro de la sala | Reemplaza ese uso por el servicio que corresponde. Ver la tabla de abajo. |
| GB311 | aviso | el script usa {nombre} (`…`) | Es un aviso: funciona, pero conviene cambiarlo. Ver la tabla de abajo. |
| GB312 | aviso | el script nunca llama a `juego.terminar(...)`: la partida no tendria final | Llama a juego.terminar({ resultado, puntaje }) cuando la partida acabe; resultado es 'victoria', 'derrota' o 'fin'. |
| GB313 | aviso | el script no registra `juego.alIniciar(...)` | Registra los eventos del juego dentro de juego.alIniciar(...): corre cuando la escena y los jugadores ya están listos. |
| GB320 | error | el texto "{clave}" no esta en "textos" de juego.json | Agrega la clave en textos.es y textos.en de juego.json, o corrige el nombre en el script. |
| GB321 | error | el script nombra {que} "{id}", que no esta en ninguna escena | Corrige el id en el script o agrega esa pieza, zona o aparición a una escena. |
| GB322 | aviso | el script nombra {que} "{id}", que no esta en ninguna escena | Corrige el id o agrega la pieza a una escena. Si la crea el script con mundo.crear, ignora el aviso. |
| GB323 | error | la tabla de puntajes "…" no esta declarada en "puntajes" de juego.json | Declara la tabla en puntajes de juego.json o usa el id de una que ya exista. |
| GB330 | error | Un error de tipos de TypeScript en el script: el número y el mensaje son los de TypeScript.TS{code}: {mensaje} | Corrige el tipo en la línea que indica ruta. Si el error es por un nombre que no existe (console, setTimeout, localStorage, fetch), usa el servicio de la API que lo reemplaza. |
Qué detectan GB310 y GB311#
El validador busca en el script estos usos. Los de nivel error dan GB310; los de nivel aviso, GB311.
| Qué usa el script | Nivel | Qué usar en su lugar |
|---|---|---|
| fetch | error | Los juegos no tienen red. Empaqueta los datos en la escena o en datos de las piezas. |
red (XMLHttpRequest, WebSocket, EventSource...) | error | Los juegos no tienen red. |
importScripts o require | error | Importa otros archivos de scripts/ con un import relativo; al empaquetar se unen en uno solo. |
import() dinámico | error | Usa un import estático al comienzo del archivo. |
el DOM (document, window, navigator, location, history) | error | No hay página dentro de la sala. Para mostrar algo usa interfaz (hud, mensaje, marcador, menu). |
almacenamiento del sitio (localStorage, sessionStorage, indexedDB...) | error | Usa progreso.guardar(jugador, clave, valor) y progreso.leer(...). |
eval o Function | error | Está bloqueado por la política de seguridad de la sala. Escribe el código directamente. |
hilos y canales (Worker, BroadcastChannel, MessageChannel) | error | No están disponibles dentro de la sala. |
postMessage o close | error | La comunicación con el reproductor la hace la sala. Usa los servicios de greengames. |
temporizadores del navegador (setTimeout, setInterval, requestAnimationFrame, queueMicrotask) | error | Usa reloj.despues(segundos, fn), reloj.cada(segundos, fn) o juego.cadaCuadro(fn): siguen el tiempo de la partida y respetan la pausa. |
async o await | error | La API es síncrona y no hay nada que esperar. Para "esperar" usa reloj.despues(segundos, fn). |
el reloj del sistema (Date.now(), new Date(), performance.now()) | aviso | Usa reloj.ahora (segundos de partida): el reloj del sistema no se detiene con la pausa y rompe las repeticiones. |
Math.random() | aviso | Usa azar.numero(), azar.entero(a, b) o azar.elegir(lista): salen de la semilla de la partida. |
Guion del bot#
| Código | Nivel | Qué significa | Cómo resolverlo |
|---|---|---|---|
| GB400 | error | El archivo no cumple el esquema (pruebas/bot.json, pruebas/bot-<nombre>.json). El mensaje es uno de los de Errores de esquema. | Corrige en el guion la propiedad que indica ruta. Ver Guion del bot. |
| GB401 | aviso | el juego no trae guion de bot: `greengames probar` no puede verificar que se pueda jugar y terminar | Crea pruebas/bot.json con los pasos para ganar la partida. Ver Guion del bot. |
| GB410 | error | no existe la zona "{enZona}" en las escenasno existe la escena "{escena}"no existe … "{id}" en las escenas | Corrige el id: el destino de ir, la zona de enZona o la escena deben existir en el juego. |
| GB411 | error | no existe la pieza "{pieza}" en las escenas | Corrige el id de la pieza en el paso o en la condición, o agrega la pieza a una escena. |
| GB412 | error | "esperarPieza" necesita al menos una condicion | Agrega a esperarPieza al menos una condición: cerca (con radio), con, sin o giroY. |
| GB413 | error | "cerca" necesita un "radio" | Agrega radio junto a cerca. |
| GB414 | error | la dificultad "…" no existe en juego.json | En porDificultad y esperadoPorDificultad, usa solo ids declarados en dificultades de juego.json. |
| GB415 | aviso | el guion no dice con que resultado debe terminar la partida | Agrega "esperado": { "resultado": "victoria" } para que la prueba verifique que el juego se puede ganar. |
| GB416 | error | la condicion usa "con", "sin", "cerca", "giroY", "dato" o "existe" pero no dice de que pieza"es", "mayor" y "menor" comparan el valor de una senal: falta "senal" | Agrega "pieza": "<id>" a la condición si pregunta por una pieza, o "senal": "<nombre>" si compara el valor de una señal. Para la posición del jugador usa "jugador": { "cerca": [...], "radio": 1 }. |
| GB417 | aviso | el script nunca llama a juego.senalar('{senal}', ...) | Llama a juego.senalar('<nombre>') en el script, o corrige el nombre de la señal: si el script no la deja, la condición no se cumple nunca. |
| GB418 | error | "mantener" necesita "segundos" o "hasta" | Agrega segundos o hasta al paso, por ejemplo { "mantener": "accion", "segundos": 2 }. |
| GB419 | error | "aprobarCon" ({aprobarCon}) no puede ser mayor que la cantidad de semillas ({cuantas}) | Baja aprobarCon o agrega semillas: no puede pedir más corridas aprobadas que las que se corren. |
Paquete#
| Código | Nivel | Qué significa | Cómo resolverlo |
|---|---|---|---|
| GB501 | error | no es un paquete de Green Games de formato 1 | Genera el .ggx con greengames empaquetar: es un JSON comprimido con gzip que empieza con { "gbx": 1, ... }. |
| GB502 | error | el juego no tiene ninguna escena | Crea escenas/principal.json con piezas y apariciones. |
| GB503 | error | hay {claves} escenas y el maximo es 16 | Reduce la cantidad de escenas hasta el máximo. Ver Límites vigentes. |
| GB510 | error | tipo de recurso no admitido | Usa una imagen svg, png, webp o jpg. |
| GB511 | error | el tipo declarado "{tipo}" no corresponde a la extension (se esperaba "{tipo}") | Haz que el tipo del recurso corresponda a la extensión del archivo (por ejemplo image/png para .png). |
| GB512 | error | pesa … KB y el maximo por recurso es 2048 KB | Reduce la imagen o usa SVG. |
| GB520 | error | el paquete descomprimido pesa … MB y el maximo es 20 MB | Quita o reduce contenido: lo que más pesa suelen ser las imágenes de recursos/. |
| GB521 | error | el .ggx pesa … MB y el maximo es 5 MB | Reduce las imágenes de recursos/: es lo que más suele pesar. |
Láminas#
| Código | Nivel | Qué significa | Cómo resolverlo |
|---|---|---|---|
| GB600 | error | El archivo no cumple el esquema (laminas/<id>.json). El mensaje es uno de los de Errores de esquema. | Corrige en esa lámina la propiedad que indica ruta. Ver Escenas. |
| GB601 | error | el cuadro tiene {filas} fila(s) y la lamina mide {alto} de altola fila tiene {fila} caracter(es) y la lamina mide {ancho} de ancho | Cada cuadro necesita exactamente alto filas de ancho caracteres. Completa con . (transparente) o recorta. |
| GB602 | error | la fila usa el color "…" (numero …), pero la paleta tiene {paleta} color(es) | Usa solo caracteres que correspondan a un color de paleta (0 es el primero, 9 el décimo, a el undécimo) o agrega el color que falta a paleta. El punto . es transparente. |
| GB603 | error | el color "…" no existe | Usa un nombre de la paleta de Green Games (la sugerencia propone el más parecido) o un color "#rrggbb". |
| GB604 | error | la animacion nombra el cuadro {mala}, pero la lamina tiene {cuadros} | Corrige en animaciones el número de cuadro: los cuadros se cuentan desde 0 y el último es la cantidad de cuadros menos uno. |
| GB605 | error | hay {ids} laminas y el maximo es 128 | Reduce la cantidad de láminas: varias imágenes pueden ir como cuadros de una misma lámina. Ver Límites vigentes. |
| GB606 | error | el nombre de archivo "{id}" no sirve como id | Renombra el archivo: minúsculas, números y guiones, por ejemplo laminas/heroe-azul.json. |
Modelos, texturas y sonidos#
| Código | Nivel | Qué significa | Cómo resolverlo |
|---|---|---|---|
| GB700 | error | el modelo no trae su archivo .glbel documento no declara glTF 2.0 | Un modelo es un archivo .glb (glTF 2.0 binario) en modelos/<id>.glb. Otros formatos se convierten: conviértelo otra vez con el importador del editor (Archivo › Importar…) o con greengames importar: escribe un .glb que cumple el formato. |
| GB701 | error | el modelo pesa … KB y el maximo es … KB | Un .glb pesa como máximo 2 MB. Reduce triángulos o el tamaño de sus texturas; el importador lo hace con sus opciones de conversión. |
| GB702 | error | el documento del modelo es demasiado grande para revisarloel modelo trae {buffers} buffers y se admite uno (el trozo BIN)el buffer declarado no cabe en el trozo binario del .glbla vista de datos se sale del trozo binario o no apunta al buffer 0el accesor no declara bien su tipo o su cantidadel accesor no apunta a ninguna vista de datosel accesor apunta a una vista de datos que no existeel accesor lee mas alla de su vista de datosla imagen no esta incrustada en el .glb (falta "bufferView")la textura no apunta a una imagen del modelola textura apunta a un muestreador que no existeel material apunta a una textura que no existeel material no es un objetoel modo de transparencia no es OPAQUE, MASK ni BLENDla primitiva no declara atributosel atributo apunta a un accesor que no existela primitiva no tiene posiciones (POSITION)el accesor de posiciones debe ser VEC3 y traer "min" y "max"los atributos de una primitiva deben tener la misma cantidad de verticesJOINTS_0 y WEIGHTS_0 van juntoslos indices deben ser enteros sin signola primitiva apunta a un material que no existela cantidad de indices (o de vertices) no es multiplo de 3el esqueleto nombra huesos que no existenlas matrices del esqueleto no calzan con sus huesosla raiz del esqueleto no existeel nodo no es un objetoel nodo apunta a una malla que no existeel nodo apunta a un esqueleto que no existeel nombre de un nodo admite hasta 64 caracteresel nodo nombra un hijo que no existe"…" debe ser una lista de {largo} numerosel modelo debe traer exactamente una escena (trae {escenas})la escena nombra un nodo que no existela jerarquia de nodos tiene un ciclo o un nodo con dos padresel clip no es un objetoel muestreador apunta a accesores que no existenlos tiempos de un clip deben ser numeros de coma flotante con "min" y "max"el canal no apunta a un muestreador del clipel canal anima un nodo que no existe | El .glb está dañado o mal armado por dentro (buffers, vistas de datos, accesores o imágenes que no calzan). Conviértelo otra vez con el importador del editor (Archivo › Importar…) o con greengames importar: escribe un .glb que cumple el formato. |
| GB703 | error | el modelo apunta a un archivo o direccion externa ("uri") | Todo va dentro del .glb: el binario en su trozo BIN y las imágenes incrustadas, sin uri. Conviértelo otra vez con el importador del editor (Archivo › Importar…) o con greengames importar: escribe un .glb que cumple el formato. |
| GB704 | error | la extension "…" no se admite"extensions" debe ser un objeto | Solo se admiten las extensiones KHR_materials_unlit, KHR_materials_emissive_strength, KHR_mesh_quantization y EXT_texture_webp. La compresión de mallas también es una extensión: vuelve a exportar sin ella. Conviértelo otra vez con el importador del editor (Archivo › Importar…) o con greengames importar: escribe un .glb que cumple el formato. |
| GB705 | error | la clave "extras" no se admite en un modelo | Quita la clave extras: son datos libres que el motor no usa. Conviértelo otra vez con el importador del editor (Archivo › Importar…) o con greengames importar: escribe un .glb que cumple el formato. |
| GB706 | error | el modelo trae camaras y no se admitenlos accesores dispersos ("sparse") no se admitenlas texturas solo pueden usar el primer juego de coordenadas (TEXCOORD_0)los objetivos de deformacion no se admitensolo se admiten primitivas de triangulos (mode 4)el atributo "…" no se admitelas camaras no se admitenla interpolacion "…" no se admiteno se puede animar "…" | El modelo trae algo que el formato no admite: cámaras, objetivos de deformación, accesores dispersos, primitivas que no son triángulos o atributos fuera de la lista. Quítalo al exportar, o conviértelo otra vez con el importador del editor (Archivo › Importar…) o con greengames importar: escribe un .glb que cumple el formato. |
| GB707 | error | el modelo tiene {triangulos} triangulos y el maximo es {triangulosPorModelo} | Un modelo tiene como máximo 20 000 triángulos. Reduce triángulos; el importador lo hace con su opción de triángulos máximos. |
| GB708 | error | el modelo trae {pieles} esqueletos y el maximo es {esqueletosPorModelo}el esqueleto tiene {j} huesos y el maximo es {huesosPorModelo} | Hasta 4 esqueletos por modelo y 64 huesos por esqueleto. Quita huesos de dedos, cara o accesorios al exportar. |
| GB709 | error | el modelo trae {materiales} materiales y el maximo es {materialesPorModelo}el modelo trae {primitivas} primitivas y el maximo es {primitivasPorModelo}el modelo trae {nodos} nodos y el maximo es {nodosPorModelo} | Hasta 256 nodos, 32 primitivas y 16 materiales por modelo. Une mallas que compartan material. |
| GB710 | error | el modelo trae {imagenes} imagenes y el maximo es {texturasPorModelo} | Hasta 8 imágenes dentro de un modelo. Une texturas en una sola o quita las que no se usan. |
| GB711 | error | la imagen no es PNG, JPEG ni WebPla imagen declara "…" y su contenido es {tipo}la imagen mide {ancho} x {alto} y el maximo es {texturaLado} por lado | Las imágenes de un modelo son PNG, JPEG o WebP, de hasta 1024 píxeles por lado. Convierte o reduce la textura; el importador lo hace con su tamaño máximo de textura. |
| GB712 | error | el modelo trae {animaciones} clips y el maximo es {clipsPorModelo}el nombre de clip … no sirveel clip "{name}" esta repetido | Hasta 32 clips por modelo, cada uno con un nombre único de minúsculas, números y guiones, hasta 32 caracteres: caminar, ataque-fuerte. |
| GB713 | error | el clip no anima nadalos tiempos de un clip no pueden ser negativosel clip dura … s y el maximo es {clipSegundos} sel clip dura 0 segundos | Un clip anima algo, empieza en 0 o después y dura más de 0 y hasta 30 segundos. Recorta el clip o pártelo en varios. |
| GB714 | error | el modelo no tiene ninguna malla en su escenala caja del modelo mide … y debe medir entre {modeloLadoMinimo} y {tamanoMaximo} | El modelo necesita al menos una malla, y su caja debe medir entre 0,001 y 500 por lado. Una unidad del mundo es más o menos medio avatar de ancho: ajusta la escala al exportar o al importar. |
| GB715 | error | la propiedad "…" no se admite en los ajustes de un modelo | Revisa modelos/<id>.json: solo admite colision, que es caja, capsula, envolvente (de 4 a 32 puntos dentro de la caja del modelo) o ninguna. El importador genera la envolvente con su opción de colisión. |
| GB720 | error | hay {idsModelos} modelos y el maximo es 64 | Un juego trae hasta 64 modelos. Quita los que no se usan. |
| GB721 | error | hay {idsTexturas} texturas y el maximo es 64 | Un juego trae hasta 64 texturas sueltas. Quita las que no se usan. |
| GB722 | error | la textura no es una imagen png, jpg ni webppesa … KB y el maximo por textura es 1024 KBel contenido no es una imagen {tipo}la imagen mide {ancho} x {alto} y el maximo es 1024 por lado | Una textura suelta es PNG, JPEG o WebP, pesa hasta 1 MB y mide hasta 1024 píxeles por lado. El tipo se deduce de la extensión del archivo. Convierte o reduce la imagen; el importador lo hace. |
| GB723 | error | los modelos, texturas y sonidos suman … MB y el maximo es 12 MB | Los modelos, las texturas y los sonidos de un juego suman como máximo 12 MB. Reduce texturas y triángulos, o quita lo que no se use. |
| GB724 | error | el nombre de archivo "{id}" no sirve como id | El nombre del archivo es su id: minúsculas, números y guiones, hasta 48 caracteres, como modelos/robot-azul.glb. Renómbralo; el importador lo hace solo. |
| GB725 | error | hay {idsSonidos} sonidos y el maximo es 32el sonido no es un archivo wav ni mp3pesa … KB y el maximo por sonido es 1024 KBel contenido no es un sonido {tipo} | Un juego trae hasta 32 sonidos grabados, en WAV o MP3, de hasta 1 MB cada uno. Convierte el sonido, recórtalo o baja su calidad; el importador convierte WAV y achica los que pesan más de 1 MB. |
| GB730 | error | los modelos de la escena suman {trisDeModelos} triangulos y el maximo es 150000hay {piezasModelo} piezas con forma "modelo" y el maximo es 300 | Cada pieza que usa un modelo cuenta sus triángulos: una escena suma hasta 150 000 y tiene hasta 300 piezas con forma modelo. Usa menos copias o modelos más livianos. |
| GB731 | error | una pieza con forma "modelo" necesita decir cual: falta "modelo" | Una pieza con forma modelo dice cuál en modelo: el id de un archivo de modelos/. |
| GB732 | error | La pieza nombra en modelo un modelo que no está en modelos/. | Pon el archivo en modelos/<id>.glb o corrige el id: la sugerencia del validador lista los modelos del juego y propone el más parecido. |
| GB733 | error | la animacion de un modelo es el nombre de un clip, no un numeroel modelo "{modelo}" no tiene el clip "{animacion}" | animacion es el nombre de un clip que el modelo trae. La sugerencia lista los clips de ese modelo. |
| GB734 | aviso | "lamina" y "textura" no se usan en una pieza con forma "modelo""modelo" solo se usa con "forma": "modelo" (esta pieza es "{forma}")la pieza nombra una "lamina" y una "textura": se dibuja la texturauna imagen de texturas/ no tiene animaciones | Es un aviso: hay propiedades que no se usan con esa forma. modelo va solo con la forma modelo; lamina y textura no van en un modelo; si una pieza plana nombra lamina y textura, se dibuja la textura. |
| GB735 | error | Una pieza nombra una textura que no está en texturas/. | Pon la imagen en texturas/<id>.png (o .jpg, .webp) o corrige el id: la sugerencia lista las texturas del juego. |
| GB736 | aviso | la textura del material no se dibuja en una pieza con forma "{forma}""textura" en la pieza solo se usa con "forma": "lamina" (esta pieza es "{forma}") | Es un aviso: la textura no se dibuja ahí. Para cubrir una pieza con una imagen, va en material.textura; para una imagen plana, textura va en la pieza con forma lamina; un modelo trae sus propias texturas. |
| GB740 | error | El archivo no cumple el esquema (creditos.json). El mensaje es uno de los de Errores de esquema. | creditos.json es una lista de entradas { recurso, titulo, autor, licencia, origen?, cambios? }. Revisa la que dice ruta. |
| GB741 | error | el credito nombra "{recurso}", que no esta en el juegoel credito de "{recurso}" esta repetido | Cada crédito nombra un recurso que está en el juego (modelos/<id>, texturas/<id> o sonidos/<id>), una sola vez. Quita el crédito o corrige el nombre. |
| GB742 | aviso | {sinCredito} recurso(s) no tienen credito: …… | Es un aviso. Si lo hiciste tú, anótalo con "licencia": "propia" (el taller y el importador lo hacen solos). Si viene de otra parte, anota su autor y su licencia: debes tener derecho a usarlo en tu juego. |
Errores de esquema#
GB101 (juego.json), GB200 (una escena), GB400 (un guion del bot) y GB600 (una lámina) salen cuando el archivo no tiene la forma que pide su esquema. La ruta del problema dice en qué propiedad, y el mensaje es uno de estos:
se esperaba …, pero hay …no corresponde a ninguna de las formas validas: …se esperaba …, pero hay …debe ser exactamente …, pero hay …… no es un valor permitido. Opciones: …no puede estar vacioes muy corto: minimo {minLength} caractereses muy largo: {valor} caracteres, maximo {maxLength}… no tiene el formato esperado{valor} es menor que el minimo permitido ({minimum}){valor} supera el maximo permitido ({maximum})debe ser mayor que {exclusiveMinimum}, pero es {valor}debe tener exactamente {minItems} elementos, pero tiene {valor}debe tener al menos {minItems} elemento(s), pero tiene {valor}tiene {valor} elementos y el maximo es {maxItems}… esta repetidofalta la propiedad obligatoria "…"debe tener al menos {minProperties} propiedad(es)tiene {claves} propiedades y el maximo es {maxProperties}propiedad desconocida "…"
Para resolverlos, corrige esa propiedad: su tipo, su nombre o su valor. La forma de cada archivo está en Manifiesto, Escenas y Guion del bot.
Sigue con#
- La línea de comandos: cómo se corre
greengames validar. - Límites vigentes
- Guion del bot