Custom Forms: Difference between revisions

From DragonMineZ Wiki
Sync from dragonminez-wiki repository
 
Shokkoh (talk | contribs)
Sync from dragonminez-wiki repository
 
Line 156: Line 156:
| <code>tintColor</code>, <code>tintIntensity</code> || <translate><!--T:77--> Hex / Double</translate> || <code>#FF0000</code>, <code>0.0</code> || <translate><!--T:78--> Color tint over the player while transformed. <code>0</code> means no tint.</translate>
| <code>tintColor</code>, <code>tintIntensity</code> || <translate><!--T:77--> Hex / Double</translate> || <code>#FF0000</code>, <code>0.0</code> || <translate><!--T:78--> Color tint over the player while transformed. <code>0</code> means no tint.</translate>
|-
|-
| <code>outlineShader</code> || <translate><!--T:79--> Object</translate> || — || <translate><!--T:80--> <code>enabled</code> (<code>false</code>), <code>primaryColor</code> (<code>#7FFFFF</code>), <code>secondaryColor</code>, <code>outlineThickness</code> (<code>1.5</code>).</translate>
| <code>outlineShader</code> || <translate><!--T:79--> Object</translate> || — || <translate><!--T:80--> <code>enabled</code> (<code>false</code>), <code>primaryColor</code> (<code>#7FFFFF</code>), <code>secondaryColor</code>, <code>outlineThickness</code> (<code>1.5</code>), <code>fireIntensity</code> (<code>0</code>–<code>3</code>, default <code>0</code>: animated flame tongues), <code>colorMode</code> (<code>"pulse"</code>, the default, shifts between the two colors; <code>"gradient"</code> goes from <code>primaryColor</code> next to the body to <code>secondaryColor</code> at the outer edge) and <code>bodyGlow</code> (<code>0</code>–<code>1</code>, default <code>0</code>: a glow of the outline color along the edges of the body). The same <code>outlineThickness</code> draws a wider outline than before 2.2.</translate>
|}
|}



Latest revision as of 00:44, 22 October 2026

Custom forms are transformations you add or change with JSON files. Forms can live in two places; both use exactly the same JSON schema and Java class (FormConfig.java), and only the folder they sit in changes what they mean:

Location What it is
config/dragonminez/races/<race>/forms/*.json Race forms belong to one race only (for example, Super Saiyan only exists for Saiyans). See Custom Races.
config/dragonminez/forms/*.json Stack forms are shared by all races and designed to layer on top of whatever race form is already active.

This page is about the second kind, stack forms, but the field reference below applies to race forms too.

Loader: ConfigManager.createOrLoadStackForms() reads every file in config/dragonminez/forms/ (ConfigLoader.loadStackForms). Files whose name starts with old_ are ignored.

What a stack form is

Main article: Transformations

A stack form doesn't replace your current transformation: it stacks its multipliers on top of it. The clearest example is Kaioken: a Saiyan can be in base form or Super Saiyan and also be in Kaioken x2 at the same time, multiplying whatever form they are already in. The built-in stack form groups are kaioken (x2, x3, x4, x10, x20) and ultimate (StackForms.java).

A stack group is unlocked by the stack skill named in its formType: kaioken or ultimate. A form of the group becomes available when that skill reaches the form's unlockOnSkillLevel.

File structure

There is one file per group, for example config/dragonminez/forms/kaioken.json (shortened):

{
  "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 is the group key (lowercase); groups are identified by it, not by the filename. Everything nested under forms is one form entry, keyed by its own name. Any field you leave out takes the default shown below.

Config version Use "configVersion": "2.2.0". A custom form file with an older or missing version is backed up to config/dragonminez/oldBackup/ and saved again with the current version; your values are kept. A file with broken JSON syntax is skipped and reported until you fix it.

Field reference

Schema source: src/main/java/com/dragonminez/common/config/FormConfig.java.

Unlock and requirements

Configured in: General Server Configgameplay
Field Type Default What it does
name String "" Form key within the group (for example x2, x3 or ultimate).
unlockOnSkillLevel Integer 0 Level of the group's form skill that unlocks this form.
formRequisite String "" Other forms that must be mastered first, as "group.form". Separate several with commas.
formRequisiteType String all all: every listed form needs the mastery. any: one is enough.
unlockOnMastery Double 0.0 Mastery the formRequisite forms need. 0 turns the requirement off.
levelRequisite Integer 0 Player level needed. Until it is reached, the form skill cannot be leveled up to this form. Toggle: levelFormRequisiteEnabled in general-server.json → gameplay.
sagaRequisite String "" Saga quest that must be completed first, as "sagaId:questId" (for example "frieza_saga:10"). Until it is completed, the form skill cannot be leveled up to this form. Ignored when story mode is off or the quest does not exist. Toggle: sagaFormRequisiteEnabled in general-server.json → gameplay.

Visuals

Field Type Default What it does
customModel String "" Model key for the form. Looked up like a race model: built-in keys or your own geo/entity/races/<key>.geo.json (see Custom Models and Assets). A stack form's model wins over the race form's.
keepBaseFormHeadBones Boolean false Keeps the player's chosen head bone (ears, horns and so on) visible in this form.
hideTail Boolean false Hides the Saiyan tail while in this form.
transformationAnimation String transf.generic Animation played while charging into this form. Built-in values: transf.generic, transf.ssj, transf.ssj3, transf.ssg2, transf.ozaru, transf.absorb, transf.berserker, transf.freezer, transf.freezer2, transf.janemba, transf.daima. Any animation name from the player animation files (assets/dragonminez/animations/entity/races/*.animation.json) works, so a resource pack can add its own. Empty means the generic animation.
bodyColor1, bodyColor2, bodyColor3, hairColor, eye1Color, eye2Color Hex string "" Color overrides. Empty keeps the player's color. Colors blend in while charging.
furUsesHairColor Boolean false On SSJ4 models (a customModel containing ssj4gt or ssj4d), colors the fur with the hair color.
hairType String "" Which of the player's hair styles to show: base, ssj, ssj2, ssj3 or ssj4.
forcedHairCode String "" A hair code (from the hair editor) forced while in this form.
extraFormLayer, extraFormColor String / Hex "" Extra texture drawn over the body, tinted with extraFormColor (white if empty). Use a full namespace:path or a path inside the dragonminez namespace, for example textures/entity/races/my_overlay.png.
auraType String kakarot 2D aura sprite set: kakarot or god.
auraType3D String userPreference 3D aura style: smooth, sparking, god or userPreference (each player's own setting). A form that names god shows it for any race; as a player preference it is Glind-only.
auraColor Hex string "" Aura color. Empty keeps the player's aura color.
auraLayer Integer 0 Aura layer slot. Forms on different layers show separate auras at the same time (the Kaioken forms use layer 1).
aura3DStyle Object See below Shape of the 3D aura (see 3D aura shape).
extraAuraType, extraAuraType3D, extraAuraColor, extraAuraLayer, extraAura3DStyle — kakarot, userPreference, #FFFFFF, -1, defaults A second aura. extraAuraLayer must be 1–6 to show; -1 means none.
hasLightnings, lightningColor Boolean / Hex false, "" Lightning bolts around the player.
modelScaling [x, y, z] floats [0.9375, 0.9375, 0.9375] Model scale factors.
tintColor, tintIntensity Hex / Double #FF0000, 0.0 Color tint over the player while transformed. 0 means no tint.
outlineShader Object — enabled (false), primaryColor (#7FFFFF), secondaryColor, outlineThickness (1.5), fireIntensity (0–3, default 0: animated flame tongues), colorMode ("pulse", the default, shifts between the two colors; "gradient" goes from primaryColor next to the body to secondaryColor at the outer edge) and bodyGlow (0–1, default 0: a glow of the outline color along the edges of the body). The same outlineThickness draws a wider outline than before 2.2.

3D aura shape

These keys go inside aura3DStyle and extraAura3DStyle (and inside a race's aura3DStyle in character.json). Every key is optional; a missing key uses the default.

Key Default What it does
size [1.10, 1.17, 1.02] Width, height and depth of the aura shell.
flamePeaks 12 Number of flame tongues around the shell (1–64). Smooth style only.
waveFrequency, waveSpeed, waveAmplitude 2.0, 5.0, 0.75 Flame waves. In the sparking style, waveAmplitude is the spike reach and waveSpeed is the surge speed.
noiseDetail, upwardBias 0.10, 0.54 Flame turbulence, and how strongly it flows upwards.
coreAlpha, rimAlpha, rimPower, rimThreshold 0.05, 1.0, 4.0, 0.05 Opacity of the center and of the edge.
coreColor, rimColor, noiseColor "" Hex colors. Empty means derived from the aura color.
secondBorderColor "" Hex color of an outer fringe around the edge. Sparking style only; empty means no fringe.
bloomIntensity 1.0 Glow strength.
spikeDensity, spikeBurstRate, spikeRarity, bandStart 32, 3.0, 3.0, 0.50 Sparking style only: spike columns (4–32), burst rate, how rare spikes are, and where the outline band starts.

Stats and drains

Field Type Default What it does
strMultiplier, skpMultiplier, stmMultiplier, defMultiplier, vitMultiplier, pwrMultiplier, eneMultiplier, speedMultiplier Double 1.0 Stat multipliers. RES uses the average of defMultiplier and stmMultiplier. A race form and a stack form add their bonuses together, or multiply them if multiplicationInsteadOfAdditionForMultipliers is on in general-server.json.
attackSpeed Double 1.0 Attack speed multiplier.
energyDrain, staminaDrain, healthDrain Double 0.0 Drain while transformed (also used for the cost of transforming). Values below 0 are treated as 0.
staminaDrainMultiplier Double 1.0 Multiplier on the stamina each attack costs while transformed.
otherworldTimeDrain, otherworldTimeDrainMastered Double 1.0, 1.0 How fast this form drains Baba's temporary-revive timer, at 0 mastery and at full mastery (blended in between). See Otherworld.

Mastery

Field Type Default What it does
maxMastery Double 100.0 Maximum mastery (0 means no mastery progression).
masteryPerHitDealt, masteryPerHitReceived Double 0.01 Mastery gained per hit.
passiveMasteryEveryFiveSeconds Double 0.001 Passive mastery gained every 5 seconds in the form.
maxStatsMultiplier Double 1.25 At full mastery, stat multipliers above 1 are multiplied by this (scales up linearly with mastery).
maxCostMultiplier Double 0.5 At full mastery, the form's drains are multiplied by this (scales linearly with mastery).
stackOnMastery Double 0.0 Mastery this form needs before it can be combined with a stack form (or, for a stack form, with a race form).
instantTransformOnMastery Double 40.0 Mastery this form needs for instant transformation (no charge, costs ki).
allowFreeTransformOnMastery Double 50.0 Mastery this form needs before you can transform straight into it instead of going through the group in order. The group's first unlocked form never needs it.
shareMasteryWith, shareMasteryMultiplier List / Double [], 1.0 Whenever this form gains mastery, each listed form ("group.form") gains that amount × shareMasteryMultiplier. The default Kaioken forms share 25% with the next one up.

Stacking behavior

Field Type Default What it does
formStackable Boolean true Both the race form and the stack form must allow stacking.
stackDrainMultiplier Double 2.0 While a race form and a stack form are combined, the drains of both forms are multiplied by the stackDrainMultiplier of both forms.
incompatibleWith List of "group.form" ["ultimate.ultimate"] Forms that cannot be active at the same time as this one (checked both ways). On a race form, listing ultimate.ultimate also keeps the Ultimate form from copying it as your best form; DragonMineZ's own forms only list it on each race's top tier.
formCombo String "" Weapon attributes id used for melee combos while in this form, for example dragonminez:giant for giant forms. A bare name is looked up under dragonminez:, then minecraft:. See Weapon Attributes.

Costs and effects

Field Type What it does
triggerItemCosts List of { itemId or itemTag, nbt, count, consume } Items needed to transform. Entries are alternatives: the first one the player can pay is used. count defaults to 1 and consume to true. itemTag is a tag id without #. Creative players skip it.
durationItemCosts List of { itemId or itemTag, nbt, durationSeconds } Items that keep the form going: one item buys durationSeconds (default 1) of form time. When none is left, the form ends.
mobEffects List of { effectId, amplifier, durationTicks, ambient, visible, showIcon } Potion effects applied while transformed. durationTicks -1 (the default) means as long as the form lasts.

Translation keys

Stack form groups and forms are named with these keys:

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"

Add these to your en_us.json or to your own language file. Custom translations merge with the Crowdin ones in the same way as for custom races.

Reload and validate

  1. Save your file under config/dragonminez/forms/.
  2. Validate the JSON syntax (see How to JSON).
  3. Run /dmzreload config (see Reloading and Updating Changes).
  4. Transform in game and check that stats, drains, visuals and stacking behave as expected.