585 lines
24 KiB
Svelte
585 lines
24 KiB
Svelte
<script lang="ts">
|
|
import Article from '../Article.svelte';
|
|
import Sec from '../Sec.svelte';
|
|
import Mono from '../Mono.svelte';
|
|
|
|
const sparkTypes = [
|
|
[1, 'Stat', 'spark-color-blue'],
|
|
[2, 'Aptitude', 'spark-color-pink'],
|
|
[3, 'Unique', 'spark-color-green'],
|
|
[4, 'Skill', 'spark-color-white'],
|
|
[5, 'Race', 'spark-color-white'],
|
|
[6, 'Scenario', 'spark-color-white'],
|
|
[7, 'Carnival Bonus', 'spark-color-red'],
|
|
[8, 'Distance', 'spark-color-white'],
|
|
[9, 'Hidden', 'spark-color-white'],
|
|
[10, 'Surface', 'spark-color-white'],
|
|
[11, 'Style', 'spark-color-white'],
|
|
] as const;
|
|
|
|
const sparkEffects = [
|
|
[1, 'Speed', 'Amount'],
|
|
[2, 'Stamina', 'Amount'],
|
|
[3, 'Power', 'Amount'],
|
|
[4, 'Guts', 'Amount'],
|
|
[5, 'Wit', 'Amount'],
|
|
[6, 'Skill Points', 'Amount'],
|
|
[7, 'Random Stat', 'Amount', '(always 1)'],
|
|
[11, 'Turf Aptitude', 'Levels'],
|
|
[12, 'Dirt Aptitude', 'Levels'],
|
|
[21, 'Front Runner Aptitude', 'Levels'],
|
|
[22, 'Pace Chaser Aptitude', 'Levels'],
|
|
[23, 'Late Surger Aptitude', 'Levels'],
|
|
[24, 'End Closer Aptitude', 'Levels'],
|
|
[31, 'Sprint Aptitude', 'Levels'],
|
|
[32, 'Mile Aptitude', 'Levels'],
|
|
[33, 'Medium Aptitude', 'Levels'],
|
|
[34, 'Long Aptitude', 'Levels'],
|
|
[41, 'Skill Hint', 'Skill ID', 'Hint Levels'],
|
|
[51, 'Carnival Bonus', 'Skill ID', '(always 1)'],
|
|
[61, 'Max Speed', 'Amount'],
|
|
[62, 'Max Stamina', 'Amount'],
|
|
[63, 'Max Power', 'Amount'],
|
|
[64, 'Max Guts', 'Amount'],
|
|
[65, 'Max Wit', 'Amount'],
|
|
] as const;
|
|
|
|
const lovelySpringBreeze = [
|
|
[1469, 107401, 1, 41, 900741, 1],
|
|
[2521, 107401, 1, 62, 1, 0],
|
|
[2523, 107401, 1, 64, 1, 0],
|
|
[2522, 107401, 1, 65, 1, 0],
|
|
[1470, 107401, 2, 41, 900741, 2],
|
|
[2524, 107401, 2, 62, 2, 0],
|
|
[2526, 107401, 2, 64, 1, 0],
|
|
[2525, 107401, 2, 65, 1, 0],
|
|
[1471, 107401, 3, 41, 900741, 2],
|
|
[2528, 107401, 3, 62, 2, 0],
|
|
[2530, 107401, 3, 64, 1, 0],
|
|
[2529, 107401, 3, 65, 2, 0],
|
|
[2527, 107401, 4, 41, 900741, 3],
|
|
[2532, 107401, 4, 62, 2, 0],
|
|
[2534, 107401, 4, 64, 2, 0],
|
|
[2533, 107401, 4, 65, 2, 0],
|
|
] as const;
|
|
|
|
const successionInitialFactor = [
|
|
[1, 1, 1, 0, 5],
|
|
[2, 1, 2, 0, 12],
|
|
[3, 1, 3, 0, 21],
|
|
[4, 2, 1, 3, 1],
|
|
[5, 2, 4, 6, 2],
|
|
[6, 2, 7, 9, 3],
|
|
[7, 2, 10, 999, 4],
|
|
[8, 1, 1, 1, 4],
|
|
[9, 1, 2, 1, 9],
|
|
[10, 1, 3, 1, 16],
|
|
[11, 3, 1, 1, 0],
|
|
[12, 3, 2, 2, 0],
|
|
[13, 3, 3, 4, 0],
|
|
] as const;
|
|
|
|
const supportCardEffects = [
|
|
[1, 'Friendship Bonus'],
|
|
[2, 'Mood Effect'],
|
|
[3, 'Speed Bonus'],
|
|
[4, 'Stamina Bonus'],
|
|
[5, 'Power Bonus'],
|
|
[6, 'Guts Bonus'],
|
|
[7, 'Wit Bonus'],
|
|
[8, 'Training Effectiveness'],
|
|
[9, 'Initial Speed'],
|
|
[10, 'Initial Stamina'],
|
|
[11, 'Initial Power'],
|
|
[12, 'Initial Guts'],
|
|
[13, 'Initial Wit'],
|
|
[14, 'Initial Friendship Gauge'],
|
|
[15, 'Race Bonus'],
|
|
[16, 'Fan Bonus'],
|
|
[17, 'Hint Levels'],
|
|
[18, 'Hint Frequency'],
|
|
[19, 'Specialty Priority'],
|
|
[20, 'Max Speed'],
|
|
[21, 'Max Stamina'],
|
|
[22, 'Max Power'],
|
|
[23, 'Max Guts'],
|
|
[24, 'Max Wit'],
|
|
[25, 'Event Recovery'],
|
|
[26, 'Event Effectiveness'],
|
|
[27, 'Failure Protection'],
|
|
[28, 'Energy Cost Reduction'],
|
|
[29, 'Minigame Effectiveness'],
|
|
[30, 'Skill Point Bonus'],
|
|
[31, 'Wit Friendship Recovery'],
|
|
] as const;
|
|
</script>
|
|
|
|
<Article>
|
|
{#snippet head()}
|
|
<Sec h={1} id="top" class="text-center">Master Data</Sec>
|
|
<p>
|
|
This article is my personal notes on Umamusume's master data, a.k.a. master.mdb or just "the mdb." Most of the notes are
|
|
oriented toward my work on this website. It is an in-progress translation of <a
|
|
href="https://git.sunturtle.xyz/zephyr/horse/src/branch/main/doc">my broader but more sparse notes</a
|
|
>
|
|
into a more agreeable, navigable, and consistent form.
|
|
</p>
|
|
<p>
|
|
master.mdb is an SQLite database that the game downloads to your device. On Windows, you can find it at <Mono
|
|
>%USERPROFILE%\AppData\LocalLow\Cygames\Umamusume\master\master.mdb</Mono
|
|
>. Hakuraku has a
|
|
<a href="https://hakuraku.moe/masterdata" target="_blank" rel="noopener noreferrer">master data explorer</a> that you can use
|
|
on the website.
|
|
</p>
|
|
<p>
|
|
Generally speaking, I am only documenting what I feel is important, both in terms of tables and columns. That does
|
|
occasionally include documenting some things as being unimportant.
|
|
</p>
|
|
<p>
|
|
Roughly speaking, master data contains all the numbers needed to display the game's user interface, including during races.
|
|
Skill data, support card effects, Grand Concert lesson definitions, and so on are in there. If trying to access some data
|
|
in-game shows a "Connecting..." indicator while it loads, it probably isn't in the mdb. Notably, this includes everything
|
|
related to career event outcomes. (Event information on sites like GameTora and GameWith are massive crowd-sourced efforts.)
|
|
</p>
|
|
<p>
|
|
This document is oriented toward programmers with understanding of SQL databases. Mentions of <Mono>Gallop::</Mono> are references
|
|
to types visible in decompilations of the game, but no C# knowledge is needed.
|
|
</p>
|
|
{/snippet}
|
|
|
|
<Sec h={2} id="text_data">text_data</Sec>
|
|
<p>
|
|
The <Mono>text_data</Mono> table contains most non-story strings in the game. Queries look up entries by <Mono>category</Mono> and
|
|
<Mono>index</Mono>, i.e. <Mono>SELECT "text" FROM text_data WHERE category=? AND "index"=?</Mono>.
|
|
</p>
|
|
<p>Some important categories:</p>
|
|
<ul class="ml-4 list-disc pb-4">
|
|
<li>6 is character names, 4 is [variant] character name, 5 is [variant], 14 is clothing names.</li>
|
|
<li>47 is skill names, 48 is skill descriptions.</li>
|
|
<li>75 is support card names including variant, 76 is support card variant, 77 is support card character.</li>
|
|
<li>147 is spark names, 172 is spark descriptions.</li>
|
|
<li>33 is race name by race ID, 28 is race name by race instance ID, 31 is race courses, 111 is saddle names.</li>
|
|
<li>65 is player titles, 66 is title descriptions.</li>
|
|
<li>
|
|
119 is scenario full titles (e.g. <Mono>The Beginning: URA Finale</Mono>), 120 is scenario descriptions, 237 is scenario
|
|
names (e.g. <Mono>URA Finale</Mono>).
|
|
</li>
|
|
<li>130 is epithet names, 131 is epithet descriptions.</li>
|
|
</ul>
|
|
<p>
|
|
Other categories are usually easy enough to figure out by inspection. Text data categories have proper names given in <Mono
|
|
>Gallop::MasterString.Category</Mono
|
|
>, but a few categories that have useful strings are missing from there.
|
|
</p>
|
|
|
|
<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,
|
|
both indexed by factor ID.
|
|
</p>
|
|
<Sec h={3} id="succession_factor">Spark Data</Sec>
|
|
<p>Queries should join with <Mono>succession_factor</Mono> inside.</p>
|
|
<ul class="ml-4 list-disc pb-4">
|
|
<li>Spark ID is <Mono>factor_id</Mono>. This identifies the combination of spark variety and its star level.</li>
|
|
<li>
|
|
<Mono>factor_group_id</Mono> gives the variety. E.g., the star levels of the February S. spark are factor IDs 1000101, 1000102,
|
|
and 1000103, but all three have group ID 10001.
|
|
</li>
|
|
<li><Mono>rarity</Mono> is the star level, 1-indexed.</li>
|
|
<li><Mono>grade</Mono> is 2 for unique (green) sparks and 1 otherwise.</li>
|
|
<li>
|
|
<Mono>factor_type</Mono> is roughly the color type of the spark plus extra subdivisions for white sparks:
|
|
<table class="table-fixed border text-center">
|
|
<thead>
|
|
<tr>
|
|
<th scope="col" class="px-2">Type ID</th>
|
|
<th scope="col" class="px-2">Spark Type</th>
|
|
<th scope="col" class="px-2">Color</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
{#each sparkTypes as [typ, name, cls] (typ)}
|
|
<tr class="even:bg-mist-300 dark:even:bg-mist-900">
|
|
<td>{typ}</td>
|
|
<td>{name}</td>
|
|
<td><div class={['bg-spark mx-auto h-4 w-4 border', cls]}></div></td>
|
|
</tr>
|
|
{/each}
|
|
</tbody>
|
|
</table>
|
|
Types 8 and above should release with 4anni.
|
|
</li>
|
|
<li>
|
|
<Mono>effect_group_id</Mono> may give something like the distribution of spark effects. For current Global data, it's in bijection
|
|
with <Mono>factor_type</Mono> × <Mono>rarity</Mono>. It doesn't join with anything else in the mdb.
|
|
</li>
|
|
</ul>
|
|
|
|
<Sec h={3} id="succession_factor_effect">Spark Effects</Sec>
|
|
<p>
|
|
<Mono>succession_factor_effect</Mono> defines all possible effects that each spark can yield (but not their distributions). Effects
|
|
are organized by <Mono>factor_group_id</Mono> rather than by <Mono>factor_id</Mono>, which implies to some degree that all
|
|
star levels of a given spark have the same possible results with different distributions, although it is possible that some
|
|
values have zero probability for some star levels.
|
|
</p>
|
|
<p>
|
|
The process by which the game determines the effects of a given spark proc during (Classic and Senior) inspiration is as
|
|
follows, or semantically equivalent.
|
|
</p>
|
|
<ol class="ml-4 list-decimal pb-4">
|
|
<li>
|
|
The server chooses a random <Mono>effect_id</Mono> from the hidden distribution for the spark's <Mono>effect_group_id</Mono
|
|
>.
|
|
</li>
|
|
<li>
|
|
The client (and server) selects <i>all</i> rows matching the spark's <Mono>factor_group_id</Mono> and the random rolled <Mono
|
|
>effect_id</Mono
|
|
>, i.e. <Mono
|
|
>SELECT target_type, value_1, value_2 FROM succession_factor_effect WHERE factor_group_id = $current_spark_factor_group_id
|
|
AND effect_id = $random_choice_effect</Mono
|
|
>. There may be several such effects.
|
|
</li>
|
|
<li>
|
|
For each result row, apply the effect according to the <Mono>target_type</Mono>, with <Mono>value_1</Mono> and <Mono
|
|
>value_2</Mono
|
|
> as its possible arguments:
|
|
<table class="table-fixed border text-center">
|
|
<thead>
|
|
<tr>
|
|
<th scope="col" class="px-2"><Mono>target_type</Mono></th>
|
|
<th scope="col" class="px-2">Description</th>
|
|
<th scope="col" class="px-2"><Mono>value_1</Mono> Usage</th>
|
|
<th scope="col" class="px-2"><Mono>value_2</Mono> Usage</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
{#each sparkEffects as [target, name, val1, val2] (target)}
|
|
<tr class="even:bg-mist-300 dark:even:bg-mist-900">
|
|
<td>{target}</td>
|
|
<td>{name}</td>
|
|
<td>{val1}</td>
|
|
<td>{val2}</td>
|
|
</tr>
|
|
{/each}
|
|
</tbody>
|
|
</table>
|
|
When effect 41 applies to a skill which is already at its maximum hint value (including from previous spark procs in the same
|
|
inspiration), a small amount (1-5, perhaps?) of some number (one? two?) of random stats is applied instead, but the details of
|
|
this are not known.
|
|
</li>
|
|
</ol>
|
|
<p>
|
|
E.g., <a
|
|
href="https://hakuraku.moe/masterdata?q=SELECT+*+FROM+%22succession_factor_effect%22+WHERE+factor_group_id+%3D+107401+ORDER+BY+factor_group_id%2C+effect_id%2C+target_type"
|
|
target="_blank"
|
|
rel="noopener noreferrer">all <Mono>succession_factor_effect</Mono> data for Lovely Spring Breeze</a
|
|
> (Mejiro Bright's green spark) is:
|
|
</p>
|
|
<table class="mb-4 table-fixed border text-center">
|
|
<caption><Mono>succession_factor_effect</Mono></caption>
|
|
<thead>
|
|
<tr>
|
|
<th scope="col" class="px-2"><Mono>id</Mono></th>
|
|
<th scope="col" class="px-2"><Mono>factor_group_id</Mono></th>
|
|
<th scope="col" class="px-2"><Mono>effect_id</Mono></th>
|
|
<th scope="col" class="px-2"><Mono>target_type</Mono></th>
|
|
<th scope="col" class="px-2"><Mono>value_1</Mono></th>
|
|
<th scope="col" class="px-2"><Mono>value_2</Mono></th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
{#each lovelySpringBreeze as [id, group, effect, typ, val1, val2] (id)}
|
|
<tr class="even:bg-mist-300 dark:even:bg-mist-900">
|
|
<td>{id}</td>
|
|
<td>{group}</td>
|
|
<td>{effect}</td>
|
|
<td>{typ}</td>
|
|
<td>{val1}</td>
|
|
<td>{val2}</td>
|
|
</tr>
|
|
{/each}
|
|
</tbody>
|
|
</table>
|
|
<p>
|
|
When the spark procs, the server rolls an effect ID of 1, 2, 3, or 4 according to some hidden distribution, then it applies
|
|
all four effects with that effect ID.
|
|
</p>
|
|
|
|
<Sec h={3} id="succession_initial_factor">Initial Inspiration Effects</Sec>
|
|
<p>
|
|
<Mono>succession_initial_factor</Mono> defines thresholds for initial inspiration, i.e. the immediate effects of sparks upon starting
|
|
a run. There is not much consistency to its format, but it has only thirteen rows, reproduced here.
|
|
</p>
|
|
<table class="mb-4 table-fixed border text-center">
|
|
<caption><Mono>succession_initial_factor</Mono></caption>
|
|
<thead>
|
|
<tr>
|
|
<th scope="col" class="px-2"><Mono>id</Mono></th>
|
|
<th scope="col" class="px-2"><Mono>factor_type</Mono></th>
|
|
<th scope="col" class="px-2"><Mono>value_1</Mono></th>
|
|
<th scope="col" class="px-2"><Mono>value_2</Mono></th>
|
|
<th scope="col" class="px-2"><Mono>add_point</Mono></th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
{#each successionInitialFactor as [id, typ, val1, val2, add] (id)}
|
|
<tr class="even:bg-mist-300 dark:even:bg-mist-900">
|
|
<td>{id}</td>
|
|
<td>{typ}</td>
|
|
<td>{val1}</td>
|
|
<td>{val2}</td>
|
|
<td>{add}</td>
|
|
</tr>
|
|
{/each}
|
|
</tbody>
|
|
</table>
|
|
<p>
|
|
There are six rows with <Mono>factor_type = 1</Mono>, referring to blue sparks.
|
|
<Mono>value_1</Mono> refers to the star level of each individual spark.
|
|
<Mono>value_2</Mono> identifies whether the effect applies to starting stats (0) or raised max stats (1).
|
|
<Mono>add_point</Mono> is the amount to add to the respective field.
|
|
</p>
|
|
<p>
|
|
Pink sparks, i.e. <Mono>factor_type = 2</Mono>, have four rows.
|
|
<Mono>value_1</Mono> is the lower threshold of total star count, and <Mono>value_2</Mono> is the upper threshold.
|
|
<Mono>add_point</Mono> is the number of levels to raise the corresponding aptitude.
|
|
</p>
|
|
<p>
|
|
<Mono>factor_type = 3</Mono> for unique sparks has three rows.
|
|
<Mono>add_point</Mono> is always 0. The (<Mono>value_1</Mono>, <Mono>value_2</Mono>) pairs are (1, 1), (2, 2), and (3, 4), but
|
|
the meaning is unclear; all rows for this factor type were added in the 1 Jul patch that introduced raised stat caps, so one
|
|
would expect it to be related to those. (In particular, it does not appear to be related to the starting skill hints.)
|
|
</p>
|
|
<p>
|
|
In all cases, there is no direct association between the spark and its actual initial effects. They must be derived from the
|
|
spark's normal effects instead.
|
|
</p>
|
|
|
|
<Sec h={2} id="supports">Support Cards</Sec>
|
|
<p>
|
|
Relevant <Mono>text_data</Mono> categories include 75 for name including variant, 76 for variant alone, 77 for character name. Category
|
|
151 gives support card effect names, 154 gives effect descriptions, 150 gives unique effect names, and 155 gives unique effect descriptions.
|
|
</p>
|
|
|
|
<Sec h={3} id="support_card_data">Support Card Data</Sec>
|
|
<p>
|
|
Queries should join with <Mono>support_card_data</Mono> inside.
|
|
</p>
|
|
<ul class="ml-4 list-disc pb-4">
|
|
<li>Support card ID is just <Mono>id</Mono>.</li>
|
|
<li>
|
|
<Mono>chara_id</Mono> links to character. Implements the "no supporting yourself" and "no duplicated characters" rules.
|
|
</li>
|
|
<li><Mono>rarity</Mono> is 1 for R, 2 for SR, 3 for SSR.</li>
|
|
<li><Mono>exchange_item_id</Mono> is the type of item you get for exchanging duplicates.</li>
|
|
<li><Mono>effect_table_id</Mono> joins <Mono>support_card_effect_table</Mono>.</li>
|
|
<li><Mono>unique_effect_id</Mono> joins <Mono>support_card_unique_effect</Mono>.</li>
|
|
<li>
|
|
<Mono>command_type</Mono> is generally 1 for normal support cards and 0 for pals and groups, but Throne is 1 as well. Probably
|
|
not important.
|
|
</li>
|
|
<li>
|
|
<Mono>command_id</Mono> gives the specialty type: 101 for speed, 102 for power, 103 for guts, 105 for stamina, 106 for wit, 0
|
|
for pal and group. There is no 104.
|
|
</li>
|
|
<li><Mono>support_card_type</Mono> is 1 for normal cards, 2 for pal, 3 for group.</li>
|
|
<li>
|
|
<Mono>skill_set_id</Mono> gives the hint list via <Mono
|
|
>support_card_data sc JOIN single_mode_hint_gain h ON sc.skill_set_id = h.hint_id AND sc.support_card_id =
|
|
h.support_card_id</Mono
|
|
>. Given that you have to use the support card ID anyway, this seems redundant.
|
|
</li>
|
|
<li><Mono>outing_max</Mono> is the number of recreation events with the card, for pals and groups.</li>
|
|
<li><Mono>effect_id</Mono> is the specific instance of Pure Passion the card can grant, for groups.</li>
|
|
</ul>
|
|
|
|
<Sec h={3} id="support_card_effect_table">Support Card Effects</Sec>
|
|
<p>
|
|
<Mono>support_card_effect_table</Mono> gives progressions of support card stats. There is one row per stat per support card. Unique
|
|
effects are not included.
|
|
</p>
|
|
<ul class="ml-4 list-disc pb-4">
|
|
<li><Mono>id</Mono> joins with support card ID.</li>
|
|
<li>
|
|
<Mono>type</Mono> is the stat type (<Mono>text_data</Mono> category 151):
|
|
<table class="table-fixed border text-center">
|
|
<thead>
|
|
<tr>
|
|
<th scope="col" class="px-2">Type ID</th>
|
|
<th scope="col" class="px-2">Effect</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
{#each supportCardEffects as [typ, name] (typ)}
|
|
<tr class="even:bg-mist-300 dark:even:bg-mist-900">
|
|
<td class="px-2">{typ}</td>
|
|
<td class="px-2">{name}</td>
|
|
</tr>
|
|
{/each}
|
|
</tbody>
|
|
</table>
|
|
</li>
|
|
<li>
|
|
<Mono>init</Mono> is the card's value at level 1, then there are subsequent <Mono>limit_lv5</Mono>, <Mono>limit_lv10</Mono>,
|
|
&c. up to <Mono>limit_lv50</Mono>. Each value is either a threshold value for the corresponding level, or -1 to indicate
|
|
that the value should interpolate per level between the previous positive value (defaulting to 0) and the next (defaulting
|
|
to no interpolation).
|
|
</li>
|
|
</ul>
|
|
|
|
<Sec h={3} id="support_card_unique_effect">Unique Effects</Sec>
|
|
<p>Unique effect data is in <Mono>support_card_unique_effect</Mono>.</p>
|
|
<ul class="ml-4 list-disc pb-4">
|
|
<li>
|
|
<Mono>id</Mono> joins with <Mono>support_card_data.unique_effect_id</Mono>, but it's also always the same as the support
|
|
card ID, never deduplicated or anything. (This ID is also used for unique effect name lookup, after all.)
|
|
</li>
|
|
<li><Mono>lv</Mono> gives the level at which the unique effect becomes active, one of 25, 30, 35, or 40.</li>
|
|
<li>
|
|
<Mono>type_0</Mono> and <Mono>type_1</Mono> give the effect type ID with the corresponding magnitude in <Mono>value_0</Mono> or
|
|
<Mono>value_1</Mono>, largely same as for <Mono>support_card_effect_table.type</Mono>. However, there are some extra types:
|
|
<ul class="ml-8 list-[reset]">
|
|
<li>
|
|
101 is a friendship gauge check. <Mono>value_0</Mono> is the threshold value, and then <Mono>value_0_1</Mono> and <Mono
|
|
>value_0_3</Mono
|
|
> give the effects that become active at that threshold with their magnitudes in <Mono>value_0_2</Mono> and <Mono
|
|
>value_0_4</Mono
|
|
>, respectively.
|
|
</li>
|
|
<li>
|
|
102 is Guts Bakushin's special effect of Training Effectiveness (magnitude in <Mono>value_0_1</Mono>) when both above a
|
|
friendship threshold (<Mono>value_0</Mono>) and not on her own specialty.
|
|
</li>
|
|
<li>
|
|
103 is Agnes Ditigal's special effect of Training Effectiveness (magnitude in <Mono>value_0_1</Mono>) when the deck has
|
|
at least <Mono>value_0</Mono> different colors.
|
|
</li>
|
|
<li>
|
|
104 is Narita Top Road's special effect of Training Effectiveness of maximum magnitude <Mono>value_0_1</Mono> divided by each
|
|
group of <Mono>value_0</Mono> fans.
|
|
</li>
|
|
<li>
|
|
105 is +<Mono>value_0</Mono> initial stat to the specialty of each card in the deck and +<Mono>value_0</Mono> initial all
|
|
stats per pal and group card.
|
|
</li>
|
|
<li>
|
|
106 is stacking effect per rainbow training, where <Mono>value_0</Mono> is the maximum number of stacks, <Mono
|
|
>value_0_1</Mono
|
|
> is the effect type granted by the stack, and <Mono>value_0_2</Mono> is the value per stack.
|
|
</li>
|
|
<li>
|
|
107 is scaling with how low energy is. <Mono>value_0</Mono> is obviously the effect type ID that scales, but the other parameters
|
|
are unclear. Currently only Bamboo Memory Guts has this, with <Mono>value_0_1⪙4</Mono> being (10, 30, 15, 5).
|
|
</li>
|
|
<li>
|
|
108 is scaling with maximum energy. Similar to 107, <Mono>value_0</Mono> is the effect type ID that scales, but the rest is
|
|
unclear, with values of (100, 75, 5, 20) for Pearl.
|
|
</li>
|
|
<li>
|
|
109 is scaling with total friendship across all cards. <Mono>value_0</Mono> is the effect type ID that scales, <Mono
|
|
>value_0_1</Mono
|
|
> is the amount of bond required to increase the effect by 1.
|
|
</li>
|
|
<li>
|
|
110 is scaling with the number of cards at the training. <Mono>value_0</Mono> is the effect type ID that scales, <Mono
|
|
>value_0_1</Mono
|
|
> is the amount per card.
|
|
</li>
|
|
<li>
|
|
110 is scaling with the number of cards at the training. <Mono>value_0</Mono> is the effect type ID that scales, <Mono
|
|
>value_0_1</Mono
|
|
> is the amount per card.
|
|
</li>
|
|
<li>
|
|
111 is scaling with training facility level. <Mono>value_0</Mono> is the effect type ID that scales, <Mono
|
|
>value_0_1</Mono
|
|
> is the amount per level.
|
|
</li>
|
|
<li>112 is Nakayama Festa Wit's <Mono>value_0</Mono>% chance to disable failure chance.</li>
|
|
<li>
|
|
113 is an additional effect active for rainbow training. <Mono>value_0</Mono> is the additional effect ID, <Mono
|
|
>value_0_1</Mono
|
|
> is its value.
|
|
</li>
|
|
</ul>
|
|
Certainly more types will follow.
|
|
</li>
|
|
<li>
|
|
<Mono>idle_mode_sub_rate</Mono> is uncertain, but it is likely related to Independent Training (called idle single mode internally,
|
|
where "single mode" is in turn the internal name for career). It takes only a few values:
|
|
<ul class="ml-8 list-[reset]">
|
|
<li>For unique effects that don't vary, it is always 0.</li>
|
|
<li>For those that vary with the deck composition (Agnes Digital, Satono Diamond Wit), it is 10.</li>
|
|
<li>For effects that activate with 80+ friendship, it has a value of 20.</li>
|
|
<li>
|
|
For 100+ friendship effects, fan count scaling, rainbow training stacking effects, effects scaling with energy or max
|
|
energy, scaling with number of cards trained with, scaling with training level, and scaling with total deck friendship,
|
|
it has a value of 30.
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
<Sec h={3} id="single_mode_hint_gain">Hints</Sec>
|
|
<p>
|
|
Lastly, the table <Mono>single_mode_hint_gain</Mono> lists the effects of hints during career.
|
|
</p>
|
|
<ul class="ml-4 list-disc pb-4">
|
|
<li>
|
|
<Mono>hint_id</Mono> joins with <Mono>support_card_data.skill_set_id</Mono>, but it isn't unique; e.g., Seiun Sky SR has the
|
|
same <Mono>hint_id</Mono> as prior Seiun Sky cards, despite having a different hint list. Unclear what it actually does. Doesn't
|
|
seem useful for my purposes.
|
|
</li>
|
|
<li>
|
|
<Mono>support_card_id</Mono> is effectively the lookup key.
|
|
</li>
|
|
<li>
|
|
<Mono>hint_group</Mono> ties together the results of one hint. Skill hints are generally one each, but stat hints have two or
|
|
three rows with matching hint groups.
|
|
</li>
|
|
<li>
|
|
<Mono>hint_gain_type</Mono> is 0 for skill hints and 1 for stat hints.
|
|
</li>
|
|
<li>
|
|
For skill hints, <Mono>hint_value_1</Mono> is the skill ID, and <Mono>hint_value_2</Mono> is always 1; presumably the latter could
|
|
serve as the base value of hint levels. For stat hints, <Mono>hint_value_1</Mono> is the stat ID – 1 for speed through 5
|
|
for wit, or 30 for skill points – and <Mono>hint_value_2</Mono> is the amount to add.
|
|
</li>
|
|
<li>
|
|
<Mono>group_id</Mono>, <Mono>condition_set_id</Mono>, and <Mono>priority</Mono> are only nonzero for Haru Urara Power, whose unique
|
|
effect includes "hint event effectiveness" and who has upgraded stat hints. It's unclear exactly how it works or why it takes
|
|
three columns to implement.
|
|
</li>
|
|
</ul>
|
|
</Article>
|
|
|
|
<style>
|
|
.spark-color-white {
|
|
--spark-color: #e1e2e1;
|
|
}
|
|
|
|
.spark-color-blue {
|
|
--spark-color: #37b9f4;
|
|
}
|
|
|
|
.spark-color-pink {
|
|
--spark-color: #ff78b2;
|
|
}
|
|
|
|
.spark-color-green {
|
|
--spark-color: #91d02e;
|
|
}
|
|
|
|
.spark-color-red {
|
|
--spark-color: #f46052;
|
|
}
|
|
|
|
.bg-spark {
|
|
background-color: var(--spark-color);
|
|
}
|
|
|
|
.fg-spark {
|
|
color: var(--spark-color);
|
|
}
|
|
</style>
|