Sangre Figuras - javialexis06-cyber/JUEGO-ANIVERSARIO-ESPOSA GitHub Wiki
Estado: Catálogo del juego existente. Los ecos de dioses no equivalen a sus identidades divinas.
Todo lo de aquí se hace por código en Blender (personajes/blender/sangre_*.py) y sigue el «Contrato de arte» de
docs/sistemas/sangre-y-ceniza.md. Esta guía dice cómo vienen los archivos por dentro para usarlos sin adivinar.
| Archivo | Qué trae |
|---|---|
public/modelos/sangre/enemigos.glb + enemigos.json
|
enemigo_<id> |
public/modelos/sangre/jefes.glb + jefes.json
|
jefe_<id> |
public/modelos/sangre/armas.glb + armas.json
|
arma_<id> |
public/modelos/sangre/proyectiles.glb + proyectiles.json
|
p_<id> |
public/modelos/sangre/cosas.glb + cosas.json
|
c_<id> |
public/modelos/ropa/sangre_<clase>_{el,ella}.glb |
traje de la clase con el esqueleto de la ropa |
public/sangre/iconos/<id>.webp |
íconos de 128 px, fondo transparente |
public/sangre/retratos/<clase>_{el,ella}.webp |
retratos de cuerpo entero para escoger clase |
Los .json de cada grupo dicen, por figura: altura, radio (del cuerpo, para choques), alcance (hasta la punta
de brazos, alas o armas), tris (triángulos) y piezas con el pivote de cada una (coordenadas de Blender, metros,
z arriba) y sus triángulos. Algunas figuras traen datos extra: bioma, vuela: 1 (está modelada a la altura de
vuelo, no hay que subirla), cuadrupedo: 1.
- Cada figura es un vacío raíz (
enemigo_zombi) en el origen, con los pies en el suelo, mirando hacia +Y de Blender = −Z de three.js (el exportador ya convierte a y-arriba, igual queaTres). Metros reales: el zombi mide 1,13 m. - Sus hijos directos son las piezas:
cuerpo,cabeza,brazo_izq,brazo_der,pierna_izq,pierna_dery, según el bicho,mandibula,ala_izq,ala_der,cola,extra_*. Cada pieza tiene el origen en su articulación (cadera, cuello, hombro, bisagra de la mandíbula): basta girarla. -
Ojo con los nombres en three.js: el
GLTFLoaderno deja nombres repetidos y les agrega_1,_2… (lacabezadel esqueleto llega comocabeza_1). Por eso cada pieza trae tambiénuserData.piezacon su nombre limpio: búscalas por ahí (o.userData.pieza === 'cabeza') o quitando el sufijo (nombre.replace(/_\d+$/, '')). - La izquierda de la figura es −X (mira a +Y):
brazo_izqestá en x negativa. - Una pieza con un solo material llega como
Mesh; con varios (piel + hierro + ojos) llega comoGroupcon unMeshpor material. Para dibujar cientos con instancias: unInstancedMeshpor (figura, pieza, material).
El color, la mugre, el óxido, el musgo, la sangre seca y la sombra de contacto (oclusión) vienen horneados en los
colores de los vértices (COLOR_0); los materiales son blancos y solo cambian el brillo:
| Material | Qué es | Notas |
|---|---|---|
sg_base |
tela, carne, hueso, cuero, piedra, madera, pelo |
userData.fieltro = 1: recibe el relieve de fieltro de prepararMateriales
|
sg_metal |
hierro, oro viejo, acero | metálico 0,75; sin mapa de entorno se ve oscuro, súbele envMap o baja metalness si hace falta |
sg_brillo_<color> |
ojos, brasas, runas, velas | emisivo (rojo, ambar, verde, azul, violeta, blanco, oro, fuego); userData.brillo trae el color |
sg_espectro |
fantasmas y velos | semitransparente: transparent, depthWrite = false
|
Élite: clona sg_base de esa figura y ponle un color de tinte (multiplica los colores de los vértices; p. ej.
#ffb3a6 vampírico, #b8d0ff escudo, #ffd27a dorado), cambia el emissive de sus sg_brillo_* (dorado o
blanco) y agrándala 1,25×. Así cada élite se distingue de lejos sin otro modelo.
- Caminar:
pierna_izqypierna_dergiran alrededor del eje X local en contrafase (±25°); los brazos al revés de las piernas de su lado; elcuerposube y baja un poco y lacabezase mece. - Cuadrúpedos (
cuadrupedo: 1, perro, rata, hombre lobo a cuatro patas…):brazo_*son las patas delanteras ypierna_*las traseras. Trote:brazo_izqen fase conpierna_der. -
mandibula: gira en X (abrir hacia abajo 15-25°) para morder o gritar. - Alas (
ala_*): aletear girando alrededor del eje Y de Blender (adelante-atrás de la figura; −Z en three.js), ±35°, la izquierda al revés de la derecha. -
cola: mecer alrededor del eje Z de Blender (Y de three.js). - Morir: soltar las piezas (cada una ya tiene su pivote) o tumbar la raíz.
zombi, zombi_gordo (panza cosida con bilis verde), esqueleto (casco y espada), esqueleto_arquero (capucha, arco y
carcaj), cuervo, perro_huesos, ghoul (agachado, brazos largos, mandíbula), arana_cripta (8 patas: las 4 de cada lado
en pierna_izq / pierna_der; quelíceros en mandibula), espectro (translúcido, sg_espectro, flota),
minero_maldito (casco con vela, farol al cinto con marca llama, pico, cristales de sangre), rata_peste (cuadrúpeda,
cola), abominacion (tercer brazo extra_brazo, cuchilla en la mano derecha), lacayo_explosivo (barril de pólvora
con la mecha encendida: marca llama), monje_caido (vela en la mano: marca llama), gargola (alas y cola de
piedra), inquisidor_muerto (máscara de hierro, hierro de marcar al rojo: marca llama), nigromante (bastón con
calavera y llama verde: marca llama), vampiro (capa de cuello alto), novia_vampira (velo y rosa marchita),
hombre_lobo (mandíbula y cola), caballero_muerte (élite común, elite: 1, mandoble en la mano derecha).
Los bichos del botín (sangre_enemigos4.py, como los lootbugs de Deep Rock; no pegan, huyen): rata_tesoro (rata
gorda con un costal de monedas al lomo, una gema y un diente de oro), rata_dorada (toda de oro, con corona,
cadena y gemas: la rara) y ladron_tumbas (encapuchado con pañoleta roja y ojos que brillan, pala, farol verde y un
costal con candelabro y cáliz).
-
jefe_golem_osarios(3,2 m): gigante de tierra de tumba, huesos y calaveras con un alma verde en el pecho (marcaluz); puños de calaveras;mandibula. -
jefe_abadesa(2,7 m, flota,sg_espectro): monja banshee con la boca abierta (mandibula), brazos larguísimos ycolade jirones. -
jefe_gusano_sangre(4 m,sale_del_suelo: 1): elcuerpoes el tramo que sale del cráter (con las rocas); lacabezase dobla desde el cuello y lamandibulason los cinco pétalos de la boca (abrir = escalar o girar hacia afuera);extra_tentaculo_izq/der. Marcaluzen la garganta. -
jefe_obispo_hueco(2,7 m): mitra dorada, casulla carmesí quemada, el pecho abierto con un corazón en llamas (marcaluz) y el báculo encendido en la mano derecha. -
jefe_conde(2,8 m,fases: 2): señor vampiro con corona de púas, espada de sangre (marcapunta),extra_capa(pivote en los hombros: mecerla) yextra_alas(alas de murciélago enormes): escóndelas en la fase 1 y muéstralas en la fase 2.
- Recogibles (livianos):
c_alma_azul,c_alma_verde,c_alma_roja(flotan; marcaluz),c_oro,c_hierro_negro,c_sangre_cristal,c_pierna_pollo,c_llave. - Cofres:
c_cofreyc_cofre_reliquiacon la tapa aparte (extra_tapa, pivote en la bisagra de atrás: abrir = girar en X hacia atrás). -
c_campana_extraccion: campana de bronce de 3,5 m con runas rojas;extra_cadenas(suben al cielo: bajarla todo junto) yextra_badajo(mecerlo al sonar). Marcaluzadentro. -
c_altar_sangre(cristal de sangre clavado, velas y sangre),c_carreta(para los rieles, conextra_rueda_delyextra_rueda_trasque giran en X),c_pozo_almas,c_forja(marcallama). -
c_prisionero_cadenas: persona por piezas (cuerpo, cabeza, brazos, piernas) +extra_postecon las cadenas: al liberarlo se esconde el poste y camina detrás.c_guardia_real: caballero aliado del monarca, por piezas. - Construcciones:
c_torreta_ballesta(extra_arcogira en Z; marcapunta),c_trampa(extra_quijada_a/bse cierran girando en X),c_totem_maleficio,c_plataforma; yc_tumba_abierta(sepulturero). - Objetivos secundarios:
c_huevo_dragon,c_frasco_alquimia,c_rosa_velo(rosa negra de tallo largo con el corazón rojo que brilla, sobre piedritas),c_pluma_grifo(pluma dorada con chispas; el juego la dibuja casi acostada y meciéndose) yc_hongo_tumba(montoncito de hongos pálidos de sombrero verde sobre un hueso); el juego dibuja estos tres más grandes que su modelo (×2,3, ×1,8 y ×2) para que se vean desde arriba entre la horda. Y ademásc_espiga(las espigas que curan del campesino) yc_bengala. -
c_sepulcroyc_sepulcro_abierto(la etapa final): grada, cajón con calavera y alas de murciélago en relieve, columnas torcidas y runas de ceniza; el cerrado con la tapa tallada, la efigie de un caballero, cadenas de eslabones y candado, y grietas de fuego; el abierto con la tapa partida, cama de brasas, huesos y cadenas rotas. El juego cambia uno por otro al abrirse (y le pone luz roja o de fuego). -
c_ataud_suministrosyc_ataud_abierto(el cofre de suministros): ataúd de madera negra (contorno de ataúd de verdad, angosto en los pies) con flejes, asas de argolla, la campanita dorada de las Santas y su cruz en la tapa, dos lacres rojos y las cuatro cadenas de eslabones que suben a una argolla (baja colgado de ellas); abierto, la tapa tirada al lado, la paja y la reliquia que brilla morada, y las cadenas rotas en el piso. - Minerales (
MINERALESensangre_cosas.py):c_veta_<id>son tres racimos de cristales de seis caras metidos en la cara de la pared (crecen hacia +Y de Blender, que el juego gira hacia lo abierto; la roca la pone la pared blanda) yc_mineral_<id>el pedazo suelto (piedrita con su racimo; el juego lo dibuja ×1,7). Ids: plata, chispa, gema, escarcha, polvo, esmeralda; los brillosplata,ambar,violeta,hielo,estrellayesmeraldaestán enBRILLOSdesangre_comun.py. - Reglas de los biomas:
c_veta_grisu(ampollas de gas verde, grietas que brillan y la cruz de cal de los mineros; va sobre la pared como los cristales),c_columna_hueso(basa y capitel de piedra, fuste con cuatro anillos de calaveras y fémures cruzados, grietas arriba; ocupa la celda sola),c_pinchos_placayc_pinchos_puas(la reja de 1 × 1 m con sus agujeros y las 16 púas aparte, que el juego sube y baja). Las armaduras del castillo usanc_guardia_real; el campanario, la campana de la defensa (c_campana); la vagoneta suelta, la carreta.
-
arma_<id>: la piezacuerpocon el origen en la empuñadura (donde va la mano). El arma crece hacia +Z de Blender (+Y de three.js) y el filo o la cara mira a +Y de Blender; la ballesta y el arco apuntan a +Y (hacia adelante). Medidas para un muñeco de ≈1 m (la espada mide 0,74 m, la lanza 1,24 m). - Lo que se mece va aparte:
extra_boladel mangual (pivote en la punta del mango) yextra_incensario(cuelga del aro de la mano). - Marcas (vacíos hijos de la raíz, con
userData.marca):punta(de donde sale el golpe, el disparo o el chorro) yllama(antorcha, incensario, bomba: ahí va unaPointLight). También están enarmas.json. - Hechas: espada_larga, horca, grillete, maza, escudo, ballesta, martillo, frasco, pala, incensario, hacha_verdugo, baston_cuervos, laud, guadana, antorcha, estaca, lanza, mangual, daga, arco, y además cetro, hoz, pico, bomba, agua_bendita, grimorio y cuchillo_carnicero.
-
p_<id>(proyectiles): centrados en el origen y volando hacia +Y de Blender; muy livianos (56 a 360 triángulos): virote, flecha, estaca, frasco_roto, nota_musical, pluma_cuervo, hueso, bola_fuego (marcallama), rayo_sagrado, cadena_eslabon.
public/modelos/ropa/sangre_<clase>_{el,ella}.glb traen el mismo esqueleto que la ropa de la casa: se cargan y
se amarran a los huesos del muñeco igual que Vestuario.cargar (src/casa/ropa.ts) o ponerCasco del retrete
(src/casa/cohete.ts): cargarAnimado, SkeletonUtils.clone, y m.bind(...) con los huesos del personaje por
nombre. Cada traje es un solo archivo con todo (camisa, pantalón o falda, botas, capa, corona o sombrero, grilletes…).
public/modelos/sangre/trajes.json dice, por clase, qué partes de fábrica tapa (oculta: arriba, abajo,
pies, copete, medias): son las claves de TAPA de src/casa/ropa.ts, así que basta juntar esos prefijos y
llamar personaje.tapar(prefijos). También trae los triángulos de cada versión.
La mugre (oclusión, barro abajo, manchas y sangre seca según la clase) viene en los colores de los vértices y
multiplica el color de cada material; los materiales son los de la ropa (userData.fieltro para el relieve).
Hechos: monarca (corona abollada con una punta rota, manto raído con huecos, jubón de terciopelo con bordados y cadena de mando; la reina con falda larga), campesino (sombrero de paja deshilachado, camisa de lino remangada, chaleco remendado, polainas de tela; ella con falda y delantal) y prisionero (túnica de costal hecha jirones, grilletes con la cadena rota, collar de hierro, pies vendados y la bola de hierro arrastrando del tobillo izquierdo).
Para que el código de src/sangre/ encuentre todo con sus propios nombres, algunos nodos vienen repetidos con otro
nombre (son alias: comparten la misma malla, no pesan más):
- Armas (
datos/armas.ts → modelo):arma_baston= bastón de cuervos,arma_libro= grimorio; y además armas propias paraestandarte,honda,bola_hierro(conextra_bola),punos,lanza_justa,trabuco,linterna(marcallama),campana_mano,cruz,gancho,soga,vudu,flauta,tambor,sierrayhacha. - Proyectiles:
p_rayo= rayo sagrado; yalma,bola_hierro,bola_puas,bomba,cruz,daga,escudo,frasco_agua,frasco_fuego,frasco_hielo,gancho,guillotina,hacha,pagina,pico,piedra,sierra,yunque. - Cosas por piezas:
c_prisionero= prisionero encadenado,c_campana= campana de extracción,c_torreta= torreta de ballesta,c_totem= tótem de maleficio,c_aliado_caballero= guardia real; y ademásc_aliado_ballestero,c_santuario(santa encapuchada, velas y runas violetas) yc_cofre_maldito(cadenas y ojo violeta, conextra_tapa).
-
public/sangre/iconos/<id>.webp(128 px, transparentes): uno por cada id de arma dedatos/armas.ts(68), hechos del modelo que mejor lo representa (los frascos con su color, la torreta, el yunque…), en diagonal si el arma es larga y con un halo suave del color del arma; las evoluciones llevan halo dorado con destellos. Se regeneran conblender -b -P personajes/blender/sangre_iconos.py -- juego/web/public/sangre/iconos. -
public/sangre/retratos/<clase>_{el,ella}.webp(384 × 480, transparentes): el muñeco con el traje, luz dramática y el arma inicial de la clase en la mano. Se hacen consangre_trajes.py -- <salida> ambos --retratos juego/web/public/sangre/retratos.
# figuras (uno a la vez: la máquina es compartida)
blender -b -P personajes/blender/sangre_exportar.py -- juego/web/modelos-crudos enemigos
blender -b -P personajes/blender/sangre_exportar.py -- juego/web/modelos-crudos enemigos zombi,cuervo --hoja /tmp/hoja.png --sin-glb # revisar
blender -b -P personajes/blender/sangre_trajes.py -- juego/web/modelos-crudos ambos monarca,campesino --hoja /tmp/trajes.png
cd juego/web && node scripts/optimizar-sangre.mjs # SOLO='enemigos' o SOLO='sangre_monarca' para unooptimizar-sangre.mjs comprime con meshopt sin juntar ni aplanar nodos y no toca los JSON ni los íconos de
los demás (a diferencia de optimizar-modelos.mjs).
Fuente técnica: documento de referencia. Esta página no certifica la versión de la APK instalada.