Formas personalizadas
As formas personalizadas são transformações que você adiciona ou altera com arquivos JSON. As formas podem ficar em dois lugares; ambos usam exatamente o mesmo esquema JSON e a mesma classe Java (FormConfig.java), e só a pasta em que estão muda o que elas significam:
| Localização | O que é |
|---|---|
config/dragonminez/races/<race>/forms/*.json |
As formas de raça pertencem a uma única raça (por exemplo, o Super Saiyajin só existe para os Saiyajins). Veja Raças personalizadas. |
config/dragonminez/forms/*.json |
As formas acumuláveis são compartilhadas por todas as raças e feitas para se somar por cima da forma de raça que já estiver ativa. |
Esta página trata do segundo tipo, as formas acumuláveis, mas a referência de campos abaixo também vale para as formas de raça.
Carregador: ConfigManager.createOrLoadStackForms() lê todos os arquivos de config/dragonminez/forms/ (ConfigLoader.loadStackForms). Arquivos cujo nome começa com old_ são ignorados.
O que é uma forma acumulável
Uma forma acumulável não substitui sua transformação atual: ela soma seus multiplicadores por cima dela. O exemplo mais claro é o Kaioken: um Saiyajin pode estar na forma base ou em Super Saiyajin e também estar em Kaioken x2 ao mesmo tempo, multiplicando a forma em que já estiver. Os grupos de formas acumuláveis incluídos são kaioken (x2, x3, x4, x10, x20) e ultimate (StackForms.java).
Um grupo acumulável é desbloqueado pela habilidade acumulável indicada no seu formType: kaioken ou ultimate. Uma forma do grupo fica disponível quando essa habilidade atinge o unlockOnSkillLevel da forma.
Estrutura do arquivo
Há um arquivo por grupo, por exemplo 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 é a chave do grupo (em minúsculas); os grupos são identificados por ela, não pelo nome do arquivo. Tudo o que está aninhado dentro de forms é uma entrada de forma, identificada pelo seu próprio name. Qualquer campo que você omitir recebe o valor padrão mostrado abaixo.
"configVersion": "2.2.0". Um arquivo de forma personalizada com versão mais antiga ou sem versão ganha um backup em config/dragonminez/oldBackup/ e é salvo de novo com a versão atual; seus valores são mantidos. Um arquivo com sintaxe JSON quebrada é ignorado e reportado até você corrigi-lo.
Referência de campos
Origem do esquema: src/main/java/com/dragonminez/common/config/FormConfig.java.
Desbloqueio e requisitos
gameplay| Campo | Tipo | Padrão | O que faz |
|---|---|---|---|
name |
Texto | "" |
Chave da forma dentro do grupo (por exemplo x2, x3 ou ultimate).
|
unlockOnSkillLevel |
Inteiro | 0 |
Nível da habilidade de forma do grupo que desbloqueia esta forma. |
formRequisite |
Texto | "" |
Outras formas que precisam ser dominadas primeiro, como "group.form". Separe várias com vírgulas.
|
formRequisiteType |
Texto | all |
all: todas as formas listadas precisam do domínio. any: basta uma.
|
unlockOnMastery |
Decimal | 0.0 |
Domínio que as formas de formRequisite precisam ter. 0 desativa o requisito.
|
levelRequisite |
Inteiro | 0 |
Nível de jogador necessário. Até alcançá-lo, a habilidade de forma não pode subir de nível até esta forma. Ativado por levelFormRequisiteEnabled em general-server.json → gameplay.
|
sagaRequisite |
Texto | "" |
Missão de saga que precisa ser concluída primeiro, como "sagaId:questId" (por exemplo "frieza_saga:10"). Até concluí-la, a habilidade de forma não pode subir de nível até esta forma. É ignorado se o modo história estiver desativado ou se a missão não existir. Ativado por sagaFormRequisiteEnabled em general-server.json → gameplay.
|
Aparência
| Campo | Tipo | Padrão | O que faz |
|---|---|---|---|
customModel |
Texto | "" |
Chave de modelo da forma. É procurada como um modelo de raça: chaves incluídas ou seu próprio geo/entity/races/<key>.geo.json (veja Modelos e recursos próprios). O modelo de uma forma acumulável tem prioridade sobre o da forma de raça.
|
keepBaseFormHeadBones |
Booleano | false |
Mantém visível nesta forma o osso de cabeça escolhido pelo jogador (orelhas, chifres etc.). |
hideTail |
Booleano | false |
Esconde a cauda Saiyajin enquanto estiver nesta forma. |
transformationAnimation |
Texto | transf.generic |
Animação reproduzida enquanto você carrega esta forma. Valores incluídos: transf.generic, transf.ssj, transf.ssj3, transf.ssg2, transf.ozaru, transf.absorb, transf.berserker, transf.freezer, transf.freezer2, transf.janemba, transf.daima. Qualquer nome de animação dos arquivos de animação do jogador (assets/dragonminez/animations/entity/races/*.animation.json) funciona, então um pacote de recursos pode adicionar as suas. Vazio significa a animação genérica.
|
bodyColor1, bodyColor2, bodyColor3, hairColor, eye1Color, eye2Color |
Texto hex | "" |
Cores que substituem as do jogador. Vazio mantém a cor do jogador. As cores vão se misturando durante a carga. |
furUsesHairColor |
Booleano | false |
Nos modelos SSJ4 (um customModel que contém ssj4gt ou ssj4d), colore os pelos do corpo com a cor do cabelo.
|
hairType |
Texto | "" |
Qual dos penteados do jogador mostrar: base, ssj, ssj2, ssj3 ou ssj4.
|
forcedHairCode |
Texto | "" |
Um código de cabelo (do editor de cabelo) forçado enquanto estiver nesta forma. |
extraFormLayer, extraFormColor |
Texto / Hex | "" |
Textura extra desenhada sobre o corpo, tingida com extraFormColor (branca se estiver vazio). Use um namespace:path completo ou um caminho dentro do namespace dragonminez, por exemplo textures/entity/races/my_overlay.png.
|
auraType |
Texto | kakarot |
Conjunto de sprites da aura 2D: kakarot ou god.
|
auraType3D |
Texto | userPreference |
Estilo da aura 3D: smooth, sparking, god ou userPreference (a configuração de cada jogador). Uma forma que indica god o mostra em qualquer raça; como preferência do jogador, é exclusivo dos Glind.
|
auraColor |
Texto hex | "" |
Cor da aura. Vazio mantém a cor de aura do jogador. |
auraLayer |
Inteiro | 0 |
Camada da aura. Formas em camadas diferentes mostram auras separadas ao mesmo tempo (as formas Kaioken usam a camada 1).
|
aura3DStyle |
Objeto | Veja abaixo | Formato da aura 3D (veja Formato da aura 3D). |
extraAuraType, extraAuraType3D, extraAuraColor, extraAuraLayer, extraAura3DStyle |
— | kakarot, userPreference, #FFFFFF, -1, valores padrão |
Uma segunda aura. extraAuraLayer precisa ser de 1 a 6 para aparecer; -1 significa nenhuma.
|
hasLightnings, lightningColor |
Booleano / Hex | false, "" |
Raios ao redor do jogador. |
modelScaling |
Decimais [x, y, z] |
[0.9375, 0.9375, 0.9375] |
Fatores de escala do modelo. |
tintColor, tintIntensity |
Hex / Decimal | #FF0000, 0.0 |
Tonalidade de cor sobre o jogador enquanto está transformado. 0 significa sem tonalidade.
|
outlineShader |
Objeto | — | enabled (false), primaryColor (#7FFFFF), secondaryColor, outlineThickness (1.5), fireIntensity (0–3, padrão 0: línguas de fogo animadas), colorMode ("pulse", o padrão, alterna entre as duas cores; "gradient" vai da primaryColor junto ao corpo à secondaryColor na borda externa) e bodyGlow (0–1, padrão 0: um brilho da cor do contorno nas bordas do corpo). O mesmo outlineThickness desenha um contorno mais largo do que antes da 2.2.
|
Formato da aura 3D
Estas chaves ficam dentro de aura3DStyle e extraAura3DStyle (e dentro do aura3DStyle de uma raça em character.json). Todas as chaves são opcionais; uma chave ausente usa o valor padrão.
| Chave | Padrão | O que faz |
|---|---|---|
size |
[1.10, 1.17, 1.02] |
Largura, altura e profundidade da casca da aura. |
flamePeaks |
12 |
Número de línguas de fogo ao redor da casca (1–64). Só no estilo smooth. |
waveFrequency, waveSpeed, waveAmplitude |
2.0, 5.0, 0.75 |
Ondas das chamas. No estilo sparking, waveAmplitude é o alcance das pontas e waveSpeed é a velocidade das explosões.
|
noiseDetail, upwardBias |
0.10, 0.54 |
Turbulência das chamas e com que força elas sobem. |
coreAlpha, rimAlpha, rimPower, rimThreshold |
0.05, 1.0, 4.0, 0.05 |
Opacidade do centro e da borda. |
coreColor, rimColor, noiseColor |
"" |
Cores hex. Vazio significa que são derivadas da cor da aura. |
secondBorderColor |
"" |
Cor hex de uma franja externa ao redor da borda. Só no estilo sparking; vazio significa sem franja. |
bloomIntensity |
1.0 |
Intensidade do brilho. |
spikeDensity, spikeBurstRate, spikeRarity, bandStart |
32, 3.0, 3.0, 0.50 |
Só no estilo sparking: colunas de pontas (4–32), frequência das explosões, quão raras são as pontas e onde começa a faixa do contorno. |
Estatísticas e consumos
| Campo | Tipo | Padrão | O que faz |
|---|---|---|---|
strMultiplier, skpMultiplier, stmMultiplier, defMultiplier, vitMultiplier, pwrMultiplier, eneMultiplier, speedMultiplier |
Decimal | 1.0 |
Multiplicadores de estatísticas. RES usa a média de defMultiplier e stmMultiplier. Uma forma de raça e uma forma acumulável somam seus bônus, ou os multiplicam se multiplicationInsteadOfAdditionForMultipliers estiver ativado em general-server.json.
|
attackSpeed |
Decimal | 1.0 |
Multiplicador de velocidade de ataque. |
energyDrain, staminaDrain, healthDrain |
Decimal | 0.0 |
Consumo enquanto estiver transformado (também usado para o custo de se transformar). Valores abaixo de 0 são tratados como 0.
|
staminaDrainMultiplier |
Decimal | 1.0 |
Multiplicador da estâmina que cada ataque custa enquanto estiver transformado. |
otherworldTimeDrain, otherworldTimeDrainMastered |
Decimal | 1.0, 1.0 |
Com que rapidez esta forma consome o temporizador de revivência temporária da Vovó Uranai, com 0 de domínio e com domínio completo (interpolado entre os dois). Veja Outro Mundo. |
Domínio
| Campo | Tipo | Padrão | O que faz |
|---|---|---|---|
maxMastery |
Decimal | 100.0 |
Domínio máximo (0 significa que não há progresso de domínio).
|
masteryPerHitDealt, masteryPerHitReceived |
Decimal | 0.01 |
Domínio ganho por golpe. |
passiveMasteryEveryFiveSeconds |
Decimal | 0.001 |
Domínio passivo ganho a cada 5 segundos na forma. |
maxStatsMultiplier |
Decimal | 1.25 |
Com domínio completo, os multiplicadores de estatísticas acima de 1 são multiplicados por este valor (cresce de forma linear com o domínio).
|
maxCostMultiplier |
Decimal | 0.5 |
Com domínio completo, os consumos da forma são multiplicados por este valor (escala de forma linear com o domínio). |
stackOnMastery |
Decimal | 0.0 |
Domínio que esta forma precisa antes de poder ser combinada com uma forma acumulável (ou, no caso de uma forma acumulável, com uma forma de raça). |
instantTransformOnMastery |
Decimal | 40.0 |
Domínio que esta forma precisa para a transformação instantânea (sem carga, custa ki). |
allowFreeTransformOnMastery |
Decimal | 50.0 |
Domínio que esta forma precisa antes que você possa se transformar diretamente nela em vez de passar pelo grupo em ordem. A primeira forma desbloqueada do grupo nunca precisa dele. |
shareMasteryWith, shareMasteryMultiplier |
Lista / Decimal | [], 1.0 |
Sempre que esta forma ganha domínio, cada forma listada ("group.form") ganha essa quantidade × shareMasteryMultiplier. As formas Kaioken padrão compartilham 25% com a seguinte.
|
Comportamento de acúmulo
| Campo | Tipo | Padrão | O que faz |
|---|---|---|---|
formStackable |
Booleano | true |
Tanto a forma de raça quanto a forma acumulável precisam permitir o acúmulo. |
stackDrainMultiplier |
Decimal | 2.0 |
Enquanto uma forma de raça e uma forma acumulável estão combinadas, os consumos das duas formas são multiplicados pelo stackDrainMultiplier das duas formas.
|
incompatibleWith |
Lista de "group.form" |
["ultimate.ultimate"] |
Formas que não podem estar ativas ao mesmo tempo que esta (verificado nos dois sentidos). Em uma forma de raça, listar ultimate.ultimate também impede que a forma Ultimate a copie como sua melhor forma; as formas do próprio DragonMineZ só a listam no nível mais alto de cada raça.
|
formCombo |
Texto | "" |
Id de atributos de arma usado nos combos corpo a corpo nesta forma, por exemplo dragonminez:giant para as formas gigantes. Um nome sem namespace é procurado em dragonminez: e depois em minecraft:. Veja Atributos de armas.
|
Custos e efeitos
| Campo | Tipo | O que faz |
|---|---|---|
triggerItemCosts |
Lista de { itemId ou itemTag, nbt, count, consume } |
Itens necessários para se transformar. As entradas são alternativas: é usada a primeira que o jogador puder pagar. count vale 1 por padrão e consume, true. itemTag é um id de tag sem #. Jogadores no modo criativo ignoram isso.
|
durationItemCosts |
Lista de { itemId ou itemTag, nbt, durationSeconds } |
Itens que mantêm a forma ativa: cada item compra durationSeconds (padrão 1) de tempo de forma. Quando não sobra nenhum, a forma termina.
|
mobEffects |
Lista de { effectId, amplifier, durationTicks, ambient, visible, showIcon } |
Efeitos de poção aplicados enquanto estiver transformado. durationTicks -1 (o padrão) significa enquanto a forma durar.
|
Chaves de tradução
Os grupos de formas acumuláveis e suas formas são nomeados com estas chaves:
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"
Adicione-as ao seu en_us.json ou ao seu próprio arquivo de idioma. As traduções personalizadas se combinam com as do Crowdin do mesmo jeito que nas raças personalizadas.
Recarregar e validar
- Salve seu arquivo em
config/dragonminez/forms/. - Valide a sintaxe JSON (veja Como usar JSON).
- Execute
/dmzreload config(veja Recarregar e atualizar mudanças). - Transforme-se no jogo e confira se as estatísticas, os consumos, a aparência e o acúmulo funcionam como esperado.