⛽ Ignitor Docs ← getignitor.com
🇺🇸 EN 🇪🇸 ES

Editor de Personajes#

El Editor de Personajes define el elenco de tu juego: los personajes jugables que controlas y los NPCs que pueblan tus cuartos. Para cada uno fijas su sprite, cómo camina y habla, cómo proyecta su sombra, y (para los NPCs) las rutinas ambientales que sigue cuando no lo estás manejando. Guarda en el characters.json del proyecto.

Llegas a él desde el Hub (con el dev server corriendo). Los personajes se listan a la izquierda; + Add Character crea uno nuevo, y al seleccionar un personaje se abre su panel de detalle. 📥 Import Chars crea un lote desde una carpeta de sprites PNG: un PNG se vuelve un personaje (con los mismos defaults que + Add Character), tras un modal de revisión donde defines el id de cada uno.

Al volver, el editor reabre el personaje que estabas editando, no el que quede primero en el roster. Se recuerda por id, así que reordenar la lista (o borrar a otro) no te deja calladamente sobre un personaje distinto; si el que tenías ya no está, te toca el primero, como antes. Se lleva por proyecto.

La pantalla del Editor de Personajes: la lista de personajes a la izquierda y los ajustes de sprite/comportamiento a la derecha.
Editor de Personajes: lista de personajes, ajustes de sprite y comportamiento.

Sprite y vista previa#

Cada personaje apunta a un sprite mirando a la izquierda (assets/sprites/…) vía el campo de ruta o el selector 📁. El motor deriva las demás orientaciones de ahí: la derecha es espejada, y la carpeta animations/ junto al sprite aporta los clips de caminar e idle. Haz clic en ▶ en cualquier animación de la lista para reproducirla en el retrato; cicla los cuatro lados por turno y corre al speed del propio clip, así que el ritmo coincide con el del juego.

Bajo el campo de ruta del sprite hay una fila de botones que actúan sobre él: 📁 para elegir otro, ✎ para editarlo, y 🎬 para mandarlo a una animación.

✎ lo abre en el modal compartido de pixel-tweak (el mismo workspace de pintar · escalar · rotar · deformar que usan los editores de Animaciones, Ítems y Cursores), así arreglas un píxel perdido o remodelas el arte sin salir a un editor externo; la vista previa se refresca al guardar. Trae un guard específico de personajes: si el sprite no vive en la carpeta assets/characters/<id>/ de este personaje (porque es el sprite default compartido, o uno que reusaste de la carpeta de otro personaje), editarlo cambiaría ese arte para todos los personajes que lo apuntan, así que el editor avisa y te pide confirmar antes de abrir.

🎬 convierte el sprite por defecto en material de animación, que suele ser como arranca la primera animación de un personaje. Eliges una animación y una dirección, y el sprite se añade como último fotograma de ese lado; el editor sugiere el lado que menos fotogramas tiene hasta ahora.

El mismo diálogo ofrece además + nueva animación, así que nunca estás limitado a las animaciones que el personaje ya tiene: al elegirla le pones nombre (idle, walk, blink, o uno propio; sólo se sugieren los nombres que a este personaje aún le faltan), sembrada con el sprite como un solo fotograma en las cuatro direcciones, el lado derecho espejado del izquierdo, lista para abrir en el Editor de Animaciones. Un personaje que sólo tiene ciclo de caminata consigue así su idle o su parpadeo. Si todavía no tiene ninguna animación, el botón va directo ahí.

En los dos casos el sprite se copia al archivo de la propia animación en vez de referenciarlo, así retocar ese fotograma más tarde nunca alcanza al sprite por defecto, ni a ningún otro personaje que lo comparta. Si la copia no se puede hacer, no se añade nada y el default queda intacto, en vez de dejarte un fotograma apuntando a un arte que nunca se duplicó.

Un botón 🎬 junto al sprite envía el sprite por defecto a una de las animaciones del personaje. Si el personaje ya tiene animaciones, abre un selector chico (qué animación, qué lado, sugerido como el lado con menos frames) y agrega el sprite como frame nuevo ahí. Si el personaje todavía no tiene ninguna, ofrece sembrar una desde cero en vez de dejarte en un callejón sin salida: eliges idle, walk, o un nombre propio, y crea una animación en loop con el sprite como frame único en las 4 direcciones (la derecha espeja la izquierda, según la convención del proyecto de que el sprite mira a la izquierda). En cualquiera de los dos casos el sprite se copia a su propio archivo bajo la animación; retocarlo después en el Editor de Animaciones nunca muta el default.png compartido.

Sandbox de vista previa#

🎚️ Preview sandbox abre un panel movible que responde lo que el retrato no puede: ¿de qué tamaño es este personaje contra el mundo, y contra el resto del elenco? Elige un personaje de comparación y los dos quedan parados en el mismo piso; al arrastrar cualquiera, los pies se enganchan a una línea base común para que la comparación sea honesta (mantén Alt para arrastrar libre). Con (suelo vacío) elegido, el readout da la altura en píxeles de cada uno en pantalla y la escala que le aplica el área caminable donde está parado.

Si en cambio eliges un cuarto, el panel compone el frame real del juego alrededor de ellos: la sala recortada en su viewport (con sliders de cámara en salas que scrollean), FX, walk-behinds, capas de parallax, zonas de luz, arte de hotspots y la barra GUI principal real del proyecto (la misma composición que dibuja el sandbox del Editor de Cuartos, por las pasadas del propio motor y no por una maqueta). Cada una es un toggle con repintado inmediato, y el readout pasa a mostrar las dimensiones de la sala, la resolución del proyecto y la GUI en juego. Aquí es donde compruebas un tamaño contra la barra que se come el fondo de la pantalla, o contra el walk-behind por detrás del cual tiene que pasar el personaje. Arrastrar es local al sandbox en los dos casos: nunca escribe una posición en ningún lado.

Propiedades#

  • ID: la clave estable del personaje (alex, bern…). Es lo que referencian las reglas, inventarios y tokens de efecto, así que trátalo como permanente; renombrarlo deja huérfano todo lo que lo apunte (animaciones y carpetas de arte incluidas); nada se mueve con el id.

El id de un personaje nuevo se deriva del nombre y lo sigue (Nurse Edna → nurse_edna; acentos y espacios se pliegan) hasta que el id se usa: teclearlo a mano, guardar el roster, guardar una animación con ese id o importar un sprite a su carpeta lo fija, así que corregir un error del nombre más tarde no le cambia el id por debajo a su arte. Los ids llevan minúsculas, dígitos y _, empiezan con letra, no pueden ser player (reservado para «a quien estés controlando») y tienen que ser únicos. Hay una regla más, y existe porque las animaciones se emparejan con los personajes por prefijo: un id no puede ser otro id seguido de _. Con nurse_edna en el roster, nurse se rechaza (el editor nombra el id con el que choca y propone nurse2); si no, nurse_edna_walk podría ser de cualquiera de los dos. ed y edward sí conviven. El campo se pone rojo en cuanto tecleas un id inválido, un aviso arriba del roster lista los choques que ya traiga el proyecto (con link al Doctor del Proyecto), y Guardar se niega mientras un id nuevo o cambiado rompa una regla. Los ids que ya estaban guardados antes de estas reglas no lo bloquean (puedes cambiar un color en un proyecto con un Bernard viejo) y el aviso los sigue listando hasta que los arregles. - Name: el nombre visible en el juego. - Initial player: marca el personaje con el que empiezas a jugar. Es exclusivo: marcar uno lo desmarca en todos los demás. Si los dejas todos sin marcar, el motor recurre al primer personaje. - Walk speed: un knob rotativo que fija la velocidad de movimiento directamente en píxeles por segundo (walkSpeed, 150 a 1050); doble-clic para resetear al default de 460. - Size adjust: un knob rotativo, un porcentaje relativo a la size class del proyecto (−100…+400, doble-clic resetea a 0). La size class fija la base (un personaje es una fracción del alto lógico de pantalla); esto ajusta a este personaje por encima o por debajo sin re-autorar el sprite. En el extremo inferior del rango (−100) el personaje encoge a ~1% de su size class y queda efectivamente invisible en pantalla; el editor muestra una advertencia en ese valor, tanto al arrastrar el knob hasta ahí como al cargar un personaje ya guardado con ese valor.

El rango llega a +400 (×5) porque el arte de baja resolución en un proyecto de alta necesita más que duplicarse: un sprite de 48px de alto tiene que crecer unas 4× para ocupar el cuarto de pantalla que ocupa un protagonista. Pasado +150 (×2.5) aparece una segunda etiqueta que nombra el factor al que estás; a esa altura estás agrandando píxeles, y lo que realmente se ve bien es redibujar el sprite a la escala a la que corre el proyecto. Para un valor exacto usa la cajita numérica que está al lado del knob: en un rango tan amplio, tipear le gana a arrastrar. - Float height: un knob rotativo (0 a 1000px, doble-clic resetea a 0) que eleva el sprite dibujado por encima del ancla de suelo sin mover la posición real del personaje, para personajes flotantes/voladores. El ancla de suelo sigue rigiendo los límites caminables, el orden de profundidad y la sombra proyectada; solo el sprite se eleva. - Idle delay: un knob rotativo (0 a 10s) que mantiene el primer fotograma de la animación idle totalmente quieto ese tiempo tras asentarse el personaje, antes de que arranque su inquietud idle ambiental. Cero = la inquietud empieza de inmediato; un par de segundos hace que un personaje se sienta más calmo y menos nervioso al estar parado. - Speech color: el color del texto hablado (SAY) de este personaje, por selector o hex. Walk speed, size adjust y speech color comparten una fila. Si lo dejas vacío (la muestra se ve punteada y dice automático), el juego elige por ti: ámbar para el personaje que controlas, azul para los demás. Los personajes nuevos empiezan vacíos, así el elenco se lee claro antes de que elijas un solo color; borrar el hex vuelve a automático. - Theme: un tema musical opcional por personaje, elegido de los ids de audio del proyecto. - Shadow: activa/desactiva la sombra proyectada y ajusta su opacidad, offset X/Y y radio. - Speech bubble: un multiplicador de tamaño por personaje más un override de mostrar (inherit / on / off) que gana sobre el ajuste global de bocadillo. El globo ya se ancla solo al pixel visible más alto del sprite; un knob de Ajuste Y afina ese anclaje (+ lo baja, − lo sube; 0 = totalmente automático) para sprites cuyo arte necesita un poco de holgura. - Hablar con: qué pasa cuando el jugador le habla a este personaje, armado sin salir de la página. Elige un modo: - Línea: el personaje contesta con una frase que escribes aquí. - Diálogo: Talk to abre una conversación con opciones. Elige un diálogo que ya exista, o Nuevo diálogo… crea uno a partir de lo primero que dice el personaje y se lo asigna; las opciones del jugador las agregas después en el Dialog Editor. - Cadena: una cadena de efectos completa (flags, objetos, cambios de sala…).

Es la misma fila que el Reactions Editor muestra para un personaje: editarla en un lado edita lo mismo en el otro. Si hay un diálogo con exactamente el id de este personaje, Talk to siempre abre ese diálogo primero; la fila te avisa cuando eso tapa lo que armaste aquí.

Behaviours (rutinas de NPC)#

La pestaña Behaviours es donde un NPC recibe rutinas ambientales: listas de pasos que se ejecutan solas, dirigidas por el secuenciador core/behaviours.js. Un personaje puede tener varias rutinas con nombre; cada una lleva su propio id, y ese id es exactamente lo que arranca un token de efecto BEHAVIOUR:<id> (y detiene STOPBEHAVIOUR). Las tarjetas de rutina se colapsan para mantener la lista ordenada, y ⧉ Duplicar clona una rutina entera (pasos, loop y velocidad incluidos) como punto de partida para una variante.

Cada rutina es una lista ordenada de pasos, de tres tipos:

  • go: caminar a algún lado: un hotspot, coordenadas fijas o su punto de casa, opcionalmente en otro cuarto.
  • wait: pausar N segundos.
  • do: ejecutar una lista de tokens de efecto (reproducir una animación, decir una línea, encender un flag; cualquier cosa que el sistema de efectos pueda hacer), con un sostén opcional después.

Reordena los pasos con ▲ / ▼, pon la rutina en loop, y opcionalmente dale un override de velocidad (un knob de velocidad de caminata solo para esa rutina). Cuando el NPC está en pantalla camina los pasos con pathfinding real; fuera de pantalla la misma rutina se resuelve como un temporizador de viaje abstracto, así el mundo sigue moviéndose sin renderizarlo.

Flujo de trabajo#

  1. + Add Character y dale un ID y un Name estables.
  2. Apúntalo a su sprite mirando a la izquierda, y revisa la vista previa con ▶.
  3. Ajusta walk speed, size adjust, speech color, shadow y bubble.
  4. Marca Initial player en el que arranca el juego.
  5. Para un NPC, añade una rutina ambiental en la pestaña Behaviours.
  6. Save para escribir characters.json.

El ID es el contrato. Las reglas, inventarios y tokens de efecto (SWITCHCHAR, GIVEITEM:<item>|<personaje>, FOLLOW…) referencian a un personaje por su ID. Elígelo una vez y déjalo: renombrarlo rompe cada referencia, igual que los IDs de verbo y las claves de hotspot.