Editor de Logros#
El Editor de Logros define la lista de trofeos/logros que tu juego puede desbloquear — id,
nombre, descripción, ícono, puntos, secretismo y cómo se desbloquea cada uno. Guarda en el
achievements.json del proyecto.
Llegas a él desde el Hub (con el dev server corriendo). Los logros se listan a la izquierda, cada uno con una pequeña miniatura de su ícono; + Logro crea uno nuevo, y al seleccionar una tarjeta se abre su formulario de detalle.
Modelo de puntos#
Un desplegable en la barra de herramientas fija el modelo de puntos a nivel de proyecto:
- numeric — un total tipo Gamerscore (cada logro lleva un valor de
points). - tiers — graduación de trofeo bronce/plata/oro en vez de puntos.
- none — los logros existen como una simple lista de chequeo, sin puntuación.
Esto solo cambia cómo presentas los logros en el juego — los campos subyacentes (points,
tier) siempre se guardan, así que cambiar de modelo después no pierde datos.
Campos#
- ID — la clave estable. Es lo que referencia el token de efecto
UNLOCK:<id>y los datos de guardado, así que trátalo como permanente. Si lo renombras antes de publicar, el editor migra con él los dos registros de traducción: al salir del campo se re-direccionanach_<id>_name/ach_<id>_descy se mueve lo que la tabla de strings tenga ahí — todos los idiomas, no solo eldefaultLocale. Si la dirección nueva ya tiene traducciones guardadas —normalmente una huérfana que dejó un logro borrado— el editor se detiene, te muestra ese texto idioma por idioma y te pregunta: usarlas para el logro renombrado (tu propia redacción del idioma fuente sigue mandando, así que solo heredas los otros idiomas — que es lo que quieres al recrear algo que borraste), o descartarlas y mover las tuyas encima. Cancelar deja todo exactamente como estaba. Los tokensUNLOCK:<id>de reglas y cutscenes no se reescriben — esos los arreglas a mano. - Nombre / Descripción — se autoran monolingües en el
defaultLocaledel proyecto (se muestra en la etiqueta del campo, ej. "Name (ES)"). Cada uno tiene detrás un lid (ach_<id>_name/ach_<id>_desc) para que el Editor de Traducción complete los demás idiomas del proyecto más tarde — nunca autoras un par{es,en}directamente aquí. - Ícono — una ruta bajo
assets/achievements/, que se llena escribiéndola o con el botón 📁, que abre el selector compartido de explorar/importar: elige un PNG existente deassets/achievements/, o importa uno desde disco (se deposita del lado del servidor comoassets/achievements/<id>.png). Una miniatura junto al campo muestra el ícono a medida que escribes o lo eliges; si todavía no hay ícono, o la ruta no resuelve a una imagen, verás un marcador de posición genérico en su lugar. - Puntos — solo relevante bajo el modelo
numeric, pero siempre se guarda. - Tier —
bronze/silver/gold/ ninguno — solo relevante bajo el modelotiers. - Secreto (hidden) — cuando está marcado, la lista de logros en el juego enmascara el
nombre, descripción e ícono con
???hasta que el jugador realmente lo gane.
Modo de desbloqueo#
Cada logro se desbloquea de una de dos formas:
- Explícito — disparado por un token de efecto
UNLOCK:<id>(tokens de efecto) en una reacción, diálogo o cutscene, donde decidas que ocurre el momento. - Condición — se desbloquea solo cuando un predicado se vuelve verdadero, evaluado en puntos de enganche generales del juego (después de una reacción, cambio de cuarto, cambio de inventario — nunca por frame). Cambiar a Condición revela el mismo constructor de predicados usado en las herramientas de puzzle y reacciones, autoconectado a los cuartos, items y flags del proyecto; una condición vacía nunca se autodesbloquea (si no, se dispararía al instante).
Flujo de trabajo#
- + Logro y dale un ID estable.
- Completa Nombre y Descripción en el idioma por defecto del proyecto.
- Fija el Ícono con el selector 📁 de explorar/importar.
- Ajusta Puntos/Tier según el modelo de puntos del proyecto, y marca Secreto si debe quedar oculto hasta ganarlo.
- Elige Explícito (coloca un token
UNLOCK:<id>en algún lado) o Condición (construye el predicado de desbloqueo aquí mismo). - Guardar para escribir
achievements.json.
Los puntos y la completitud siempre se calculan, nunca se guardan. El motor deriva los puntos ganados/totales y el estado de 100%-completado del registro más el set de logros desbloqueados del jugador al momento de leer — no hay nada que sincronizar a mano.
Renombrar migra sus traducciones, no sus referencias. Editar el ID mueve automáticamente sus textos de nombre/descripción a la nueva dirección — si el destino ya tenía texto huérfano (de un logro borrado), te pregunta si adoptarlo o descartarlo. Lo que renombrar NO arregla: cualquier token
UNLOCK:<id>, predicado de condición o dato de guardado que apuntaba al ID viejo sigue apuntando al ID viejo. Renombra con confianza antes de publicar; después, trata el ID como el contrato que siempre fue.Borrar uno ahora ofrece llevarse sus traducciones. La pregunta llega al apretar Guardar, no al apretar Borrar — hasta ese momento el logro sólo desapareció de la pantalla, y quemar sus filas antes te dejaría con un logro vivo y las traducciones muertas si cierras sin guardar. El diálogo muestra el texto de cada fila que va a sacar, en todos los idiomas que tenga, y cerrarlo significa conservar. Conservar es una respuesta de verdad: una fila guardada es lo que permite que un logro recreado adopte sus traducciones viejas, y el Doctor del Proyecto puede barrerla después si nunca vuelve.