diff --git a/zenno/src/routes/doc/mdb/+page.svelte b/zenno/src/routes/doc/mdb/+page.svelte index 76f1d3f..73e80ec 100644 --- a/zenno/src/routes/doc/mdb/+page.svelte +++ b/zenno/src/routes/doc/mdb/+page.svelte @@ -17,8 +17,107 @@ } }); + const raceGroups = [ + [1, 'Common'], + [2, 'Daily Race'], + [3, '"Training Practice"'], + [4, '"Story Condition"'], + [5, '"Team Building"'], + [6, 'Practice'], + [7, 'Career-Exclusive'], + [8, 'Legend Race'], + [9, 'Team Trials'], + [10, 'Unity Cup Team Race'], + [11, "Champions' Meet"], + [12, 'Room Match'], + [13, '"Challenge Match"'], + [14, 'League of Heroes Race'], + [61, 'Custom G1'], + ] as const; + + const raceGrades = [ + [100, 'G1'], + [200, 'G2'], + [300, 'G3'], + [400, 'OP'], + [700, 'Pre-OP'], + [800, 'Maiden'], + [900, 'Debut'], + [999, 'Daily Race or Room Match (?)'], + [1000, 'Unity Cup Team Race (?)'], + ] as const; + + const raceTimes = [ + [1, 'Morning (unused)'], + [2, 'Daytime'], + [3, 'Evening'], + [4, 'Night'], + ] as const; + + const raceInitialLanes = [ + [1, 9, 0.03333333], + [2, 0, 0], + [3, 14, 0.10333333], + [4, 8, 0.03333333], + ] as const; + + const raceAreas = [ + [0, 'Hokkaido'], + [1, 'Tohoku'], + [2, 'Kanto'], + [3, 'Western Japan'], + [4, 'Kokura'], + [5, 'France'], + [6, 'America'], + ] as const; + + const raceLoops = [ + [1, 'None'], + [2, 'Inner'], + [3, 'Outer'], + [4, 'Outer→Inner'], + ] as const; + + const raceRotations = [ + [1, 'Right'], + [2, 'Left'], + [3, 'Rightward Stretch (unused)'], + [4, 'Leftward Stretch'], + ] as const; + + const raceCourseThresholds = [ + [1, 1, 0], + [2, 2, 0], + [3, 3, 0], + [4, 4, 0], + [5, 5, 0], + [6, 1, 2], + [7, 2, 3], + [8, 2, 4], + [9, 3, 5], + [10, 2, 5], + [11, 4, 5], + ] as const; + + const raceSaddleTypes = [ + [0, 'Special'], + [1, 'G3'], + [2, 'G2'], + [3, 'G1'], + ] as const; + + const racePermissions = [ + [1, 'Junior'], + [2, 'Classic'], + [3, 'Classic and Senior'], + [4, 'Senior'], + [5, 'Finale'], + ] as const; + const skills = $derived({ rickey: skillMap.get(100981), + right1: skillMap.get(200012), + left1: skillMap.get(200022), fall2: skillMap.get(200191), fall1: skillMap.get(200192), fallX: skillMap.get(200193), @@ -330,6 +429,362 @@ >, but a few categories that have useful strings are missing from there.

+ Races +

First, some terminology, as the game uses it internally. (Some UI phrasing disagrees.)

+

+ A race is an organized running competition, typically held annually. A race instance is a single holding of a + race at a specific date and time; this includes special race instances like Team Trials races, Aim for the Stars races, + &c. Race instances are held on a given race course, which is a fixed-length segment of a physical location called a + race track. A win saddle is a given horse's victory of a race or a specific group of races, e.g. Classic Triple Crown + or Dual Grand Prix. This section will cover races, race instances, race tracks, race courses, and win saddles. +

+

+ text_data categories relevant to races include: +

+ + + Race Info +

+ Races are defined in race, which is quite a direct name innit. +

+ +

+ Some races are ostensibly defined twice to account for variant races run during some characters' careers, e.g. Maruzensky's + five opponent Spring Stakes, McQueen/Ryan/Rice's Kyoto Takarazuka Kinen, &c. +

+ + Race Instances +

+ The table is race_instance. +

+ +

+ Similarly to races, some race instances are ostensibly defined twice to account for variant races run during some characters' + careers. +

+ + Race Tracks +

+ Since race tracks are the physical locations where races are held, there are not many rows in race_track. Most of + its purpose is to define appearance characteristics, but some fields are mechanically relevant. +

+ + + Race Courses +

+ Race courses are physical segments of race tracks. They are defined in race_course_set. +

+

+ Most tracks have one or two turf loops (the "(Inner)" and "(Outer)" or sometimes "(Outer→Inner)") and one dirt loop. The + length of a race course is determined solely by the position of the gates: since the race course is a physical structure with + the audience stands in a specific location, and since said audience wants to see the race finish clearly, courses of all + lengths end at the same place on the front stretch. The straight opposite the front stretch is called the backstretch. Corners + are counted backward from the front stretch in the order 4, 3, 2, 1; all races except Ibis Summer Dash include corners 3 and + 4, while long and sometimes medium races run corners multiple times. Some courses start on an extra segment of the track which + is neither straight nor corner (which means straight_random==1 skills won't fire there). +

+ +

+ Characteristics like straight and corner locations, slopes, lane max changes, &c. are not in the mdb. They are defined + as assets instead and must be extracted using special tools. +

+ + Win Saddles +

+ single_mode_wins_saddle defines the awards given to the horse (not the player) for winning a race or specific group + of races. These are the medals displayed as important wins for a horse at the end of a career. They are now purely aesthetic, but + I am documenting them anyway because I have the notes already since they used to determine affinity. +

+ + + Single Mode Program +

+ The table single_mode_program defines the race instances offered each turn in a career. Confusingly, races that permit + both classic and senior year horses are only defined here once. +

+ +

+ I was unable to identify whether any of the columns indicate maiden races, despite the UI restrictions on when they can + appear. +

+ Skills

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