<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.dragonminez.com/index.php?action=history&amp;feed=atom&amp;title=Custom_Races</id>
	<title>Custom Races - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.dragonminez.com/index.php?action=history&amp;feed=atom&amp;title=Custom_Races"/>
	<link rel="alternate" type="text/html" href="https://wiki.dragonminez.com/index.php?title=Custom_Races&amp;action=history"/>
	<updated>2026-10-26T21:59:44Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.11</generator>
	<entry>
		<id>https://wiki.dragonminez.com/index.php?title=Custom_Races&amp;diff=37623&amp;oldid=prev</id>
		<title>Shokkoh: Sync from dragonminez-wiki repository</title>
		<link rel="alternate" type="text/html" href="https://wiki.dragonminez.com/index.php?title=Custom_Races&amp;diff=37623&amp;oldid=prev"/>
		<updated>2026-10-22T00:44:54Z</updated>

		<summary type="html">&lt;p&gt;Sync from dragonminez-wiki repository&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 00:44, 22 October 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l88&quot;&gt;Line 88:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 88:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| &amp;lt;code&amp;gt;customModel&amp;lt;/code&amp;gt; || &amp;lt;translate&amp;gt;&amp;lt;!--T:18--&amp;gt; String&amp;lt;/translate&amp;gt; || &amp;lt;translate&amp;gt;&amp;lt;!--T:19--&amp;gt; Model key. Empty means the race looks like a Human. A built-in key (for example &amp;lt;code&amp;gt;namekian&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;majin&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;frostdemon&amp;lt;/code&amp;gt;) reuses that model and its textures; any other key loads your own model. The built-in keys are listed on [[Special:MyLanguage/Custom Models and Assets#Built-in model keys|Custom Models and Assets]].&amp;lt;/translate&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| &amp;lt;code&amp;gt;customModel&amp;lt;/code&amp;gt; || &amp;lt;translate&amp;gt;&amp;lt;!--T:18--&amp;gt; String&amp;lt;/translate&amp;gt; || &amp;lt;translate&amp;gt;&amp;lt;!--T:19--&amp;gt; Model key. Empty means the race looks like a Human. A built-in key (for example &amp;lt;code&amp;gt;namekian&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;majin&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;frostdemon&amp;lt;/code&amp;gt;) reuses that model and its textures; any other key loads your own model. The built-in keys are listed on [[Special:MyLanguage/Custom Models and Assets#Built-in model keys|Custom Models and Assets]].&amp;lt;/translate&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| &amp;lt;code&amp;gt;isLayered&amp;lt;/code&amp;gt; || &amp;lt;translate&amp;gt;&amp;lt;!--T:20--&amp;gt; Boolean&amp;lt;/translate&amp;gt; || &amp;lt;translate&amp;gt;&amp;lt;!--T:21--&amp;gt; &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt;: the body is drawn from three tintable texture layers (body colors 1, 2 and 3) and the race uses its own face textures. &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;: one plain body texture and borrowed Human faces.&amp;lt;/translate&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| &amp;lt;code&amp;gt;isLayered&amp;lt;/code&amp;gt; || &amp;lt;translate&amp;gt;&amp;lt;!--T:20--&amp;gt; Boolean&amp;lt;/translate&amp;gt; || &amp;lt;translate&amp;gt;&amp;lt;!--T:21--&amp;gt; &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt;: the body is drawn from three tintable texture layers (body colors 1, 2 and 3) and the race uses its own face textures. &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;: one plain body texture and borrowed Human faces&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;. Any body texture can have an optional &amp;lt;code&amp;gt;&amp;lt;texture&amp;gt;_shadow.png&amp;lt;/code&amp;gt; mask next to it (for example &amp;lt;code&amp;gt;..._layer1_shadow.png&amp;lt;/code&amp;gt; next to &amp;lt;code&amp;gt;..._layer1.png&amp;lt;/code&amp;gt;): it is drawn in a shadow tone of that texture&#039;s body color (same hue, shifted saturation), so the shading follows the colors the player picks&lt;/ins&gt;.&amp;lt;/translate&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| &amp;lt;code&amp;gt;headBones&amp;lt;/code&amp;gt; || &amp;lt;translate&amp;gt;&amp;lt;!--T:22--&amp;gt; List of strings&amp;lt;/translate&amp;gt; || &amp;lt;translate&amp;gt;&amp;lt;!--T:23--&amp;gt; Bone names the player can choose from in character customization (one at a time, plus a &amp;quot;none&amp;quot; option), for example ears, horns or antennas. Join bones with &amp;lt;code&amp;gt;+&amp;lt;/code&amp;gt; to show several at once (&amp;lt;code&amp;gt;&amp;quot;ears1+horns2&amp;quot;&amp;lt;/code&amp;gt;). The special entry &amp;lt;code&amp;gt;&amp;quot;hair&amp;quot;&amp;lt;/code&amp;gt; enables the hair editor for the race. Bones are looked up in &amp;lt;code&amp;gt;geo/entity/raceparts.geo.json&amp;lt;/code&amp;gt; first, then in the race model.&amp;lt;/translate&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| &amp;lt;code&amp;gt;headBones&amp;lt;/code&amp;gt; || &amp;lt;translate&amp;gt;&amp;lt;!--T:22--&amp;gt; List of strings&amp;lt;/translate&amp;gt; || &amp;lt;translate&amp;gt;&amp;lt;!--T:23--&amp;gt; Bone names the player can choose from in character customization (one at a time, plus a &amp;quot;none&amp;quot; option), for example ears, horns or antennas. Join bones with &amp;lt;code&amp;gt;+&amp;lt;/code&amp;gt; to show several at once (&amp;lt;code&amp;gt;&amp;quot;ears1+horns2&amp;quot;&amp;lt;/code&amp;gt;). The special entry &amp;lt;code&amp;gt;&amp;quot;hair&amp;quot;&amp;lt;/code&amp;gt; enables the hair editor for the race. Bones are looked up in &amp;lt;code&amp;gt;geo/entity/raceparts.geo.json&amp;lt;/code&amp;gt; first, then in the race model.&amp;lt;/translate&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l94&quot;&gt;Line 94:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 94:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| &amp;lt;code&amp;gt;racialSkill&amp;lt;/code&amp;gt; || &amp;lt;translate&amp;gt;&amp;lt;!--T:24--&amp;gt; String&amp;lt;/translate&amp;gt; || &amp;lt;translate&amp;gt;&amp;lt;!--T:25--&amp;gt; Which racial skill the race uses: &amp;lt;code&amp;gt;human&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;saiyan&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;namekian&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;frostdemon&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;bioandroid&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;majin&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;glind&amp;lt;/code&amp;gt;. A custom race uses the same tuning as the race it borrows from (&amp;lt;code&amp;gt;general-server.json&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;racialSkills.&amp;lt;skill&amp;gt;&amp;lt;/code&amp;gt;). See [[Special:MyLanguage/Racial Skills|Racial Skills]].&amp;lt;/translate&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| &amp;lt;code&amp;gt;racialSkill&amp;lt;/code&amp;gt; || &amp;lt;translate&amp;gt;&amp;lt;!--T:24--&amp;gt; String&amp;lt;/translate&amp;gt; || &amp;lt;translate&amp;gt;&amp;lt;!--T:25--&amp;gt; Which racial skill the race uses: &amp;lt;code&amp;gt;human&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;saiyan&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;namekian&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;frostdemon&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;bioandroid&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;majin&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;glind&amp;lt;/code&amp;gt;. A custom race uses the same tuning as the race it borrows from (&amp;lt;code&amp;gt;general-server.json&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;racialSkills.&amp;lt;skill&amp;gt;&amp;lt;/code&amp;gt;). See [[Special:MyLanguage/Racial Skills|Racial Skills]].&amp;lt;/translate&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| &amp;lt;code&amp;gt;hasSaiyanTail&amp;lt;/code&amp;gt; || &amp;lt;translate&amp;gt;&amp;lt;!--T:26--&amp;gt; Boolean&amp;lt;/translate&amp;gt; || &amp;lt;translate&amp;gt;&amp;lt;!--T:27--&amp;gt; Gives the race a Saiyan tail.&amp;lt;/translate&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| &amp;lt;code&amp;gt;hasSaiyanTail&amp;lt;/code&amp;gt; || &amp;lt;translate&amp;gt;&amp;lt;!--T:26--&amp;gt; Boolean&amp;lt;/translate&amp;gt; || &amp;lt;translate&amp;gt;&amp;lt;!--T:27--&amp;gt; Gives the race a Saiyan tail&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;. Hiding and showing it plays the same animation as for Saiyans, which wraps the tail around the waist&lt;/ins&gt;.&amp;lt;/translate&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| &amp;lt;code&amp;gt;auraType&amp;lt;/code&amp;gt; || &amp;lt;translate&amp;gt;&amp;lt;!--T:28--&amp;gt; String&amp;lt;/translate&amp;gt; || &amp;lt;translate&amp;gt;&amp;lt;!--T:29--&amp;gt; 2D aura sprite set: &amp;lt;code&amp;gt;kakarot&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;god&amp;lt;/code&amp;gt;.&amp;lt;/translate&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| &amp;lt;code&amp;gt;auraType&amp;lt;/code&amp;gt; || &amp;lt;translate&amp;gt;&amp;lt;!--T:28--&amp;gt; String&amp;lt;/translate&amp;gt; || &amp;lt;translate&amp;gt;&amp;lt;!--T:29--&amp;gt; 2D aura sprite set: &amp;lt;code&amp;gt;kakarot&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;god&amp;lt;/code&amp;gt;.&amp;lt;/translate&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l119&quot;&gt;Line 119:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 119:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Schema source: &amp;lt;code&amp;gt;src/main/java/com/dragonminez/common/config/RaceCharacterConfig.java&amp;lt;/code&amp;gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Schema source: &amp;lt;code&amp;gt;src/main/java/com/dragonminez/common/config/RaceCharacterConfig.java&amp;lt;/code&amp;gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/translate&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/translate&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;{{Note|type=info|title=&amp;lt;translate&amp;gt;&amp;lt;!--T:89--&amp;gt; Resource packs&amp;lt;/translate&amp;gt;|text=&amp;lt;translate&amp;gt;&amp;lt;!--T:90--&amp;gt; In 2.2 the built-in &amp;lt;code&amp;gt;humansaiyan&amp;lt;/code&amp;gt; body shading textures were renamed from &amp;lt;code&amp;gt;bodytype_*_layer2.png&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;bodytype_*_layer1_shadow.png&amp;lt;/code&amp;gt; (in &amp;lt;code&amp;gt;textures/entity/races/humansaiyan/&amp;lt;/code&amp;gt;). A resource pack that replaced the old files must rename them.&amp;lt;/translate&amp;gt;}}&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;translate&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;translate&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key dmzwiki:diff:1.41:old-125:rev-37623:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Shokkoh</name></author>
	</entry>
	<entry>
		<id>https://wiki.dragonminez.com/index.php?title=Custom_Races&amp;diff=125&amp;oldid=prev</id>
		<title>Neb: Sync from dragonminez-wiki repository</title>
		<link rel="alternate" type="text/html" href="https://wiki.dragonminez.com/index.php?title=Custom_Races&amp;diff=125&amp;oldid=prev"/>
		<updated>2026-10-13T04:15:57Z</updated>

		<summary type="html">&lt;p&gt;Sync from dragonminez-wiki repository&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:1--&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Custom races&amp;#039;&amp;#039;&amp;#039; are playable races you add to DragonMineZ with config files alone. No Java code or add-on jar is needed: a folder with a few JSON files defines the race&amp;#039;s look, its classes, its racial skill and its transformations, and the race then shows up in character creation.&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
== How DragonMineZ finds races == &amp;lt;!--T:2--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:3--&amp;gt;&lt;br /&gt;
DragonMineZ loads its built-in races first (&amp;lt;code&amp;gt;human&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;saiyan&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;namekian&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;frostdemon&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;bioandroid&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;majin&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;glind&amp;lt;/code&amp;gt;), then scans the subfolders of &amp;lt;code&amp;gt;config/dragonminez/races/&amp;lt;/code&amp;gt;. Any other folder name there is treated as a custom race key (use lowercase). Each race folder holds:&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
config/dragonminez/races/&amp;lt;race_key&amp;gt;/&lt;br /&gt;
  character.json      # appearance, model, racial skill, form skill prices&lt;br /&gt;
  stats.json          # per-class base stats and scaling&lt;br /&gt;
  forms/*.json        # the race&amp;#039;s transformation groups&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:4--&amp;gt;&lt;br /&gt;
If you create an empty folder, DragonMineZ generates a &amp;lt;code&amp;gt;character.json&amp;lt;/code&amp;gt; and a &amp;lt;code&amp;gt;stats.json&amp;lt;/code&amp;gt; with neutral defaults the next time configs load. It does &amp;#039;&amp;#039;&amp;#039;not&amp;#039;&amp;#039;&amp;#039; generate any forms for a custom race: you add those yourself (see step 3).&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:5--&amp;gt;&lt;br /&gt;
For a good starting point, copy an existing race folder (for example &amp;lt;code&amp;gt;races/saiyan/&amp;lt;/code&amp;gt;), rename it and tune the values inside.&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:6--&amp;gt;&lt;br /&gt;
Source: &amp;lt;code&amp;gt;src/main/java/com/dragonminez/common/config/ConfigManager.java&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;loadAllRaces&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;createOrLoadRace&amp;lt;/code&amp;gt;).&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Note|type=config|title=&amp;lt;translate&amp;gt;&amp;lt;!--T:7--&amp;gt; Config version&amp;lt;/translate&amp;gt;|text=&amp;lt;translate&amp;gt;&amp;lt;!--T:8--&amp;gt; Every file carries a &amp;lt;code&amp;gt;&amp;quot;configVersion&amp;quot;&amp;lt;/code&amp;gt; string (currently &amp;lt;code&amp;gt;&amp;quot;2.2.0&amp;quot;&amp;lt;/code&amp;gt;). A custom file with an older or missing version is backed up to &amp;lt;code&amp;gt;config/dragonminez/oldBackup/&amp;lt;/code&amp;gt; and saved again with the current version; your values are kept. A file with broken JSON syntax is never overwritten: it is reported and skipped until you fix it. See [[Special:MyLanguage/How to JSON|How to JSON]] and [[Special:MyLanguage/Reloading and Updating Changes|Reloading and Updating Changes]].&amp;lt;/translate&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
== Step 1: Configure the character == &amp;lt;!--T:9--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:10--&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;character.json&amp;lt;/code&amp;gt; sets the race&amp;#039;s appearance, model, racial skill and form skill prices:&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;configVersion&amp;quot;: &amp;quot;2.2.0&amp;quot;,&lt;br /&gt;
  &amp;quot;hasGender&amp;quot;: false,&lt;br /&gt;
  &amp;quot;useVanillaSkin&amp;quot;: false,&lt;br /&gt;
  &amp;quot;customModel&amp;quot;: &amp;quot;saibaman&amp;quot;,&lt;br /&gt;
  &amp;quot;isLayered&amp;quot;: true,&lt;br /&gt;
  &amp;quot;headBones&amp;quot;: [&amp;quot;ears1&amp;quot;],&lt;br /&gt;
  &amp;quot;racialSkill&amp;quot;: &amp;quot;namekian&amp;quot;,&lt;br /&gt;
  &amp;quot;hasSaiyanTail&amp;quot;: false,&lt;br /&gt;
  &amp;quot;auraType&amp;quot;: &amp;quot;kakarot&amp;quot;,&lt;br /&gt;
  &amp;quot;auraType3D&amp;quot;: &amp;quot;userPreference&amp;quot;,&lt;br /&gt;
  &amp;quot;defaultModelScaling&amp;quot;: [0.9375, 0.9375, 0.9375],&lt;br /&gt;
  &amp;quot;defaultBodyType&amp;quot;: 0,&lt;br /&gt;
  &amp;quot;slimBodyTypes&amp;quot;: [],&lt;br /&gt;
  &amp;quot;defaultHairType&amp;quot;: 0,&lt;br /&gt;
  &amp;quot;defaultEyesType&amp;quot;: 0,&lt;br /&gt;
  &amp;quot;defaultNoseType&amp;quot;: 0,&lt;br /&gt;
  &amp;quot;defaultMouthType&amp;quot;: 0,&lt;br /&gt;
  &amp;quot;defaultTattooType&amp;quot;: 0,&lt;br /&gt;
  &amp;quot;defaultBodyColor&amp;quot;: &amp;quot;#3E8E2E&amp;quot;,&lt;br /&gt;
  &amp;quot;defaultBodyColor2&amp;quot;: &amp;quot;#2A5C20&amp;quot;,&lt;br /&gt;
  &amp;quot;defaultBodyColor3&amp;quot;: &amp;quot;#9BD36A&amp;quot;,&lt;br /&gt;
  &amp;quot;defaultHairColor&amp;quot;: &amp;quot;#222629&amp;quot;,&lt;br /&gt;
  &amp;quot;defaultEye1Color&amp;quot;: &amp;quot;#B40000&amp;quot;,&lt;br /&gt;
  &amp;quot;defaultEye2Color&amp;quot;: &amp;quot;#B40000&amp;quot;,&lt;br /&gt;
  &amp;quot;defaultAuraColor&amp;quot;: &amp;quot;#7FFF00&amp;quot;,&lt;br /&gt;
  &amp;quot;formSkillsCosts&amp;quot;: {&lt;br /&gt;
    &amp;quot;superforms&amp;quot;: { &amp;quot;buyFromMaster&amp;quot;: false, &amp;quot;prices&amp;quot;: [20000, 45000, 80000] },&lt;br /&gt;
    &amp;quot;godforms&amp;quot;: { &amp;quot;buyFromMaster&amp;quot;: false, &amp;quot;prices&amp;quot;: [] },&lt;br /&gt;
    &amp;quot;legendaryforms&amp;quot;: { &amp;quot;buyFromMaster&amp;quot;: false, &amp;quot;prices&amp;quot;: [] }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! &amp;lt;translate&amp;gt;&amp;lt;!--T:11--&amp;gt; Field&amp;lt;/translate&amp;gt; !! &amp;lt;translate&amp;gt;&amp;lt;!--T:12--&amp;gt; Type&amp;lt;/translate&amp;gt; !! &amp;lt;translate&amp;gt;&amp;lt;!--T:13--&amp;gt; What it does&amp;lt;/translate&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;hasGender&amp;lt;/code&amp;gt; || &amp;lt;translate&amp;gt;&amp;lt;!--T:14--&amp;gt; Boolean&amp;lt;/translate&amp;gt; || &amp;lt;translate&amp;gt;&amp;lt;!--T:15--&amp;gt; &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; gives the race a male/female choice. Custom models and textures then use &amp;lt;code&amp;gt;_male&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;_female&amp;lt;/code&amp;gt; suffixes (see [[Special:MyLanguage/Custom Models and Assets|Custom Models and Assets]]).&amp;lt;/translate&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;useVanillaSkin&amp;lt;/code&amp;gt; || &amp;lt;translate&amp;gt;&amp;lt;!--T:16--&amp;gt; Boolean&amp;lt;/translate&amp;gt; || &amp;lt;translate&amp;gt;&amp;lt;!--T:17--&amp;gt; When &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt;, body type &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; renders the player&amp;#039;s own Minecraft skin; the race&amp;#039;s own body textures start at body type &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;.&amp;lt;/translate&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;customModel&amp;lt;/code&amp;gt; || &amp;lt;translate&amp;gt;&amp;lt;!--T:18--&amp;gt; String&amp;lt;/translate&amp;gt; || &amp;lt;translate&amp;gt;&amp;lt;!--T:19--&amp;gt; Model key. Empty means the race looks like a Human. A built-in key (for example &amp;lt;code&amp;gt;namekian&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;majin&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;frostdemon&amp;lt;/code&amp;gt;) reuses that model and its textures; any other key loads your own model. The built-in keys are listed on [[Special:MyLanguage/Custom Models and Assets#Built-in model keys|Custom Models and Assets]].&amp;lt;/translate&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;isLayered&amp;lt;/code&amp;gt; || &amp;lt;translate&amp;gt;&amp;lt;!--T:20--&amp;gt; Boolean&amp;lt;/translate&amp;gt; || &amp;lt;translate&amp;gt;&amp;lt;!--T:21--&amp;gt; &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt;: the body is drawn from three tintable texture layers (body colors 1, 2 and 3) and the race uses its own face textures. &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;: one plain body texture and borrowed Human faces.&amp;lt;/translate&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;headBones&amp;lt;/code&amp;gt; || &amp;lt;translate&amp;gt;&amp;lt;!--T:22--&amp;gt; List of strings&amp;lt;/translate&amp;gt; || &amp;lt;translate&amp;gt;&amp;lt;!--T:23--&amp;gt; Bone names the player can choose from in character customization (one at a time, plus a &amp;quot;none&amp;quot; option), for example ears, horns or antennas. Join bones with &amp;lt;code&amp;gt;+&amp;lt;/code&amp;gt; to show several at once (&amp;lt;code&amp;gt;&amp;quot;ears1+horns2&amp;quot;&amp;lt;/code&amp;gt;). The special entry &amp;lt;code&amp;gt;&amp;quot;hair&amp;quot;&amp;lt;/code&amp;gt; enables the hair editor for the race. Bones are looked up in &amp;lt;code&amp;gt;geo/entity/raceparts.geo.json&amp;lt;/code&amp;gt; first, then in the race model.&amp;lt;/translate&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;racialSkill&amp;lt;/code&amp;gt; || &amp;lt;translate&amp;gt;&amp;lt;!--T:24--&amp;gt; String&amp;lt;/translate&amp;gt; || &amp;lt;translate&amp;gt;&amp;lt;!--T:25--&amp;gt; Which racial skill the race uses: &amp;lt;code&amp;gt;human&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;saiyan&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;namekian&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;frostdemon&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;bioandroid&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;majin&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;glind&amp;lt;/code&amp;gt;. A custom race uses the same tuning as the race it borrows from (&amp;lt;code&amp;gt;general-server.json&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;racialSkills.&amp;lt;skill&amp;gt;&amp;lt;/code&amp;gt;). See [[Special:MyLanguage/Racial Skills|Racial Skills]].&amp;lt;/translate&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;hasSaiyanTail&amp;lt;/code&amp;gt; || &amp;lt;translate&amp;gt;&amp;lt;!--T:26--&amp;gt; Boolean&amp;lt;/translate&amp;gt; || &amp;lt;translate&amp;gt;&amp;lt;!--T:27--&amp;gt; Gives the race a Saiyan tail.&amp;lt;/translate&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;auraType&amp;lt;/code&amp;gt; || &amp;lt;translate&amp;gt;&amp;lt;!--T:28--&amp;gt; String&amp;lt;/translate&amp;gt; || &amp;lt;translate&amp;gt;&amp;lt;!--T:29--&amp;gt; 2D aura sprite set: &amp;lt;code&amp;gt;kakarot&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;god&amp;lt;/code&amp;gt;.&amp;lt;/translate&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;auraType3D&amp;lt;/code&amp;gt; || &amp;lt;translate&amp;gt;&amp;lt;!--T:30--&amp;gt; String&amp;lt;/translate&amp;gt; || &amp;lt;translate&amp;gt;&amp;lt;!--T:31--&amp;gt; 3D aura style of the base form: &amp;lt;code&amp;gt;smooth&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;sparking&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;god&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;userPreference&amp;lt;/code&amp;gt; (follows each player&amp;#039;s own setting).&amp;lt;/translate&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;aura3DStyle&amp;lt;/code&amp;gt; || &amp;lt;translate&amp;gt;&amp;lt;!--T:32--&amp;gt; Object&amp;lt;/translate&amp;gt; || &amp;lt;translate&amp;gt;&amp;lt;!--T:33--&amp;gt; Fine-tuning of the base 3D aura shape. The keys are listed on [[Special:MyLanguage/Custom Forms#3D aura shape|Custom Forms]].&amp;lt;/translate&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;defaultModelScaling&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;[x, y, z]&amp;lt;/code&amp;gt; || &amp;lt;translate&amp;gt;&amp;lt;!--T:34--&amp;gt; Base model size.&amp;lt;/translate&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;defaultBodyType&amp;lt;/code&amp;gt; || &amp;lt;translate&amp;gt;&amp;lt;!--T:35--&amp;gt; Integer&amp;lt;/translate&amp;gt; || &amp;lt;translate&amp;gt;&amp;lt;!--T:36--&amp;gt; Body type selected by default in character creation.&amp;lt;/translate&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;slimBodyTypes&amp;lt;/code&amp;gt; || &amp;lt;translate&amp;gt;&amp;lt;!--T:37--&amp;gt; List of integers&amp;lt;/translate&amp;gt; || &amp;lt;translate&amp;gt;&amp;lt;!--T:38--&amp;gt; Body types (other than &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;) that use slim arms. Body type &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; always follows the player&amp;#039;s skin model.&amp;lt;/translate&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;defaultHairType&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;defaultEyesType&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;defaultNoseType&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;defaultMouthType&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;defaultTattooType&amp;lt;/code&amp;gt; || &amp;lt;translate&amp;gt;&amp;lt;!--T:39--&amp;gt; Integer&amp;lt;/translate&amp;gt; || &amp;lt;translate&amp;gt;&amp;lt;!--T:40--&amp;gt; Default customization indices.&amp;lt;/translate&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;defaultBodyColor&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;defaultBodyColor2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;defaultBodyColor3&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;defaultHairColor&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;defaultEye1Color&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;defaultEye2Color&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;defaultAuraColor&amp;lt;/code&amp;gt; || &amp;lt;translate&amp;gt;&amp;lt;!--T:41--&amp;gt; Hex string&amp;lt;/translate&amp;gt; || &amp;lt;translate&amp;gt;&amp;lt;!--T:42--&amp;gt; Default colors in character creation.&amp;lt;/translate&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;formSkillsCosts&amp;lt;/code&amp;gt; || &amp;lt;translate&amp;gt;&amp;lt;!--T:43--&amp;gt; Object&amp;lt;/translate&amp;gt; || &amp;lt;translate&amp;gt;&amp;lt;!--T:44--&amp;gt; One entry per form skill the race can level (see below).&amp;lt;/translate&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:45--&amp;gt;&lt;br /&gt;
Schema source: &amp;lt;code&amp;gt;src/main/java/com/dragonminez/common/config/RaceCharacterConfig.java&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
=== Form skill prices === &amp;lt;!--T:46--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:47--&amp;gt;&lt;br /&gt;
Each key of &amp;lt;code&amp;gt;formSkillsCosts&amp;lt;/code&amp;gt; is a form skill: &amp;lt;code&amp;gt;superforms&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;legendaryforms&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;godforms&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;androidforms&amp;lt;/code&amp;gt;. The value is either a plain array of prices or an object with these fields:&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! &amp;lt;translate&amp;gt;&amp;lt;!--T:48--&amp;gt; Field&amp;lt;/translate&amp;gt; !! &amp;lt;translate&amp;gt;&amp;lt;!--T:49--&amp;gt; Type&amp;lt;/translate&amp;gt; !! &amp;lt;translate&amp;gt;&amp;lt;!--T:50--&amp;gt; What it does&amp;lt;/translate&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;prices&amp;lt;/code&amp;gt; || &amp;lt;translate&amp;gt;&amp;lt;!--T:51--&amp;gt; List of numbers&amp;lt;/translate&amp;gt; || &amp;lt;translate&amp;gt;&amp;lt;!--T:52--&amp;gt; TP price of each level, in order. The number of entries is the skill&amp;#039;s maximum level, so an empty list means the race cannot level that skill.&amp;lt;/translate&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;buyFromMaster&amp;lt;/code&amp;gt; || &amp;lt;translate&amp;gt;&amp;lt;!--T:53--&amp;gt; Boolean&amp;lt;/translate&amp;gt; || &amp;lt;translate&amp;gt;&amp;lt;!--T:54--&amp;gt; &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt;: the first level has to be bought from a master before the skill can be leveled from the Skills menu.&amp;lt;/translate&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:55--&amp;gt;&lt;br /&gt;
A form unlocks when this skill reaches the form&amp;#039;s &amp;lt;code&amp;gt;unlockOnSkillLevel&amp;lt;/code&amp;gt; (see step 3).&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
=== Android upgrade for custom races === &amp;lt;!--T:56--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:57--&amp;gt;&lt;br /&gt;
Dr. Gero&amp;#039;s android upgrade is offered to any race whose &amp;lt;code&amp;gt;formSkillsCosts&amp;lt;/code&amp;gt; has at least one price under &amp;lt;code&amp;gt;androidforms&amp;lt;/code&amp;gt; (by default only [[Special:MyLanguage/Human|Humans]]). The upgrade puts the player into the &amp;lt;code&amp;gt;androidbase&amp;lt;/code&amp;gt; form of the &amp;lt;code&amp;gt;androidforms&amp;lt;/code&amp;gt; group, so the race also needs an &amp;lt;code&amp;gt;androidforms&amp;lt;/code&amp;gt; form group in its &amp;lt;code&amp;gt;forms/&amp;lt;/code&amp;gt; folder. The easiest way is to copy &amp;lt;code&amp;gt;races/human/forms/androidforms.json&amp;lt;/code&amp;gt; into your race&amp;#039;s &amp;lt;code&amp;gt;forms/&amp;lt;/code&amp;gt; folder. See [[Special:MyLanguage/Android|Android]] for the upgrade itself.&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
== Step 2: Configure the classes == &amp;lt;!--T:58--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:59--&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;stats.json&amp;lt;/code&amp;gt; holds a &amp;lt;code&amp;gt;classes&amp;lt;/code&amp;gt; object with one block per class. DragonMineZ generates the eight default classes: &amp;lt;code&amp;gt;warrior&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;spiritualist&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;martialartist&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;berserker&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;paladin&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;tank&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;cleric&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;unversed&amp;lt;/code&amp;gt; (see [[Special:MyLanguage/Classes|Classes]]). You can add your own class by duplicating a block under a new key; it shows up in character creation for that race. A player whose class isn&amp;#039;t in the race&amp;#039;s file uses the &amp;lt;code&amp;gt;warrior&amp;lt;/code&amp;gt; values.&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:60--&amp;gt;&lt;br /&gt;
Inside each class block:&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! &amp;lt;translate&amp;gt;&amp;lt;!--T:61--&amp;gt; Field&amp;lt;/translate&amp;gt; !! &amp;lt;translate&amp;gt;&amp;lt;!--T:62--&amp;gt; Type&amp;lt;/translate&amp;gt; !! &amp;lt;translate&amp;gt;&amp;lt;!--T:63--&amp;gt; What it does&amp;lt;/translate&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;baseStats&amp;lt;/code&amp;gt; || &amp;lt;translate&amp;gt;&amp;lt;!--T:64--&amp;gt; Object&amp;lt;/translate&amp;gt; || &amp;lt;translate&amp;gt;&amp;lt;!--T:65--&amp;gt; Starting stats: &amp;lt;code&amp;gt;STR&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;SKP&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;RES&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;VIT&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;PWR&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ENE&amp;lt;/code&amp;gt;.&amp;lt;/translate&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;statScaling&amp;lt;/code&amp;gt; || &amp;lt;translate&amp;gt;&amp;lt;!--T:66--&amp;gt; Object&amp;lt;/translate&amp;gt; || &amp;lt;translate&amp;gt;&amp;lt;!--T:67--&amp;gt; &amp;lt;code&amp;gt;STR_scaling&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;SKP_scaling&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;STM_scaling&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;DEF_scaling&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;VIT_scaling&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;PWR_scaling&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ENE_scaling&amp;lt;/code&amp;gt;. The optional &amp;lt;code&amp;gt;VIT_scaling_max&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;DEF_scaling_max&amp;lt;/code&amp;gt; make the scaling grow from the normal value towards this maximum as the stat rises (up to the curve knee set in &amp;lt;code&amp;gt;general-server.json&amp;lt;/code&amp;gt;); leave them out for flat scaling.&amp;lt;/translate&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;baseHp5&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;hp5VitScaling&amp;lt;/code&amp;gt; || &amp;lt;translate&amp;gt;&amp;lt;!--T:68--&amp;gt; Number&amp;lt;/translate&amp;gt; || &amp;lt;translate&amp;gt;&amp;lt;!--T:69--&amp;gt; Health regenerated every 5 seconds, plus a share of VIT.&amp;lt;/translate&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;baseEp5&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ep5EneScaling&amp;lt;/code&amp;gt; || &amp;lt;translate&amp;gt;&amp;lt;!--T:70--&amp;gt; Number&amp;lt;/translate&amp;gt; || &amp;lt;translate&amp;gt;&amp;lt;!--T:71--&amp;gt; Ki regenerated every 5 seconds, plus a share of ENE.&amp;lt;/translate&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;baseSp5&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;sp5StmScaling&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;sp5ResScaling&amp;lt;/code&amp;gt; || &amp;lt;translate&amp;gt;&amp;lt;!--T:72--&amp;gt; Number&amp;lt;/translate&amp;gt; || &amp;lt;translate&amp;gt;&amp;lt;!--T:73--&amp;gt; Stamina regenerated every 5 seconds, plus a share of VIT (&amp;lt;code&amp;gt;sp5StmScaling&amp;lt;/code&amp;gt;, despite its name) and a share of RES (&amp;lt;code&amp;gt;sp5ResScaling&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; when missing).&amp;lt;/translate&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;tpCostMultiplier&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;tpGainMultiplier&amp;lt;/code&amp;gt; || &amp;lt;translate&amp;gt;&amp;lt;!--T:74--&amp;gt; Number&amp;lt;/translate&amp;gt; || &amp;lt;translate&amp;gt;&amp;lt;!--T:75--&amp;gt; Class-wide multipliers on TP costs and TP gains.&amp;lt;/translate&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;passive&amp;lt;/code&amp;gt; || &amp;lt;translate&amp;gt;&amp;lt;!--T:76--&amp;gt; Object&amp;lt;/translate&amp;gt; || &amp;lt;translate&amp;gt;&amp;lt;!--T:77--&amp;gt; &amp;lt;code&amp;gt;enabled&amp;lt;/code&amp;gt; plus a &amp;lt;code&amp;gt;values&amp;lt;/code&amp;gt; map with the tuning of the class passive (the keys depend on the class).&amp;lt;/translate&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:78--&amp;gt;&lt;br /&gt;
Schema source: &amp;lt;code&amp;gt;src/main/java/com/dragonminez/common/config/RaceStatsConfig.java&amp;lt;/code&amp;gt;. See [[Special:MyLanguage/Stats and Attributes|Stats and Attributes]] for what each stat does.&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
== Step 3: Add form groups == &amp;lt;!--T:79--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
{{Main|Custom Forms}}&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:80--&amp;gt;&lt;br /&gt;
Each file in &amp;lt;code&amp;gt;races/&amp;lt;race_key&amp;gt;/forms/&amp;lt;/code&amp;gt; defines one form group. Race forms use exactly the same schema as stack forms, so the full field reference is on [[Special:MyLanguage/Custom Forms|Custom Forms]]. The fields that matter most for a race group are:&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:81--&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;groupName&amp;lt;/code&amp;gt;: the group key (lowercase). Groups are identified by this value, not by the filename.&lt;br /&gt;
* &amp;lt;code&amp;gt;formType&amp;lt;/code&amp;gt;: the form skill that unlocks the group: &amp;lt;code&amp;gt;superforms&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;legendaryforms&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;godforms&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;androidforms&amp;lt;/code&amp;gt;. The race needs prices for that skill in &amp;lt;code&amp;gt;formSkillsCosts&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &amp;lt;code&amp;gt;forms&amp;lt;/code&amp;gt;: the forms of the group, in transformation order. Each form&amp;#039;s &amp;lt;code&amp;gt;unlockOnSkillLevel&amp;lt;/code&amp;gt; is the skill level that unlocks it.&lt;br /&gt;
* &amp;lt;code&amp;gt;customModel&amp;lt;/code&amp;gt;: a model key for the form (looked up the same way as the race&amp;#039;s &amp;lt;code&amp;gt;customModel&amp;lt;/code&amp;gt;).&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:82--&amp;gt;&lt;br /&gt;
Files whose name starts with &amp;lt;code&amp;gt;old_&amp;lt;/code&amp;gt; are ignored. See [[Special:MyLanguage/Transformations|Transformations]] for how forms work in game.&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
== Step 4: Add translation keys == &amp;lt;!--T:83--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:84--&amp;gt;&lt;br /&gt;
Race and form names are translated with these keys:&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:85--&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;race.dragonminez.&amp;lt;race_key&amp;gt;&amp;lt;/code&amp;gt;: the name of the race.&lt;br /&gt;
* &amp;lt;code&amp;gt;race.dragonminez.&amp;lt;race_key&amp;gt;.desc&amp;lt;/code&amp;gt;: a short description shown in character creation.&lt;br /&gt;
* &amp;lt;code&amp;gt;race.dragonminez.&amp;lt;race_key&amp;gt;.group.&amp;lt;group_key&amp;gt;&amp;lt;/code&amp;gt;: the name of a form group.&lt;br /&gt;
* &amp;lt;code&amp;gt;race.dragonminez.&amp;lt;race_key&amp;gt;.form.&amp;lt;group_key&amp;gt;.&amp;lt;form_key&amp;gt;&amp;lt;/code&amp;gt;: the name of a form.&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:86--&amp;gt;&lt;br /&gt;
The default language file is &amp;lt;code&amp;gt;src/main/resources/assets/dragonminez/lang/en_us.json&amp;lt;/code&amp;gt;. Feel free to edit your &amp;lt;code&amp;gt;en_us.json&amp;lt;/code&amp;gt; or create a new language file for your custom race. You don&amp;#039;t need to add translation keys for anything else: DragonMineZ automatically merges the translations already made on Crowdin with your own.&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
== Step 5: Reload and validate == &amp;lt;!--T:87--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:88--&amp;gt;&lt;br /&gt;
# Save your JSON files.&lt;br /&gt;
# Run &amp;lt;code&amp;gt;/dmzreload config&amp;lt;/code&amp;gt; (see [[Special:MyLanguage/Reloading and Updating Changes|Reloading and Updating Changes]]).&lt;br /&gt;
# Open character creation and check that your race appears.&lt;br /&gt;
# Check its forms, colors and scaling in game.&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Navbox Modding}}&lt;/div&gt;</summary>
		<author><name>Neb</name></author>
	</entry>
</feed>