{#snippet head()} Master Data

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 my broader but more sparse notes into a more agreeable, navigable, and consistent form.

master.mdb is an SQLite database that the game downloads to your device. On Windows, you can find it at %USERPROFILE%\AppData\LocalLow\Cygames\Umamusume\master\master.mdb. Hakuraku has a master data explorer that you can use on the website.

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.

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.)

This document is oriented toward programmers with understanding of SQL databases. Mentions of Gallop:: are references to types visible in decompilations of the game, but no C# knowledge is needed.

{/snippet} text_data

The text_data table contains most non-story strings in the game. Queries look up entries by category and index, i.e. SELECT "text" FROM text_data WHERE category=? AND "index"=?.

Some important categories:

Other categories are usually easy enough to figure out by inspection. Text data categories have proper names given in Gallop::MasterString.Category, but a few categories that have useful strings are missing from there.

Skills

Relevant text_data categories include 47 for skill names and 48 for skill descriptions. Otherwise, info for skills lives in skill_data.

skill_data additionally holds skill conditions and effects, described in the next section.

Skill Details

Skills have one or two skill details, also called triggers. The first skill detail has column names with _1 appended, and the second has _2. Each skill detail has:

This SQL query parses all conditions and preconditions to obtain all distinct combinations of skill condition types, operators, and arguments. This may be useful to tool authors.

Skill Abilities

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 _1, _2, or _3 after the skill detail's own number.

Skill Level Scaling

The table skill_level_value defines the coefficients by which each ability's value scales with unique level. Curiously, it defines coefficients up to level = 10 for each ability_type, even though the maximum achievable level is 6.

The float_ability_value_coef column is a multiplier on the corresponding skill ability type's float_ability_value_?_?, expressed in ten thousandths.

Skill Points

The table single_mode_skill_need_point lists the SP cost of each skill.

Sparks

Internally called succession factors. Relevant text_data categories include 147 for spark names and 172 for spark descriptions, both indexed by factor ID.

Spark Data

Queries should join with succession_factor inside.

Spark Effects

succession_factor_effect defines all possible effects that each spark can yield (but not their distributions). Effects are organized by factor_group_id rather than by factor_id, 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.

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.

  1. The server chooses a random effect_id from the hidden distribution for the spark's effect_group_id.
  2. The client (and server) selects all rows matching the spark's factor_group_id and the random rolled effect_id, i.e. 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. There may be several such effects.
  3. For each result row, apply the effect according to the target_type, with value_1 and value_2 as its possible arguments: {#each sparkEffects as [target, name, val1, val2] (target)} {/each}
    target_type Description value_1 Usage value_2 Usage
    {target} {name} {val1} {val2}
    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.

E.g., all succession_factor_effect data for Lovely Spring Breeze (Mejiro Bright's green spark) is:

{#each lovelySpringBreeze as [id, group, effect, typ, val1, val2] (id)} {/each}
succession_factor_effect
id factor_group_id effect_id target_type value_1 value_2
{id} {group} {effect} {typ} {val1} {val2}

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.

Initial Inspiration Effects

succession_initial_factor 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.

{#each successionInitialFactor as [id, typ, val1, val2, add] (id)} {/each}
succession_initial_factor
id factor_type value_1 value_2 add_point
{id} {typ} {val1} {val2} {add}

There are six rows with factor_type = 1, referring to blue sparks. value_1 refers to the star level of each individual spark. value_2 identifies whether the effect applies to starting stats (0) or raised max stats (1). add_point is the amount to add to the respective field.

Pink sparks, i.e. factor_type = 2, have four rows. value_1 is the lower threshold of total star count, and value_2 is the upper threshold. add_point is the number of levels to raise the corresponding aptitude.

factor_type = 3 for unique sparks has three rows. add_point is always 0. The (value_1, value_2) 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.)

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.

Support Cards

Relevant text_data 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.

Support Card Data

Queries should join with support_card_data inside.

Support Card Effects

support_card_effect_table gives progressions of support card stats. There is one row per stat per support card. Unique effects are not included.

Unique Effects

Unique effect data is in support_card_unique_effect.

Hints

Lastly, the table single_mode_hint_gain lists the effects of hints during career.