zenno/doc/mdb: document skills
This commit is contained in:
@@ -1,7 +1,139 @@
|
||||
<script lang="ts">
|
||||
import * as skill from '$lib/data/skill';
|
||||
import Article from '../Article.svelte';
|
||||
import Sec from '../Sec.svelte';
|
||||
import Mono from '../Mono.svelte';
|
||||
import { onMount } from 'svelte';
|
||||
import { SvelteMap } from 'svelte/reactivity';
|
||||
import Skill from '$lib/Skill.svelte';
|
||||
import { resolve } from '$app/paths';
|
||||
|
||||
let skillMap = new SvelteMap<number, skill.Skill>();
|
||||
onMount(async () => {
|
||||
const sk = await skill.skills();
|
||||
skillMap.clear();
|
||||
for (const s of sk) {
|
||||
skillMap.set(s.skill_id, s);
|
||||
}
|
||||
});
|
||||
|
||||
const skills = $derived({
|
||||
rickey: skillMap.get(100981),
|
||||
fall2: skillMap.get(200191),
|
||||
fall1: skillMap.get(200192),
|
||||
fallX: skillMap.get(200193),
|
||||
fallR: skillMap.get(200194),
|
||||
g1Averse: skillMap.get(200311),
|
||||
focus: skillMap.get(200432),
|
||||
restraint: skillMap.get(202161),
|
||||
oppression: skillMap.get(202362),
|
||||
});
|
||||
const fallGroup = $derived(skills.fall1?.group);
|
||||
|
||||
const skillCategories = [
|
||||
[5, 'Unique'],
|
||||
[0, 'Passive'],
|
||||
[1, 'Early-Race'],
|
||||
[2, 'Mid-Race'],
|
||||
[3, 'Late-Race'],
|
||||
[4, 'Anytime'],
|
||||
] as const;
|
||||
|
||||
const tagMeanings: [number, string][] = [
|
||||
[101, 'Front Runner'],
|
||||
[102, 'Pace Chaser'],
|
||||
[103, 'Late Surger'],
|
||||
[104, 'End Closer'],
|
||||
[201, 'Sprint'],
|
||||
[202, 'Mile'],
|
||||
[203, 'Medium'],
|
||||
[204, 'Long'],
|
||||
[301, 'Early-Race'],
|
||||
[302, 'Mid-Race'],
|
||||
[303, 'Late-Race'],
|
||||
[401, 'Affects speed stat or velocity'],
|
||||
[402, 'Affects stamina stat or HP'],
|
||||
[403, 'Affects power stat, acceleration, or lane movement speed'],
|
||||
[404, 'Affects guts stat'],
|
||||
[405, 'Affects wit stat or vision'],
|
||||
[406, "Debuff of any type, or a main story self-debuff, or Behold Thine Emperor's Divine Might"],
|
||||
[407, 'Modifies gate delay'],
|
||||
[501, 'Turf'],
|
||||
[502, 'Dirt'],
|
||||
[601, 'Ground condition passive'],
|
||||
[602, 'Weather passive'],
|
||||
[603, 'Season passive'],
|
||||
[604, 'Race track passive'],
|
||||
[605, 'Time of day passive'],
|
||||
[606, 'Exchange race passive'],
|
||||
[607, 'Distance passive'],
|
||||
[608, 'Corner-based passive'],
|
||||
[609, 'Gate position passive'],
|
||||
[610, 'Ground type passive'],
|
||||
[611, 'Popularity passive'],
|
||||
[612, 'Running style passive'],
|
||||
[613, "Passive depending on other horses' styles or skills"],
|
||||
[614, 'Base stat threshold passive'],
|
||||
[615, 'Mood passive'],
|
||||
[801, 'URA Finale scenario skill'],
|
||||
[802, 'Unity Cup scenario skill'],
|
||||
[803, 'Grand Concert scenario skill'],
|
||||
[804, 'Trackblazer scenario skill'],
|
||||
];
|
||||
|
||||
const durScalingTypes = Object.entries(skill.DURATION_SCALE_NAME).map(([id, name]) => [id, name || 'direct (no scaling)']);
|
||||
|
||||
const abilityTypes = [
|
||||
[skill.AbilityType.Speed, 'Speed stat', '+n'],
|
||||
[skill.AbilityType.Stamina, 'Stamina stat', '+n'],
|
||||
[skill.AbilityType.Power, 'Power stat', '+n'],
|
||||
[skill.AbilityType.Guts, 'Guts stat', '+n'],
|
||||
[skill.AbilityType.Wit, 'Wit stat', '+n'],
|
||||
[skill.AbilityType.Runaway, 'Become Runaway'],
|
||||
[7, 'HpDecRate (unused)'],
|
||||
[skill.AbilityType.Vision, 'Vision range', '+m'],
|
||||
[skill.AbilityType.HP, 'HP', '+ proportion of max HP'],
|
||||
[skill.AbilityType.GateDelay, 'Adjust gate delay', '×'],
|
||||
[11, 'ForceOvertakeIn (unused)'],
|
||||
[12, 'ForceOvertakeOut (unused)'],
|
||||
[skill.AbilityType.Frenzy, 'Set Rushed duration', 's'],
|
||||
[skill.AbilityType.AddGateDelay, 'Set gate delay', 's'],
|
||||
[skill.AbilityType.CurrentSpeed, 'Current speed (debuffs)', '+m/s'],
|
||||
[skill.AbilityType.CurrentSpeedWithDecel, 'Current speed (buffs)', '+m/s'],
|
||||
[skill.AbilityType.TargetSpeed, 'Target speed', '+m/s'],
|
||||
[skill.AbilityType.LaneSpeed, 'Lane change speed', '+CW/s'],
|
||||
[skill.AbilityType.RushedChance, 'Rushed chance', '+ flat%'],
|
||||
[30, 'PushPer (unused)'],
|
||||
[skill.AbilityType.Accel, 'Acceleration', '+m/s²'],
|
||||
[skill.AbilityType.AllStatus, 'All stats', '+n'],
|
||||
[skill.AbilityType.LaneChange, 'Set target lane', 'CW'],
|
||||
[36, 'ActivateRandomNormalAndRareSkill (unused)'],
|
||||
[skill.AbilityType.ActivateRare, 'Activate rare skills', 'count'],
|
||||
[38, 'Gain immunity to debuffs'],
|
||||
[41, 'Activate Sympathy (?)'],
|
||||
[42, 'Evolved Skill duration (?)', '× (?)'],
|
||||
[48, 'Zenkai Spurt acceleration (?)', '+m/s² (?)'],
|
||||
[49, 'Reactivate Unique Skill (?)'],
|
||||
[501, 'Carnival Bonus effect (old)'],
|
||||
[502, 'Carnival Bonus stats up'],
|
||||
[503, 'Carnival Bonus mood up'],
|
||||
] as const;
|
||||
|
||||
const valScalingTypes = Object.entries(skill.ABILITY_SCALE_NAME).map(([id, name]) => [id, name || 'direct (no scaling)']);
|
||||
|
||||
const addlActivateTypes = [
|
||||
[0, 'none'],
|
||||
[1, 'upon pass, up to three times'],
|
||||
[2, 'upon activating other skills, up to three times'],
|
||||
[3, 'upon activating other skills, up to twice'],
|
||||
] as const;
|
||||
|
||||
const levelUsageTypes = [
|
||||
[0, 'none', 'Hokko Tarumae and Halloween Digitan (on empty abilities)'],
|
||||
[1, 'default', 'almost all abilities'],
|
||||
[2, 'ignored', 'Chrono Genesis (on evo duration scaling)'],
|
||||
[3, 'inverse', 'unused'],
|
||||
] as const;
|
||||
|
||||
const sparkTypes = [
|
||||
[1, 'Stat', 'spark-color-blue'],
|
||||
@@ -17,6 +149,32 @@
|
||||
[11, 'Style', 'spark-color-white'],
|
||||
] as const;
|
||||
|
||||
const targetTypes = [
|
||||
[skill.Target.Self, 'self'],
|
||||
[skill.Target.Sympathizers, 'everyone'],
|
||||
[3, 'AllOtherSelf (unused)'],
|
||||
[skill.Target.InView, 'visible', 'maximum targets'],
|
||||
[5, 'RandomOtherSelf (unused)'],
|
||||
[6, 'Order (unused)'],
|
||||
[skill.Target.Frontmost, 'frontmost', 'maximum targets'],
|
||||
[8, 'furthest back (unused)'],
|
||||
[skill.Target.Ahead, 'ahead of the user', 'maximum targets'],
|
||||
[skill.Target.Behind, 'behind the user', 'maximum targets'],
|
||||
[skill.Target.AllTeammates, 'all teammates'],
|
||||
[12, 'Near (unused)'],
|
||||
[13, 'SelfAndBlockFront (unused)'],
|
||||
[14, 'BlockSide (unused)'],
|
||||
[15, 'NearInfront (unused)'],
|
||||
[16, 'NearBehind (unused)'],
|
||||
[17, 'RunningStyle (unused)'],
|
||||
[skill.Target.Style, 'others using the given running style', 'running style ID'],
|
||||
[skill.Target.RushingAhead, 'those ahead who are Rushed'],
|
||||
[skill.Target.RushingBehind, 'those behind who are Rushed'],
|
||||
[skill.Target.RushingStyle, 'those using the given running style who are Rushed', 'running style ID'],
|
||||
[skill.Target.Character, 'specific character', 'character ID'],
|
||||
[skill.Target.Triggering, 'whosoever triggered the skill'],
|
||||
] as const;
|
||||
|
||||
const sparkEffects = [
|
||||
[1, 'Speed', 'Amount'],
|
||||
[2, 'Stamina', 'Amount'],
|
||||
@@ -172,6 +330,304 @@
|
||||
>, but a few categories that have useful strings are missing from there.
|
||||
</p>
|
||||
|
||||
<Sec h={2} id="skills">Skills</Sec>
|
||||
<p>
|
||||
Relevant <Mono>text_data</Mono> categories include 47 for skill names and 48 for skill descriptions. Otherwise, info for skills
|
||||
lives in <Mono>skill_data</Mono>.
|
||||
</p>
|
||||
<ul class="ml-4 list-disc pb-4">
|
||||
<li>Skill ID is just <Mono>id</Mono>.</li>
|
||||
<li>
|
||||
<Mono>rarity</Mono> is 1 for common (white) skills, 2 for rare (gold) skills, 3 for 1☆/2☆ uniques, 4 for 3☆ uniques
|
||||
of horses upgraded from 1☆ or 2☆, and 5 for full 3☆ uniques.
|
||||
</li>
|
||||
<li>
|
||||
<Mono>group_id</Mono> groups skills that replace each other when purchased. E.g., <Skill skill={skills.fall1} />, <Skill
|
||||
skill={skills.fall2}
|
||||
/>, <Skill skill={skills.fallX} />, and <Skill skill={skills.fallR} />
|
||||
all have a <Mono>group_id</Mono> of {fallGroup}. Unique skills are generally alone in their groups.
|
||||
</li>
|
||||
<li>
|
||||
<Mono>group_rate</Mono> gives the relative strength of a skill within its group. Negative (purple) skills always have a <Mono
|
||||
>group_rate</Mono
|
||||
> of -1. For skills that have non-purple versions (i.e. not skills like <Skill skill={skills.g1Averse} />), the base version
|
||||
has a <Mono>group_rate</Mono> of 1 and each successive upgrade is 1 higher. E.g., <Skill skill={skills.fall1} /> is 1, <Skill
|
||||
skill={skills.fall2}
|
||||
/> is 2, <Skill skill={skills.fallR} />, and <Skill skill={skills.fallX} /> is -1. Skills that have only common and rare versions
|
||||
instead assign a <Mono>group_rate</Mono> of 2 to the rare.
|
||||
</li>
|
||||
<li>
|
||||
<Mono>grade_value</Mono> is the amount the skill adds to a horse's rating when owned. Higher tiers of skills within a group replace
|
||||
the lower ones rather than adding to them, so <Skill skill={skills.fall2} /> is worth its listed grade value of 174, not <Skill
|
||||
skill={skills.fall1}
|
||||
/>'s 129 plus 174.
|
||||
</li>
|
||||
<li>
|
||||
<Mono>skill_category</Mono> gives the category where the skill is listed in the skills tab at the paddock:
|
||||
<table class="table-fixed border text-center">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col" class="px-2">Category ID</th>
|
||||
<th scope="col" class="px-2">Category</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{#each skillCategories as [cat, name] (cat)}
|
||||
<tr class="even:bg-mist-300 dark:even:bg-mist-900">
|
||||
<td class="px-2">{cat}</td>
|
||||
<td class="px-2">{name}</td>
|
||||
</tr>
|
||||
{/each}
|
||||
</tbody>
|
||||
</table>
|
||||
</li>
|
||||
<li>
|
||||
<Mono>tag_id</Mono> gives a slash-separated list of three-digit tag values that various other mechanics can match against. E.g.,
|
||||
Copano Rickey's unique skill <Skill skill={skills.rickey} /> counts the number of skills activated with tag values between 601
|
||||
and 615 to determine the multiplier on its extra effects; mechanics like GL shop skills and MANT rivals match tags for running
|
||||
style (101 to 104), distance (201 to 204), and/or surface (501 and 502); and I expect that support card unique effects like Mejiro
|
||||
Ramonu will count "speed-increasing skills" by looking for tag 401.
|
||||
<table class="table-fixed border text-center">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col" class="px-2">Tag ID</th>
|
||||
<th scope="col" class="px-2">Inferred Meaning</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{#each tagMeanings as [tag, name] (tag)}
|
||||
<tr class="even:bg-mist-300 dark:even:bg-mist-900">
|
||||
<td class="px-2">{tag}</td>
|
||||
<td class="px-2">{name}</td>
|
||||
</tr>
|
||||
{/each}
|
||||
</tbody>
|
||||
</table>
|
||||
E.g., <Skill skill={skills.fallR} /> has a <Mono>tag_id</Mono> of <Mono>401/403/603</Mono> (as text, including the slashes). The
|
||||
<a href={resolve('/doc/tagged-skills')}>tagged skills explorer</a> allows you to see skills by their tags.
|
||||
</li>
|
||||
<li>
|
||||
For inherited unique skills, <Mono>unique_skill_id_1</Mono> holds the ID of the non-inherited version. When it is the inherited
|
||||
unique from an upgraded 1☆/2☆ horse, <Mono>unique_skill_id_2</Mono> holds the ID of the 1☆/2☆ version of the
|
||||
unique.
|
||||
</li>
|
||||
<li><Mono>exp_type</Mono> appears to be 1 when the skill is able to gain levels, i.e. is a unique skill.</li>
|
||||
<li><Mono>activate_lot</Mono> is 1 if the skill uses a wit check.</li>
|
||||
<li><Mono>disp_order</Mono> is the sort order used in the skill purchase menu.</li>
|
||||
<li><Mono>icon_id</Mono> is the resource ID of the skill's icon.</li>
|
||||
<li>There are quite a few other columns which may be useful but which I have not bothered to figure out.</li>
|
||||
</ul>
|
||||
<p>
|
||||
<Mono>skill_data</Mono> additionally holds skill conditions and effects, described in the next section.
|
||||
</p>
|
||||
|
||||
<Sec h={3} id="skill-details">Skill Details</Sec>
|
||||
<p>
|
||||
Skills have one or two <i>skill details</i>, also called <i>triggers</i>. The first skill detail has column names with <Mono
|
||||
>_1</Mono
|
||||
> appended, and the second has <Mono>_2</Mono>. Each skill detail has:
|
||||
</p>
|
||||
<ul class="ml-4 list-disc pb-4">
|
||||
<li>
|
||||
<Mono>precondition_1</Mono> (resp. <Mono>precondition_2</Mono>): Precondition text, if the skill has one, otherwise empty.
|
||||
</li>
|
||||
<li>
|
||||
<Mono>condition_1</Mono>: Condition text. (Skills like <Skill skill={skills.restraint} /> which always activate have <Mono
|
||||
>always==1</Mono
|
||||
>.) If the skill has only one detail, then <Mono>condition_2</Mono> is empty.
|
||||
</li>
|
||||
<li>
|
||||
<Mono>float_ability_time_1</Mono>: Base duration expressed in ten thousandths of a second, or -1 for passives, or 0 for
|
||||
instantaneous skills (recoveries, <Skill skill={skills.focus} />).
|
||||
</li>
|
||||
<li>
|
||||
<Mono>ability_time_usage_1</Mono>: Scaling type for the skill duration.
|
||||
<table class="table-fixed border text-center">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col" class="px-2">Type</th>
|
||||
<th scope="col" class="px-2">Duration Scaling</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{#each durScalingTypes as [id, name] (id)}
|
||||
<tr class="even:bg-mist-300 dark:even:bg-mist-900">
|
||||
<td class="px-2">{id}</td>
|
||||
<td class="px-2">{name}</td>
|
||||
</tr>
|
||||
{/each}
|
||||
</tbody>
|
||||
</table>
|
||||
GameTora and the race mechanics doc describe duration scaling types in more detail.
|
||||
</li>
|
||||
<li>
|
||||
<Mono>float_cooldown_time_1</Mono>: Base cooldown duration expressed in ten thousandths of a second, or 5000000 (500s) for
|
||||
skills with no cooldown, or 0 for passives.
|
||||
</li>
|
||||
<li>Columns for three <i>abilities</i>, described in the next section.</li>
|
||||
</ul>
|
||||
<p>
|
||||
<a
|
||||
href="https://hakuraku.moe/masterdata?q=WITH+RECURSIVE+condition+AS+%28%0A++++SELECT+DISTINCT+precondition_1+AS+c+FROM+skill_data%0A++++UNION%0A++++SELECT+DISTINCT+condition_1+AS+c+FROM+skill_data%0A++++UNION%0A++++SELECT+DISTINCT+precondition_2+AS+c+FROM+skill_data%0A++++UNION%0A++++SELECT+DISTINCT+condition_2+AS+c+FROM+skill_data%0A%29%2C+disj+AS+%28%0A++++SELECT%0A++++++++IIF%28INSTR%28c%2C+%27%40%27%29+%21%3D+0%2C+SUBSTR%28c%2C+1%2C+INSTR%28c%2C+%27%40%27%29-1%29%2C+c%29+AS+c%2C%0A++++++++IIF%28INSTR%28c%2C+%27%40%27%29+%21%3D+0%2C+SUBSTR%28c%2C+1+%2B+INSTR%28c%2C+%27%40%27%29%29%2C+%27%27%29+AS+rest%0A++++FROM+condition%0A++++UNION%0A++++SELECT%0A++++++++IIF%28INSTR%28rest%2C+%27%40%27%29+%21%3D+0%2C+SUBSTR%28rest%2C+1%2C+INSTR%28rest%2C+%27%40%27%29-1%29%2C+rest%29+AS+c%2C%0A++++++++IIF%28INSTR%28rest%2C+%27%40%27%29+%21%3D+0%2C+SUBSTR%28rest%2C+1+%2B+INSTR%28rest%2C+%27%40%27%29%29%2C+%27%27%29+AS+rest%0A++++FROM+disj%0A++++WHERE+rest+%21%3D+%27%27%0A%29%2C+term+AS+%28%0A++++SELECT%0A++++++++IIF%28INSTR%28c%2C+%27%26%27%29+%21%3D+0%2C+SUBSTR%28c%2C+1%2C+INSTR%28c%2C+%27%26%27%29-1%29%2C+c%29+AS+term%2C%0A++++++++IIF%28INSTR%28c%2C+%27%26%27%29+%21%3D+0%2C+SUBSTR%28c%2C+1+%2B+INSTR%28c%2C+%27%26%27%29%29%2C+%27%27%29+AS+rest%0A++++FROM+disj%0A++++UNION%0A++++SELECT%0A++++++++IIF%28INSTR%28rest%2C+%27%26%27%29+%21%3D+0%2C+SUBSTR%28rest%2C+1%2C+INSTR%28rest%2C+%27%26%27%29-1%29%2C+rest%29+AS+term%2C%0A++++++++IIF%28INSTR%28rest%2C+%27%26%27%29+%21%3D+0%2C+SUBSTR%28rest%2C+1+%2B+INSTR%28rest%2C+%27%26%27%29%29%2C+%27%27%29+AS+rest%0A++++FROM+term%0A++++WHERE+rest+%21%3D+%27%27%0A%29%2C+op+AS+%28%0A++++SELECT%0A++++++++term%2C%0A++++++++CASE%0A++++++++++++WHEN+INSTR%28term%2C+%27%3D%3D%27%29+%21%3D+0+THEN+%27%3D%3D%27%0A++++++++++++WHEN+INSTR%28term%2C+%27%21%3D%27%29+%21%3D+0+THEN+%27%21%3D%27%0A++++++++++++WHEN+INSTR%28term%2C+%27%3C%3D%27%29+%21%3D+0+THEN+%27%3C%3D%27%0A++++++++++++WHEN+INSTR%28term%2C+%27%3E%3D%27%29+%21%3D+0+THEN+%27%3E%3D%27%0A++++++++++++WHEN+INSTR%28term%2C+%27%3C%27%29+%21%3D+0+THEN+%27%3C%27%0A++++++++++++WHEN+INSTR%28term%2C+%27%3E%27%29+%21%3D+0+THEN+%27%3E%27%0A++++++++END+AS+op%0A++++FROM+term+WHERE+term+%21%3D+%27%27%0A%29%2C+type_op_arg+AS+%28%0A++++SELECT+DISTINCT%0A++++++++term%2C%0A++++++++SUBSTR%28term%2C+1%2C+INSTR%28term%2C+op%29+-+1%29+AS+%22type%22%2C%0A++++++++op%2C%0A++++++++CAST%28SUBSTR%28term%2C+INSTR%28term%2C+op%29+%2B+LENGTH%28op%29%29+AS+INTEGER%29+AS+arg%0A++++FROM+op%0A%29%0ASELECT+DISTINCT+type%2C+op%2C+arg+FROM+type_op_arg%0AORDER+BY+type%2C+op%2C+arg"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
This SQL query
|
||||
</a>
|
||||
parses all conditions and preconditions to obtain all distinct combinations of skill condition types, operators, and arguments.
|
||||
This may be useful to tool authors.
|
||||
</p>
|
||||
|
||||
<Sec h={3} id="skill-abilities">Skill Abilities</Sec>
|
||||
<p>
|
||||
Each skill detail has up to three abilities, all of which apply for as long as the skill detail is active (except for
|
||||
AdditionalActivate abilities). Column names append <Mono>_1</Mono>, <Mono>_2</Mono>, or <Mono>_3</Mono> after the skill detail's
|
||||
own number.
|
||||
</p>
|
||||
<ul class="ml-4 list-disc pb-4">
|
||||
<li>
|
||||
<Mono>ability_type_1_1</Mono> (resp. <Mono>ability_type_1_2</Mono>, <Mono>ability_type_1_3</Mono>, <Mono
|
||||
>ability_type_2_1</Mono
|
||||
>, <Mono>ability_type_2_2</Mono>, <Mono>ability_type_2_3</Mono>) define what simulation parameter the ability affects.
|
||||
<table class="table-fixed border text-center">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col" class="px-2">Type</th>
|
||||
<th scope="col" class="px-2">Effect</th>
|
||||
<th scope="col" class="px-2">Value Units</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{#each abilityTypes as [typ, name, units] (typ)}
|
||||
<tr class="even:bg-mist-300 dark:even:bg-mist-900">
|
||||
<td class="px-2">{typ}</td>
|
||||
<td class="px-2">{name}</td>
|
||||
<td class="px-2">{units}</td>
|
||||
</tr>
|
||||
{/each}
|
||||
</tbody>
|
||||
</table>
|
||||
Types with (?) don't exist in my decomp but are used on skills in the copy of the JP mdb that I have, which I'm told is "from
|
||||
like 3 weeks ago" at the time of writing. Those marked (unused) do exist in the decomp, but are not used for skills even on JP.
|
||||
</li>
|
||||
<li>
|
||||
<Mono>ability_value_usage_1_1</Mono> defines special scaling for the ability's value.
|
||||
<table class="table-fixed border text-center">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col" class="px-2">Type</th>
|
||||
<th scope="col" class="px-2">Value Scaling</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{#each valScalingTypes as [id, name] (id)}
|
||||
<tr class="even:bg-mist-300 dark:even:bg-mist-900">
|
||||
<td class="px-2">{id}</td>
|
||||
<td class="px-2">{name}</td>
|
||||
</tr>
|
||||
{/each}
|
||||
</tbody>
|
||||
</table>
|
||||
GameTora describes value scaling types in more detail. (The race mechanics doc is missing most of them.)
|
||||
</li>
|
||||
<li>
|
||||
<Mono>additional_activate_type_1_1</Mono> indicates abilities that only activate on additional events while the skill detail is
|
||||
active.
|
||||
<table class="table-fixed border text-center">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col" class="px-2">Type</th>
|
||||
<th scope="col" class="px-2">Meaning</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{#each addlActivateTypes as [id, name] (id)}
|
||||
<tr class="even:bg-mist-300 dark:even:bg-mist-900">
|
||||
<td class="px-2">{id}</td>
|
||||
<td class="px-2">{name}</td>
|
||||
</tr>
|
||||
{/each}
|
||||
</tbody>
|
||||
</table>
|
||||
</li>
|
||||
<li>
|
||||
<Mono>ability_value_level_usage_1_1</Mono> indicates how the ability scales with skill level (i.e. unique level, not double circle
|
||||
vs single circle).
|
||||
<table class="table-fixed border text-center">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col" class="px-2">Type</th>
|
||||
<th scope="col" class="px-2">Meaning</th>
|
||||
<th scope="col" class="px-2">Instances</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{#each levelUsageTypes as [id, name, inst] (id)}
|
||||
<tr class="even:bg-mist-300 dark:even:bg-mist-900">
|
||||
<td class="px-2">{id}</td>
|
||||
<td class="px-2">{name}</td>
|
||||
<td class="px-2">{inst}</td>
|
||||
</tr>
|
||||
{/each}
|
||||
</tbody>
|
||||
</table>
|
||||
</li>
|
||||
<li>
|
||||
<Mono>float_ability_value_1_1</Mono> is the base magnitude of the ability's effect, expressed in ten thousandths.
|
||||
</li>
|
||||
<li>
|
||||
<Mono>target_type_1_1</Mono> describes which umas the skill targets. It takes <Mono>target_value_1_1</Mono> as an argument.
|
||||
<table class="table-fixed border text-center">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col" class="px-2">Type</th>
|
||||
<th scope="col" class="px-2">Meaning</th>
|
||||
<th scope="col" class="px-2">Argument</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{#each targetTypes as [id, name, arg] (id)}
|
||||
<tr class="even:bg-mist-300 dark:even:bg-mist-900">
|
||||
<td class="px-2">{id}</td>
|
||||
<td class="px-2">{name}</td>
|
||||
<td class="px-2">{arg}</td>
|
||||
</tr>
|
||||
{/each}
|
||||
</tbody>
|
||||
</table>
|
||||
Skills that take maximum targets as an argument use a <Mono>target_value_1_1</Mono> of 18 to mean unlimited. Type 23 is internally
|
||||
named <Mono>ActivateHealSkill</Mono>, so it may instead mean something like "horses who activated a heal skill this frame."
|
||||
It is only used for <Skill skill={skills.oppression} /> and its gold.
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<Sec h={3} id="skill-scaling">Skill Level Scaling</Sec>
|
||||
<p>
|
||||
The table <Mono>skill_level_value</Mono> defines the coefficients by which each ability's value scales with unique level. Curiously,
|
||||
it defines coefficients up to <Mono>level = 10</Mono> for each <Mono>ability_type</Mono>, even though the maximum achievable
|
||||
level is 6.
|
||||
</p>
|
||||
<p>
|
||||
The <Mono>float_ability_value_coef</Mono> column is a multiplier on the corresponding skill ability type's <Mono
|
||||
>float_ability_value_?_?</Mono
|
||||
>, expressed in ten thousandths.
|
||||
</p>
|
||||
|
||||
<Sec h={3} id="skill-sp">Skill Points</Sec>
|
||||
<p>
|
||||
The table <Mono>single_mode_skill_need_point</Mono> lists the SP cost of each skill.
|
||||
</p>
|
||||
<ul class="ml-4 list-disc pb-4">
|
||||
<li><Mono>id</Mono> is the skill ID.</li>
|
||||
<li><Mono>need_skill_point</Mono> is the SP cost.</li>
|
||||
<li><Mono>status_type</Mono> and <Mono>status_value</Mono> are always zero.</li>
|
||||
<li>
|
||||
<Mono>solvable_type</Mono> is nonzero for some negative (purple) skills that are applied and later healed during careers, for
|
||||
Sweep Tosho, Air Shakur, and Daitaku Helios. Some other JP negative skills that GameTora has no source information for also have
|
||||
it.
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<Sec h={2} id="sparks">Sparks</Sec>
|
||||
<p>
|
||||
Internally called succession factors. Relevant <Mono>text_data</Mono> categories include 147 for spark names and 172 for spark descriptions,
|
||||
|
||||
Reference in New Issue
Block a user