← BibliotecaObjetomormon/medieval-characters
Clonar
fogon pieces add medieval-charactersgit clone https://git.fogon.gg/mormon/medieval-characters.gitfogon new medieval-characters --from medieval-charactersMedieval: personajes
Los personajes modulares low-poly de Quaternius, armados como en Medival y listos para three.js: una cabeza, la ropa por partes (cuerpo, brazos, piernas, pies), pelo, barba y lo que va encima (capucha, yelmos, corona, hombreras, bufanda), con tonos de piel, colores de pelo y cinco colores por oficio. Y las animaciones de la Universal Animation Library: caminar, correr, pelear con espada, lanzar un hechizo, cosechar, sentarse, bailar…
En la demo armás uno con los controles (o tocás un oficio, o «al azar») y abajo aparece la línea de código que lo hace: un clic y la copiás.
Qué trae
- 2 cabezas (hombre y mujer), 5 peinados y barba, 5 tonos de piel, 5 colores de pelo.
- 6 oficios: campesino, guardabosque, caballero (con armadura o con túnica), noble, mago y una armadura de placas hecha para Medival. Cada parte del cuerpo puede ser de un oficio distinto.
- 5 colores por oficio y por parte (el original y cuatro más).
- Encima: capucha, yelmo, yelmo con cuernos, corona, yelmo de placas; cinco hombreras; bufanda y gorguera.
- 87 animaciones sin desplazamiento (no mueven al personaje: lo movés vos), de un esqueleto humanoide de 65 huesos.
- 79 piezas en total, ~11 MB de modelos (comprimidos con meshopt) y 22 texturas (~1,7 MB).
Usarlo en tu juego
fogon pieces add medieval-characters
Eso trae client/medieval-characters/characters.ts (solo código: los modelos se cargan de la demo publicada en https://play.fogon.page/medieval-characters/medieval/, que los sirve a cualquier juego). Necesita three.
import * as THREE from "three";
import { loadCharacters, createCharacter, randomLook } from "./medieval-characters/characters";
await loadCharacters(); // una vez: las cuatro piezas del kit
const guard = createCharacter({ sex: "female", body: "knight", arms: "knight", legs: "knight", feet: "knight", helm: "armet" });
guard.object.position.set(2, 0, 0);
scene.add(guard.object);
guard.play("Sword_Idle");
const villager = createCharacter(randomLook());
scene.add(villager.object);
villager.play("Walk_Loop", { speed: 1.1 });
// en el bucle del juego, con los segundos desde el cuadro anterior:
guard.update(dt);
villager.update(dt);
// un golpe que se juega una vez y vuelve a esperar:
guard.play("Sword_Attack", { loop: false, onEnd: () => guard.play("Sword_Idle") });
Lo que exporta el módulo:
loadCharacters({ base?, onProgress?, manager? }) | Carga el kit (una vez). Devuelve un CharacterKit. |
createCharacter(look?, { clip? }) | Un personaje (lo que falte del look sale de DEFAULT_LOOK). Arranca con Idle_Loop. |
Character | object (lo que va a la escena: mira a +Z, pies en y = 0), play(clip, { loop, fade, speed, from, onEnd }), stop(), update(dt), clips, clip, pieces, triangles, mixer, action, dispose(). |
randomLook(rand?) | Un look al azar (con una función rand con semilla, siempre el mismo). |
SKINS, HAIRS, HAIR_COLORS, OUTFITS, HELMS, SHOULDERS, NECKS | Las opciones, con su nombre en castellano para mostrar. |
DEFAULT_LOOK, fullLook(), COLOR_VARIANTS | El look de partida, completar uno, cuántos colores hay. |
Un Look es: sex ("male"/"female"), skin, hair, hairColor, beard, hood, pauldron, helm, shoulder, neck, body, arms, legs, feet (cada una un oficio: peasant, ranger, knight, knightCloth, noble, wizard, plate) y colors ({ body: 3, legs: 2, … }, de 1 a 5).
Muchos personajes salen baratos: la geometría y los materiales se comparten entre todos, y cada combinación de color se arma una sola vez.
Cómo se anima
Cada parte (la cabeza, el torso, las piernas, el pelo…) trae su propia copia del esqueleto, y no todas en la misma pose de reposo: la cabeza viene en otra que la ropa, y las piezas de mujer en otra que las de hombre. Por eso no se juntan en un esqueleto (la cabeza quedaría separada del cuello). Cada personaje tiene un esqueleto invisible donde un AnimationMixer reproduce la animación, y en update() cada hueso de cada parte copia la posición y la rotación del hueso del mismo nombre. Así todas se mueven juntas, sin huecos, y las transiciones entre animaciones salen solas.
Usar los archivos sin internet
Los modelos y texturas están en public/medieval/ de esta pieza (fogon pieces no los copia: el código compartido llega hasta 6 MB). Copiá esa carpeta al public/ de tu juego y cargá desde ahí:
await loadCharacters({ base: "./medieval/" });
catalog.json lista las piezas de cada kit (con sus medidas) y las animaciones.
Límites
- Las animaciones no desplazan al personaje (sin «root motion»): para que camine, movés
object.positionvos, a la velocidad que te guste (Walk_Loopanda bien a ~1 m/s). - No trae objetos en la mano (espadas, escudos, antorchas): las animaciones de espada o de antorcha se juegan con las manos vacías. Las armas van en otra pieza; se cuelgan del hueso
hand_r/hand_lde una parte. - La armadura de placas es solo de hombre: una mujer usa las mismas piezas.
Créditos y licencia
Modelos de Quaternius: Ultimate Modular Characters (cabezas, pelo y oficios) y la Universal Animation Library 1 y 2 (las animaciones). La armadura de placas y las dos animaciones de jinete (Ride_Loop, Ride_Gallop_Loop) se hicieron para Medival. Todo es CC0: usalo como quieras, sin pedir permiso ni citar (aunque nombrar a Quaternius está lindo).
Publicado desde Medival, el juego donde estos mismos personajes son los jugadores y la gente de los pueblos.
Elegí un archivo.
| Versión | Cuándo | Peso | Commit |
|---|---|---|---|
| v1 en la demo | 11 de nov de 2026 | 13.5 MB | 5bc55b1 |
Todavía nadie publicó una versión hecha a partir de esta pieza.
Hacé tu versión de
Copiá este pedido y pegáselo a tu IA (Claude, ChatGPT…): arma tu versión con el código de este juego y la publica como un juego tuyo.