Uma Musume Race Mechanics
by KuromiAK
The majority of the information we know about racing logic comes from reverse engineering done by @umamusu_reveng, who has stopped their activity, @kak_eng and @hoffe_33. Information here is not guaranteed to be correct, though most has been verified by in-game observation.
The developers have stopped including new race mechanics in the client application. So most new mechanics after the 1st anniversary described are speculations based on the game's parameter file, packet captures of the race replay data, and manual testing. Information related to skills and existing mechanics is still accurate to my knowledge.
Beware that some mechanics and bugs differ based on your respective server. You can find such differences in the same section that describes the mechanic.
This document refers to the Wit stat as “Wiz”. Runaway as “Oonige”.
Concepts Frame Rate Section Phase Bashin, Horse Length Stats Raw Stats Base Stats Motivation Coefficient Adjusted Stats Ground Modifier Strategy Proficiency Modifier Race Course Modifier Single Mode Modifier Speed Target Speed Slope Modifier Base Speed Base Target Speed Strategy Phase Coefficient Distance Proficiency Modifier Randomness Per Section Last Spurt Starting Speed
Minimum Speed Blocking Current Speed Acceleration Base Acceleration Strategy phase coefficient Ground type proficiency modifier Distance proficiency modifier Start Dash Deceleration HP Stamina Strategy Coefficient HP Consumption HP Recovery Skills Out of HP Skills Skill Activation Chance Skill Ability CurrentSpeed (21) CurrentSpeedWithNaturalDeceleration (22) Skill Duration Skill Cooldown Skill Conditions x_random straight_random corner_random all_corner_random phase_corner_random phase remain_distance order_rate, order_rate_inXX_continue near_count is_surrounded behind_near_lane_time, infront_near_lane_time activate_count_x Skill Target Skill Level Value Scaling, Ability Value Usage Direct (1) MultiplySkillNum (2)
Aoharu Skills (3-7)`` Multiply Random (8, 9) Climax Skills (10) MultiplyMaximumRawStatus (13) MultiplyActivateSpecificTagSkillCount (14) AddDistanceDiffTop (19) MultiplyBlockedSideMaxContinueTimePhaseMiddleRun (20, 21) MultiplySpeed (22, 23) MultiplyArcGlobalPotentialLevel (24) MultiplyTopLeadAmount (25) Duration Scaling, Ability Time Usage Direct (1) MultiplyDistanceDiffTop (2) MultiplyRemainHp (3, 7) IncrementOrderUp (4) MultiplyBlockedSideMaxContinueTimePhaseMiddleRun (5, 6) Additional Activate OrderUp (1) AdditionalActivateActivateAnySkill (2, 3) Lane Lane Change Speed Target Lane Overtake Targets Normal Mode Overtake Mode Fixed Mode Extra Move Lane (Final Corner Lane) Blocking Front Blocking Side Blocking Overlapping Vision Start Delay, Late Start Position Keeping Pacemaker Front Runner Modes Speed up mode Overtake mode Non-Front Runner Modes Pace up mode Pace down mode
Pace Up Ex Mode Rushed, Kakari 掛かり, Temptation Spot Struggle | Lead Competition 位置取り争い Dueling | Compete Fight 追い比べ Charge Up / Fully Charged | Conserve Power / Release 足を貯める / 脚色十分 Compete Before Spurt 位置取り調整 Stamina Keep 持久力温存 Secure Lead リード確保 Stamina Limit Break スタミナ勝負 Race Time Race Courses Position, World Transform Course Distance to World Transform Slope (Outdated) Course Events Misc Notes Initialization Frame
Concepts
Frame Rate
The races are simulated at 0.0666s per tick (about 15 frames per second).
For the purpose of replay, the game records uma’s position each frame within 1 second of race start, or when a uma is within 25m before goal. Otherwise positions are recorded at 1 second intervals. (There used to be a visual bug where the winner seemed to lose in replay due to low accuracy recording. The 25m before goal part was introduced then as a fix.)
Section
A race course is divided into 24 sections of equal distance. Sections are numbered from 1 to 24.
Phase
A race is divided into 4 phases. Phases affect a uma’s behavior and target speed. Some skills only activate in a certain phase. Phases are numbered from 0 to 3.
- Early-race (0): Section 1 to 4.
- Mid-race (1): Section 5 to 16.
- Late-race (2): Section 17 to 20.
- Last Spurt (3): Section 21 to 24. Not to be confused with the concept of last spurt. During a race, the progress bar at top of the screen has a tick between early-race and mid-race, and another tick between mid-race and late-race. During the last spurt, the UI fades away.
Bashin, Horse Length
Bashin (horse length) is a unit of distance. 1𝐵𝑎𝑠ℎ𝑖𝑛 = 2. 5𝑚
Stats
Each stat is clamped between 1 and 2000. 𝐹𝑖𝑛𝑎𝑙𝑆𝑡𝑎𝑡 = 𝐴𝑑𝑗𝑢𝑠𝑡𝑒𝑑𝑆𝑡𝑎𝑡 + 𝑆𝑘𝑖𝑙𝑙𝑀𝑜𝑑𝑖𝑓𝑖𝑒𝑟
Raw Stats
Raw stats are the stats shown in the stat panel. Raw stats past 1200 are halved before being converted to base stats.
Base Stats
Base stats are raw stats modified by motivation. This number is used sometimes instead of the final stat, most notably by skill activation chance. Base stat is clamped between 1 and 2000. 𝐵𝑎𝑠𝑒𝑆𝑡𝑎𝑡 = (𝑅𝑎𝑤𝑆𝑡𝑎𝑡𝑠 + 𝐴𝑜ℎ𝑎𝑟𝑢𝑇𝑒𝑎𝑚𝑅𝑎𝑛𝑘𝐵𝑜𝑛𝑢𝑠) * 𝑀𝑜𝑡𝑖𝑣𝑎𝑡𝑖𝑜𝑛𝐶𝑜𝑒𝑓
Motivation Coefficient
絶好調 好調 普通 不調 絶不調
1.04 1.02 1.0 0.98 0.96
Adjusted Stats
Each adjusted stat is clamped between 1 and 2000. 𝐴𝑑𝑗𝑢𝑠𝑡𝑒𝑑𝑆𝑝𝑒𝑒𝑑 = 𝐵𝑎𝑠𝑒𝑆𝑝𝑒𝑒𝑑 𝑅𝑎𝑐𝑒𝐶𝑜𝑢𝑟𝑠𝑒𝑀𝑜𝑑𝑖𝑓𝑖𝑒𝑟 + 𝐺𝑟𝑜𝑢𝑛𝑑𝑀𝑜𝑑𝑖𝑓𝑖𝑒𝑟 + 𝑆𝑖𝑛𝑔𝑙𝑒𝑀𝑜𝑑𝑒𝑀𝑜𝑑𝑖𝑓𝑖𝑒𝑟 𝐴𝑑𝑗𝑢𝑠𝑡𝑒𝑑𝑆𝑡𝑎𝑚𝑖𝑛𝑎 = 𝐵𝑎𝑠𝑒𝑆𝑡𝑎𝑚𝑖𝑛𝑎 + 𝑆𝑖𝑛𝑔𝑙𝑒𝑀𝑜𝑑𝑒𝑀𝑜𝑑𝑖𝑓𝑖𝑒𝑟 𝐴𝑑𝑗𝑢𝑠𝑡𝑒𝑑𝑃𝑜𝑤𝑒𝑟 = 𝐵𝑎𝑠𝑒𝑃𝑜𝑤𝑒𝑟 + 𝐺𝑟𝑜𝑢𝑛𝑑𝑀𝑜𝑑𝑖𝑓𝑖𝑒𝑟 + 𝑆𝑖𝑛𝑔𝑙𝑒𝑀𝑜𝑑𝑒𝑀𝑜𝑑𝑖𝑓𝑖𝑒𝑟 𝐴𝑑𝑗𝑢𝑠𝑡𝑒𝑑𝐺𝑢𝑡𝑠 = 𝐵𝑎𝑠𝑒𝐺𝑢𝑡𝑠 + 𝑆𝑖𝑛𝑔𝑙𝑒𝑀𝑜𝑑𝑒𝑀𝑜𝑑𝑖𝑓𝑖𝑒𝑟 𝐴𝑑𝑗𝑢𝑠𝑡𝑒𝑑𝑊𝑖𝑧 = 𝐵𝑎𝑠𝑒𝑊𝑖𝑧 𝑆𝑡𝑟𝑎𝑡𝑒𝑔𝑦𝑃𝑟𝑜𝑓𝑖𝑐𝑖𝑒𝑛𝑐𝑦𝑀𝑜𝑑𝑖𝑓𝑖𝑒𝑟 + 𝑆𝑖𝑛𝑔𝑙𝑒𝑀𝑜𝑑𝑒𝑀𝑜𝑑𝑖𝑓𝑖𝑒𝑟
Ground Modifier
Ground modifier for speed
良 Firm
稍重
Good
重
Soft
不良
Heavy
Turf 0 0 0 -50
Dirt 0 0 0 -50
Ground modifier for power
良 Firm
稍重
Good
重
Soft
不良
Heavy
Turf 0 -50 -50 -50
Dirt -100 -50 -100 -100
Strategy Proficiency Modifier
S A B C D E F G
1.1 1.0 0.85 0.75 0.6 0.4 0.2 0.1
Race Course Modifier
Some race courses have 1-2 stats as threshold stats. Having base stat that exceeds threshold provides a bonus to adjusted speed.
- Stat <= 300, +0.05x
- 300 < Stat <= 600, +0.1x
- 600 < Stat <= 900, +0.15x
- 900 < Stat, +0.2x The final modifier is the average of modifiers for all threshold stats. Therefore the maximum bonus achievable is +0.2x.
Single Mode Modifier
In single mode (a.k.a. training), all uma gain 400 adjusted stats.
Speed
Target Speed
Target speed is the speed a uma will trend towards. When below the target speed, a uma will accelerate. When above the target speed, a uma will decelerate. Target speed cannot go below minimum speed or exceed 30 m/s. 𝑇𝑎𝑟𝑔𝑒𝑡𝑆𝑝𝑒𝑒𝑑 = (𝐵𝑎𝑠𝑒𝑇𝑎𝑟𝑔𝑒𝑡𝑆𝑝𝑒𝑒𝑑|𝐿𝑎𝑠𝑡𝑆𝑝𝑢𝑟𝑡𝑆𝑝𝑒𝑒𝑑) * 𝑃𝑜𝑠𝑖𝑡𝑖𝑜𝑛𝐾𝑒𝑒𝑝𝐶𝑜𝑒𝑓 + 𝐹𝑜𝑟𝑐𝑒𝐼𝑛𝑀𝑜𝑑𝑖𝑓𝑖𝑒𝑟 + 𝑆𝑘𝑖𝑙𝑙𝑀𝑜𝑑𝑖𝑓𝑖𝑒𝑟 + 𝑆𝑙𝑜𝑝𝑒𝑀𝑜𝑑𝑖𝑓𝑖𝑒𝑟 + 𝑀𝑜𝑣𝑒𝐿𝑎𝑛𝑒𝑀𝑜𝑑𝑖𝑓𝑖𝑒𝑟
Position keeping coefficient is covered in its own section.
Force-in modifier is applied in the early-race when an uma is more than 0.12 course width away from the inner fence and inside is open. The random number is rolled once at race start. 𝐹𝑜𝑟𝑐𝑒𝐼𝑛𝑀𝑜𝑑𝑖𝑓𝑖𝑒𝑟 = 𝑅𝑎𝑛𝑑𝑜𝑚(0. 1) + 𝑆𝑡𝑟𝑎𝑡𝑒𝑔𝑦𝑀𝑜𝑑𝑖𝑓𝑖𝑒𝑟[𝑚/𝑠] Strategy modifier is
- Front Runner 0.02m/s
- Pace Chaser 0.01m/s
- Late Surger 0.01m/s
- End Closer 0.03m/s
Move lane modifier is applied when an uma is affected by a skill that modifies lane move speed, and has performed lane movement in the previous frame. Note that this was added after the 1st anniversary.
𝑀𝑜𝑣𝑒𝐿𝑎𝑛𝑒𝑀𝑜𝑑𝑖𝑓𝑖𝑒𝑟 = (0. 0002 * 𝑃𝑜𝑤𝑒𝑟𝑆𝑡𝑎𝑡)0.5[𝑚/𝑠]
Slope Modifier
Slope modifier is applied when a uma is running on uphill or downhill, see Course Events.
When running uphill, a uma loses target speed equal to 𝑆𝑙𝑜𝑝𝑒𝑃𝑒𝑟 200/𝑃𝑜𝑤𝑒𝑟𝑆𝑡𝑎𝑡. When running downhill, every second there is a chance of 𝑊𝑖𝑧𝑆𝑡𝑎𝑡 0. 04%to enter downhill accel mode that increases target speed by 0. 3 + 𝑆𝑙𝑜𝑝𝑒𝑃𝑒𝑟/10 [𝑚/𝑠]and reduces HP consumption by 60%. Each second the downhill accel mode has a 20% chance to end.
Base Speed
A race’s base speed is determined by race course distance. 𝐵𝑎𝑠𝑒𝑆𝑝𝑒𝑒𝑑 = 20. 0 − (𝐶𝑜𝑢𝑟𝑠𝑒𝐷𝑖𝑠𝑡𝑎𝑛𝑐𝑒 − 2000𝑚)/1000[𝑚/𝑠] Examples:
- 1200m races have a base speed of 20.8m/s
- 2000m races have a base speed of 20.0m/s
- 2500m races have a base speed of 19.5m/s
Base Target Speed
The formula for base target speed varies depending on phase. During early-race and mid-race, 𝐵𝑎𝑠𝑒𝑇𝑎𝑟𝑔𝑒𝑡𝑆𝑝𝑒𝑒𝑑 = 𝐵𝑎𝑠𝑒𝑆𝑝𝑒𝑒𝑑 * 𝑆𝑡𝑟𝑎𝑡𝑒𝑔𝑦𝑃ℎ𝑎𝑠𝑒𝐶𝑜𝑒𝑓 Worth noting that target speed is NOT affected by speed stat in early-race and mid-race.
During late-race and last spurt, 𝐵𝑎𝑠𝑒𝑇𝑎𝑟𝑔𝑒𝑡𝑆𝑝𝑒𝑒𝑑 = 𝐵𝑎𝑠𝑒𝑆𝑝𝑒𝑒𝑑 𝑆𝑡𝑟𝑎𝑡𝑒𝑔𝑦𝑃ℎ𝑎𝑠𝑒𝐶𝑜𝑒𝑓 + 𝑠𝑞𝑟𝑡(500 𝑆𝑝𝑒𝑒𝑑𝑆𝑡𝑎𝑡) 𝐷𝑖𝑠𝑡𝑎𝑛𝑐𝑒𝑃𝑟𝑜𝑓𝑖𝑐𝑖𝑒𝑛𝑐𝑦𝑀𝑜𝑑𝑖𝑓𝑖𝑒𝑟 0. 002[𝑚/𝑠]
Strategy Phase Coefficient
Strategy Early-race Mid-race Late-race & Last Spurt
Front Runner 1.0 0.98 0.962
Pace Chaser 0.978 0.991 0.975
Late Surger 0.938 0.998 0.994
End Closer 0.931 1.0 1.0
Oonige 1.063 0.962 0.95
Distance Proficiency Modifier
S A B C D E F G
1.05 1.0 0.9 0.8 0.6 0.4 0.2 0.1
Randomness Per Section
At each section, race base speed multiplied by a random number is added to target speed. The random number is affected by wisdom stat. This randomness does not affect the last spurt calculation. 𝑀𝑎𝑥 = 𝑊𝑖𝑧𝑆𝑡𝑎𝑡/5500 𝑙𝑜𝑔 10 (𝑊𝑖𝑧𝑆𝑡𝑎𝑡 0. 1)[%]
𝑀𝑖𝑛 = 𝑀𝑎𝑥 − 0. 65[%] Examples:
- 400 Wiz, Max=+0.117%, Min=-0.533%
- 800 Wiz, Max=+0.277%, Min=-0.373%
Last Spurt
Last spurt distance and target speed are calculated at the beginning of the mid-race (without randomness per section). The concept of last spurt is not to be confused with the last spurt phase. 𝐿𝑎𝑠𝑡𝑆𝑝𝑢𝑟𝑡𝑆𝑝𝑒𝑒𝑑𝑀𝑎𝑥 = (𝐵𝑎𝑠𝑒𝑇𝑎𝑟𝑔𝑒𝑡𝑆𝑝𝑒𝑒𝑑𝑃ℎ𝑎𝑠𝑒2 + 0. 01 𝐵𝑎𝑠𝑒𝑆𝑝𝑒𝑒𝑑) 1. 05 +
𝑠𝑞𝑟𝑡(500 𝑆𝑝𝑒𝑒𝑑𝑆𝑡𝑎𝑡) 𝐷𝑖𝑠𝑡𝑎𝑛𝑐𝑒𝑃𝑟𝑜𝑓𝑖𝑐𝑖𝑒𝑛𝑐𝑦𝑀𝑜𝑑𝑖𝑓𝑖𝑒𝑟 * 0. 002 +
(450 𝐺𝑢𝑡𝑠𝑆𝑡𝑎𝑡)0.597^ 0. 0001[𝑚/𝑠] Note that the guts component was added after the 1st anniversary.
Upon entering the late-race, if the uma has enough HP to run the remaining distance at max target speed, she will immediately start the last spurt using the max target speed.
If HP is insufficient, a list of last spurt speed and distance candidates are calculated by lowering the target speed by 0.1m/s each step, till the last spurt speed reaches base target speed of the late-race. Then candidates are sorted by the time it would take to finish the race (sum of respective distance divided by speed, ignoring acceleration). Going from best to worst time, each candidate has a chance of 15 + 0. 05 * 𝑊𝑖𝑧𝑆𝑡𝑎𝑡[%]chance to be accepted. If all candidates are exhausted without passing the wisdom check, the slowest candidate is chosen.
Last spurt calculation estimates the stamina usage up to 60m before the goal line. The calculation does not take into account the time it takes to accelerate to target speed. If an HP recovery skill activates after entering the late-race, the last spurt speed and distance are re-calculated. Debuffs on the other hand do not trigger a re-calculation. Note that the recalculation was added after the 1st anniversary.
Starting Speed
The speed at race start is 3m/s.
Minimum Speed
A uma’s minimum speed is affected by her guts. 𝑀𝑖𝑛𝑆𝑝𝑒𝑒𝑑 = 0. 85 𝐵𝑎𝑠𝑒𝑆𝑝𝑒𝑒𝑑 + 𝑠𝑞𝑟𝑡(200. 0 𝐺𝑢𝑡𝑠𝑆𝑡𝑎𝑡) * 0. 001[𝑚/𝑠]
Minimum speed is the target speed when a uma is out of HP.
Minimum speed comes into effect after the start dash. After each frame’s acceleration calculation, if a uma has less than minimum speed, her speed is instantly raised to match the minimum speed.
Blocking
When blocked, a uma’s speed is capped between 0.988x(at 0m) to 1.0x(at 2m) of the speed of the uma in front, scaled linearly to the distance in between.
Current Speed
Speed debuffs affect actual speed (or distance covered, in a sense) after all other calculations. The change in speed is instant with no need for acceleration / deceleration.
Acceleration
𝐴𝑐𝑐𝑒𝑙 = 𝐵𝑎𝑠𝑒𝐴𝑐𝑐𝑒𝑙 * 𝑠𝑞𝑟𝑡(500. 0 * 𝑃𝑜𝑤𝑒𝑟𝑆𝑡𝑎𝑡) * 𝑆𝑡𝑟𝑎𝑡𝑒𝑔𝑦𝑃ℎ𝑎𝑠𝑒𝐶𝑜𝑒𝑓𝑓𝑖𝑐𝑖𝑒𝑛𝑡 *
𝐺𝑟𝑜𝑢𝑛𝑑𝑇𝑦𝑝𝑒𝑃𝑟𝑜𝑓𝑖𝑐𝑖𝑒𝑛𝑐𝑦𝑀𝑜𝑑𝑖𝑓𝑖𝑒𝑟 * 𝐷𝑖𝑠𝑡𝑎𝑛𝑐𝑒𝑃𝑟𝑜𝑓𝑖𝑐𝑖𝑒𝑛𝑐𝑦𝑀𝑜𝑑𝑖𝑓𝑖𝑒𝑟 +
𝑆𝑘𝑖𝑙𝑙𝑀𝑜𝑑𝑖𝑓𝑖𝑒𝑟 + 𝑆𝑡𝑎𝑟𝑡𝐷𝑎𝑠ℎ𝑀𝑜𝑑𝑖𝑓𝑖𝑒𝑟
Base Acceleration
Normally, 𝐵𝑎𝑠𝑒𝐴𝑐𝑐𝑒𝑙 = 0. 0006[𝑚/𝑠^2 ].
When running uphill, 𝐵𝑎𝑠𝑒𝐴𝑐𝑐𝑒𝑙 = 0. 0004[𝑚/𝑠^2 ]instead.
Strategy phase coefficient
Strategy Early-race Mid-race Late-race & Last Spurt
Front Runner 1.0 1.0 0.996
Pace Chaser 0.985 1.0 0.996
Late Surger 0.975 1.0 1.0
End Closer 0.945 1.0 0.997
Oonige 1.17 0.94 0.956
Ground type proficiency modifier
S A B C D E F G
1.05 1.0 0.9 0.8 0.7 0.5 0.3 0.1
Distance proficiency modifier
S A B C D E F G
1.0 1.0 1.0 1.0 1.0 0.6 0.5 0.4
Start Dash
During a start dash, an uma gains 24. 0𝑚/𝑠^2 additional acceleration. Start dash ends when her speed reaches 0. 85 * 𝐵𝑎𝑠𝑒𝑆𝑝𝑒𝑒𝑑.
At the game’s launch, it was possible to carry this acceleration past the speed threshold. This meant that an uma having power below a certain threshold would have better acceleration at the start. This was deemed a bug. As a fix, speed is capped at 0. 85 * 𝐵𝑎𝑠𝑒𝑆𝑝𝑒𝑒𝑑until the start dash modifier is removed, so that the extra acceleration cannot be carried over.
This fix in turn caused another bug years later. If a uma is inflicted with a speed debuff during start dash, she would not be able to reach the speed threshold to lose the start dash modifier. This meant she would be unable to accelerate past the speed threshold until the debuff ends. This has since been fixed by making the trigger ignore current speed modifiers.
A uma can also be stuck in the start dash state if the course starts in an uphill. With low enough power, the target speed could be lower than the threshold speed. The speed will shoot up once the hill is over.
After the end of a start dash, a uma is usually unable to accelerate to minimum speed within 1 frame. As a result her speed would be raised to minimum speed.
Deceleration
Deceleration is determined by phase
- Early-race: − 1. 2𝑚/𝑠^2
- Mid-race: − 0. 8𝑚/𝑠^2
- Late-race: − 1. 0𝑚/𝑠^2
- Pace Down mode (overriding all above, after 1.5 anniversary): − 0. 5𝑚/𝑠^2
- Out of HP (overriding all above): − 1. 2𝑚/𝑠^2
HP
Stamina
Stamina is converted to HP at the start of a race. 𝑀𝑎𝑥𝐻𝑃 = 0. 8 𝑆𝑡𝑟𝑎𝑡𝑒𝑔𝑦𝐶𝑜𝑒𝑓𝑓𝑖𝑐𝑖𝑒𝑛𝑡 𝑆𝑡𝑎𝑚𝑖𝑛𝑎𝑆𝑡𝑎𝑡 + 𝐶𝑜𝑢𝑟𝑠𝑒𝐷𝑖𝑠𝑡𝑎𝑛𝑐𝑒[𝑚]
Strategy Coefficient
Front Runner
Pace Chaser
Late Surger End Closer Oonige
0.95 0.89 1.0 0.995 0.86
HP Consumption
𝐻𝑃𝐶𝑜𝑛𝑠𝑢𝑚𝑝𝑡𝑖𝑜𝑛𝑃𝑒𝑟𝑆𝑒𝑐𝑜𝑛𝑑 = 20. 0 * (𝐶𝑢𝑟𝑟𝑒𝑛𝑡𝑆𝑝𝑒𝑒𝑑 − 𝐵𝑎𝑠𝑒𝑆𝑝𝑒𝑒𝑑 + 12. 0)^2 /144. 0 *
𝑆𝑡𝑎𝑡𝑢𝑠𝑀𝑜𝑑𝑖𝑓𝑖𝑒𝑟 * 𝐺𝑟𝑜𝑢𝑛𝑑𝑀𝑜𝑑𝑖𝑓𝑖𝑒𝑟
Status modifier is as follows (multiplicative):
- 1.6x during rushed
- 0.6x when position keeping status is pace-down.
- 0.4x when in down hill accel mode.
The ground modifier is affected by the track condition.
良 稍重 重 不良
Turf 1 1 1.02 1.02
Dirt 1 1 1.01 1.02
In the late-race and last spurt, HP consumption is multiplied by guts modifier. 𝐺𝑢𝑡𝑠𝑀𝑜𝑑𝑖𝑓𝑖𝑒𝑟 = 1. 0 + (200/𝑠𝑞𝑟𝑡(600. 0 * 𝐺𝑢𝑡𝑠𝑆𝑡𝑎𝑡))
Examples:
- 200 Guts, 1.577x
- 400 Guts, 1.408x
- 600 Guts, 1.333x
HP Recovery Skills
HP can be recovered by skills. All skills that restore HP instantly restore a percentage of max HP. HP that goes over the max is wasted. All skills that restore HP functions identically outside their trigger condition and amount.
Out of HP
When a uma is out of HP, her target speed is set to minimum speed.
Skills
See https://gametora.com/umamusume/skills for the list of skills and their conditions.
Skill Activation Chance
Many skills need to pass a wisdom check BEFORE the race. 𝐴𝑐𝑡𝑖𝑣𝑎𝑡𝑖𝑜𝑛𝐶ℎ𝑎𝑛𝑐𝑒 = 𝑚𝑎𝑥(100 − 9000/𝐵𝑎𝑠𝑒𝑊𝑖𝑧, 20)% Examples:
- 300 Wiz, 70.0%
- 600 Wiz, 85.0%
- 900 Wiz, 90.0%
- 1200 Wiz, 92.5% Note that base wisdom stat is used here. As a result the activation chance is NOT affected by strategy proficiency or skills.
Skill Ability
“Ability” refers to individual effects of a skill.
CurrentSpeed (21)
There are two variables for a uma’s current speed: Actual Speed (LastSpeed in code) and Current Speed (LastSelfSpeed in code).
Current speed is the direct result after acceleration calculations. It is fed into the next round of acceleration calculation. Current Speed is also used to calculate HP consumption per second.
Actual speed is current speed with current speed modifiers applied. Current speed modifiers are effective immediately without the need to accelerate or decelerate, unlike target speed, due to them being applied after acceleration calculation. Actual speed is used to compute distance traveled, as well as various calculations involving relative speed between two uma blocking, overtaking, etc.
CurrentSpeedWithNaturalDeceleration (22)
This ability is composed of 2 parts.
1. A modifier that increases actual speed - functionally identical to CurrentSpeed.
2. Once the first modifier expires, add a one-time modifier of equal magnitude that increases current speed.
Skill Duration
Many skills have a base duration. The actual duration of a skill scales with course distance. 𝐷𝑢𝑟𝑎𝑡𝑖𝑜𝑛 = 𝐵𝑎𝑠𝑒𝐷𝑢𝑟𝑎𝑡𝑖𝑜𝑛 * 𝐶𝑜𝑢𝑟𝑠𝑒𝐷𝑖𝑠𝑡𝑎𝑛𝑐𝑒[𝑚]/1000
Skill Cooldown
Many skills have a cooldown time. The actual cooldown time of a skill scales with course distance. 𝐶𝑜𝑜𝑙𝑑𝑜𝑤𝑛 = 𝐵𝑎𝑠𝑒𝐶𝑜𝑜𝑙𝑑𝑜𝑤𝑛 * 𝐶𝑜𝑢𝑟𝑠𝑒𝐷𝑖𝑠𝑡𝑎𝑛𝑐𝑒[𝑚]/1000
Skill Conditions
x_random
Skills with random activation randomly pick a 10m segment before a race starts, and activate when all other conditions are fulfilled while the uma is on the selected segment.
straight_random
Skills that activate on random straights first randomly pick a straight segment to activate on, then randomly pick a 10m segment. The chance of each straight segment to be selected is equal regardless of their length.
corner_random
If the race goes through the same corner multiple times, the skill will activate on the last lap.
all_corner_random
Up to 4 triggers are placed in the race, and the condition is fulfilled if uma is within one of the triggers. The triggers are distributed via the following procedure:
1. All corners in the race start as candidate corners.
2. Out of all candidate corners, randomly select one of them. The chance of each candidate to be chosen is equal regardless of their length.
3. Within the corner, randomly select a 10m-long segment, and place a trigger there. (Practically, this means distribution is uniform, but the latest trigger starting point is 𝐸𝑛𝑑𝑂𝑓𝐶𝑜𝑟𝑛𝑒𝑟 − 10𝑚 )
4. If there is at least 10m remaining from the end of the trigger to the end of that corner, the candidate is replaced by this remaining length. Otherwise the candidate is discarded.
5. Remove all candidate corners before the one selected.
6. Go to step 2, repeat until 4 triggers are placed, or no candidate remains.
phase_corner_random
All the corner segments in the corresponding phase are “stitched together” before the trigger is placed. This means the probability of the skill triggering in a specific corner is proportional to its length.
phase
Skill activations are checked before the game updates a uma’s phase.
A skill with the condition phase==1&corner==0 (such as the original Smart Falcon’s unique skill) can activate if the uma exits a corner and enters the late-race on the same frame. This is because skill activation happens after checking the end of the corner and before updating the uma’s current phase.
remain_distance
The remaining distance condition is calculated by subtracting the course distance (an integer) by the uma’s current position rounded down. So remain_distance>=399 can actually trigger at remain_distance>=398.000001.
order_rate, order_rate_inXX_continue
Order rate condition is converted to order condition, rounding to the nearest. For example, consider order_rate>50 in a 9-uma race. 9 * 50% = 4. 5 ≈ 5. The condition is then converted to order>5 and can only trigger when 6th place or below.
order_rate_inXX_continue requires an uma to remain in top XX% until skill activation. The first 5 seconds in the race do not count.
near_count
A uma is considered near if 𝑎𝑏𝑠(𝐷𝑖𝑠𝑡𝑎𝑛𝑐𝑒𝐺𝑎𝑝) < 3𝑚 𝑎𝑏𝑠(𝐿𝑎𝑛𝑒𝐺𝑎𝑝) < 3𝐻𝑜𝑟𝑠𝑒𝐿𝑎𝑛𝑒 Note that before the 1st anniversary, the distances used to be 1.5m and 1.5 horse lanes respectively.
is_surrounded
A uma is considered surrounded if for all 3 of the following directions another uma can be found. The same uma can fulfill more than 1 direction. Out: 𝑎𝑏𝑠(𝐷𝑖𝑠𝑡𝑎𝑛𝑐𝑒𝐺𝑎𝑝) < 1. 5𝑚; 0 < 𝐿𝑎𝑛𝑒𝐺𝑎𝑝 < 3𝐻𝑜𝑟𝑠𝑒𝐿𝑎𝑛𝑒 Front: 0 < 𝐷𝑖𝑠𝑡𝑎𝑛𝑐𝑒𝐺𝑎𝑝 < 3. 0𝑚; 𝑎𝑏𝑠(𝐿𝑎𝑛𝑒𝐺𝑎𝑝) < 1. 5𝐻𝑜𝑟𝑠𝑒𝐿𝑎𝑛𝑒 Behind: − 3. 0𝑚 < 𝐷𝑖𝑠𝑡𝑎𝑛𝑐𝑒𝐺𝑎𝑝 < 0; 𝑎𝑏𝑠(𝐿𝑎𝑛𝑒𝐺𝑎𝑝) < 1. 5𝐻𝑜𝑟𝑠𝑒𝐿𝑎𝑛𝑒
behind_near_lane_time, infront_near_lane_time
A uma is considered closely behind if 𝑎𝑏𝑠(𝐷𝑖𝑠𝑡𝑎𝑛𝑐𝑒𝐺𝑎𝑝) < 2. 5𝑚 𝑎𝑏𝑠(𝐿𝑎𝑛𝑒𝐺𝑎𝑝) < 1𝐻𝑜𝑟𝑠𝑒𝐿𝑎𝑛𝑒
This check is performed to the uma 1 place ahead/behind the uma in question. Skills use a timer of how long this condition has been continuously fulfilled as a trigger. The timers reset if the uma’s placement changes.
activate_count_x
Skill activations are checked in the order of their IDs. This means a skill with a lower ID can trigger a skill with a higher ID on the same frame, but not the other way around.
Skill Target
As far as targeting is concerned, skills do not distinguish friend and foe. This means teammates can trigger and be targeted by skills, and count towards a skill’s maximum target.
Teammates are excluded from the effect of debuffs.
Skill Level
Skills with levels gain extra effectiveness based on their effect type.
Level Target Speed
Accel Stat Everything Else Recovery, Current Speed, Lane move
1 1.00 1.00 1.00 1.00
2 1.01 1.02 1.01 1.02
3 1.04 1.04 1.02 1.04
4 1.07 1.06 1.03 1.06
5 1.10 1.08 1.04 1.08
6 1.13 1.10 1.05 1.10
7 1.16 1.125 1.06 1.12
8 1.19 1.15 1.07 1.14
9 1.22 1.175 1.08 1.16
10 1.25 1.20 1.10 1.18
Value Scaling, Ability Value Usage
Direct (1)
No scaling.
MultiplySkillNum (2)
𝑆𝑐𝑎𝑙𝑒𝑑𝑉𝑎𝑙𝑢𝑒 = 𝑚𝑖𝑛(1 + 0. 01 * 𝑁𝑢𝑚𝑆𝑘𝑖𝑙𝑙, 1. 2)
Aoharu Skills (3-7)
The effectiveness of aoharu skills scales with your team’s total base stats.
- Total < 1200, 0.8x
- 1200 <= Total < 1800, 0.9x
- 1800 <= Total < 2600, 1.0x
- 2600 <= Total < 3600, 1.1x
- 3600 <= Total, 1.2x
Multiply Random (8, 9)
Type 1 (ID=8) and Type 2 (ID=9) are identical.
- 60%, 0.0x
- 30%, 0.02x
- 10%, 0.04x
Climax Skills (10)
The effectiveness of climax skills scales with the number of races won during training.
- Races won < 6, 0.8x
- 6 <= Races won < 14, 0.9x
- 14 <= Races won < 18, 1.0x
- 18 <= Races won < 25, 1.1x
- 25 <= Races won, 1.2x
MultiplyMaximumRawStatus (13)
The effectiveness scales with the maximum raw stat of all 5 stats.
- Stat < 600, 0.8x
- 600 <= Stat < 800, 0.9x
- 800 <= Stat < 1000, 1.0x
- 1000 <= Stat < 1100, 1.1x
- 1100 <= Stat, 1.2x
MultiplyActivateSpecificTagSkillCount (14)
The effectiveness scales with the number of green skills (skill tag 601-615) activated during the race.
- 0-2 skills, 0.0x
- 3-4 skills, 1.0x
- 5 skills, 2.0x
- 6+ skills, 3.0x
AddDistanceDiffTop (19)
Adds a flat amount of effectiveness when far enough away from the first place.
- Distance < 20m, +0.0
- Distance >= 20m, +0.1
MultiplyBlockedSideMaxContinueTimePhaseMiddleRun (20, 21)
Scales with the max duration the uma is blocked on either side during the mid-race phase. The duration of the longest occurrence of blockage is used. For each blockage, the timer is reset when both sides of the uma are clear from blocking. It is not reset when the blocking uma changes, or blocked from different sides from the beginning.
Type 1 (ID=20)
- Blocked < 2s, 1.0x
- Blocked < 4s, 2.0x
- Blocked < 6s, 3.0x
- Blocked >= 6s, 4.0x Type 2 (ID=21) is not implemented yet.
MultiplySpeed (22, 23)
Scales with the uma’s final speed stat. This includes raw stat, motivation modifier, ground modifier, race course modifier, and skills.
Type 1 (ID=22)
- Speed < 1700, 0.0x
- 1700 <= Speed < 1800, 1.0x
- 1800 <= Speed < 1900, 2.0x
- 1900 <= Speed < 2000, 3.0x
- 2000 <= Speed, 4.0x Type 2 (ID=23)
- Speed < 1400, 1.0x
- 1400 <= Speed < 1600, 2.0x
- 1600 <= Speed, 3.0x
MultiplyArcGlobalPotentialLevel (24)
Scales with the uma’s total level of global potential in the L’arc scenario.
- Lv < 10, 1.0x
- 10 <= Lv < 20, 1.1x
- 20 <= Lv, 1.2x
MultiplyTopLeadAmount (25)
Scales with the uma’s maximum lead achieved between 0-66.6% of the course distance.
- Lead < 10m, 1.0x
- 10m <= Lead < 25m, 1.4x
- 25m <= Lead, 1.8x
Duration Scaling, Ability Time Usage
Direct (1)
No scaling.
MultiplyDistanceDiffTop (2)
𝑆𝑐𝑎𝑙𝑒𝑑𝐷𝑢𝑟𝑎𝑡𝑖𝑜𝑛 = 𝐵𝑎𝑠𝑒𝐷𝑢𝑟𝑎𝑡𝑖𝑜𝑛 * 𝑚𝑖𝑛(0. 8 + 𝐷𝑖𝑠𝑡𝑎𝑛𝑐𝑒𝐹𝑟𝑜𝑚𝑇𝑜𝑝 / 62. 5𝑚, 1. 6)
MultiplyRemainHp (3, 7)
The duration scales with the remaining HP at the time of skill activation. Type 1, for Mejiro Bright, Mejiro McQueen (ID=3)
- HP < 2000, 1.0x
- 2000 <= HP < 2400, 1.5x
- 2400 <= HP < 2600, 2.0x
- 2600 <= HP < 2800, 2.2x
- 2800 <= HP < 3000, 2.5x
- 3000 <= HP < 3200, 3.0x
- 3200 <= HP < 3500, 3.5x
- 3500 <= HP, 4.0x Type 2, for Matikane Tannhauser (ID=7)
- HP < 1500, 1.0x
- 1500 <= HP < 1800, 1.5x
- 1800 <= HP < 2000, 2.0x
- 2000 <= HP < 2100, 2.5x
- 2100 <= HP, 3.0x
IncrementOrderUp (4)
The duration increases by 1 second for each time the uma successfully overtakes while the skill is active, for up to 3 times. The increased duration applies to all modifiers applied by the skill. The additional duration also scales with course distance in the same way as base duration, see Skill Duration.
MultiplyBlockedSideMaxContinueTimePhaseMiddleRun (5, 6)
The same logic as the ability value counterpart, see MultiplyBlockedSideMaxContinueTimePhaseMiddleRun. Type 1 (ID=5)
- Blocked < 2s, 1.0x
- Blocked < 4s, 2.0x
- Blocked < 6s, 3.0x
- Blocked >= 6s, 4.0x Type 2 (ID=6) is not implemented yet.
Additional Activate
If an ability is labeled as additional activation, it does nothing on skill activation. Instead the effect is applied when a certain condition is achieved while the skill is active, for the remaining skill duration. This effect can trigger multiple times.
OrderUp (1)
Triggered each time the uma successfully overtakes. Up to 3 times. This used to be AbilityValueUsage = 19.
AdditionalActivateActivateAnySkill (2, 3)
Triggered each time the uma activates another skill. Type 1 (ID=2) up to 3 times. Type 2 (ID=3) up to 2 times.
Lane
A uma’s lane is measured by distance from the inner fence. The unit used in calculation is course width. 1 course width = 11.25m. The game also uses the unit “horse lane” to measure relative distance, where 1 horse lane = 1/18 course width.
The minimum lane distance is 0. The maximum is different per race course. The widest race course is the turf course in Tokyo with 1.5 course width, and the narrowest being 3 dirt courses in Sapporo, Hakodate, Niigata with 1.1 course width.
The maximum may change throughout the race, though the only instances of this are Nakayama 2000m and some distances of Hanshin racecourse. It is unclear whether this would affect a race at all.
A uma’s initial lane is 𝐻𝑜𝑟𝑠𝑒𝐼𝑛𝑑𝑒𝑥 * 𝐻𝑜𝑟𝑠𝑒𝐿𝑎𝑛𝑒 + 𝐴𝑑𝑗𝑢𝑠𝑡𝑜𝑟where the adjustor is:
- 0 for Ooi
- 1.86 if gate >= 14 for Longchamp
- 0.6 if gate >= 10 on other JRA courses
Lane Change Speed
Lane move speed has 3 components: actual speed, current speed, and target speed.
𝑇𝑎𝑟𝑔𝑒𝑡𝑆𝑝𝑒𝑒𝑑 = 0. 02 (0. 3 + 0. 001 𝑃𝑜𝑤𝑒𝑟𝑆𝑡𝑎𝑡) 𝐹𝑖𝑟𝑠𝑡𝑀𝑜𝑣𝑒𝐿𝑎𝑛𝑒𝑃𝑜𝑖𝑛𝑡𝑀𝑜𝑑𝑖𝑓𝑖𝑒𝑟 𝑂𝑟𝑑𝑒𝑟𝑀𝑜𝑑𝑖𝑓𝑖𝑒𝑟 First move lane point modifier is applied in the early-race and mid-race, before the move lane point. 𝐹𝑖𝑟𝑠𝑡𝑀𝑜𝑣𝑒𝐿𝑎𝑛𝑒𝑃𝑜𝑖𝑛𝑡𝑀𝑜𝑑𝑖𝑓𝑖𝑒𝑟 = 1 + 𝐿𝑎𝑛𝑒𝐷𝑖𝑠𝑡𝑎𝑛𝑐𝑒/𝑀𝑎𝑥𝐿𝑎𝑛𝑒𝐷𝑖𝑠𝑡𝑎𝑛𝑐𝑒 0. 05 Order modifier is applied in the late-race and last spurt. 𝑂𝑟𝑑𝑒𝑟𝑀𝑜𝑑𝑖𝑓𝑖𝑒𝑟 = 1 + 𝑂𝑟𝑑𝑒𝑟 0. 01
Current speed changes towards target speed over time. This value is not directional. Acceleration is a constant. Current speed resets to 0 when the target lane is reached. 𝐴𝑐𝑐𝑒𝑙 = 0. 02 * 1. 5
Actual speed accounts for skills and is faster when moving in. 𝐴𝑐𝑡𝑢𝑎𝑙𝑆𝑝𝑒𝑒𝑑 = 𝑐𝑙𝑎𝑚𝑝(𝐶𝑢𝑟𝑟𝑒𝑛𝑡𝑆𝑝𝑒𝑒𝑑 + 𝑆𝑘𝑖𝑙𝑙𝑀𝑜𝑑𝑖𝑓𝑖𝑒𝑟, 0, 0. 6) * 𝐷𝑖𝑟𝑒𝑐𝑡𝑖𝑜𝑛𝑀𝑜𝑑𝑖𝑓𝑖𝑒𝑟 Direction modifier is 1 when moving out. And affected by lane distance when moving in. 𝐷𝑖𝑟𝑒𝑐𝑡𝑖𝑜𝑛𝑀𝑜𝑑𝑖𝑓𝑖𝑒𝑟𝑂𝑢𝑡 = 1 𝐷𝑖𝑟𝑒𝑐𝑡𝑖𝑜𝑛𝑀𝑜𝑑𝑖𝑓𝑖𝑒𝑟𝐼𝑛 =− (1 + 𝐿𝑎𝑛𝑒𝐷𝑖𝑠𝑡𝑎𝑛𝑐𝑒)
If the uma is blocked in the direction it is trying to move, the lane will not change. However the uma will continue to accelerate, building up current lane change speed in this case.
Target Lane
The target lane of a uma refers to the lane they try to move to. It is updated when a uma is less than 0.5 horse lane away from the current target lane, or if she is blocked on the side she is trying to move.
The first step is determining which strategy to use. There are 3 strategies: normal, fixed and overtake.
Overtake Targets
To enter overtake mode, there must be overtake targets. Overtake targets are all visible uma between 1-20 m in front, whose distance gap divided by speed gap is less than 15 meaning she can be caught up within 15 seconds at current speed difference and either has a lower target speed than yours, or be blocked and has a lower current speed than your target speed. The closest uma blocking in front is also automatically an overtake target.
Normal Mode
Normal mode is used when there are no overtake targets, or when uma is within 200m before the move lane point during early-race or mid-race.
Normal mode has the following rules:
1. If out of HP, set the target lane to the current lane.
2. If position keeping mode is pace-down, set the target lane to 0.18.
3. If on the final straight and extra move lane is on the outside, set the target lane to the extra move lane if not blocked.
4. If in early-race or mid-race, set the target lane to the current lane - 0.05 if not blocked.
5. If in mid-race and less than 1.75 horse lane from inside uma, set target lane to 2.0 horse lane away from inside uma.
6. Otherwise keep straight.
Overtake Mode
Overtake mode on the other hand is used when there are overtake targets. When all overtake targets are lost, the uma stays in overtake mode for an additional 1.5s before moving back to normal mode.
Overtake mode starts by making a list of overtake candidates. For each overtake target, find the innermost and outermost uma of the crowd they belong to. The specific condition is this:
0. 0 <= 𝐷𝑖𝑠𝑡𝑎𝑛𝑐𝑒𝐺𝑎𝑝 <= 3. 0 0 < 𝐿𝑎𝑛𝑒𝐺𝑎𝑝 < 2𝐻𝑜𝑟𝑠𝑒𝐿𝑎𝑛𝑒
For each inner/outermost uma, the lane +/-1 horse lane is a candidate. The candidate is considered for next step if there is no visible uma within
𝑂𝑤𝑛𝑒𝑟𝐷𝑖𝑠𝑡𝑎𝑛𝑐𝑒 <= 𝐷𝑖𝑠𝑡𝑎𝑛𝑐𝑒 <= 𝐼𝑛𝑛𝑒𝑟/𝑂𝑢𝑡𝑒𝑟𝑚𝑜𝑠𝑡𝑈𝑚𝑎𝐷𝑖𝑠𝑡𝑎𝑛𝑐𝑒 + 0. 5
𝐶𝑎𝑛𝑑𝑖𝑑𝑎𝑡𝑒𝐿𝑎𝑛𝑒 − 0. 8𝐻𝑜𝑟𝑠𝑒𝐿𝑎𝑛𝑒 <= 𝐿𝑎𝑛𝑒𝐷𝑖𝑠𝑡𝑎𝑛𝑐𝑒 <= 𝐶𝑎𝑛𝑑𝑖𝑑𝑎𝑡𝑒𝐿𝑎𝑛𝑒 + 0. 8𝐻𝑜𝑟𝑠𝑒𝐿𝑎𝑛𝑒
There is an additional candidate unrelated to overtake targets. If the phase is the early-race or mid-race, and the uma is at least 1 horse lane from the fence, also check if 1 horse lane in is a candidate. Otherwise, check if going straight is a candidate. 𝑂𝑤𝑛𝑒𝑟𝐷𝑖𝑠𝑡𝑎𝑛𝑐𝑒 <= 𝐷𝑖𝑠𝑡𝑎𝑛𝑐𝑒 <= 𝐹𝑢𝑟𝑡ℎ𝑒𝑠𝑡𝐴ℎ𝑒𝑎𝑑𝑂𝑣𝑒𝑟𝑡𝑎𝑘𝑒𝑇𝑎𝑟𝑔𝑒𝑡𝐷𝑖𝑠𝑡𝑎𝑛𝑐𝑒 + 3. 0 𝐶𝑎𝑛𝑑𝑖𝑑𝑎𝑡𝑒𝐿𝑎𝑛𝑒 − 0. 8𝐻𝑜𝑟𝑠𝑒𝐿𝑎𝑛𝑒 <= 𝐿𝑎𝑛𝑒𝐷𝑖𝑠𝑡𝑎𝑛𝑐𝑒 <= 𝐶𝑎𝑛𝑑𝑖𝑑𝑎𝑡𝑒𝐿𝑎𝑛𝑒 + 0. 8𝐻𝑜𝑟𝑠𝑒𝐿𝑎𝑛𝑒
If the uma doesn’t have enough lane space to either side to reach a candidate, the candidate is discarded. The remaining candidates are scored and the lowest scored candidate is accepted.
𝑆𝑐𝑜𝑟𝑒 = 𝑎𝑏𝑠(𝐶𝑎𝑛𝑑𝑖𝑑𝑎𝑡𝑒𝐿𝑎𝑛𝑒 − 𝐿𝑎𝑛𝑒𝐷𝑖𝑠𝑡𝑎𝑛𝑐𝑒) * 𝑃ℎ𝑎𝑠𝑒𝐶𝑜𝑒𝑓 Phase coefficient differs by whether the candidate is inside or outside. Early-race: In = 1.0, Out = 100.0 Mid-race: In = 1.0, Out = 1.0 Late-race, last spurt: In = 1.0, Out =1.15
If no candidate is good, the current lane is accepted as a candidate.
Lastly, if the candidate accepted is to the inside of the extra move lane, and there is enough lane space to move to the extra move lane, the extra move lane is used as target lane. Otherwise the accepted candidate is used.
Fixed Mode
Fixed mode is used when affected by skill effects that affect target lane. In fixed mode, target lane is the lane specified by skill effect as long as the uma is not blocked from moving towards it.
Extra Move Lane (Final Corner Lane)
Upon entering final corner, the extra move lane is set to 𝑐𝑙𝑎𝑚𝑝(𝐿𝑎𝑛𝑒𝐷𝑖𝑠𝑡𝑎𝑛𝑐𝑒/0. 1, 0, 1) * 0. 5 + 𝑟𝑎𝑛𝑑𝑜𝑚(0. 1)
Note that before the 1st anniversary, this used to activate on the final straight instead of the final corner.
Blocking
Front Blocking
The condition for a uma to block in front is 0 < 𝐷𝑖𝑠𝑡𝑎𝑛𝑐𝑒𝐺𝑎𝑝 < 2𝑚
𝑎𝑏𝑠(𝐿𝑎𝑛𝑒𝐺𝑎𝑝) <= (1. 0 − 0. 6 * 𝐷𝑖𝑠𝑡𝑎𝑛𝑐𝑒𝐺𝑎𝑝/2𝑚) * 0. 75𝐻𝑜𝑟𝑠𝑒𝐿𝑎𝑛𝑒
This means the lane gap needed to be blocked is 0.3 horse lane when the other uma is 2m ahead, and 0.75 horse lane when 0m away. If multiple uma satisfy this criteria, the one with lowest distance gap is the blocking uma.
While blocked in the front, uma’s speed is limited to (0. 988 + 0. 012 (𝐷𝑖𝑠𝑡𝑎𝑛𝑐𝑒𝐺𝑎𝑝/2𝑚)) 𝑆𝑝𝑒𝑒𝑑𝐵𝑙𝑜𝑐𝑘𝐹𝑟𝑜𝑛𝑡.
Side Blocking
The condition for a uma to block on either side is 𝑎𝑏𝑠(𝐷𝑖𝑠𝑡𝑎𝑛𝑐𝑒𝐺𝑎𝑝) < 1. 05𝑚 𝑎𝑏𝑠(𝐿𝑎𝑛𝑒𝐺𝑎𝑝) < 2𝐻𝑜𝑟𝑠𝑒𝐿𝑎𝑛𝑒 The uma with lowest lane gap determines how much space is available for movement.
Certain skills require being blocked on “all” sides. It means being blocked in front and on at least one side.
Overlapping
Two uma are considered overlapping if 𝑎𝑏𝑠(𝐷𝑖𝑠𝑡𝑎𝑛𝑐𝑒𝐺𝑎𝑝) < 0. 4𝑚 𝑎𝑏𝑠(𝐿𝑎𝑛𝑒𝐺𝑎𝑝) < 0. 4𝐻𝑜𝑟𝑠𝑒𝐿𝑎𝑛𝑒
When 2 uma overlap, the one on the outside will be immediately bumped 0.4 horse lane away. This also triggers a target lane update for the uma outside.
Vision
A uma is visible if 𝐷𝑖𝑠𝑡𝑎𝑛𝑐𝑒𝐺𝑎𝑝 <= 𝑉𝑖𝑠𝑖𝑏𝑙𝑒𝐷𝑖𝑠𝑡𝑎𝑛𝑐𝑒 𝑎𝑏𝑠(𝐿𝑎𝑛𝑒𝐺𝑎𝑝) <= ((𝐷𝑖𝑠𝑡𝑎𝑛𝑐𝑒𝐺𝑎𝑝/𝑉𝑖𝑠𝑖𝑏𝑙𝑒𝐷𝑖𝑠𝑡𝑎𝑛𝑐𝑒) * 11. 5𝐻𝑜𝑟𝑠𝑒𝐿𝑎𝑛𝑒 + 2𝐻𝑜𝑟𝑠𝑒𝐿𝑎𝑛𝑒)/2 Visible distance starts at 20m and is only modified by skills.
The formula suggests that the maximum width of the vision cone (triangle) is a constant unaffected by visible distance.
Start Delay, Late Start
When the race starts, a uma starts running after a random delay of up to 0.1s. The delay is NOT affected by wisdom. If the delay is more than 0.08s, it is considered a late start. If the delay is less than 0.02s, you gain a start dash score bonus in the team stadium.
The following skills changes the random start delay to a fixed number:
アタシに指図しないで!!(0.085)
超遊び癖(0.1)
The following skills multiply the start delay:
- Concentration コンセントレーション 0.4x
- Focus 集中力 0.9x
- Gatekept ゲート難 1.5x
When start delay is less than 1 frame, acceleration and HP consumption are unaffected. The distance traveled on the first frame is 𝑆𝑝𝑒𝑒𝑑𝐴𝑓𝑡𝑒𝑟𝐴𝑐𝑐𝑒𝑙 * (1 𝑓𝑟𝑎𝑚𝑒 − 𝑆𝑡𝑎𝑟𝑡𝐷𝑒𝑙𝑎𝑦).
When start delay is greater than 1 frame, no acceleration, HP consumption, or distance traveled calculation would take place. The loss of acceleration is particularly significant and may cause a uma to become blocked. Note that if the start delay is between 1 frame (0.066s) to 0.08s, there would be no late start warning.
Position Keeping
Position keeping affects target speed between section 1 to 10. There are 5 modes besides normal mode. For front runners, there are 2 modes: speed up and overtake. For non-front runners, there are 2 modes: pace up and pace down. Then there is a shared pace up Ex mode.
When in normal mode, a check to enter non-normal modes is performed every 2 seconds. The check consists of an entry condition and sometimes a wisdom check. Uma returns to normal mode once exit conditions are fulfilled, or after she has run in this mode for the length of 1 section (3 sections for oonige; distance of 1 section is rounded down before multiplying). Once exited, there is a 1 second cooldown (followed by the aforementioned 2 seconds interval for a total of 3 seconds) before the checks are run again.
Pacemaker
Position keep modes of non-front runner modes are determined based on their distance from the pacemaker. The exact mechanism a pacemaker gets chosen is unclear. The only known information is that a range parameter 10.0 (meters?) and a count parameter 2(.0?) are used. Prior to the 1.5 anniversary update, pacemaker was the first place uma among the most forward strategy.
Front Runner Modes
Front runners try to take first place and maintain a lead ahead of the second place.
Speed up mode
Target speed modifier: 1.04x Entry condition: uma is first place and less than 4.5m (front runner) / 17.5m (oonige) ahead of the uma behind. The distance is increased to 12.5m if she is the only front runner after the 1.5th anniversary. Pass the wisdom check. 𝐶ℎ𝑎𝑛𝑐𝑒 = 20 𝑙𝑜𝑔 10 (𝑊𝑖𝑧𝑆𝑡𝑎𝑡 0. 1) [%]
Exit condition: uma is more than 4.5m (front runner) / 17.5m (oonige) ahead of the second place. The distance is increased to 12.5m if she is the only front runner after the 1.5th anniversary.
Overtake mode
Not to be confused with overtake target lane mode. Target speed modifier: 1.05x Entry condition: uma is not first place within the same strategy. Pass the wisdom check. 𝐶ℎ𝑎𝑛𝑐𝑒 = 20 𝑙𝑜𝑔 10 (𝑊𝑖𝑧𝑆𝑡𝑎𝑡 0. 1) [%]
Exit condition: uma is 10m (27.5m for oonige) ahead of second place among uma who have the same strategy.
Non-Front Runner Modes
Non-front runners try to maintain their distance with the pacemaker between 2 distance thresholds. The distance thresholds are: 𝐶𝑜𝑢𝑟𝑠𝑒𝐹𝑎𝑐𝑡𝑜𝑟 = 0. 0008 (𝐶𝑜𝑢𝑟𝑠𝑒𝐿𝑒𝑛𝑔𝑡ℎ − 1000) + 1. 0 Pace Chaser: 𝑀𝑖𝑛 = 3. 0 [𝑚] 𝑀𝑎𝑥 = 5. 0 𝐶𝑜𝑢𝑟𝑠𝑒𝐹𝑎𝑐𝑡𝑜𝑟 [𝑚] Late Surger: 𝑀𝑖𝑛 = 6. 5 𝐶𝑜𝑢𝑟𝑠𝑒𝐹𝑎𝑐𝑡𝑜𝑟 [𝑚] 𝑀𝑎𝑥 = 7. 0 𝐶𝑜𝑢𝑟𝑠𝑒𝐹𝑎𝑐𝑡𝑜𝑟 [𝑚] End Closer: 𝑀𝑖𝑛 = 7. 5 𝐶𝑜𝑢𝑟𝑠𝑒𝐹𝑎𝑐𝑡𝑜𝑟 [𝑚] 𝑀𝑎𝑥 = 8. 0 𝐶𝑜𝑢𝑟𝑠𝑒𝐹𝑎𝑐𝑡𝑜𝑟 [𝑚]
Pace up mode
Target speed modifier: 1.04x Entry condition: uma’s distance from the 1st place is above the maximum distance. Pass the wisdom check. 𝐶ℎ𝑎𝑛𝑐𝑒 = 15 𝑙𝑜𝑔 10 (𝑊𝑖𝑧𝑆𝑡𝑎𝑡 0. 1) [%]
Exit condition: uma’s distance from the 1st place is below a random value between the thresholds.
Pace down mode
Target speed modifier: 0.945x if in the mid-race after 1.5 anniversary; 0.915x otherwise Entry condition: uma’s distance from the 1st place is below the minimum distance. No target speed or current speed up skill effect is active.
Exit condition: uma’s distance from the 1st place is above a random value between the thresholds. After the 1.5 anniversary, if in mid-race, the maximum distance is replaced with 𝑙𝑒𝑟𝑝(𝑀𝑖𝑛, 𝑀𝑎𝑥, 0. 5) before rolling the random value. Or when uma is affected by a skill that increases her current speed or target speed. (Debuffs used to also remove pace down mode. [example] This was fixed on 2022-08-09.)
Pace Up Ex Mode
Target speed modifier: 2.0x Entry condition for front runners: another uma whose strategy should be behind is ahead of the uma. Entry condition for others: pacemaker’s strategy should be behind the uma. Exit condition: no other uma whose strategy should be behind is ahead of the uma. This mode is prioritized over all other position keep modes. This mode was added after the 1.5 anniversary.
Rushed, Kakari 掛かり, Temptation
Each uma rolls for the rushed state before the race starts. The chance is affected by wisdom.
𝑅𝑢𝑠ℎ𝑒𝑑𝐶ℎ𝑎𝑛𝑐𝑒 = (6. 5/𝑙𝑜𝑔 10 (0. 1 * 𝑊𝑖𝑧𝑆𝑡𝑎𝑡 + 1))^2 %
Examples:
- 300 Wiz, 19.00%
- 600 Wiz, 13.26%
- 900 Wiz, 11.01%
- 1200 Wiz, 9.74%
自制心 reduces the chance by flat 3%. i.e. 19% to 16%.
If a uma were to enter the rushed state, she would do so in a random section between 2 to 9. She will enter the rushed state as soon as she enters the section.
While rushed, HP consumption is increased to 1.6x. Rushed also forces the uma to change their position keeping strategy and succeed in all position keep wisdom rolls. Worth noting that this change in position keeping strategy only affects the AI, and does not affect things like strategy coefficient when calculating base target speed.
- Front Runners will enter speed up mode
- Pace Chasers will become runners
- Late Surgers have a 75% chance to become runners, 25% chance to become leaders.
- End Closers have a 70% chance to become runners, 20% chance to become leaders, 10% chance to become betweeners.
Every 3 seconds while rushed, the uma has a 55% chance to snap out of it. Rushed ends if the uma is still affected after 12 seconds. Debuffs worsening the rushed state extends the timer by 5 seconds, this effect can be applied multiple times.
Spot Struggle | Lead Competition 位置取り争い
Note: Info in this section is inferred from the game’s parameter file, which is less concretely confirmed as results from reverse engineering. In the code, this mechanic is referred to as CompeteTop.
When there are 2 or more front runners or oonige, lead competition may be triggered between 150m from start to the 6th section.
For front runners, their relative position must be: 𝐷𝑖𝑠𝑡𝑎𝑛𝑐𝑒𝐺𝑎𝑝 < 3. 75𝑚 𝐿𝑎𝑛𝑒𝐺𝑎𝑝 < 0. 165 * 𝐶𝑜𝑢𝑟𝑠𝑒𝑊𝑖𝑑𝑡ℎ
For oonige, their relative position must be : 𝐷𝑖𝑠𝑡𝑎𝑛𝑐𝑒𝐺𝑎𝑝 < 5. 0𝑚 𝐿𝑎𝑛𝑒𝐺𝑎𝑝 < 0. 416 * 𝐶𝑜𝑢𝑟𝑠𝑒𝑊𝑖𝑑𝑡ℎ
Front runners may compete with each other, oonige may compete with each other, but a regular front runner does not compete with an oonige.
During lead competition, the front runners gain additional speed based on their guts stat.
𝑇𝑎𝑟𝑔𝑒𝑡𝑆𝑝𝑒𝑒𝑑 += (500 𝐺𝑢𝑡𝑠𝑆𝑡𝑎𝑡)0.6^ 0. 0001[𝑚/𝑠]
𝐷𝑢𝑟𝑎𝑡𝑖𝑜𝑛 = (700 𝐺𝑢𝑡𝑠𝑆𝑡𝑎𝑡)0.5^ 0. 012[𝑠] Lead competition always ends when the 9th section is reached, regardless of whether duration has expired.
During lead competition, the HP consumption rate is multiplied by the following number:
- Front Runner: 1.4x
- Front Runner + Rushed: 3.6x
- Oonige: 3.5x
- Oonige + Rushed: 7.7x
Dueling | Compete Fight 追い比べ
Note: Info in this section is inferred from the game’s parameter file, which is less concretely confirmed as results from reverse engineering.
On the final straight of a race, competition may occur when multiple uma are close to each other. A uma is considered another uma’s competition target if 𝑎𝑏𝑠(𝐷𝑖𝑠𝑡𝑎𝑛𝑐𝑒𝐺𝑎𝑝) < 3. 0𝑚 𝑎𝑏𝑠(𝐿𝑎𝑛𝑒𝐺𝑎𝑝) < 0. 25 𝐶𝑜𝑢𝑟𝑠𝑒𝑊𝑖𝑑𝑡ℎ
If the competition target remains a target for more than 2 seconds, is top 50% in placement, and 𝑎𝑏𝑠(𝑆𝑝𝑒𝑒𝑑𝐺𝑎𝑝) < 0. 6𝑚/𝑠 , a competition is triggered. The uma gains speed and acceleration based on her guts stat.
𝑇𝑎𝑟𝑔𝑒𝑡𝑆𝑝𝑒𝑒𝑑 += (200 𝐺𝑢𝑡𝑠𝑆𝑡𝑎𝑡)0.708^ 0. 0001[𝑚/𝑠]
𝐴𝑐𝑐𝑒𝑙 += (160 𝐺𝑢𝑡𝑠𝑆𝑡𝑎𝑡)0.59^ 0. 0001[𝑚/𝑠]
Competition cannot occur when HP is less than 15%, and will end if HP is reduced to below 5%.
Charge Up / Fully Charged | Conserve Power /
Release 足を貯める / 脚色十分
Note: Info in this section is inferred from the game’s parameter file, which is less concretely confirmed as results from reverse engineering.
The uma must have base power + skills bonus greater than 1200 to conserve power.
The following are mostly speculation: Every 1.5 seconds (possibly scaling with course length?), the uma checks its state to increase or decrease conserved power.
Modes that increase conserved power:
- ID 1. Position Keep Pace Down (6.7)
- ID 2. Position Keep Normal Mode (4.2) Modes that decrease conserved power:
- ID 3. Lead Competition (0.95)
- ID 4. Rushed (0.8)
When conserved power is decreased, the following 2 categories of skill ability type seem to also play an unknown role:
- Lane Move Speed Up (28)
- Speed Up (27, 31, 21, 22)
If there is enough conserved power, acceleration is increased at the start of the last spurt. 𝐴𝑐𝑐𝑒𝑙 = 𝑠𝑞𝑟𝑡((𝑃𝑜𝑤𝑒𝑟𝑆𝑡𝑎𝑡 − 1200) 130) 0. 001 𝑆𝑡𝑟𝑎𝑡𝑒𝑔𝑦𝐷𝑖𝑠𝑡𝑎𝑛𝑐𝑒𝐶𝑜𝑒𝑓𝑓𝑖𝑐𝑖𝑒𝑛𝑡 𝐴𝑐𝑡𝑖𝑣𝑖𝑡𝑦𝐶𝑜𝑒𝑓𝑓𝑖𝑐𝑖𝑒𝑛𝑡 The power stat is base power (not halved over 1200) + skill bonus. The strategy-distance coefficient is
Short Mile Mid Long
Front Runner 1.0 1.0 1.0 1.0
Pace Chaser 0.7 0.8 0.9 0.9
Late Surger 0.75 0.7 0.875 1.0
End Closer 0.7 0.75 0.86 0.9
The activity coefficient is
- ID 3. Lead competition, 0.98
- ID 4. Rushed, 0.8
The duration of the acceleration is unclear, but may depend on how much power has been conserved. It lasts about 3 seconds based on observation. The following coefficients seem to be related: 𝐴𝑐𝑡𝑖𝑣𝑖𝑡𝑦𝑇𝑖𝑚𝑒𝐶𝑜𝑒𝑓 = 1450
Distance ActivityTimeDistanceTypeCoef
Short 0.45
Mile 1.0
Mid 0.875
Long 0.8
Compete Before Spurt 位置取り調整
Note: Info in this section is inferred from the game’s parameter file, which is less concretely confirmed as results from reverse engineering. The details are still under investigation.
Competing before spurt occurs between section 11 and 15 of the race. Every 2 seconds, a check is performed to see if she is too far from the first place (scaling with wisdom), or has other umas nearby (scaling with guts, number of nearby uma, number of nearby uma with the same strategy). If the check succeeds, she enters a competition mode.
The exact condition is unclear. It involves the following threshold and a number of other parameters. Distance from the lead threshold (should scale with course distance)
Strategy Distance
Oonige 0.0
Nige 0.0
Senkou 2.5
Sashi 5.0
Oikomi 10.0
If the competition mode is activated, the uma speeds up at the cost of stamina for 2 seconds, then enters a cooldown of 1 second.
𝑇𝑎𝑟𝑔𝑒𝑡𝑆𝑝𝑒𝑒𝑑𝐼𝑛𝑐𝑟𝑒𝑎𝑠𝑒 = ((𝑃𝑜𝑤𝑒𝑟/1500)0.5^ 2. 0 + (𝐺𝑢𝑡𝑠/3000)0.2) 0. 1 * 𝑆𝑡𝑟𝑎𝑡𝑒𝑔𝑦𝐶𝑜𝑒𝑓𝑓𝑖𝑐𝑖𝑒𝑛𝑡
Strategy Strategy Coefficient
Oonige 0.2
Nige 0.8
Senkou 1.0
Sashi 1.0
Oikomi 1.0
𝑆𝑡𝑎𝑚𝑖𝑛𝑎𝐶𝑜𝑛𝑠𝑢𝑚𝑝𝑡𝑖𝑜𝑛 = 20 * (𝑆𝑡𝑟𝑎𝑡𝑒𝑔𝑦𝐶𝑜𝑒𝑓𝑓𝑖𝑐𝑖𝑒𝑛𝑡 * 𝐷𝑖𝑠𝑡𝑎𝑛𝑐𝑒𝐶𝑜𝑒𝑓𝑓𝑖𝑐𝑖𝑒𝑛𝑡 + 𝑁𝑒𝑎𝑟𝐹𝑎𝑐𝑡𝑜𝑟)
Stamina consumption strategy coefficient
Strategy Stamina Consumption Coefficient
Oonige 1.5
Nige 1.2
Senkou 1.0
Sashi 1.0
Oikomi 1.0
Stamina consumption course distance coefficient
- Distance < 1401m, 0.3x
- Distance < 1801m, 0.3x [sic]
- Distance < 2101m, 0.5x
- Distance < 2201m, 0.8x
- Distance < 2401m, 1.0x
- Distance < 2601m, 1.1x
- Distance >= 2601m, 1.2x Near factor of 0.5 is applied if the uma is NOT far from the first place. In other words the mode is activated due to having uma nearby alone.
If a front runner uma does not have another uma with the same strategy within 10m, their bonus is further multiplied by the following factor. (There is an unexplained 20% threshold for this bonus.)
Strategy Strategy Coefficient
Oonige 2.0
Nige 1.1
Stamina Keep 持久力温存
The uma will try to conserve a random amount of HP that is 1.035-1.04x the required amount to finish the race. Every 2 seconds, the uma checks if she has enough HP left. If she does not
have enough HP, there is a chance of 30% * (𝑊𝑖𝑠𝑑𝑜𝑚/1000+ 𝑊𝑖𝑠𝑑𝑜𝑚0.03)for her to notice and enter stamina keep mode. During stamina keep mode, the uma will not participate in the competition. (The activation chance formula is highly speculative. We know that there are 3 parameters 30%, 1000 as a divisor, and 0.03 as an exponent. Packet capture testing has yielded 93/100 immediate activations with 1000 wisdom, which is higher than what the current formula predicts.)
Activating a HP recovery skill will reset the stamina keeping state, allowing for the competition to activate if HP is now sufficient.
Secure Lead リード確保
Note: Info in this section is inferred from the game’s parameter file, which is less concretely confirmed as results from reverse engineering. The details are still under investigation.
Secure lead can occur between section 11 and 15 of the race. It occurs when the uma’s lead against another uma who should be further behind according to their strategy is less than desirable. Every 2 seconds, if the lead is less than desirable, there is a 20% chance (should scale with wisdom, but the mechanics is unknown) for the uma to attempt to secure the lead.
𝐷𝑒𝑠𝑖𝑟𝑎𝑏𝑙𝑒𝐿𝑒𝑎𝑑 = 𝑆𝑡𝑟𝑎𝑡𝑒𝑔𝑦𝐶𝑜𝑒𝑓𝑓𝑖𝑐𝑖𝑒𝑛𝑡 + 0. 0003 * (𝐶𝑜𝑢𝑟𝑠𝑒𝐷𝑖𝑠𝑡𝑎𝑛𝑐𝑒 + 1000)[𝑚] Desirable lead strategy coefficient
Nige Senkou Sashi Oikomi
Oonige 2.0 7.0 8.0 8.0
Nige 4.0 8.0 8.0
Senkou 5.0 6.0
Sashi 3.0
The uma speeds up for 2 seconds at the cost of stamina, then enters a cooldown of 1 second.
𝑇𝑎𝑟𝑔𝑒𝑡𝑆𝑝𝑒𝑒𝑑𝐼𝑛𝑐𝑟𝑒𝑎𝑠𝑒 = (𝐺𝑢𝑡𝑠/2000)0.5^ 0. 3 𝑆𝑡𝑟𝑎𝑡𝑒𝑔𝑦𝐶𝑜𝑒𝑓𝑓𝑖𝑐𝑖𝑒𝑛𝑡[𝑚/𝑠]
Strategy Strategy Coefficient
Oonige 0.2
Nige 1.0
Senkou 1.0
Sashi 0.8
𝑆𝑡𝑎𝑚𝑖𝑛𝑎𝐶𝑜𝑛𝑠𝑢𝑚𝑝𝑡𝑖𝑜𝑛 = 20 𝑆𝑡𝑟𝑎𝑡𝑒𝑔𝑦𝐶𝑜𝑒𝑓𝑓𝑖𝑐𝑖𝑒𝑛𝑡 𝐶𝑜𝑢𝑟𝑠𝑒𝐷𝑖𝑠𝑡𝑎𝑛𝑐𝑒𝐶𝑜𝑒𝑓𝑓𝑖𝑐𝑖𝑒𝑛𝑡 Stamina consumption strategy coefficient
Strategy Stamina Consumption Coefficient
Oonige 1.2
Nige 1.0
Senkou 0.8
Sashi 0.8
Stamina consumption course distance coefficient
- Distance < 1401m, 0.3x
- Distance < 1801m, 0.3x [sic]
- Distance < 2101m, 0.5x
- Distance < 2201m, 0.8x
- Distance < 2401m, 1.0x
- Distance < 2601m, 1.1x
- Distance >= 2601m, 1.2x
If a nige uma does not have another uma with the same strategy within 10m, their bonus is further multiplied by the following factor. (There is an unexplained 20% threshold for this bonus.)
Strategy Strategy Coefficient
Oonige 7.0
Nige 2.0
Stamina Limit Break スタミナ勝負
Note: Info in this section is inferred from the game’s parameter file, which is less concretely confirmed as results from reverse engineering. The details are still under investigation.
If the uma’s base stamina + skills bonus is higher than 1200, they will gain an additional target speed buff upon reaching max spurt speed. The buff lasts till the end of the race.
𝑇𝑎𝑟𝑔𝑒𝑡𝑆𝑝𝑒𝑒𝑑𝐵𝑢𝑓𝑓 = 𝑠𝑞𝑟𝑡(𝑆𝑡𝑎𝑚𝑖𝑛𝑎𝑆𝑡𝑎𝑡 − 1200) 0. 0085 𝐷𝑖𝑠𝑡𝑎𝑛𝑐𝑒𝐹𝑎𝑐𝑡𝑜𝑟 * 𝑅𝑎𝑛𝑑𝑜𝑚𝐹𝑎𝑐𝑡𝑜𝑟[𝑚/𝑠]
Distance Factor is determined by the racecourse distance:
- Distance < 2101m, 0.0x
- Distance < 2201m, 0.5x
- Distance < 2401m, 1.0x
- Distance < 2601m, 1.5x; 1.2x before 2024-10-29
- Distance >= 2601m, 1.8x; 1.5x before 2024-10-29
How the Random Factor is calculated is unclear. The parameter file lists "TargetSpeedRandomTableChangeProbabilityByPower": 500 and the following table.
Table Type Probability Coefficient
0 500000 0.98-1.00
1 300000 0.95-0.98
2 200000 1.00-1.02
Race Time
The race time displayed on the scoreboard is different from the actual race time used for internal calculation or animation. 𝐷𝑖𝑠𝑝𝑙𝑎𝑦𝑒𝑑𝑇𝑖𝑚𝑒 = 𝐴𝑐𝑡𝑢𝑎𝑙𝑇𝑖𝑚𝑒 * 1. 18
There is a lower bound to each race’s display time. For example, 2400m Tokyo turf races have a lower bound of 2m21s6. Should a uma break the lower bound, the displayed time will be the lower bound plus up to 1 second. There is an upper bound too.
Race Courses
Information in this section is likely useless to anyone other than a data miner who wants to build a race simulator. The only takeaway for casual readers is that running on an outside lane causes your uma to travel additional distances.
Position, World Transform
Each race course consists of 1001 “keyframes”, corresponding to 1000 equally distanced segments. Each keyframe consists of a 3D coordinate, and a rotation quaternion. Given course distance traveled, the position and rotation at 𝐿𝑎𝑛𝑒 = 0is calculated by linearly interpolating between keyframes. Then the lane distance is taken into account by moving outside to the left of the current rotation if course is clockwise, or to the right if counter-clockwise by 11.25m per course width. 𝑓𝑟𝑎𝑚𝑒 = 𝐷𝑖𝑠𝑡𝑎𝑛𝑐𝑒/𝐶𝑜𝑢𝑟𝑠𝑒𝐷𝑖𝑠𝑡𝑎𝑛𝑐𝑒 * 1000 𝑃𝑜𝑠𝑙𝑎𝑛𝑒𝑂𝑟𝑖𝑔𝑖𝑛 = 𝑙𝑒𝑟𝑝(𝑃𝑜𝑠[𝑓𝑙𝑜𝑜𝑟(𝑓𝑟𝑎𝑚𝑒)], 𝑃𝑜𝑠[𝑐𝑒𝑖𝑙(𝑓𝑟𝑎𝑚𝑒)], 𝑓𝑟𝑎𝑚𝑒 − 𝑓𝑙𝑜𝑜𝑟(𝑓𝑟𝑎𝑚𝑒))
𝑃𝑜𝑠 = 𝑃𝑜𝑠𝑙𝑎𝑛𝑒𝑂𝑟𝑖𝑔𝑖𝑛 + 𝐶𝑜𝑢𝑟𝑠𝑒𝑅𝑜𝑡𝑎𝑡𝑖𝑜𝑛 × 𝑅𝑜𝑡𝑎𝑡𝑖𝑜𝑛𝑙𝑎𝑛𝑒𝑂𝑟𝑖𝑔𝑖𝑛 × (11. 25𝑚 * 𝐿𝑎𝑛𝑒)
Course Distance to World Transform
The distance on the xz (horizontal) plane between two world transforms, divided by the difference in course distance, is the ratio of course distance to world transform.
𝑟𝑎𝑡𝑖𝑜 = 𝐷𝑖𝑠𝑡𝑎𝑛𝑐𝑒 (^) 𝑤𝑜𝑟𝑙𝑑/𝐷𝑖𝑠𝑡𝑎𝑛𝑐𝑒 (^) 𝑐𝑜𝑢𝑟𝑠𝑒 The ratio between 0m and 1m travelled, at lane origin, is used as the base ratio for the race course. The base ratio ranges from 0.96 to 1.06 among race courses that are currently implemented. Each frame’s ratio of course distance to world transform is also calculated. The course distance traveled being added at each frame is reduced if the ratio from the previous frame is greater than base ratio. 𝐷𝑖𝑠𝑡𝑎𝑛𝑐𝑒𝐴𝑑𝑑𝑤𝑜𝑟𝑙𝑑 = 𝐷𝑖𝑠𝑡𝑎𝑛𝑐𝑒𝐴𝑑𝑑𝑐𝑜𝑢𝑟𝑠𝑒/𝑚𝑎𝑥(1, 𝑟𝑎𝑡𝑖𝑜𝑝𝑟𝑒𝑣/𝑟𝑎𝑡𝑖𝑜𝑏𝑎𝑠𝑒) In practice this means running on the outside lane while cornering, or moving lanes, would result in travelling additional distance, modeled by less distance traveled.
Slope (Outdated)
This section is outdated by the 1st anniversary update, where most race tracks got adjusted. For current effect, see Course Events. A uma’s rotation is converted to euler angle to determine the slope at any point of the race.
𝑆𝑙𝑜𝑝𝑒𝑃𝑒𝑟 = 𝑡𝑎𝑛(𝑠𝑙𝑜𝑝𝑒𝐴𝑛𝑔𝑙𝑒) * 100
A slope is considered uphill if 𝑆𝑙𝑜𝑝𝑒𝑃𝑒𝑟 > 1. 0, or downhill if 𝑆𝑙𝑜𝑝𝑒𝑃𝑒𝑟 <− 1. 0. In other words, when there is more than 1m altitude difference over 100m distance.
Course Events
Some parameters of a race course are defined as events that happen during a course. Each event is defined by its trigger location, with some having additional attributes.
ID Name Additional Attribute Notes
0 Corner Corner Number (1-4); Distance
1 Ground Change Change of ground type from turf to dirt.
2 Straight Start or End; Front Type (Front=1, Across=2, False Straight=3)
Each straight is defined by 2 events, the start and the end location.
3 Lane Max Change New value Change of the max lane value.
4 First BGM Landscape
Events of the same type ID existed before landscape mode was introduced, but their previous purpose is unknown. 5 Second BGM Landscape
6 Jikkyo Trigger Unused
7 Move Lane Point In races without this parameter, the entry point of the initial corner is used. Only seen in Niigata 1000m.
8 First BGM
9 Second BGM
10 Event Crowd Unused
11 Slope SlopePer; Length
Misc Notes
Information in this section are just notes for my own reference.
Initialization
During race initialization, the following calculations are done in the listed order:
1. (Before initialization) Calculate base stats
2. Calculate skill activation chance and determine whether skills can activate
3. Activate all skills that would activate out of gate
4. Use item (an unimplemented item could prevent late start)
5. Set starting location based off gate number
6. Calculate start delay
7. Calculate adjusted stats
8. Convert stamina to HP
9. Set starting speed
10. Determine rushed
Frame
Each frame, the calculations are done in the listed order: (not complete list)
1. Pre-Update a. Check end of corner
2. Update a. Activate skills b. Recover HP by skills c. Update last spurt state d. Update target speed e. Calculate acceleration f. Update phase g. Calculate distance and position h. Check for slope
3. Post-Update
4. Events a. Check start of corner