Formas personalizadas

From DragonMineZ Wiki
Revision as of 23:49, 13 October 2026 by Shokkoh (talk | contribs) (Translation sync from dragonminez-wiki repository)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Las formas personalizadas son transformaciones que añades o cambias con archivos JSON. Las formas pueden estar en dos lugares; ambos usan exactamente el mismo esquema JSON y la misma clase de Java (FormConfig.java), y solo la carpeta en la que están cambia su significado:

Ubicación Qué es
config/dragonminez/races/<race>/forms/*.json Las formas de raza pertenecen a una sola raza (por ejemplo, el Super Saiyajin solo existe para los Saiyajin). Consulta Razas personalizadas.
config/dragonminez/forms/*.json Las formas acumulables las comparten todas las razas y están pensadas para sumarse encima de la forma de raza que ya esté activa.

Esta página trata del segundo tipo, las formas acumulables, pero la referencia de campos de abajo también se aplica a las formas de raza.

Cargador: ConfigManager.createOrLoadStackForms() lee todos los archivos de config/dragonminez/forms/ (ConfigLoader.loadStackForms). Se ignoran los archivos cuyo nombre empieza por old_.

Qué es una forma acumulable

Artículo principal: Transformaciones

Una forma acumulable no reemplaza tu transformación actual: suma sus multiplicadores encima de ella. El ejemplo más claro es el Kaioken: un Saiyajin puede estar en su forma base o en Super Saiyajin y además estar en Kaioken x2 al mismo tiempo, lo que multiplica la forma en la que ya esté. Los grupos de formas acumulables incluidos son kaioken (x2, x3, x4, x10, x20) y ultimate (StackForms.java).

Un grupo acumulable se desbloquea con la habilidad acumulable indicada en su formType: kaioken o ultimate. Una forma del grupo queda disponible cuando esa habilidad alcanza el unlockOnSkillLevel de la forma.

Estructura del archivo

Hay un archivo por grupo, por ejemplo config/dragonminez/forms/kaioken.json (resumido):

{
  "configVersion": "2.2.0",
  "groupName": "kaioken",
  "formType": "kaioken",
  "forms": {
    "x2": {
      "name": "x2",
      "unlockOnSkillLevel": 1,
      "keepBaseFormHeadBones": true,
      "strMultiplier": 1.1,
      "skpMultiplier": 1.1,
      "defMultiplier": 1.125,
      "pwrMultiplier": 1.1,
      "speedMultiplier": 1.1,
      "healthDrain": 0.03,
      "attackSpeed": 1.1,
      "tintColor": "#FF0000",
      "tintIntensity": 0.1,
      "auraColor": "#DB182C",
      "auraLayer": 1,
      "formStackable": true,
      "stackDrainMultiplier": 1.0,
      "incompatibleWith": ["ultimate.ultimate"],
      "shareMasteryWith": ["kaioken.x3"],
      "shareMasteryMultiplier": 0.25
    }
  }
}

groupName es la clave del grupo (en minúsculas); los grupos se identifican por ella, no por el nombre del archivo. Todo lo que está anidado dentro de forms es una entrada de forma, identificada por su propio name. Cualquier campo que omitas toma el valor por defecto que se indica abajo.

Versión de la configuración Usa "configVersion": "2.2.0". Un archivo de forma personalizada con una versión más antigua o sin versión se respalda en config/dragonminez/oldBackup/ y se vuelve a guardar con la versión actual; tus valores se conservan. Un archivo con sintaxis JSON rota se omite y se informa hasta que lo corrijas.

Referencia de campos

Origen del esquema: src/main/java/com/dragonminez/common/config/FormConfig.java.

Desbloqueo y requisitos

Se configura en: Configuración del servidorgameplay
Campo Tipo Por defecto Qué hace
name Texto "" Clave de la forma dentro del grupo (por ejemplo x2, x3 o ultimate).
unlockOnSkillLevel Entero 0 Nivel de la habilidad de forma del grupo que desbloquea esta forma.
formRequisite Texto "" Otras formas que hay que dominar primero, como "group.form". Separa varias con comas.
formRequisiteType Texto all all: todas las formas listadas necesitan la maestría. any: basta con una.
unlockOnMastery Decimal 0.0 Maestría que necesitan las formas de formRequisite. 0 desactiva el requisito.
levelRequisite Entero 0 Nivel de jugador necesario. Hasta alcanzarlo, la habilidad de forma no puede subir de nivel hasta esta forma. Se activa con levelFormRequisiteEnabled en general-server.json → gameplay.
sagaRequisite Texto "" Misión de saga que hay que completar primero, como "sagaId:questId" (por ejemplo "frieza_saga:10"). Hasta completarla, la habilidad de forma no puede subir de nivel hasta esta forma. Se ignora si el modo historia está desactivado o si la misión no existe. Se activa con sagaFormRequisiteEnabled en general-server.json → gameplay.

Apariencia

Campo Tipo Por defecto Qué hace
customModel Texto "" Clave de modelo de la forma. Se busca igual que un modelo de raza: claves incluidas o tu propio geo/entity/races/<key>.geo.json (consulta Modelos y recursos propios). El modelo de una forma acumulable tiene prioridad sobre el de la forma de raza.
keepBaseFormHeadBones Booleano false Mantiene visible en esta forma el hueso de cabeza que eligió el jugador (orejas, cuernos, etc.).
hideTail Booleano false Oculta la cola Saiyajin mientras estás en esta forma.
transformationAnimation Texto transf.generic Animación que se reproduce al cargar esta forma. Valores incluidos: transf.generic, transf.ssj, transf.ssj3, transf.ssg2, transf.ozaru, transf.absorb, transf.berserker, transf.freezer, transf.freezer2, transf.janemba, transf.daima. Sirve cualquier nombre de animación de los archivos de animación del jugador (assets/dragonminez/animations/entity/races/*.animation.json), así que un paquete de recursos puede añadir las suyas. Vacío significa la animación genérica.
bodyColor1, bodyColor2, bodyColor3, hairColor, eye1Color, eye2Color Texto hex "" Colores que se sobrescriben. Vacío mantiene el color del jugador. Los colores se mezclan gradualmente durante la carga.
furUsesHairColor Booleano false En los modelos SSJ4 (un customModel que contiene ssj4gt o ssj4d), colorea el pelaje con el color del pelo.
hairType Texto "" Cuál de los peinados del jugador se muestra: base, ssj, ssj2, ssj3 o ssj4.
forcedHairCode Texto "" Un código de pelo (del editor de pelo) que se fuerza mientras estás en esta forma.
extraFormLayer, extraFormColor Texto / Hex "" Textura extra dibujada sobre el cuerpo, teñida con extraFormColor (blanca si está vacío). Usa un namespace:path completo o una ruta dentro del namespace dragonminez, por ejemplo textures/entity/races/my_overlay.png.
auraType Texto kakarot Conjunto de sprites del aura 2D: kakarot o god.
auraType3D Texto userPreference Estilo del aura 3D: smooth, sparking, god o userPreference (el ajuste propio de cada jugador). Una forma que indica god lo muestra en cualquier raza; como preferencia del jugador, es exclusivo de los Glind.
auraColor Texto hex "" Color del aura. Vacío mantiene el color de aura del jugador.
auraLayer Entero 0 Capa del aura. Las formas en capas distintas muestran auras separadas al mismo tiempo (las formas Kaioken usan la capa 1).
aura3DStyle Objeto Ver abajo Forma del aura 3D (consulta Forma del aura 3D).
extraAuraType, extraAuraType3D, extraAuraColor, extraAuraLayer, extraAura3DStyle — kakarot, userPreference, #FFFFFF, -1, valores por defecto Una segunda aura. extraAuraLayer debe ser de 1 a 6 para que se vea; -1 significa ninguna.
hasLightnings, lightningColor Booleano / Hex false, "" Rayos alrededor del jugador.
modelScaling Decimales [x, y, z] [0.9375, 0.9375, 0.9375] Factores de escala del modelo.
tintColor, tintIntensity Hex / Decimal #FF0000, 0.0 Tinte de color sobre el jugador mientras está transformado. 0 significa sin tinte.
outlineShader Objeto — enabled (false), primaryColor (#7FFFFF), secondaryColor, outlineThickness (1.5).

Forma del aura 3D

Estas claves van dentro de aura3DStyle y extraAura3DStyle (y dentro del aura3DStyle de una raza en character.json). Todas las claves son opcionales; una clave que falta usa el valor por defecto.

Clave Por defecto Qué hace
size [1.10, 1.17, 1.02] Ancho, alto y profundidad de la envoltura del aura.
flamePeaks 12 Número de lenguas de fuego alrededor de la envoltura (1–64). Solo en el estilo smooth.
waveFrequency, waveSpeed, waveAmplitude 2.0, 5.0, 0.75 Ondas de las llamas. En el estilo sparking, waveAmplitude es el alcance de los picos y waveSpeed la velocidad de los estallidos.
noiseDetail, upwardBias 0.10, 0.54 Turbulencia de las llamas y con cuánta fuerza suben.
coreAlpha, rimAlpha, rimPower, rimThreshold 0.05, 1.0, 4.0, 0.05 Opacidad del centro y del borde.
coreColor, rimColor, noiseColor "" Colores hex. Vacío significa que se derivan del color del aura.
secondBorderColor "" Color hex de un fleco exterior alrededor del borde. Solo en el estilo sparking; vacío significa sin fleco.
bloomIntensity 1.0 Intensidad del brillo.
spikeDensity, spikeBurstRate, spikeRarity, bandStart 32, 3.0, 3.0, 0.50 Solo en el estilo sparking: columnas de picos (4–32), frecuencia de estallidos, qué tan raros son los picos y dónde empieza la banda del contorno.

Estadísticas y consumos

Campo Tipo Por defecto Qué hace
strMultiplier, skpMultiplier, stmMultiplier, defMultiplier, vitMultiplier, pwrMultiplier, eneMultiplier, speedMultiplier Decimal 1.0 Multiplicadores de estadísticas. RES usa el promedio de defMultiplier y stmMultiplier. Una forma de raza y una forma acumulable suman sus bonificaciones, o las multiplican si multiplicationInsteadOfAdditionForMultipliers está activado en general-server.json.
attackSpeed Decimal 1.0 Multiplicador de velocidad de ataque.
energyDrain, staminaDrain, healthDrain Decimal 0.0 Consumo mientras estás transformado (también se usa para el costo de transformarse). Los valores por debajo de 0 se tratan como 0.
staminaDrainMultiplier Decimal 1.0 Multiplicador de la stamina que cuesta cada ataque mientras estás transformado.
otherworldTimeDrain, otherworldTimeDrainMastered Decimal 1.0, 1.0 Qué tan rápido consume esta forma el temporizador de resurrección temporal de Baba, con 0 de maestría y con maestría completa (se interpola entre ambos). Consulta Otro Mundo.

Maestría

Campo Tipo Por defecto Qué hace
maxMastery Decimal 100.0 Maestría máxima (0 significa que no hay progreso de maestría).
masteryPerHitDealt, masteryPerHitReceived Decimal 0.01 Maestría que se gana por golpe.
passiveMasteryEveryFiveSeconds Decimal 0.001 Maestría pasiva que se gana cada 5 segundos en la forma.
maxStatsMultiplier Decimal 1.25 Con maestría completa, los multiplicadores de estadísticas mayores que 1 se multiplican por este valor (aumenta de forma lineal con la maestría).
maxCostMultiplier Decimal 0.5 Con maestría completa, los consumos de la forma se multiplican por este valor (escala de forma lineal con la maestría).
stackOnMastery Decimal 0.0 Maestría que necesita esta forma antes de poder combinarse con una forma acumulable (o, si es una forma acumulable, con una forma de raza).
instantTransformOnMastery Decimal 40.0 Maestría que necesita esta forma para la transformación instantánea (sin carga, cuesta ki).
allowFreeTransformOnMastery Decimal 50.0 Maestría que necesita esta forma antes de que puedas transformarte directamente en ella en vez de recorrer el grupo en orden. La primera forma desbloqueada del grupo nunca la necesita.
shareMasteryWith, shareMasteryMultiplier Lista / Decimal [], 1.0 Cada vez que esta forma gana maestría, cada forma listada ("group.form") gana esa cantidad × shareMasteryMultiplier. Las formas Kaioken por defecto comparten un 25% con la siguiente.

Comportamiento al acumular

Campo Tipo Por defecto Qué hace
formStackable Booleano true Tanto la forma de raza como la forma acumulable deben permitir la acumulación.
stackDrainMultiplier Decimal 2.0 Mientras una forma de raza y una forma acumulable están combinadas, los consumos de ambas formas se multiplican por el stackDrainMultiplier de ambas formas.
incompatibleWith Lista de "group.form" ["ultimate.ultimate"] Formas que no pueden estar activas al mismo tiempo que esta (se comprueba en ambos sentidos). En una forma de raza, incluir ultimate.ultimate también evita que la forma Definitivo la copie como tu mejor forma; las formas propias de DragonMineZ solo lo incluyen en el nivel más alto de cada raza.
formCombo Texto "" Id de atributos de arma que se usa para los combos cuerpo a cuerpo en esta forma, por ejemplo dragonminez:giant para las formas gigantes. Un nombre sin namespace se busca en dragonminez: y luego en minecraft:. Consulta Atributos de armas.

Costos y efectos

Campo Tipo Qué hace
triggerItemCosts Lista de { itemId o itemTag, nbt, count, consume } Objetos necesarios para transformarse. Las entradas son alternativas: se usa la primera que el jugador pueda pagar. count vale 1 por defecto y consume, true. itemTag es un id de etiqueta sin #. Los jugadores en creativo no lo necesitan.
durationItemCosts Lista de { itemId o itemTag, nbt, durationSeconds } Objetos que mantienen la forma activa: cada objeto compra durationSeconds (por defecto 1) de tiempo de forma. Cuando no queda ninguno, la forma termina.
mobEffects Lista de { effectId, amplifier, durationTicks, ambient, visible, showIcon } Efectos de poción que se aplican mientras estás transformado. durationTicks -1 (el valor por defecto) significa mientras dure la forma.

Claves de traducción

Los grupos de formas acumulables y sus formas se nombran con estas claves:

race.dragonminez.stack.group.<groupName>       # e.g. "race.dragonminez.stack.group.kaioken" -> "Kaioken"
race.dragonminez.stack.form.<groupName>.<name>  # e.g. "race.dragonminez.stack.form.kaioken.x2" -> "x2"

Añádelas a tu en_us.json o a tu propio archivo de idioma. Las traducciones personalizadas se combinan con las de Crowdin igual que en las razas personalizadas.

Recargar y validar

  1. Guarda tu archivo en config/dragonminez/forms/.
  2. Valida la sintaxis JSON (consulta Cómo usar JSON).
  3. Ejecuta /dmzreload config (consulta Recargar y actualizar cambios).
  4. Transfórmate en el juego y comprueba que las estadísticas, los consumos, la apariencia y la acumulación funcionen como esperas.