package main import ( _ "embed" "strings" "testing" "git.sunturtle.xyz/zephyr/horse" "github.com/google/go-cmp/cmp" ) //go:embed testdata/v2.5.1.json var v2_5_1 string //go:embed testdata/v2.5.2-beta2.json var v2_5_2_beta2 string //go:embed testdata/v2.5.4.json var v2_5_4 string func TestLoadISM(t *testing.T) { cases := []struct { name string json string want WorkIdleSingleMode }{ { name: "v2.5.1", json: v2_5_1, want: WorkIdleSingleMode{ ProgressInfo: ProgressInfo{ Chara: SingleModeChara{ SingleModeCharaID: 1823, CardID: 102401, CharaGrade: 1, Speed: 107, Stamina: 118, Power: 103, Wiz: 147, Guts: 133, Vital: 100, MaxSpeed: 1616, MaxStamina: 1300, MaxPower: 1318, MaxWiz: 1332, MaxGuts: 1516, DefaultMaxSpeed: 1200, DefaultMaxStamina: 1200, DefaultMaxPower: 1200, DefaultMaxWiz: 1200, DefaultMaxGuts: 1200, MaxVital: 100, Motivation: 3, Fans: 1, Rarity: 4, RaceProgramID: 0, ReserveRaceProgramID: 0, RaceRunningStyle: 1, IsShortRace: 0, TalentLevel: 5, Skills: []Skill{ {SkillID: 100241, Level: 2}, }, DisableSkillIDs: []horse.SkillID{}, SkillTips: []SkillTip{ {GroupID: 90014, Rarity: 1, Level: 2}, {GroupID: 90020, Rarity: 1, Level: 1}, }, SupportCards: []SingleModeSupportCard{ { Position: 1, SupportCardID: 30010, LimitBreakCount: 4, Exp: 118185, TrainingPartnerState: 0, OwnerViewerID: 0, RentalType: 0, }, { Position: 2, SupportCardID: 30108, LimitBreakCount: 4, Exp: 118185, TrainingPartnerState: 0, OwnerViewerID: 0, RentalType: 0, }, { Position: 3, SupportCardID: 30062, LimitBreakCount: 4, Exp: 118185, TrainingPartnerState: 0, OwnerViewerID: 0, RentalType: 0, }, { Position: 4, SupportCardID: 30107, LimitBreakCount: 4, Exp: 118185, TrainingPartnerState: 0, OwnerViewerID: 0, RentalType: 0, }, { Position: 5, SupportCardID: 30028, LimitBreakCount: 4, Exp: 118185, TrainingPartnerState: 0, OwnerViewerID: 0, RentalType: 0, }, { Position: 6, SupportCardID: 30052, LimitBreakCount: 4, Exp: 118185, TrainingPartnerState: 0, OwnerViewerID: 818784439809, RentalType: 0, }, }, SuccessionTrainedCharaID1: 4637, SuccessionTrainedCharaID2: 4670, ProperDistanceShort: horse.AptitudeLvD, ProperDistanceMile: horse.AptitudeLvC, ProperDistanceMiddle: horse.AptitudeLvA, ProperDistanceLong: horse.AptitudeLvA, ProperRunningStyleNige: horse.AptitudeLvA, ProperRunningStyleSenko: horse.AptitudeLvA, ProperRunningStyleSashi: horse.AptitudeLvB, ProperRunningStyleOikomi: horse.AptitudeLvB, ProperGroundTurf: horse.AptitudeLvA, ProperGroundDirt: horse.AptitudeLvA, Turn: 1, SkillPoint: 0, ShortCutState: 0, State: 0, PlayingState: 1, ScenarioID: 3, RouteID: 14, StartTime: "2026-07-27 15:37:29", Evaluations: []Evaluation{ { TargetID: 1, Evaluation: 15, IsOuting: 0, StoryStep: 0, IsAppear: 1, GroupOutingInfo: []GroupOuting{}, }, { TargetID: 2, Evaluation: 20, IsOuting: 0, StoryStep: 0, IsAppear: 1, GroupOutingInfo: []GroupOuting{}, }, { TargetID: 3, Evaluation: 30, IsOuting: 0, StoryStep: 0, IsAppear: 1, GroupOutingInfo: []GroupOuting{}, }, { TargetID: 4, Evaluation: 30, IsOuting: 0, StoryStep: 0, IsAppear: 1, GroupOutingInfo: []GroupOuting{}, }, { TargetID: 5, Evaluation: 35, IsOuting: 0, StoryStep: 0, IsAppear: 1, GroupOutingInfo: []GroupOuting{}, }, { TargetID: 6, Evaluation: 30, IsOuting: 0, StoryStep: 0, IsAppear: 0, GroupOutingInfo: []GroupOuting{}, }, { TargetID: 101, Evaluation: 0, IsOuting: 0, StoryStep: 0, IsAppear: 0, GroupOutingInfo: []GroupOuting{}, }, { TargetID: 102, Evaluation: 0, IsOuting: 0, StoryStep: 0, IsAppear: 0, GroupOutingInfo: []GroupOuting{}, }, { TargetID: 103, Evaluation: 0, IsOuting: 0, StoryStep: 0, IsAppear: 0, GroupOutingInfo: []GroupOuting{}, }, { TargetID: 104, Evaluation: 0, IsOuting: 0, StoryStep: 0, IsAppear: 0, GroupOutingInfo: []GroupOuting{}, }, { TargetID: 106, Evaluation: 0, IsOuting: 0, StoryStep: 0, IsAppear: 0, GroupOutingInfo: []GroupOuting{}, }, }, TrainingLevels: []TrainingLevel{ {CommandID: 101, Level: 1}, {CommandID: 102, Level: 1}, {CommandID: 103, Level: 1}, {CommandID: 105, Level: 1}, {CommandID: 106, Level: 1}, {CommandID: 601, Level: 5}, {CommandID: 602, Level: 5}, {CommandID: 603, Level: 5}, {CommandID: 604, Level: 5}, {CommandID: 605, Level: 5}, }, NicknameIDs: []int32{}, CharaEffectIDs: []int32{}, RouteRaceIDs: []int32{ 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, }, GuestOutings: []GuestOuting{}, SkillUpgrades: []SingleModeSkillUpgrade{}, }, StartTime: "2026-07-27 11:37:29", EndTime: "2026-07-27 12:27:29", }, ProgressLog: IdleSingleModeProgressLog{ CharaEffectLog: []CharaEffectLog{ {CharaEffectID: 7, IsActive: true}, }, SupportCardGains: []IdleSingleModeSupportCardGain{ { SupportCardID: 30010, GainInfo: IdleSingleModeGainInfo{ Speed: IdleSingleModeSignedInt{Value: 56}, Stamina: IdleSingleModeSignedInt{Value: 33}, Power: IdleSingleModeSignedInt{Value: 33}, Wiz: IdleSingleModeSignedInt{Value: 193}, Guts: IdleSingleModeSignedInt{Value: 33}, SkillPoint: 319, SkillTips: []SkillTip{ {GroupID: 20019, Rarity: 1, Level: 1}, {GroupID: 20001, Rarity: 1, Level: 1}, }, }, }, { SupportCardID: 30108, GainInfo: IdleSingleModeGainInfo{ Speed: IdleSingleModeSignedInt{Value: 54}, Stamina: IdleSingleModeSignedInt{Value: 35}, Power: IdleSingleModeSignedInt{Value: 35}, Wiz: IdleSingleModeSignedInt{Value: 135}, Guts: IdleSingleModeSignedInt{Value: 35}, SkillPoint: 408, SkillTips: []SkillTip{ {GroupID: 20157, Rarity: 1, Level: 4}, {GroupID: 20203, Rarity: 1, Level: 4}, {GroupID: 20156, Rarity: 1, Level: 4}, }, }, }, { SupportCardID: 30062, GainInfo: IdleSingleModeGainInfo{ Speed: IdleSingleModeSignedInt{Value: 31}, Stamina: IdleSingleModeSignedInt{Value: 184}, Power: IdleSingleModeSignedInt{Value: 31}, Wiz: IdleSingleModeSignedInt{Value: 31}, Guts: IdleSingleModeSignedInt{Value: 65}, SkillPoint: 234, SkillTips: []SkillTip{ {GroupID: 20127, Rarity: 1, Level: 2}, }, }, }, { SupportCardID: 30107, GainInfo: IdleSingleModeGainInfo{ Speed: IdleSingleModeSignedInt{Value: 136}, Stamina: IdleSingleModeSignedInt{Value: 35}, Power: IdleSingleModeSignedInt{Value: 88}, Wiz: IdleSingleModeSignedInt{Value: 35}, Guts: IdleSingleModeSignedInt{Value: 35}, SkillPoint: 287, SkillTips: []SkillTip{ {GroupID: 20043, Rarity: 1, Level: 3}, {GroupID: 20127, Rarity: 1, Level: 3}, {GroupID: 20124, Rarity: 1, Level: 3}, }, }, }, { SupportCardID: 30028, GainInfo: IdleSingleModeGainInfo{ Speed: IdleSingleModeSignedInt{Value: 116}, Stamina: IdleSingleModeSignedInt{Value: 33}, Power: IdleSingleModeSignedInt{Value: 86}, Wiz: IdleSingleModeSignedInt{Value: 33}, Guts: IdleSingleModeSignedInt{Value: 33}, SkillPoint: 284, SkillTips: []SkillTip{ {GroupID: 20043, Rarity: 1, Level: 1}, {GroupID: 20076, Rarity: 1, Level: 3}, {GroupID: 20033, Rarity: 1, Level: 3}, {GroupID: 20118, Rarity: 1, Level: 3}, }, }, }, { SupportCardID: 30052, GainInfo: IdleSingleModeGainInfo{ Speed: IdleSingleModeSignedInt{Value: 68}, Stamina: IdleSingleModeSignedInt{Value: 28}, Power: IdleSingleModeSignedInt{Value: 28}, Wiz: IdleSingleModeSignedInt{Value: 28}, Guts: IdleSingleModeSignedInt{Value: 68}, SkillPoint: 553, SkillTips: []SkillTip{}, }, }, }, EventGain: IdleSingleModeGainInfo{ Speed: IdleSingleModeSignedInt{Value: 817}, Stamina: IdleSingleModeSignedInt{Value: 313}, Power: IdleSingleModeSignedInt{Value: 427}, Wiz: IdleSingleModeSignedInt{Value: 498}, Guts: IdleSingleModeSignedInt{Value: 300}, SkillPoint: 1819, SkillTips: []SkillTip{ {GroupID: 20166, Rarity: 2, Level: 3}, {GroupID: 20071, Rarity: 2, Level: 1}, {GroupID: 20027, Rarity: 1, Level: 2}, {GroupID: 20059, Rarity: 1, Level: 1}, {GroupID: 21007, Rarity: 1, Level: 1}, {GroupID: 21007, Rarity: 2, Level: 3}, {GroupID: 20021, Rarity: 1, Level: 1}, {GroupID: 20043, Rarity: 1, Level: 1}, {GroupID: 20043, Rarity: 2, Level: 1}, {GroupID: 20127, Rarity: 2, Level: 1}, {GroupID: 20135, Rarity: 1, Level: 1}, {GroupID: 20118, Rarity: 1, Level: 2}, {GroupID: 20207, Rarity: 1, Level: 1}, {GroupID: 20137, Rarity: 1, Level: 1}, {GroupID: 20209, Rarity: 1, Level: 1}, }, }, SuccessionGain: IdleSingleModeGainInfo{ Speed: IdleSingleModeSignedInt{Value: 67}, Stamina: IdleSingleModeSignedInt{Value: 0}, Power: IdleSingleModeSignedInt{Value: 94}, Wiz: IdleSingleModeSignedInt{Value: 118}, Guts: IdleSingleModeSignedInt{Value: 59}, MaxSpeed: 22, MaxStamina: 2, MaxPower: 28, MaxWiz: 45, MaxGuts: 22, ProperDistanceShort: 0, ProperDistanceMile: 1, ProperDistanceMiddle: 0, ProperDistanceLong: 0, ProperRunningStyleNige: 0, ProperRunningStyleSenko: 0, ProperRunningStyleSashi: 0, ProperRunningStyleOikomi: 0, ProperGroundTurf: 0, ProperGroundDirt: 5, SkillPoint: 0, SkillTips: []SkillTip{ {GroupID: 90014, Rarity: 1, Level: 2}, {GroupID: 90020, Rarity: 1, Level: 2}, {GroupID: 90019, Rarity: 1, Level: 2}, {GroupID: 20166, Rarity: 1, Level: 3}, {GroupID: 20233, Rarity: 1, Level: 2}, {GroupID: 20160, Rarity: 1, Level: 4}, {GroupID: 21005, Rarity: 1, Level: 3}, {GroupID: 20019, Rarity: 1, Level: 3}, {GroupID: 21001, Rarity: 1, Level: 4}, {GroupID: 20035, Rarity: 1, Level: 1}, {GroupID: 20091, Rarity: 1, Level: 4}, {GroupID: 20126, Rarity: 1, Level: 2}, {GroupID: 20159, Rarity: 1, Level: 2}, {GroupID: 20125, Rarity: 1, Level: 1}, {GroupID: 20007, Rarity: 1, Level: 1}, }, }, SuccessionFactorGains: []IdleSingleModeSuccessionFactorGain{ { Year: 1, GainFactorInfo: []Factor{ {FactorID: 103, Level: 0}, {FactorID: 10200101, Level: 0}, {FactorID: 503, Level: 0}, {FactorID: 1202, Level: 0}, {FactorID: 10140102, Level: 0}, {FactorID: 503, Level: 0}, {FactorID: 1202, Level: 0}, {FactorID: 403, Level: 0}, {FactorID: 3202, Level: 0}, {FactorID: 302, Level: 0}, {FactorID: 1203, Level: 0}, {FactorID: 302, Level: 0}, {FactorID: 1203, Level: 0}, }, }, { Year: 2, GainFactorInfo: []Factor{ {FactorID: 103, Level: 0}, {FactorID: 1000802, Level: 0}, {FactorID: 2016603, Level: 0}, {FactorID: 2023302, Level: 0}, {FactorID: 503, Level: 0}, {FactorID: 2102103, Level: 0}, {FactorID: 503, Level: 0}, {FactorID: 2016002, Level: 0}, {FactorID: 2100502, Level: 0}, {FactorID: 403, Level: 0}, {FactorID: 2001902, Level: 0}, {FactorID: 302, Level: 0}, {FactorID: 302, Level: 0}, {FactorID: 1203, Level: 0}, {FactorID: 10190102, Level: 0}, }, }, { Year: 3, GainFactorInfo: []Factor{ {FactorID: 103, Level: 0}, {FactorID: 2003501, Level: 0}, {FactorID: 2009102, Level: 0}, {FactorID: 10200101, Level: 0}, {FactorID: 503, Level: 0}, {FactorID: 1002002, Level: 0}, {FactorID: 2012502, Level: 0}, {FactorID: 503, Level: 0}, {FactorID: 2012602, Level: 0}, {FactorID: 2015902, Level: 0}, {FactorID: 403, Level: 0}, {FactorID: 302, Level: 0}, {FactorID: 302, Level: 0}, }, }, }, RaceHistory: []IdleSingleModeRaceHistory{ { RaceHistory: SingleRaceHistory{ Turn: 12, ProgramID: 1067, Weather: 2, GroundCondition: 2, RunningStyle: 1, ResultRank: 1, FrameOrder: 2, NPCCount: 0, }, RaceRewardInfo: CharaRaceReward{ ResultRank: 1, ResultTime: 0, RaceReward: []RaceReward{ {ItemType: 91, ItemID: 59, ItemNum: 400}, }, RaceRewardBonus: []RaceReward{}, RaceRewardPlusBonus: []RaceReward{}, RaceRewardBonusWin: []RaceReward{}, RaceRewardLimit: []RaceRewardLimit{}, GainedFans: 1398, CampaignIDs: []int32{223}, }, LoseTipsID: 0, }, { RaceHistory: SingleRaceHistory{ Turn: 44, ProgramID: 168, Weather: 1, GroundCondition: 1, RunningStyle: 1, ResultRank: 1, FrameOrder: 11, NPCCount: 0, }, RaceRewardInfo: CharaRaceReward{ ResultRank: 1, ResultTime: 0, RaceReward: []RaceReward{ {ItemType: 11, ItemID: 83, ItemNum: 2}, {ItemType: 91, ItemID: 59, ItemNum: 800}, {ItemType: 11, ItemID: 10, ItemNum: 2}, }, RaceRewardBonus: []RaceReward{ {ItemType: 30, ItemID: 110, ItemNum: 40}, }, RaceRewardPlusBonus: []RaceReward{}, RaceRewardBonusWin: []RaceReward{}, RaceRewardLimit: []RaceRewardLimit{}, GainedFans: 23976, CampaignIDs: []int32{223}, }, LoseTipsID: 0, }, { RaceHistory: SingleRaceHistory{ Turn: 48, ProgramID: 81, Weather: 1, GroundCondition: 1, RunningStyle: 1, ResultRank: 1, FrameOrder: 4, NPCCount: 0, }, RaceRewardInfo: CharaRaceReward{ ResultRank: 1, ResultTime: 0, RaceReward: []RaceReward{ {ItemType: 11, ItemID: 91, ItemNum: 2}, {ItemType: 91, ItemID: 59, ItemNum: 800}, {ItemType: 11, ItemID: 10, ItemNum: 2}, }, RaceRewardBonus: []RaceReward{ {ItemType: 91, ItemID: 59, ItemNum: 800}, {ItemType: 30, ItemID: 110, ItemNum: 40}, }, RaceRewardPlusBonus: []RaceReward{}, RaceRewardBonusWin: []RaceReward{}, RaceRewardLimit: []RaceRewardLimit{}, GainedFans: 59940, CampaignIDs: []int32{223}, }, LoseTipsID: 0, }, { RaceHistory: SingleRaceHistory{ Turn: 54, ProgramID: 12, Weather: 2, GroundCondition: 1, RunningStyle: 1, ResultRank: 1, FrameOrder: 7, NPCCount: 0, }, RaceRewardInfo: CharaRaceReward{ ResultRank: 1, ResultTime: 0, RaceReward: []RaceReward{ {ItemType: 91, ItemID: 59, ItemNum: 800}, {ItemType: 11, ItemID: 10, ItemNum: 2}, }, RaceRewardBonus: []RaceReward{}, RaceRewardPlusBonus: []RaceReward{}, RaceRewardBonusWin: []RaceReward{}, RaceRewardLimit: []RaceRewardLimit{}, GainedFans: 13387, CampaignIDs: []int32{223}, }, LoseTipsID: 0, }, { RaceHistory: SingleRaceHistory{ Turn: 56, ProgramID: 4, Weather: 1, GroundCondition: 1, RunningStyle: 1, ResultRank: 1, FrameOrder: 6, NPCCount: 0, }, RaceRewardInfo: CharaRaceReward{ ResultRank: 1, ResultTime: 0, RaceReward: []RaceReward{ {ItemType: 11, ItemID: 74, ItemNum: 2}, {ItemType: 91, ItemID: 59, ItemNum: 800}, {ItemType: 11, ItemID: 10, ItemNum: 2}, }, RaceRewardBonus: []RaceReward{ {ItemType: 91, ItemID: 59, ItemNum: 800}, {ItemType: 30, ItemID: 110, ItemNum: 40}, }, RaceRewardPlusBonus: []RaceReward{}, RaceRewardBonusWin: []RaceReward{}, RaceRewardLimit: []RaceRewardLimit{}, GainedFans: 29970, CampaignIDs: []int32{223}, }, LoseTipsID: 0, }, { RaceHistory: SingleRaceHistory{ Turn: 60, ProgramID: 74, Weather: 2, GroundCondition: 1, RunningStyle: 1, ResultRank: 1, FrameOrder: 8, NPCCount: 0, }, RaceRewardInfo: CharaRaceReward{ ResultRank: 1, ResultTime: 0, RaceReward: []RaceReward{ {ItemType: 11, ItemID: 80, ItemNum: 2}, {ItemType: 91, ItemID: 59, ItemNum: 800}, {ItemType: 11, ItemID: 7, ItemNum: 2}, }, RaceRewardBonus: []RaceReward{ {ItemType: 91, ItemID: 59, ItemNum: 800}, }, RaceRewardPlusBonus: []RaceReward{}, RaceRewardBonusWin: []RaceReward{}, RaceRewardLimit: []RaceRewardLimit{}, GainedFans: 29970, CampaignIDs: []int32{223}, }, LoseTipsID: 0, }, { RaceHistory: SingleRaceHistory{ Turn: 68, ProgramID: 76, Weather: 1, GroundCondition: 1, RunningStyle: 1, ResultRank: 1, FrameOrder: 14, NPCCount: 0, }, RaceRewardInfo: CharaRaceReward{ ResultRank: 1, ResultTime: 0, RaceReward: []RaceReward{ {ItemType: 11, ItemID: 84, ItemNum: 2}, {ItemType: 91, ItemID: 59, ItemNum: 800}, {ItemType: 11, ItemID: 7, ItemNum: 2}, }, RaceRewardBonus: []RaceReward{ {ItemType: 91, ItemID: 59, ItemNum: 800}, }, RaceRewardPlusBonus: []RaceReward{}, RaceRewardBonusWin: []RaceReward{}, RaceRewardLimit: []RaceRewardLimit{}, GainedFans: 29970, CampaignIDs: []int32{223}, }, LoseTipsID: 0, }, { RaceHistory: SingleRaceHistory{ Turn: 72, ProgramID: 81, Weather: 2, GroundCondition: 1, RunningStyle: 1, ResultRank: 1, FrameOrder: 6, NPCCount: 0, }, RaceRewardInfo: CharaRaceReward{ ResultRank: 1, ResultTime: 0, RaceReward: []RaceReward{ {ItemType: 11, ItemID: 91, ItemNum: 2}, {ItemType: 91, ItemID: 59, ItemNum: 800}, {ItemType: 11, ItemID: 10, ItemNum: 2}, }, RaceRewardBonus: []RaceReward{ {ItemType: 91, ItemID: 59, ItemNum: 800}, {ItemType: 30, ItemID: 110, ItemNum: 40}, }, RaceRewardPlusBonus: []RaceReward{}, RaceRewardBonusWin: []RaceReward{}, RaceRewardLimit: []RaceRewardLimit{}, GainedFans: 59940, CampaignIDs: []int32{223}, }, LoseTipsID: 0, }, { RaceHistory: SingleRaceHistory{ Turn: 74, ProgramID: 2031, Weather: 2, GroundCondition: 2, RunningStyle: 1, ResultRank: 1, FrameOrder: 10, NPCCount: 0, }, RaceRewardInfo: CharaRaceReward{ ResultRank: 1, ResultTime: 0, RaceReward: []RaceReward{ {ItemType: 91, ItemID: 59, ItemNum: 1200}, {ItemType: 11, ItemID: 10, ItemNum: 2}, }, RaceRewardBonus: []RaceReward{}, RaceRewardPlusBonus: []RaceReward{}, RaceRewardBonusWin: []RaceReward{}, RaceRewardLimit: []RaceRewardLimit{}, GainedFans: 13986, CampaignIDs: []int32{223}, }, LoseTipsID: 0, }, { RaceHistory: SingleRaceHistory{ Turn: 76, ProgramID: 2130, Weather: 1, GroundCondition: 1, RunningStyle: 1, ResultRank: 1, FrameOrder: 1, NPCCount: 0, }, RaceRewardInfo: CharaRaceReward{ ResultRank: 1, ResultTime: 0, RaceReward: []RaceReward{ {ItemType: 91, ItemID: 59, ItemNum: 1200}, {ItemType: 11, ItemID: 10, ItemNum: 2}, }, RaceRewardBonus: []RaceReward{ {ItemType: 30, ItemID: 110, ItemNum: 80}, }, RaceRewardPlusBonus: []RaceReward{}, RaceRewardBonusWin: []RaceReward{}, RaceRewardLimit: []RaceRewardLimit{}, GainedFans: 19980, CampaignIDs: []int32{223}, }, LoseTipsID: 0, }, { RaceHistory: SingleRaceHistory{ Turn: 78, ProgramID: 2228, Weather: 2, GroundCondition: 2, RunningStyle: 1, ResultRank: 1, FrameOrder: 4, NPCCount: 0, }, RaceRewardInfo: CharaRaceReward{ ResultRank: 1, ResultTime: 0, RaceReward: []RaceReward{ {ItemType: 91, ItemID: 59, ItemNum: 1200}, {ItemType: 11, ItemID: 10, ItemNum: 2}, }, RaceRewardBonus: []RaceReward{ {ItemType: 91, ItemID: 59, ItemNum: 1200}, {ItemType: 30, ItemID: 110, ItemNum: 80}, }, RaceRewardPlusBonus: []RaceReward{}, RaceRewardBonusWin: []RaceReward{}, RaceRewardLimit: []RaceRewardLimit{}, GainedFans: 59940, CampaignIDs: []int32{223}, }, LoseTipsID: 0, }, }, GainSkillIDs: []horse.SkillID{}, TotalSkillPoint: 3904, }, End: End{}, }, }, { name: "v2.5.2-beta2", json: v2_5_2_beta2, want: WorkIdleSingleMode{ ProgressInfo: ProgressInfo{ Chara: SingleModeChara{ SingleModeCharaID: 1829, CardID: 102401, CharaGrade: 1, Speed: 107, Stamina: 118, Power: 103, Wiz: 147, Guts: 133, Vital: 100, MaxSpeed: 1616, MaxStamina: 1300, MaxPower: 1318, MaxWiz: 1332, MaxGuts: 1516, DefaultMaxSpeed: 1200, DefaultMaxStamina: 1200, DefaultMaxPower: 1200, DefaultMaxWiz: 1200, DefaultMaxGuts: 1200, MaxVital: 100, Motivation: 3, Fans: 1, Rarity: 4, RaceProgramID: 0, ReserveRaceProgramID: 0, RaceRunningStyle: 1, IsShortRace: 0, TalentLevel: 5, Skills: []Skill{ {SkillID: 100241, Level: 2}, }, DisableSkillIDs: []horse.SkillID{}, SkillTips: []SkillTip{ {GroupID: 90014, Rarity: 1, Level: 2}, {GroupID: 90020, Rarity: 1, Level: 1}, }, SupportCards: []SingleModeSupportCard{ { Position: 1, SupportCardID: 30010, LimitBreakCount: 4, Exp: 118185, OwnerViewerID: 0, }, { Position: 2, SupportCardID: 30108, LimitBreakCount: 4, Exp: 118185, OwnerViewerID: 0, }, { Position: 3, SupportCardID: 30062, LimitBreakCount: 4, Exp: 118185, OwnerViewerID: 0, }, { Position: 4, SupportCardID: 30107, LimitBreakCount: 4, Exp: 118185, OwnerViewerID: 0, }, { Position: 5, SupportCardID: 30028, LimitBreakCount: 4, Exp: 118185, OwnerViewerID: 0, }, { Position: 6, SupportCardID: 30052, LimitBreakCount: 4, Exp: 118185, OwnerViewerID: 872748063176, }, }, SuccessionTrainedCharaID1: 4637, SuccessionTrainedCharaID2: 4694, ProperDistanceShort: horse.AptitudeLvD, ProperDistanceMile: horse.AptitudeLvC, ProperDistanceMiddle: horse.AptitudeLvA, ProperDistanceLong: horse.AptitudeLvA, ProperRunningStyleNige: horse.AptitudeLvA, ProperRunningStyleSenko: horse.AptitudeLvA, ProperRunningStyleSashi: horse.AptitudeLvB, ProperRunningStyleOikomi: horse.AptitudeLvB, ProperGroundTurf: horse.AptitudeLvA, ProperGroundDirt: horse.AptitudeLvA, Turn: 1, SkillPoint: 0, ShortCutState: 0, State: 0, PlayingState: 1, ScenarioID: 3, RouteID: 14, StartTime: "2026-07-28 18:11:42", Evaluations: []Evaluation{ { TargetID: 1, TrainingPartner: 1, Evaluation: 15, IsOuting: 0, StoryStep: 0, IsAppear: 1, GroupOutingInfo: []GroupOuting{}, }, { TargetID: 2, TrainingPartner: 2, Evaluation: 20, IsOuting: 0, StoryStep: 0, IsAppear: 1, GroupOutingInfo: []GroupOuting{}, }, { TargetID: 3, TrainingPartner: 3, Evaluation: 30, IsOuting: 0, StoryStep: 0, IsAppear: 1, GroupOutingInfo: []GroupOuting{}, }, { TargetID: 4, TrainingPartner: 4, Evaluation: 30, IsOuting: 0, StoryStep: 0, IsAppear: 1, GroupOutingInfo: []GroupOuting{}, }, { TargetID: 5, TrainingPartner: 5, Evaluation: 35, IsOuting: 0, StoryStep: 0, IsAppear: 1, GroupOutingInfo: []GroupOuting{}, }, { TargetID: 6, TrainingPartner: 6, Evaluation: 30, IsOuting: 0, StoryStep: 0, IsAppear: 0, GroupOutingInfo: []GroupOuting{}, }, { TargetID: 101, TrainingPartner: 101, Evaluation: 0, IsOuting: 0, StoryStep: 0, IsAppear: 0, GroupOutingInfo: []GroupOuting{}, }, { TargetID: 102, TrainingPartner: 102, Evaluation: 0, IsOuting: 0, StoryStep: 0, IsAppear: 0, GroupOutingInfo: []GroupOuting{}, }, { TargetID: 103, TrainingPartner: 103, Evaluation: 0, IsOuting: 0, StoryStep: 0, IsAppear: 0, GroupOutingInfo: []GroupOuting{}, }, { TargetID: 104, TrainingPartner: 104, Evaluation: 0, IsOuting: 0, StoryStep: 0, IsAppear: 0, GroupOutingInfo: []GroupOuting{}, }, { TargetID: 106, TrainingPartner: 106, Evaluation: 0, IsOuting: 0, StoryStep: 0, IsAppear: 0, GroupOutingInfo: []GroupOuting{}, }, }, TrainingLevels: []TrainingLevel{ {CommandID: 101, Level: 1}, {CommandID: 102, Level: 1}, {CommandID: 103, Level: 1}, {CommandID: 105, Level: 1}, {CommandID: 106, Level: 1}, {CommandID: 601, Level: 5}, {CommandID: 602, Level: 5}, {CommandID: 603, Level: 5}, {CommandID: 604, Level: 5}, {CommandID: 605, Level: 5}, }, NicknameIDs: []int32{}, CharaEffectIDs: []int32{}, RouteRaceIDs: []int32{ 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, }, GuestOutings: []GuestOuting{}, SkillUpgrades: []SingleModeSkillUpgrade{}, }, }, ProgressLog: IdleSingleModeProgressLog{ CharaEffectLog: []CharaEffectLog{ {CharaEffectID: 3, IsActive: false}, }, SupportCardGains: []IdleSingleModeSupportCardGain{ { SupportCardID: 30010, GainInfo: IdleSingleModeGainInfo{ Speed: IdleSingleModeSignedInt{Value: 40}, Stamina: IdleSingleModeSignedInt{Value: 24}, Power: IdleSingleModeSignedInt{Value: 24}, Wiz: IdleSingleModeSignedInt{Value: 136}, Guts: IdleSingleModeSignedInt{Value: 24}, SkillPoint: 224, SkillTips: []SkillTip{ {GroupID: 20019, Rarity: 1, Level: 1}, {GroupID: 20026, Rarity: 1, Level: 1}, }, }, }, { SupportCardID: 30108, GainInfo: IdleSingleModeGainInfo{ Speed: IdleSingleModeSignedInt{Value: 38}, Stamina: IdleSingleModeSignedInt{Value: 25}, Power: IdleSingleModeSignedInt{Value: 25}, Wiz: IdleSingleModeSignedInt{Value: 95}, Guts: IdleSingleModeSignedInt{Value: 25}, SkillPoint: 286, SkillTips: []SkillTip{ {GroupID: 20138, Rarity: 1, Level: 4}, {GroupID: 20030, Rarity: 1, Level: 4}, }, }, }, { SupportCardID: 30062, GainInfo: IdleSingleModeGainInfo{ Speed: IdleSingleModeSignedInt{Value: 22}, Stamina: IdleSingleModeSignedInt{Value: 130}, Power: IdleSingleModeSignedInt{Value: 22}, Wiz: IdleSingleModeSignedInt{Value: 22}, Guts: IdleSingleModeSignedInt{Value: 46}, SkillPoint: 164, SkillTips: []SkillTip{ {GroupID: 20054, Rarity: 1, Level: 1}, {GroupID: 20071, Rarity: 1, Level: 1}, }, }, }, { SupportCardID: 30107, GainInfo: IdleSingleModeGainInfo{ Speed: IdleSingleModeSignedInt{Value: 96}, Stamina: IdleSingleModeSignedInt{Value: 25}, Power: IdleSingleModeSignedInt{Value: 62}, Wiz: IdleSingleModeSignedInt{Value: 25}, Guts: IdleSingleModeSignedInt{Value: 25}, SkillPoint: 201, SkillTips: []SkillTip{ {GroupID: 20018, Rarity: 1, Level: 3}, {GroupID: 20165, Rarity: 1, Level: 3}, }, }, }, { SupportCardID: 30028, GainInfo: IdleSingleModeGainInfo{ Speed: IdleSingleModeSignedInt{Value: 82}, Stamina: IdleSingleModeSignedInt{Value: 24}, Power: IdleSingleModeSignedInt{Value: 60}, Wiz: IdleSingleModeSignedInt{Value: 24}, Guts: IdleSingleModeSignedInt{Value: 24}, SkillPoint: 199, SkillTips: []SkillTip{ {GroupID: 20033, Rarity: 1, Level: 5}, {GroupID: 20043, Rarity: 1, Level: 3}, }, }, }, { SupportCardID: 30052, GainInfo: IdleSingleModeGainInfo{ Speed: IdleSingleModeSignedInt{Value: 48}, Stamina: IdleSingleModeSignedInt{Value: 20}, Power: IdleSingleModeSignedInt{Value: 20}, Wiz: IdleSingleModeSignedInt{Value: 20}, Guts: IdleSingleModeSignedInt{Value: 48}, SkillPoint: 388, SkillTips: []SkillTip{}, }, }, }, EventGain: IdleSingleModeGainInfo{ Speed: IdleSingleModeSignedInt{Value: 669}, Stamina: IdleSingleModeSignedInt{Value: 325}, Power: IdleSingleModeSignedInt{Value: 467}, Wiz: IdleSingleModeSignedInt{Value: 419}, Guts: IdleSingleModeSignedInt{Value: 303}, SkillPoint: 2798, SkillTips: []SkillTip{ {GroupID: 20166, Rarity: 2, Level: 3}, {GroupID: 20071, Rarity: 2, Level: 1}, {GroupID: 20071, Rarity: 1, Level: 2}, {GroupID: 20059, Rarity: 1, Level: 1}, {GroupID: 21007, Rarity: 1, Level: 1}, {GroupID: 21007, Rarity: 2, Level: 3}, {GroupID: 20023, Rarity: 1, Level: 1}, {GroupID: 20135, Rarity: 1, Level: 1}, {GroupID: 20004, Rarity: 1, Level: 1}, {GroupID: 20013, Rarity: 1, Level: 1}, {GroupID: 20033, Rarity: 2, Level: 3}, {GroupID: 20246, Rarity: 1, Level: 3}, {GroupID: 20110, Rarity: 1, Level: 3}, }, }, SuccessionGain: IdleSingleModeGainInfo{ Speed: IdleSingleModeSignedInt{Value: 59}, Stamina: IdleSingleModeSignedInt{Value: 0}, Power: IdleSingleModeSignedInt{Value: 124}, Wiz: IdleSingleModeSignedInt{Value: 142}, Guts: IdleSingleModeSignedInt{Value: 50}, MaxSpeed: 23, MaxStamina: 1, MaxPower: 26, MaxWiz: 45, MaxGuts: 20, ProperDistanceShort: 0, ProperDistanceMile: 1, ProperDistanceMiddle: 0, ProperDistanceLong: 0, ProperRunningStyleNige: 0, ProperRunningStyleSenko: 0, ProperRunningStyleSashi: 0, ProperRunningStyleOikomi: 0, ProperGroundTurf: 0, ProperGroundDirt: 5, SkillPoint: 0, SkillTips: []SkillTip{ {GroupID: 90014, Rarity: 1, Level: 3}, {GroupID: 90020, Rarity: 1, Level: 2}, {GroupID: 20054, Rarity: 1, Level: 3}, {GroupID: 20035, Rarity: 1, Level: 5}, {GroupID: 20203, Rarity: 1, Level: 1}, {GroupID: 20126, Rarity: 1, Level: 1}, {GroupID: 20046, Rarity: 1, Level: 5}, {GroupID: 20160, Rarity: 1, Level: 2}, {GroupID: 20091, Rarity: 1, Level: 3}, {GroupID: 20166, Rarity: 1, Level: 4}, {GroupID: 20125, Rarity: 1, Level: 2}, {GroupID: 20132, Rarity: 1, Level: 4}, {GroupID: 20007, Rarity: 1, Level: 1}, }, }, SuccessionFactorGains: []IdleSingleModeSuccessionFactorGain{ { Year: 1, GainFactorInfo: []Factor{ {FactorID: 103, Level: 0}, {FactorID: 10200101, Level: 0}, {FactorID: 503, Level: 0}, {FactorID: 1202, Level: 0}, {FactorID: 10140102, Level: 0}, {FactorID: 503, Level: 0}, {FactorID: 1202, Level: 0}, {FactorID: 403, Level: 0}, {FactorID: 3202, Level: 0}, {FactorID: 302, Level: 0}, {FactorID: 1203, Level: 0}, {FactorID: 302, Level: 0}, {FactorID: 1203, Level: 0}, }, }, { Year: 2, GainFactorInfo: []Factor{ {FactorID: 103, Level: 0}, {FactorID: 2005402, Level: 0}, {FactorID: 10200101, Level: 0}, {FactorID: 503, Level: 0}, {FactorID: 1202, Level: 0}, {FactorID: 2012602, Level: 0}, {FactorID: 503, Level: 0}, {FactorID: 403, Level: 0}, {FactorID: 2003502, Level: 0}, {FactorID: 2020302, Level: 0}, {FactorID: 302, Level: 0}, {FactorID: 2004603, Level: 0}, {FactorID: 302, Level: 0}, {FactorID: 2016002, Level: 0}, }, }, { Year: 3, GainFactorInfo: []Factor{ {FactorID: 103, Level: 0}, {FactorID: 2003501, Level: 0}, {FactorID: 2009102, Level: 0}, {FactorID: 2016603, Level: 0}, {FactorID: 503, Level: 0}, {FactorID: 2012502, Level: 0}, {FactorID: 2013202, Level: 0}, {FactorID: 10140102, Level: 0}, {FactorID: 503, Level: 0}, {FactorID: 1000702, Level: 0}, {FactorID: 1002002, Level: 0}, {FactorID: 403, Level: 0}, {FactorID: 2003502, Level: 0}, {FactorID: 302, Level: 0}, {FactorID: 2004603, Level: 0}, {FactorID: 302, Level: 0}, {FactorID: 3000202, Level: 0}, }, }, }, RaceHistory: []IdleSingleModeRaceHistory{ { RaceHistory: SingleRaceHistory{ Turn: 12, ProgramID: 1067, Weather: 2, GroundCondition: 1, RunningStyle: 1, ResultRank: 1, FrameOrder: 7, NPCCount: 0, }, RaceRewardInfo: CharaRaceReward{ ResultRank: 1, ResultTime: 0, RaceReward: []RaceReward{ { ItemType: 91, ItemID: 59, ItemNum: 400, }, }, RaceRewardBonus: []RaceReward{}, GainedFans: 1398, CampaignIDs: []int32{223}, RaceRewardPlusBonus: []RaceReward{}, RaceRewardBonusWin: []RaceReward{}, }, LoseTipsID: 0, }, { RaceHistory: SingleRaceHistory{ Turn: 23, ProgramID: 624, Weather: 1, GroundCondition: 1, RunningStyle: 1, ResultRank: 1, FrameOrder: 8, NPCCount: 0, }, RaceRewardInfo: CharaRaceReward{ ResultRank: 1, ResultTime: 0, RaceReward: []RaceReward{ { ItemType: 11, ItemID: 90, ItemNum: 2, }, { ItemType: 91, ItemID: 59, ItemNum: 800, }, { ItemType: 11, ItemID: 4, ItemNum: 2, }, }, RaceRewardBonus: []RaceReward{ { ItemType: 91, ItemID: 59, ItemNum: 800, }, }, GainedFans: 13608, CampaignIDs: []int32{223}, RaceRewardPlusBonus: []RaceReward{}, RaceRewardBonusWin: []RaceReward{}, }, LoseTipsID: 0, }, { RaceHistory: SingleRaceHistory{ Turn: 24, ProgramID: 625, Weather: 1, GroundCondition: 1, RunningStyle: 1, ResultRank: 1, FrameOrder: 4, NPCCount: 0, }, RaceRewardInfo: CharaRaceReward{ ResultRank: 1, ResultTime: 0, RaceReward: []RaceReward{ { ItemType: 11, ItemID: 92, ItemNum: 2, }, { ItemType: 91, ItemID: 59, ItemNum: 800, }, { ItemType: 11, ItemID: 7, ItemNum: 2, }, }, RaceRewardBonus: []RaceReward{ { ItemType: 30, ItemID: 110, ItemNum: 40, }, }, GainedFans: 13986, CampaignIDs: []int32{223}, RaceRewardPlusBonus: []RaceReward{}, RaceRewardBonusWin: []RaceReward{}, }, LoseTipsID: 0, }, { RaceHistory: SingleRaceHistory{ Turn: 31, ProgramID: 163, Weather: 1, GroundCondition: 1, RunningStyle: 1, ResultRank: 1, FrameOrder: 10, NPCCount: 0, }, RaceRewardInfo: CharaRaceReward{ ResultRank: 1, ResultTime: 0, RaceReward: []RaceReward{ { ItemType: 11, ItemID: 73, ItemNum: 2, }, { ItemType: 91, ItemID: 59, ItemNum: 800, }, { ItemType: 11, ItemID: 7, ItemNum: 2, }, }, RaceRewardBonus: []RaceReward{}, GainedFans: 21978, CampaignIDs: []int32{223}, RaceRewardPlusBonus: []RaceReward{}, RaceRewardBonusWin: []RaceReward{}, }, LoseTipsID: 0, }, { RaceHistory: SingleRaceHistory{ Turn: 33, ProgramID: 164, Weather: 1, GroundCondition: 1, RunningStyle: 1, ResultRank: 1, FrameOrder: 8, NPCCount: 0, }, RaceRewardInfo: CharaRaceReward{ ResultRank: 1, ResultTime: 0, RaceReward: []RaceReward{ { ItemType: 11, ItemID: 75, ItemNum: 2, }, { ItemType: 91, ItemID: 59, ItemNum: 800, }, { ItemType: 11, ItemID: 4, ItemNum: 2, }, }, RaceRewardBonus: []RaceReward{ { ItemType: 91, ItemID: 59, ItemNum: 800, }, }, GainedFans: 19656, CampaignIDs: []int32{223}, RaceRewardPlusBonus: []RaceReward{}, RaceRewardBonusWin: []RaceReward{}, }, LoseTipsID: 0, }, { RaceHistory: SingleRaceHistory{ Turn: 34, ProgramID: 166, Weather: 1, GroundCondition: 2, RunningStyle: 1, ResultRank: 1, FrameOrder: 8, NPCCount: 0, }, RaceRewardInfo: CharaRaceReward{ ResultRank: 1, ResultTime: 0, RaceReward: []RaceReward{ { ItemType: 11, ItemID: 78, ItemNum: 2, }, { ItemType: 91, ItemID: 59, ItemNum: 800, }, { ItemType: 11, ItemID: 7, ItemNum: 2, }, }, RaceRewardBonus: []RaceReward{ { ItemType: 91, ItemID: 59, ItemNum: 800, }, { ItemType: 90, ItemID: 43, ItemNum: 10, }, }, GainedFans: 39960, CampaignIDs: []int32{223}, RaceRewardPlusBonus: []RaceReward{}, RaceRewardBonusWin: []RaceReward{}, }, LoseTipsID: 0, }, { RaceHistory: SingleRaceHistory{ Turn: 36, ProgramID: 74, Weather: 1, GroundCondition: 1, RunningStyle: 1, ResultRank: 1, FrameOrder: 9, NPCCount: 0, }, RaceRewardInfo: CharaRaceReward{ ResultRank: 1, ResultTime: 0, RaceReward: []RaceReward{ { ItemType: 11, ItemID: 80, ItemNum: 2, }, { ItemType: 91, ItemID: 59, ItemNum: 800, }, { ItemType: 11, ItemID: 7, ItemNum: 2, }, }, RaceRewardBonus: []RaceReward{ { ItemType: 91, ItemID: 59, ItemNum: 800, }, }, GainedFans: 29970, CampaignIDs: []int32{223}, RaceRewardPlusBonus: []RaceReward{}, RaceRewardBonusWin: []RaceReward{}, }, LoseTipsID: 0, }, { RaceHistory: SingleRaceHistory{ Turn: 37, ProgramID: 1023, Weather: 2, GroundCondition: 1, RunningStyle: 1, ResultRank: 1, FrameOrder: 11, NPCCount: 0, }, RaceRewardInfo: CharaRaceReward{ ResultRank: 1, ResultTime: 0, RaceReward: []RaceReward{ { ItemType: 11, ItemID: 101, ItemNum: 2, }, { ItemType: 91, ItemID: 59, ItemNum: 800, }, { ItemType: 11, ItemID: 13, ItemNum: 2, }, }, RaceRewardBonus: []RaceReward{ { ItemType: 30, ItemID: 110, ItemNum: 40, }, }, GainedFans: 8991, CampaignIDs: []int32{223}, RaceRewardPlusBonus: []RaceReward{}, RaceRewardBonusWin: []RaceReward{}, }, LoseTipsID: 0, }, { RaceHistory: SingleRaceHistory{ Turn: 42, ProgramID: 75, Weather: 1, GroundCondition: 1, RunningStyle: 1, ResultRank: 1, FrameOrder: 1, NPCCount: 0, }, RaceRewardInfo: CharaRaceReward{ ResultRank: 1, ResultTime: 0, RaceReward: []RaceReward{ { ItemType: 11, ItemID: 81, ItemNum: 2, }, { ItemType: 91, ItemID: 59, ItemNum: 800, }, { ItemType: 11, ItemID: 1, ItemNum: 2, }, }, RaceRewardBonus: []RaceReward{}, GainedFans: 24804, CampaignIDs: []int32{223}, RaceRewardPlusBonus: []RaceReward{}, RaceRewardBonusWin: []RaceReward{}, }, LoseTipsID: 0, }, { RaceHistory: SingleRaceHistory{ Turn: 44, ProgramID: 168, Weather: 3, GroundCondition: 3, RunningStyle: 1, ResultRank: 1, FrameOrder: 9, NPCCount: 0, }, RaceRewardInfo: CharaRaceReward{ ResultRank: 1, ResultTime: 0, RaceReward: []RaceReward{ { ItemType: 11, ItemID: 83, ItemNum: 2, }, { ItemType: 91, ItemID: 59, ItemNum: 800, }, { ItemType: 11, ItemID: 10, ItemNum: 2, }, }, RaceRewardBonus: []RaceReward{ { ItemType: 91, ItemID: 59, ItemNum: 800, }, { ItemType: 30, ItemID: 110, ItemNum: 40, }, }, GainedFans: 23976, CampaignIDs: []int32{223}, RaceRewardPlusBonus: []RaceReward{}, RaceRewardBonusWin: []RaceReward{}, }, LoseTipsID: 0, }, { RaceHistory: SingleRaceHistory{ Turn: 45, ProgramID: 77, Weather: 1, GroundCondition: 1, RunningStyle: 1, ResultRank: 1, FrameOrder: 9, NPCCount: 0, }, RaceRewardInfo: CharaRaceReward{ ResultRank: 1, ResultTime: 0, RaceReward: []RaceReward{ { ItemType: 11, ItemID: 86, ItemNum: 2, }, { ItemType: 91, ItemID: 59, ItemNum: 800, }, { ItemType: 11, ItemID: 7, ItemNum: 2, }, }, RaceRewardBonus: []RaceReward{}, GainedFans: 20979, CampaignIDs: []int32{223}, RaceRewardPlusBonus: []RaceReward{}, RaceRewardBonusWin: []RaceReward{}, }, LoseTipsID: 0, }, { RaceHistory: SingleRaceHistory{ Turn: 46, ProgramID: 78, Weather: 1, GroundCondition: 1, RunningStyle: 1, ResultRank: 1, FrameOrder: 17, NPCCount: 0, }, RaceRewardInfo: CharaRaceReward{ ResultRank: 1, ResultTime: 0, RaceReward: []RaceReward{ { ItemType: 11, ItemID: 85, ItemNum: 2, }, { ItemType: 91, ItemID: 59, ItemNum: 800, }, { ItemType: 11, ItemID: 4, ItemNum: 2, }, }, RaceRewardBonus: []RaceReward{}, GainedFans: 20196, CampaignIDs: []int32{223}, RaceRewardPlusBonus: []RaceReward{}, RaceRewardBonusWin: []RaceReward{}, }, LoseTipsID: 0, }, { RaceHistory: SingleRaceHistory{ Turn: 47, ProgramID: 80, Weather: 1, GroundCondition: 1, RunningStyle: 1, ResultRank: 1, FrameOrder: 8, NPCCount: 0, }, RaceRewardInfo: CharaRaceReward{ ResultRank: 1, ResultTime: 0, RaceReward: []RaceReward{ { ItemType: 11, ItemID: 88, ItemNum: 2, }, { ItemType: 91, ItemID: 59, ItemNum: 800, }, { ItemType: 11, ItemID: 13, ItemNum: 2, }, }, RaceRewardBonus: []RaceReward{}, GainedFans: 18720, CampaignIDs: []int32{223}, RaceRewardPlusBonus: []RaceReward{}, RaceRewardBonusWin: []RaceReward{}, }, LoseTipsID: 0, }, { RaceHistory: SingleRaceHistory{ Turn: 48, ProgramID: 81, Weather: 2, GroundCondition: 1, RunningStyle: 1, ResultRank: 1, FrameOrder: 10, NPCCount: 0, }, RaceRewardInfo: CharaRaceReward{ ResultRank: 1, ResultTime: 0, RaceReward: []RaceReward{ { ItemType: 11, ItemID: 91, ItemNum: 2, }, { ItemType: 91, ItemID: 59, ItemNum: 800, }, { ItemType: 11, ItemID: 10, ItemNum: 2, }, }, RaceRewardBonus: []RaceReward{}, GainedFans: 57240, CampaignIDs: []int32{223}, RaceRewardPlusBonus: []RaceReward{}, RaceRewardBonusWin: []RaceReward{}, }, LoseTipsID: 0, }, { RaceHistory: SingleRaceHistory{ Turn: 51, ProgramID: 1106, Weather: 1, GroundCondition: 1, RunningStyle: 1, ResultRank: 1, FrameOrder: 4, NPCCount: 0, }, RaceRewardInfo: CharaRaceReward{ ResultRank: 1, ResultTime: 0, RaceReward: []RaceReward{ { ItemType: 11, ItemID: 175, ItemNum: 2, }, { ItemType: 91, ItemID: 59, ItemNum: 800, }, { ItemType: 11, ItemID: 13, ItemNum: 2, }, }, RaceRewardBonus: []RaceReward{ { ItemType: 90, ItemID: 43, ItemNum: 10, }, }, GainedFans: 11988, CampaignIDs: []int32{223}, RaceRewardPlusBonus: []RaceReward{}, RaceRewardBonusWin: []RaceReward{}, }, LoseTipsID: 0, }, { RaceHistory: SingleRaceHistory{ Turn: 52, ProgramID: 1, Weather: 1, GroundCondition: 1, RunningStyle: 1, ResultRank: 1, FrameOrder: 16, NPCCount: 0, }, RaceRewardInfo: CharaRaceReward{ ResultRank: 1, ResultTime: 0, RaceReward: []RaceReward{ { ItemType: 11, ItemID: 69, ItemNum: 2, }, { ItemType: 91, ItemID: 59, ItemNum: 800, }, { ItemType: 30, ItemID: 110, ItemNum: 40, }, { ItemType: 11, ItemID: 13, ItemNum: 2, }, }, RaceRewardBonus: []RaceReward{ { ItemType: 91, ItemID: 59, ItemNum: 800, }, { ItemType: 30, ItemID: 110, ItemNum: 40, }, }, GainedFans: 19440, CampaignIDs: []int32{223}, RaceRewardPlusBonus: []RaceReward{}, RaceRewardBonusWin: []RaceReward{}, }, LoseTipsID: 0, }, { RaceHistory: SingleRaceHistory{ Turn: 54, ProgramID: 12, Weather: 2, GroundCondition: 1, RunningStyle: 1, ResultRank: 1, FrameOrder: 10, NPCCount: 0, }, RaceRewardInfo: CharaRaceReward{ ResultRank: 1, ResultTime: 0, RaceReward: []RaceReward{ { ItemType: 91, ItemID: 59, ItemNum: 800, }, { ItemType: 11, ItemID: 10, ItemNum: 2, }, }, RaceRewardBonus: []RaceReward{}, GainedFans: 13387, CampaignIDs: []int32{223}, RaceRewardPlusBonus: []RaceReward{}, RaceRewardBonusWin: []RaceReward{}, }, LoseTipsID: 0, }, { RaceHistory: SingleRaceHistory{ Turn: 56, ProgramID: 4, Weather: 1, GroundCondition: 1, RunningStyle: 1, ResultRank: 1, FrameOrder: 17, NPCCount: 0, }, RaceRewardInfo: CharaRaceReward{ ResultRank: 1, ResultTime: 0, RaceReward: []RaceReward{ { ItemType: 11, ItemID: 74, ItemNum: 2, }, { ItemType: 91, ItemID: 59, ItemNum: 800, }, { ItemType: 11, ItemID: 10, ItemNum: 2, }, }, RaceRewardBonus: []RaceReward{}, GainedFans: 29970, CampaignIDs: []int32{223}, RaceRewardPlusBonus: []RaceReward{}, RaceRewardBonusWin: []RaceReward{}, }, LoseTipsID: 0, }, { RaceHistory: SingleRaceHistory{ Turn: 57, ProgramID: 5, Weather: 3, GroundCondition: 4, RunningStyle: 1, ResultRank: 1, FrameOrder: 13, NPCCount: 0, }, RaceRewardInfo: CharaRaceReward{ ResultRank: 1, ResultTime: 0, RaceReward: []RaceReward{ { ItemType: 11, ItemID: 76, ItemNum: 2, }, { ItemType: 91, ItemID: 59, ItemNum: 800, }, { ItemType: 11, ItemID: 4, ItemNum: 2, }, }, RaceRewardBonus: []RaceReward{}, GainedFans: 19278, CampaignIDs: []int32{223}, RaceRewardPlusBonus: []RaceReward{}, RaceRewardBonusWin: []RaceReward{}, }, LoseTipsID: 0, }, { RaceHistory: SingleRaceHistory{ Turn: 59, ProgramID: 73, Weather: 1, GroundCondition: 1, RunningStyle: 1, ResultRank: 1, FrameOrder: 11, NPCCount: 0, }, RaceRewardInfo: CharaRaceReward{ ResultRank: 1, ResultTime: 0, RaceReward: []RaceReward{ { ItemType: 11, ItemID: 79, ItemNum: 2, }, { ItemType: 91, ItemID: 59, ItemNum: 800, }, { ItemType: 11, ItemID: 4, ItemNum: 2, }, }, RaceRewardBonus: []RaceReward{}, GainedFans: 24804, CampaignIDs: []int32{223}, RaceRewardPlusBonus: []RaceReward{}, RaceRewardBonusWin: []RaceReward{}, }, LoseTipsID: 0, }, { RaceHistory: SingleRaceHistory{ Turn: 60, ProgramID: 74, Weather: 2, GroundCondition: 1, RunningStyle: 1, ResultRank: 1, FrameOrder: 7, NPCCount: 0, }, RaceRewardInfo: CharaRaceReward{ ResultRank: 1, ResultTime: 0, RaceReward: []RaceReward{ { ItemType: 11, ItemID: 80, ItemNum: 2, }, { ItemType: 91, ItemID: 59, ItemNum: 800, }, { ItemType: 11, ItemID: 7, ItemNum: 2, }, }, RaceRewardBonus: []RaceReward{ { ItemType: 91, ItemID: 59, ItemNum: 800, }, }, GainedFans: 29970, CampaignIDs: []int32{223}, RaceRewardPlusBonus: []RaceReward{}, RaceRewardBonusWin: []RaceReward{}, }, LoseTipsID: 0, }, { RaceHistory: SingleRaceHistory{ Turn: 67, ProgramID: 1109, Weather: 1, GroundCondition: 1, RunningStyle: 1, ResultRank: 2, FrameOrder: 1, NPCCount: 0, }, RaceRewardInfo: CharaRaceReward{ ResultRank: 2, ResultTime: 0, RaceReward: []RaceReward{ { ItemType: 91, ItemID: 59, ItemNum: 800, }, }, RaceRewardBonus: []RaceReward{}, GainedFans: 4795, CampaignIDs: []int32{223}, RaceRewardPlusBonus: []RaceReward{}, RaceRewardBonusWin: []RaceReward{}, }, LoseTipsID: 0, }, { RaceHistory: SingleRaceHistory{ Turn: 68, ProgramID: 76, Weather: 2, GroundCondition: 1, RunningStyle: 1, ResultRank: 1, FrameOrder: 2, NPCCount: 0, }, RaceRewardInfo: CharaRaceReward{ ResultRank: 1, ResultTime: 0, RaceReward: []RaceReward{ { ItemType: 11, ItemID: 84, ItemNum: 2, }, { ItemType: 91, ItemID: 59, ItemNum: 800, }, { ItemType: 11, ItemID: 7, ItemNum: 2, }, }, RaceRewardBonus: []RaceReward{}, GainedFans: 29970, CampaignIDs: []int32{223}, RaceRewardPlusBonus: []RaceReward{}, RaceRewardBonusWin: []RaceReward{}, }, LoseTipsID: 0, }, { RaceHistory: SingleRaceHistory{ Turn: 69, ProgramID: 1026, Weather: 1, GroundCondition: 1, RunningStyle: 1, ResultRank: 1, FrameOrder: 16, NPCCount: 0, }, RaceRewardInfo: CharaRaceReward{ ResultRank: 1, ResultTime: 0, RaceReward: []RaceReward{ { ItemType: 11, ItemID: 103, ItemNum: 2, }, { ItemType: 91, ItemID: 59, ItemNum: 800, }, { ItemType: 11, ItemID: 13, ItemNum: 2, }, }, RaceRewardBonus: []RaceReward{ { ItemType: 91, ItemID: 59, ItemNum: 800, }, }, GainedFans: 15984, CampaignIDs: []int32{223}, RaceRewardPlusBonus: []RaceReward{}, RaceRewardBonusWin: []RaceReward{}, }, LoseTipsID: 0, }, { RaceHistory: SingleRaceHistory{ Turn: 70, ProgramID: 79, Weather: 1, GroundCondition: 1, RunningStyle: 1, ResultRank: 1, FrameOrder: 13, NPCCount: 0, }, RaceRewardInfo: CharaRaceReward{ ResultRank: 1, ResultTime: 0, RaceReward: []RaceReward{ { ItemType: 11, ItemID: 87, ItemNum: 2, }, { ItemType: 91, ItemID: 59, ItemNum: 800, }, { ItemType: 11, ItemID: 7, ItemNum: 2, }, }, RaceRewardBonus: []RaceReward{}, GainedFans: 56160, CampaignIDs: []int32{223}, RaceRewardPlusBonus: []RaceReward{}, RaceRewardBonusWin: []RaceReward{}, }, LoseTipsID: 0, }, { RaceHistory: SingleRaceHistory{ Turn: 72, ProgramID: 81, Weather: 1, GroundCondition: 1, RunningStyle: 1, ResultRank: 1, FrameOrder: 10, NPCCount: 0, }, RaceRewardInfo: CharaRaceReward{ ResultRank: 1, ResultTime: 0, RaceReward: []RaceReward{ { ItemType: 11, ItemID: 91, ItemNum: 2, }, { ItemType: 91, ItemID: 59, ItemNum: 800, }, { ItemType: 11, ItemID: 10, ItemNum: 2, }, }, RaceRewardBonus: []RaceReward{}, GainedFans: 59940, CampaignIDs: []int32{223}, RaceRewardPlusBonus: []RaceReward{}, RaceRewardBonusWin: []RaceReward{}, }, LoseTipsID: 0, }, { RaceHistory: SingleRaceHistory{ Turn: 74, ProgramID: 2020, Weather: 1, GroundCondition: 1, RunningStyle: 1, ResultRank: 1, FrameOrder: 5, NPCCount: 0, }, RaceRewardInfo: CharaRaceReward{ ResultRank: 1, ResultTime: 0, RaceReward: []RaceReward{ { ItemType: 91, ItemID: 59, ItemNum: 1200, }, { ItemType: 11, ItemID: 7, ItemNum: 2, }, }, RaceRewardBonus: []RaceReward{ { ItemType: 91, ItemID: 59, ItemNum: 1200, }, }, GainedFans: 13986, CampaignIDs: []int32{223}, RaceRewardPlusBonus: []RaceReward{}, RaceRewardBonusWin: []RaceReward{}, }, LoseTipsID: 0, }, { RaceHistory: SingleRaceHistory{ Turn: 76, ProgramID: 2121, Weather: 2, GroundCondition: 1, RunningStyle: 1, ResultRank: 1, FrameOrder: 4, NPCCount: 0, }, RaceRewardInfo: CharaRaceReward{ ResultRank: 1, ResultTime: 0, RaceReward: []RaceReward{ { ItemType: 91, ItemID: 59, ItemNum: 1200, }, { ItemType: 11, ItemID: 7, ItemNum: 2, }, }, RaceRewardBonus: []RaceReward{ { ItemType: 91, ItemID: 59, ItemNum: 1200, }, }, GainedFans: 19980, CampaignIDs: []int32{223}, RaceRewardPlusBonus: []RaceReward{}, RaceRewardBonusWin: []RaceReward{}, }, LoseTipsID: 0, }, { RaceHistory: SingleRaceHistory{ Turn: 78, ProgramID: 2218, Weather: 2, GroundCondition: 1, RunningStyle: 1, ResultRank: 1, FrameOrder: 3, NPCCount: 0, }, RaceRewardInfo: CharaRaceReward{ ResultRank: 1, ResultTime: 0, RaceReward: []RaceReward{ { ItemType: 91, ItemID: 59, ItemNum: 1200, }, { ItemType: 30, ItemID: 110, ItemNum: 80, }, { ItemType: 11, ItemID: 7, ItemNum: 2, }, }, RaceRewardBonus: []RaceReward{}, GainedFans: 59940, CampaignIDs: []int32{223}, RaceRewardPlusBonus: []RaceReward{}, RaceRewardBonusWin: []RaceReward{}, }, LoseTipsID: 0, }, }, GainSkillIDs: []horse.SkillID{}, TotalSkillPoint: 4260, }, End: End{ Chara: SingleModeChara{ SingleModeCharaID: 1829, CardID: 102401, CharaGrade: 10, Speed: 1140, Stamina: 691, Power: 883, Wiz: 988, Guts: 657, Vital: 0, MaxSpeed: 1623, MaxStamina: 1301, MaxPower: 1326, MaxWiz: 1345, MaxGuts: 1520, DefaultMaxSpeed: 1200, DefaultMaxStamina: 1200, DefaultMaxPower: 1200, DefaultMaxWiz: 1200, DefaultMaxGuts: 1200, MaxVital: 100, Motivation: 5, Fans: 741405, Rarity: 4, RaceProgramID: 0, ReserveRaceProgramID: 0, RaceRunningStyle: 1, IsShortRace: 0, TalentLevel: 5, Skills: []Skill{ {SkillID: 100241, Level: 5}, }, DisableSkillIDs: []horse.SkillID{}, SkillTips: []SkillTip{ {GroupID: 90014, Rarity: 1, Level: 3}, {GroupID: 90020, Rarity: 1, Level: 2}, {GroupID: 20054, Rarity: 1, Level: 4}, {GroupID: 20035, Rarity: 1, Level: 5}, {GroupID: 20203, Rarity: 1, Level: 1}, {GroupID: 20126, Rarity: 1, Level: 1}, {GroupID: 20046, Rarity: 1, Level: 5}, {GroupID: 20160, Rarity: 1, Level: 2}, {GroupID: 20091, Rarity: 1, Level: 3}, {GroupID: 20166, Rarity: 1, Level: 4}, {GroupID: 20166, Rarity: 2, Level: 3}, {GroupID: 20125, Rarity: 1, Level: 2}, {GroupID: 20132, Rarity: 1, Level: 4}, {GroupID: 20007, Rarity: 1, Level: 1}, {GroupID: 20071, Rarity: 2, Level: 1}, {GroupID: 20071, Rarity: 1, Level: 3}, {GroupID: 20059, Rarity: 1, Level: 1}, {GroupID: 21007, Rarity: 1, Level: 1}, {GroupID: 21007, Rarity: 2, Level: 3}, {GroupID: 20023, Rarity: 1, Level: 1}, {GroupID: 20135, Rarity: 1, Level: 1}, {GroupID: 20004, Rarity: 1, Level: 1}, {GroupID: 20013, Rarity: 1, Level: 1}, {GroupID: 20019, Rarity: 1, Level: 1}, {GroupID: 20026, Rarity: 1, Level: 1}, {GroupID: 20138, Rarity: 1, Level: 4}, {GroupID: 20030, Rarity: 1, Level: 4}, {GroupID: 20018, Rarity: 1, Level: 3}, {GroupID: 20165, Rarity: 1, Level: 3}, {GroupID: 20033, Rarity: 1, Level: 5}, {GroupID: 20033, Rarity: 2, Level: 3}, {GroupID: 20043, Rarity: 1, Level: 3}, {GroupID: 20246, Rarity: 1, Level: 3}, {GroupID: 20110, Rarity: 1, Level: 3}, }, SupportCards: []SingleModeSupportCard{ { Position: 1, SupportCardID: 30010, LimitBreakCount: 4, Exp: 118185, OwnerViewerID: 0, }, { Position: 2, SupportCardID: 30108, LimitBreakCount: 4, Exp: 118185, OwnerViewerID: 0, }, { Position: 3, SupportCardID: 30062, LimitBreakCount: 4, Exp: 118185, OwnerViewerID: 0, }, { Position: 4, SupportCardID: 30107, LimitBreakCount: 4, Exp: 118185, OwnerViewerID: 0, }, { Position: 5, SupportCardID: 30028, LimitBreakCount: 4, Exp: 118185, OwnerViewerID: 0, }, { Position: 6, SupportCardID: 30052, LimitBreakCount: 4, Exp: 118185, OwnerViewerID: 872748063176, }, }, SuccessionTrainedCharaID1: 4637, SuccessionTrainedCharaID2: 4694, ProperDistanceShort: horse.AptitudeLvD, ProperDistanceMile: horse.AptitudeLvC, ProperDistanceMiddle: horse.AptitudeLvA, ProperDistanceLong: horse.AptitudeLvA, ProperRunningStyleNige: horse.AptitudeLvA, ProperRunningStyleSenko: horse.AptitudeLvA, ProperRunningStyleSashi: horse.AptitudeLvB, ProperRunningStyleOikomi: horse.AptitudeLvB, ProperGroundTurf: horse.AptitudeLvA, ProperGroundDirt: horse.AptitudeLvS, Turn: 78, SkillPoint: 4260, ShortCutState: 0, State: 3, PlayingState: 1, ScenarioID: 3, RouteID: 14, StartTime: "2026-07-28 18:11:42", Evaluations: []Evaluation{ { TargetID: 1, TrainingPartner: 1, Evaluation: 15, IsOuting: 0, StoryStep: 0, IsAppear: 1, GroupOutingInfo: []GroupOuting{}, }, { TargetID: 2, TrainingPartner: 2, Evaluation: 20, IsOuting: 0, StoryStep: 0, IsAppear: 1, GroupOutingInfo: []GroupOuting{}, }, { TargetID: 3, TrainingPartner: 3, Evaluation: 30, IsOuting: 0, StoryStep: 0, IsAppear: 1, GroupOutingInfo: []GroupOuting{}, }, { TargetID: 4, TrainingPartner: 4, Evaluation: 30, IsOuting: 0, StoryStep: 0, IsAppear: 1, GroupOutingInfo: []GroupOuting{}, }, { TargetID: 5, TrainingPartner: 5, Evaluation: 35, IsOuting: 0, StoryStep: 0, IsAppear: 1, GroupOutingInfo: []GroupOuting{}, }, { TargetID: 6, TrainingPartner: 6, Evaluation: 30, IsOuting: 0, StoryStep: 0, IsAppear: 0, GroupOutingInfo: []GroupOuting{}, }, { TargetID: 101, TrainingPartner: 101, Evaluation: 0, IsOuting: 0, StoryStep: 0, IsAppear: 0, GroupOutingInfo: []GroupOuting{}, }, { TargetID: 102, TrainingPartner: 102, Evaluation: 0, IsOuting: 0, StoryStep: 0, IsAppear: 0, GroupOutingInfo: []GroupOuting{}, }, { TargetID: 103, TrainingPartner: 103, Evaluation: 0, IsOuting: 0, StoryStep: 0, IsAppear: 0, GroupOutingInfo: []GroupOuting{}, }, { TargetID: 104, TrainingPartner: 104, Evaluation: 0, IsOuting: 0, StoryStep: 0, IsAppear: 0, GroupOutingInfo: []GroupOuting{}, }, { TargetID: 106, TrainingPartner: 106, Evaluation: 0, IsOuting: 0, StoryStep: 0, IsAppear: 0, GroupOutingInfo: []GroupOuting{}, }, }, TrainingLevels: []TrainingLevel{ {CommandID: 101, Level: 1}, {CommandID: 102, Level: 1}, {CommandID: 103, Level: 1}, {CommandID: 105, Level: 1}, {CommandID: 106, Level: 1}, {CommandID: 601, Level: 5}, {CommandID: 602, Level: 5}, {CommandID: 603, Level: 5}, {CommandID: 604, Level: 5}, {CommandID: 605, Level: 5}, }, NicknameIDs: []int32{}, CharaEffectIDs: []int32{}, RouteRaceIDs: []int32{ 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, }, GuestOutings: []GuestOuting{}, SkillUpgrades: []SingleModeSkillUpgrade{}, }, RewardSummary: RewardSummary{ AddItem: []AddItem{ {ItemID: 59, Number: 32800}, {ItemID: 90, Number: 2}, {ItemID: 4, Number: 10}, {ItemID: 92, Number: 2}, {ItemID: 7, Number: 22}, {ItemID: 110, Number: 280}, {ItemID: 73, Number: 2}, {ItemID: 75, Number: 2}, {ItemID: 78, Number: 2}, {ItemID: 43, Number: 20}, {ItemID: 80, Number: 4}, {ItemID: 101, Number: 2}, {ItemID: 13, Number: 10}, {ItemID: 81, Number: 2}, {ItemID: 1, Number: 2}, {ItemID: 83, Number: 2}, {ItemID: 10, Number: 10}, {ItemID: 86, Number: 2}, {ItemID: 85, Number: 2}, {ItemID: 88, Number: 2}, {ItemID: 91, Number: 4}, {ItemID: 175, Number: 2}, {ItemID: 69, Number: 2}, {ItemID: 74, Number: 2}, {ItemID: 76, Number: 2}, {ItemID: 79, Number: 2}, {ItemID: 84, Number: 2}, {ItemID: 103, Number: 2}, {ItemID: 87, Number: 2}, }, }, }, }, }, { name: "v2.5.4", json: v2_5_4, want: WorkIdleSingleMode{ ProgressInfo: ProgressInfo{ Chara: SingleModeChara{ SingleModeCharaID: 1831, CardID: 104601, CharaGrade: 1, Speed: 115, Stamina: 130, Power: 85, Wiz: 107, Guts: 112, Vital: 100, MaxSpeed: 1616, MaxStamina: 1334, MaxPower: 1300, MaxWiz: 1316, MaxGuts: 1509, DefaultMaxSpeed: 1200, DefaultMaxStamina: 1200, DefaultMaxPower: 1200, DefaultMaxWiz: 1200, DefaultMaxGuts: 1200, MaxVital: 100, Motivation: 3, Fans: 1, Rarity: 3, RaceProgramID: 0, ReserveRaceProgramID: 0, RaceRunningStyle: 1, IsShortRace: 0, TalentLevel: 5, Skills: []Skill{ {SkillID: 100461, Level: 1}, }, DisableSkillIDs: []horse.SkillID{}, SkillTips: []SkillTip{ {GroupID: 90024, Rarity: 1, Level: 2}, {GroupID: 90009, Rarity: 1, Level: 1}, }, SupportCards: []SingleModeSupportCard{ { Position: 1, SupportCardID: 30010, LimitBreakCount: 4, Exp: 118185, OwnerViewerID: 0, }, { Position: 2, SupportCardID: 30108, LimitBreakCount: 4, Exp: 118185, OwnerViewerID: 0, }, { Position: 3, SupportCardID: 30062, LimitBreakCount: 4, Exp: 118185, OwnerViewerID: 0, }, { Position: 4, SupportCardID: 30107, LimitBreakCount: 4, Exp: 118185, OwnerViewerID: 0, }, { Position: 5, SupportCardID: 30028, LimitBreakCount: 4, Exp: 118185, OwnerViewerID: 0, }, { Position: 6, SupportCardID: 30052, LimitBreakCount: 4, Exp: 118185, OwnerViewerID: 596515219419, }, }, SuccessionTrainedCharaID1: 4699, SuccessionTrainedCharaID2: 4702, ProperDistanceShort: horse.AptitudeLvB, ProperDistanceMile: horse.AptitudeLvA, ProperDistanceMiddle: horse.AptitudeLvA, ProperDistanceLong: horse.AptitudeLvE, ProperRunningStyleNige: horse.AptitudeLvA, ProperRunningStyleSenko: horse.AptitudeLvD, ProperRunningStyleSashi: horse.AptitudeLvG, ProperRunningStyleOikomi: horse.AptitudeLvG, ProperGroundTurf: horse.AptitudeLvB, ProperGroundDirt: horse.AptitudeLvA, Turn: 1, SkillPoint: 0, ShortCutState: 0, State: 0, PlayingState: 1, ScenarioID: 3, RouteID: 31, StartTime: "2026-07-29 03:42:04", Evaluations: []Evaluation{ { TargetID: 1, TrainingPartner: 1, Evaluation: 15, IsOuting: 0, StoryStep: 0, IsAppear: 1, GroupOutingInfo: []GroupOuting{}, }, { TargetID: 2, TrainingPartner: 2, Evaluation: 20, IsOuting: 0, StoryStep: 0, IsAppear: 1, GroupOutingInfo: []GroupOuting{}, }, { TargetID: 3, TrainingPartner: 3, Evaluation: 30, IsOuting: 0, StoryStep: 0, IsAppear: 1, GroupOutingInfo: []GroupOuting{}, }, { TargetID: 4, TrainingPartner: 4, Evaluation: 30, IsOuting: 0, StoryStep: 0, IsAppear: 1, GroupOutingInfo: []GroupOuting{}, }, { TargetID: 5, TrainingPartner: 5, Evaluation: 35, IsOuting: 0, StoryStep: 0, IsAppear: 1, GroupOutingInfo: []GroupOuting{}, }, { TargetID: 6, TrainingPartner: 6, Evaluation: 30, IsOuting: 0, StoryStep: 0, IsAppear: 0, GroupOutingInfo: []GroupOuting{}, }, { TargetID: 101, TrainingPartner: 101, Evaluation: 0, IsOuting: 0, StoryStep: 0, IsAppear: 0, GroupOutingInfo: []GroupOuting{}, }, { TargetID: 102, TrainingPartner: 102, Evaluation: 0, IsOuting: 0, StoryStep: 0, IsAppear: 0, GroupOutingInfo: []GroupOuting{}, }, { TargetID: 103, TrainingPartner: 103, Evaluation: 0, IsOuting: 0, StoryStep: 0, IsAppear: 0, GroupOutingInfo: []GroupOuting{}, }, { TargetID: 104, TrainingPartner: 104, Evaluation: 0, IsOuting: 0, StoryStep: 0, IsAppear: 0, GroupOutingInfo: []GroupOuting{}, }, { TargetID: 106, TrainingPartner: 106, Evaluation: 0, IsOuting: 0, StoryStep: 0, IsAppear: 0, GroupOutingInfo: []GroupOuting{}, }, }, TrainingLevels: []TrainingLevel{ {CommandID: 101, Level: 1}, {CommandID: 102, Level: 1}, {CommandID: 103, Level: 1}, {CommandID: 105, Level: 1}, {CommandID: 106, Level: 1}, {CommandID: 601, Level: 5}, {CommandID: 602, Level: 5}, {CommandID: 603, Level: 5}, {CommandID: 604, Level: 5}, {CommandID: 605, Level: 5}, }, NicknameIDs: []int32{}, CharaEffectIDs: []int32{}, RouteRaceIDs: []int32{ 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, }, GuestOutings: []GuestOuting{}, SkillUpgrades: []SingleModeSkillUpgrade{}, }, StartTime: "2026-07-29 03:42:04", EndTime: "2026-07-29 04:32:04", DressID: 0, }, ProgressLog: IdleSingleModeProgressLog{ CharaEffectLog: []CharaEffectLog{ {CharaEffectID: 16, IsActive: false}, }, SupportCardGains: []IdleSingleModeSupportCardGain{ { SupportCardID: 30010, GainInfo: IdleSingleModeGainInfo{ Speed: IdleSingleModeSignedInt{Value: 40}, Stamina: IdleSingleModeSignedInt{Value: 24}, Power: IdleSingleModeSignedInt{Value: 24}, Wiz: IdleSingleModeSignedInt{Value: 136}, Guts: IdleSingleModeSignedInt{Value: 24}, SkillPoint: 224, SkillTips: []SkillTip{ {GroupID: 20001, Rarity: 1, Level: 1}, {GroupID: 20049, Rarity: 1, Level: 1}, }, }, }, { SupportCardID: 30108, GainInfo: IdleSingleModeGainInfo{ Speed: IdleSingleModeSignedInt{Value: 38}, Stamina: IdleSingleModeSignedInt{Value: 25}, Power: IdleSingleModeSignedInt{Value: 25}, Wiz: IdleSingleModeSignedInt{Value: 95}, Guts: IdleSingleModeSignedInt{Value: 25}, SkillPoint: 286, SkillTips: []SkillTip{ {GroupID: 20018, Rarity: 1, Level: 4}, {GroupID: 20170, Rarity: 1, Level: 4}, }, }, }, { SupportCardID: 30062, GainInfo: IdleSingleModeGainInfo{ Speed: IdleSingleModeSignedInt{Value: 22}, Stamina: IdleSingleModeSignedInt{Value: 130}, Power: IdleSingleModeSignedInt{Value: 22}, Wiz: IdleSingleModeSignedInt{Value: 22}, Guts: IdleSingleModeSignedInt{Value: 46}, SkillPoint: 164, SkillTips: []SkillTip{ {GroupID: 20054, Rarity: 1, Level: 1}, {GroupID: 20055, Rarity: 1, Level: 1}, }, }, }, { SupportCardID: 30107, GainInfo: IdleSingleModeGainInfo{ Speed: IdleSingleModeSignedInt{Value: 96}, Stamina: IdleSingleModeSignedInt{Value: 25}, Power: IdleSingleModeSignedInt{Value: 62}, Wiz: IdleSingleModeSignedInt{Value: 25}, Guts: IdleSingleModeSignedInt{Value: 25}, SkillPoint: 201, SkillTips: []SkillTip{ {GroupID: 20018, Rarity: 1, Level: 1}, {GroupID: 20160, Rarity: 1, Level: 3}, }, }, }, { SupportCardID: 30028, GainInfo: IdleSingleModeGainInfo{ Speed: IdleSingleModeSignedInt{Value: 82}, Stamina: IdleSingleModeSignedInt{Value: 24}, Power: IdleSingleModeSignedInt{Value: 60}, Wiz: IdleSingleModeSignedInt{Value: 24}, Guts: IdleSingleModeSignedInt{Value: 24}, SkillPoint: 199, SkillTips: []SkillTip{ {GroupID: 20038, Rarity: 1, Level: 3}, {GroupID: 20035, Rarity: 1, Level: 5}, }, }, }, { SupportCardID: 30052, GainInfo: IdleSingleModeGainInfo{ Speed: IdleSingleModeSignedInt{Value: 48}, Stamina: IdleSingleModeSignedInt{Value: 20}, Power: IdleSingleModeSignedInt{Value: 20}, Wiz: IdleSingleModeSignedInt{Value: 20}, Guts: IdleSingleModeSignedInt{Value: 48}, SkillPoint: 387, SkillTips: []SkillTip{}, }, }, }, EventGain: IdleSingleModeGainInfo{ Speed: IdleSingleModeSignedInt{Value: 598}, Stamina: IdleSingleModeSignedInt{Value: 281}, Power: IdleSingleModeSignedInt{Value: 438}, Wiz: IdleSingleModeSignedInt{Value: 419}, Guts: IdleSingleModeSignedInt{Value: 342}, SkillPoint: 2405, SkillTips: []SkillTip{ {GroupID: 20071, Rarity: 2, Level: 1}, {GroupID: 20004, Rarity: 1, Level: 4}, {GroupID: 20167, Rarity: 1, Level: 3}, {GroupID: 20235, Rarity: 1, Level: 1}, {GroupID: 20054, Rarity: 1, Level: 2}, {GroupID: 20025, Rarity: 1, Level: 1}, {GroupID: 21007, Rarity: 1, Level: 1}, {GroupID: 21007, Rarity: 2, Level: 3}, {GroupID: 20166, Rarity: 2, Level: 3}, {GroupID: 20220, Rarity: 1, Level: 1}, {GroupID: 20226, Rarity: 1, Level: 1}, {GroupID: 20017, Rarity: 1, Level: 1}, {GroupID: 20053, Rarity: 1, Level: 1}, {GroupID: 20135, Rarity: 1, Level: 1}, {GroupID: 20233, Rarity: 1, Level: 3}, {GroupID: 20073, Rarity: 1, Level: 1}, {GroupID: 20128, Rarity: 1, Level: 1}, }, }, SuccessionGain: IdleSingleModeGainInfo{ Speed: IdleSingleModeSignedInt{Value: 71}, Stamina: IdleSingleModeSignedInt{Value: 129}, Power: IdleSingleModeSignedInt{Value: 3}, Wiz: IdleSingleModeSignedInt{Value: 59}, Guts: IdleSingleModeSignedInt{Value: 39}, MaxSpeed: 24, MaxStamina: 48, MaxPower: 0, MaxWiz: 21, MaxGuts: 17, ProperDistanceShort: 0, ProperDistanceMile: 0, ProperDistanceMiddle: 0, ProperDistanceLong: 0, ProperRunningStyleNige: 0, ProperRunningStyleSenko: 0, ProperRunningStyleSashi: 0, ProperRunningStyleOikomi: 0, ProperGroundTurf: 4, ProperGroundDirt: 1, SkillPoint: 0, SkillTips: []SkillTip{ {GroupID: 90009, Rarity: 1, Level: 4}, {GroupID: 90024, Rarity: 1, Level: 3}, {GroupID: 20038, Rarity: 1, Level: 2}, {GroupID: 20071, Rarity: 1, Level: 5}, {GroupID: 20126, Rarity: 1, Level: 5}, {GroupID: 21003, Rarity: 1, Level: 3}, {GroupID: 20004, Rarity: 1, Level: 1}, {GroupID: 20003, Rarity: 1, Level: 1}, {GroupID: 20203, Rarity: 1, Level: 2}, {GroupID: 20159, Rarity: 1, Level: 1}, {GroupID: 20021, Rarity: 1, Level: 4}, {GroupID: 20222, Rarity: 1, Level: 1}, {GroupID: 20014, Rarity: 1, Level: 1}, {GroupID: 21001, Rarity: 1, Level: 1}, }, }, SuccessionFactorGains: []IdleSingleModeSuccessionFactorGain{ { Year: 1, GainFactorInfo: []Factor{ {FactorID: 402, Level: 0}, {FactorID: 10240102, Level: 0}, {FactorID: 202, Level: 0}, {FactorID: 10090101, Level: 0}, {FactorID: 103, Level: 0}, {FactorID: 1102, Level: 0}, {FactorID: 503, Level: 0}, {FactorID: 202, Level: 0}, {FactorID: 1103, Level: 0}, {FactorID: 203, Level: 0}, {FactorID: 1103, Level: 0}, }, }, { Year: 2, GainFactorInfo: []Factor{ {FactorID: 402, Level: 0}, {FactorID: 1203, Level: 0}, {FactorID: 1001903, Level: 0}, {FactorID: 2003802, Level: 0}, {FactorID: 2007103, Level: 0}, {FactorID: 2012602, Level: 0}, {FactorID: 202, Level: 0}, {FactorID: 10090101, Level: 0}, {FactorID: 103, Level: 0}, {FactorID: 1102, Level: 0}, {FactorID: 3000402, Level: 0}, {FactorID: 503, Level: 0}, {FactorID: 1000502, Level: 0}, {FactorID: 2100303, Level: 0}, {FactorID: 202, Level: 0}, {FactorID: 203, Level: 0}, }, }, { Year: 3, GainFactorInfo: []Factor{ {FactorID: 402, Level: 0}, {FactorID: 2007103, Level: 0}, {FactorID: 2020302, Level: 0}, {FactorID: 10240102, Level: 0}, {FactorID: 202, Level: 0}, {FactorID: 103, Level: 0}, {FactorID: 1001702, Level: 0}, {FactorID: 1003101, Level: 0}, {FactorID: 503, Level: 0}, {FactorID: 2015902, Level: 0}, {FactorID: 2102103, Level: 0}, {FactorID: 202, Level: 0}, {FactorID: 203, Level: 0}, {FactorID: 2002102, Level: 0}, }, }, }, RaceHistory: []IdleSingleModeRaceHistory{ { RaceHistory: SingleRaceHistory{ Turn: 12, ProgramID: 846, Weather: 1, GroundCondition: 2, RunningStyle: 1, ResultRank: 1, FrameOrder: 8, NPCCount: 0, }, RaceRewardInfo: CharaRaceReward{ ResultRank: 1, ResultTime: 0, RaceReward: []RaceReward{ { ItemType: 91, ItemID: 59, ItemNum: 400, }, }, RaceRewardBonus: []RaceReward{}, GainedFans: 1398, CampaignIDs: []int32{223}, RaceRewardPlusBonus: []RaceReward{}, RaceRewardBonusWin: []RaceReward{}, }, LoseTipsID: 0, }, { RaceHistory: SingleRaceHistory{ Turn: 23, ProgramID: 624, Weather: 1, GroundCondition: 1, RunningStyle: 1, ResultRank: 1, FrameOrder: 3, NPCCount: 0, }, RaceRewardInfo: CharaRaceReward{ ResultRank: 1, ResultTime: 0, RaceReward: []RaceReward{ { ItemType: 11, ItemID: 90, ItemNum: 2, }, { ItemType: 91, ItemID: 59, ItemNum: 800, }, { ItemType: 11, ItemID: 4, ItemNum: 2, }, }, RaceRewardBonus: []RaceReward{ { ItemType: 91, ItemID: 59, ItemNum: 800, }, }, GainedFans: 13986, CampaignIDs: []int32{223}, RaceRewardPlusBonus: []RaceReward{}, RaceRewardBonusWin: []RaceReward{}, }, LoseTipsID: 0, }, { RaceHistory: SingleRaceHistory{ Turn: 24, ProgramID: 625, Weather: 2, GroundCondition: 1, RunningStyle: 1, ResultRank: 1, FrameOrder: 16, NPCCount: 0, }, RaceRewardInfo: CharaRaceReward{ ResultRank: 1, ResultTime: 0, RaceReward: []RaceReward{ { ItemType: 11, ItemID: 92, ItemNum: 2, }, { ItemType: 91, ItemID: 59, ItemNum: 800, }, { ItemType: 11, ItemID: 7, ItemNum: 2, }, }, RaceRewardBonus: []RaceReward{}, GainedFans: 13608, CampaignIDs: []int32{223}, RaceRewardPlusBonus: []RaceReward{}, RaceRewardBonusWin: []RaceReward{}, }, LoseTipsID: 0, }, { RaceHistory: SingleRaceHistory{ Turn: 31, ProgramID: 163, Weather: 1, GroundCondition: 1, RunningStyle: 1, ResultRank: 1, FrameOrder: 10, NPCCount: 0, }, RaceRewardInfo: CharaRaceReward{ ResultRank: 1, ResultTime: 0, RaceReward: []RaceReward{ { ItemType: 11, ItemID: 73, ItemNum: 2, }, { ItemType: 91, ItemID: 59, ItemNum: 800, }, { ItemType: 11, ItemID: 7, ItemNum: 2, }, }, RaceRewardBonus: []RaceReward{}, GainedFans: 21978, CampaignIDs: []int32{223}, RaceRewardPlusBonus: []RaceReward{}, RaceRewardBonusWin: []RaceReward{}, }, LoseTipsID: 0, }, { RaceHistory: SingleRaceHistory{ Turn: 33, ProgramID: 164, Weather: 1, GroundCondition: 1, RunningStyle: 1, ResultRank: 1, FrameOrder: 13, NPCCount: 0, }, RaceRewardInfo: CharaRaceReward{ ResultRank: 1, ResultTime: 0, RaceReward: []RaceReward{ { ItemType: 11, ItemID: 75, ItemNum: 2, }, { ItemType: 91, ItemID: 59, ItemNum: 800, }, { ItemType: 11, ItemID: 4, ItemNum: 2, }, }, RaceRewardBonus: []RaceReward{}, GainedFans: 20979, CampaignIDs: []int32{223}, RaceRewardPlusBonus: []RaceReward{}, RaceRewardBonusWin: []RaceReward{}, }, LoseTipsID: 0, }, { RaceHistory: SingleRaceHistory{ Turn: 34, ProgramID: 166, Weather: 1, GroundCondition: 1, RunningStyle: 1, ResultRank: 1, FrameOrder: 11, NPCCount: 0, }, RaceRewardInfo: CharaRaceReward{ ResultRank: 1, ResultTime: 0, RaceReward: []RaceReward{ { ItemType: 11, ItemID: 78, ItemNum: 2, }, { ItemType: 91, ItemID: 59, ItemNum: 800, }, { ItemType: 11, ItemID: 7, ItemNum: 2, }, }, RaceRewardBonus: []RaceReward{}, GainedFans: 39960, CampaignIDs: []int32{223}, RaceRewardPlusBonus: []RaceReward{}, RaceRewardBonusWin: []RaceReward{}, }, LoseTipsID: 0, }, { RaceHistory: SingleRaceHistory{ Turn: 36, ProgramID: 74, Weather: 1, GroundCondition: 1, RunningStyle: 1, ResultRank: 1, FrameOrder: 18, NPCCount: 0, }, RaceRewardInfo: CharaRaceReward{ ResultRank: 1, ResultTime: 0, RaceReward: []RaceReward{ { ItemType: 11, ItemID: 80, ItemNum: 2, }, { ItemType: 91, ItemID: 59, ItemNum: 800, }, { ItemType: 30, ItemID: 110, ItemNum: 40, }, { ItemType: 11, ItemID: 7, ItemNum: 2, }, }, RaceRewardBonus: []RaceReward{}, GainedFans: 29970, CampaignIDs: []int32{223}, RaceRewardPlusBonus: []RaceReward{}, RaceRewardBonusWin: []RaceReward{}, }, LoseTipsID: 0, }, { RaceHistory: SingleRaceHistory{ Turn: 37, ProgramID: 1023, Weather: 2, GroundCondition: 2, RunningStyle: 1, ResultRank: 1, FrameOrder: 8, NPCCount: 0, }, RaceRewardInfo: CharaRaceReward{ ResultRank: 1, ResultTime: 0, RaceReward: []RaceReward{ { ItemType: 11, ItemID: 101, ItemNum: 2, }, { ItemType: 91, ItemID: 59, ItemNum: 800, }, { ItemType: 30, ItemID: 110, ItemNum: 40, }, { ItemType: 11, ItemID: 13, ItemNum: 2, }, }, RaceRewardBonus: []RaceReward{}, GainedFans: 8991, CampaignIDs: []int32{223}, RaceRewardPlusBonus: []RaceReward{}, RaceRewardBonusWin: []RaceReward{}, }, LoseTipsID: 0, }, { RaceHistory: SingleRaceHistory{ Turn: 42, ProgramID: 75, Weather: 1, GroundCondition: 2, RunningStyle: 1, ResultRank: 1, FrameOrder: 16, NPCCount: 0, }, RaceRewardInfo: CharaRaceReward{ ResultRank: 1, ResultTime: 0, RaceReward: []RaceReward{ { ItemType: 11, ItemID: 81, ItemNum: 2, }, { ItemType: 91, ItemID: 59, ItemNum: 800, }, { ItemType: 11, ItemID: 1, ItemNum: 2, }, }, RaceRewardBonus: []RaceReward{}, GainedFans: 25974, CampaignIDs: []int32{223}, RaceRewardPlusBonus: []RaceReward{}, RaceRewardBonusWin: []RaceReward{}, }, LoseTipsID: 0, }, { RaceHistory: SingleRaceHistory{ Turn: 44, ProgramID: 168, Weather: 1, GroundCondition: 1, RunningStyle: 1, ResultRank: 1, FrameOrder: 11, NPCCount: 0, }, RaceRewardInfo: CharaRaceReward{ ResultRank: 1, ResultTime: 0, RaceReward: []RaceReward{ { ItemType: 11, ItemID: 83, ItemNum: 2, }, { ItemType: 91, ItemID: 59, ItemNum: 800, }, { ItemType: 11, ItemID: 10, ItemNum: 2, }, }, RaceRewardBonus: []RaceReward{ { ItemType: 91, ItemID: 59, ItemNum: 800, }, { ItemType: 90, ItemID: 43, ItemNum: 10, }, }, GainedFans: 23976, CampaignIDs: []int32{223}, RaceRewardPlusBonus: []RaceReward{}, RaceRewardBonusWin: []RaceReward{}, }, LoseTipsID: 0, }, { RaceHistory: SingleRaceHistory{ Turn: 45, ProgramID: 1132, Weather: 1, GroundCondition: 1, RunningStyle: 1, ResultRank: 1, FrameOrder: 5, NPCCount: 0, }, RaceRewardInfo: CharaRaceReward{ ResultRank: 1, ResultTime: 0, RaceReward: []RaceReward{ { ItemType: 11, ItemID: 103, ItemNum: 2, }, { ItemType: 91, ItemID: 59, ItemNum: 800, }, { ItemType: 11, ItemID: 13, ItemNum: 2, }, }, RaceRewardBonus: []RaceReward{}, GainedFans: 15984, CampaignIDs: []int32{223}, RaceRewardPlusBonus: []RaceReward{}, RaceRewardBonusWin: []RaceReward{}, }, LoseTipsID: 0, }, { RaceHistory: SingleRaceHistory{ Turn: 46, ProgramID: 78, Weather: 1, GroundCondition: 1, RunningStyle: 1, ResultRank: 1, FrameOrder: 13, NPCCount: 0, }, RaceRewardInfo: CharaRaceReward{ ResultRank: 1, ResultTime: 0, RaceReward: []RaceReward{ { ItemType: 11, ItemID: 85, ItemNum: 2, }, { ItemType: 91, ItemID: 59, ItemNum: 800, }, { ItemType: 11, ItemID: 4, ItemNum: 2, }, }, RaceRewardBonus: []RaceReward{}, GainedFans: 21978, CampaignIDs: []int32{223}, RaceRewardPlusBonus: []RaceReward{}, RaceRewardBonusWin: []RaceReward{}, }, LoseTipsID: 0, }, { RaceHistory: SingleRaceHistory{ Turn: 47, ProgramID: 80, Weather: 1, GroundCondition: 1, RunningStyle: 1, ResultRank: 1, FrameOrder: 7, NPCCount: 0, }, RaceRewardInfo: CharaRaceReward{ ResultRank: 1, ResultTime: 0, RaceReward: []RaceReward{ { ItemType: 11, ItemID: 88, ItemNum: 2, }, { ItemType: 91, ItemID: 59, ItemNum: 800, }, { ItemType: 11, ItemID: 13, ItemNum: 2, }, }, RaceRewardBonus: []RaceReward{}, GainedFans: 19080, CampaignIDs: []int32{223}, RaceRewardPlusBonus: []RaceReward{}, RaceRewardBonusWin: []RaceReward{}, }, LoseTipsID: 0, }, { RaceHistory: SingleRaceHistory{ Turn: 48, ProgramID: 1027, Weather: 1, GroundCondition: 1, RunningStyle: 1, ResultRank: 1, FrameOrder: 12, NPCCount: 0, }, RaceRewardInfo: CharaRaceReward{ ResultRank: 1, ResultTime: 0, RaceReward: []RaceReward{ { ItemType: 11, ItemID: 106, ItemNum: 2, }, { ItemType: 91, ItemID: 59, ItemNum: 800, }, { ItemType: 11, ItemID: 13, ItemNum: 2, }, }, RaceRewardBonus: []RaceReward{ { ItemType: 91, ItemID: 59, ItemNum: 800, }, }, GainedFans: 14688, CampaignIDs: []int32{223}, RaceRewardPlusBonus: []RaceReward{}, RaceRewardBonusWin: []RaceReward{}, }, LoseTipsID: 0, }, { RaceHistory: SingleRaceHistory{ Turn: 51, ProgramID: 1106, Weather: 1, GroundCondition: 1, RunningStyle: 1, ResultRank: 1, FrameOrder: 14, NPCCount: 0, }, RaceRewardInfo: CharaRaceReward{ ResultRank: 1, ResultTime: 0, RaceReward: []RaceReward{ { ItemType: 11, ItemID: 175, ItemNum: 2, }, { ItemType: 91, ItemID: 59, ItemNum: 800, }, { ItemType: 11, ItemID: 13, ItemNum: 2, }, }, RaceRewardBonus: []RaceReward{ { ItemType: 91, ItemID: 59, ItemNum: 800, }, { ItemType: 30, ItemID: 110, ItemNum: 40, }, }, GainedFans: 11988, CampaignIDs: []int32{223}, RaceRewardPlusBonus: []RaceReward{}, RaceRewardBonusWin: []RaceReward{}, }, LoseTipsID: 0, }, { RaceHistory: SingleRaceHistory{ Turn: 52, ProgramID: 1, Weather: 1, GroundCondition: 1, RunningStyle: 1, ResultRank: 1, FrameOrder: 13, NPCCount: 0, }, RaceRewardInfo: CharaRaceReward{ ResultRank: 1, ResultTime: 0, RaceReward: []RaceReward{ { ItemType: 11, ItemID: 69, ItemNum: 2, }, { ItemType: 91, ItemID: 59, ItemNum: 800, }, { ItemType: 11, ItemID: 13, ItemNum: 2, }, }, RaceRewardBonus: []RaceReward{ { ItemType: 91, ItemID: 59, ItemNum: 800, }, { ItemType: 30, ItemID: 110, ItemNum: 40, }, }, GainedFans: 19980, CampaignIDs: []int32{223}, RaceRewardPlusBonus: []RaceReward{}, RaceRewardBonusWin: []RaceReward{}, }, LoseTipsID: 0, }, { RaceHistory: SingleRaceHistory{ Turn: 54, ProgramID: 3, Weather: 2, GroundCondition: 1, RunningStyle: 1, ResultRank: 1, FrameOrder: 15, NPCCount: 0, }, RaceRewardInfo: CharaRaceReward{ ResultRank: 1, ResultTime: 0, RaceReward: []RaceReward{ { ItemType: 11, ItemID: 71, ItemNum: 2, }, { ItemType: 91, ItemID: 59, ItemNum: 800, }, { ItemType: 11, ItemID: 7, ItemNum: 2, }, }, RaceRewardBonus: []RaceReward{ { ItemType: 91, ItemID: 59, ItemNum: 800, }, }, GainedFans: 26973, CampaignIDs: []int32{223}, RaceRewardPlusBonus: []RaceReward{}, RaceRewardBonusWin: []RaceReward{}, }, LoseTipsID: 0, }, { RaceHistory: SingleRaceHistory{ Turn: 56, ProgramID: 4, Weather: 1, GroundCondition: 1, RunningStyle: 1, ResultRank: 3, FrameOrder: 10, NPCCount: 0, }, RaceRewardInfo: CharaRaceReward{ ResultRank: 3, ResultTime: 0, RaceReward: []RaceReward{ { ItemType: 91, ItemID: 59, ItemNum: 800, }, }, RaceRewardBonus: []RaceReward{}, GainedFans: 7491, CampaignIDs: []int32{223}, RaceRewardPlusBonus: []RaceReward{}, RaceRewardBonusWin: []RaceReward{}, }, LoseTipsID: 3, }, { RaceHistory: SingleRaceHistory{ Turn: 57, ProgramID: 5, Weather: 1, GroundCondition: 1, RunningStyle: 1, ResultRank: 1, FrameOrder: 3, NPCCount: 0, }, RaceRewardInfo: CharaRaceReward{ ResultRank: 1, ResultTime: 0, RaceReward: []RaceReward{ { ItemType: 11, ItemID: 76, ItemNum: 2, }, { ItemType: 91, ItemID: 59, ItemNum: 800, }, { ItemType: 11, ItemID: 4, ItemNum: 2, }, }, RaceRewardBonus: []RaceReward{}, GainedFans: 20979, CampaignIDs: []int32{223}, RaceRewardPlusBonus: []RaceReward{}, RaceRewardBonusWin: []RaceReward{}, }, LoseTipsID: 0, }, { RaceHistory: SingleRaceHistory{ Turn: 59, ProgramID: 73, Weather: 1, GroundCondition: 1, RunningStyle: 1, ResultRank: 1, FrameOrder: 13, NPCCount: 0, }, RaceRewardInfo: CharaRaceReward{ ResultRank: 1, ResultTime: 0, RaceReward: []RaceReward{ { ItemType: 11, ItemID: 79, ItemNum: 2, }, { ItemType: 91, ItemID: 59, ItemNum: 800, }, { ItemType: 11, ItemID: 4, ItemNum: 2, }, }, RaceRewardBonus: []RaceReward{ { ItemType: 30, ItemID: 110, ItemNum: 40, }, }, GainedFans: 25974, CampaignIDs: []int32{223}, RaceRewardPlusBonus: []RaceReward{}, RaceRewardBonusWin: []RaceReward{}, }, LoseTipsID: 0, }, { RaceHistory: SingleRaceHistory{ Turn: 60, ProgramID: 1022, Weather: 1, GroundCondition: 1, RunningStyle: 1, ResultRank: 1, FrameOrder: 10, NPCCount: 0, }, RaceRewardInfo: CharaRaceReward{ ResultRank: 1, ResultTime: 0, RaceReward: []RaceReward{ { ItemType: 11, ItemID: 105, ItemNum: 2, }, { ItemType: 91, ItemID: 59, ItemNum: 800, }, { ItemType: 11, ItemID: 13, ItemNum: 2, }, }, RaceRewardBonus: []RaceReward{}, GainedFans: 11988, CampaignIDs: []int32{223}, RaceRewardPlusBonus: []RaceReward{}, RaceRewardBonusWin: []RaceReward{}, }, LoseTipsID: 0, }, { RaceHistory: SingleRaceHistory{ Turn: 67, ProgramID: 1109, Weather: 1, GroundCondition: 1, RunningStyle: 1, ResultRank: 1, FrameOrder: 4, NPCCount: 0, }, RaceRewardInfo: CharaRaceReward{ ResultRank: 1, ResultTime: 0, RaceReward: []RaceReward{ { ItemType: 11, ItemID: 179, ItemNum: 2, }, { ItemType: 91, ItemID: 59, ItemNum: 800, }, { ItemType: 11, ItemID: 13, ItemNum: 2, }, }, RaceRewardBonus: []RaceReward{}, GainedFans: 11988, CampaignIDs: []int32{223}, RaceRewardPlusBonus: []RaceReward{}, RaceRewardBonusWin: []RaceReward{}, }, LoseTipsID: 0, }, { RaceHistory: SingleRaceHistory{ Turn: 68, ProgramID: 76, Weather: 1, GroundCondition: 1, RunningStyle: 1, ResultRank: 1, FrameOrder: 14, NPCCount: 0, }, RaceRewardInfo: CharaRaceReward{ ResultRank: 1, ResultTime: 0, RaceReward: []RaceReward{ { ItemType: 11, ItemID: 84, ItemNum: 2, }, { ItemType: 91, ItemID: 59, ItemNum: 800, }, { ItemType: 11, ItemID: 7, ItemNum: 2, }, }, RaceRewardBonus: []RaceReward{}, GainedFans: 29970, CampaignIDs: []int32{223}, RaceRewardPlusBonus: []RaceReward{}, RaceRewardBonusWin: []RaceReward{}, }, LoseTipsID: 0, }, { RaceHistory: SingleRaceHistory{ Turn: 69, ProgramID: 1132, Weather: 1, GroundCondition: 1, RunningStyle: 1, ResultRank: 1, FrameOrder: 11, NPCCount: 0, }, RaceRewardInfo: CharaRaceReward{ ResultRank: 1, ResultTime: 0, RaceReward: []RaceReward{ { ItemType: 11, ItemID: 103, ItemNum: 2, }, { ItemType: 91, ItemID: 59, ItemNum: 800, }, { ItemType: 11, ItemID: 13, ItemNum: 2, }, }, RaceRewardBonus: []RaceReward{}, GainedFans: 15984, CampaignIDs: []int32{223}, RaceRewardPlusBonus: []RaceReward{}, RaceRewardBonusWin: []RaceReward{}, }, LoseTipsID: 0, }, { RaceHistory: SingleRaceHistory{ Turn: 70, ProgramID: 79, Weather: 2, GroundCondition: 1, RunningStyle: 1, ResultRank: 1, FrameOrder: 7, NPCCount: 0, }, RaceRewardInfo: CharaRaceReward{ ResultRank: 1, ResultTime: 0, RaceReward: []RaceReward{ { ItemType: 11, ItemID: 87, ItemNum: 2, }, { ItemType: 91, ItemID: 59, ItemNum: 800, }, { ItemType: 11, ItemID: 7, ItemNum: 2, }, }, RaceRewardBonus: []RaceReward{}, GainedFans: 56160, CampaignIDs: []int32{223}, RaceRewardPlusBonus: []RaceReward{}, RaceRewardBonusWin: []RaceReward{}, }, LoseTipsID: 0, }, { RaceHistory: SingleRaceHistory{ Turn: 71, ProgramID: 80, Weather: 3, GroundCondition: 4, RunningStyle: 1, ResultRank: 1, FrameOrder: 16, NPCCount: 0, }, RaceRewardInfo: CharaRaceReward{ ResultRank: 1, ResultTime: 0, RaceReward: []RaceReward{ { ItemType: 11, ItemID: 88, ItemNum: 2, }, { ItemType: 91, ItemID: 59, ItemNum: 800, }, { ItemType: 11, ItemID: 13, ItemNum: 2, }, }, RaceRewardBonus: []RaceReward{}, GainedFans: 18720, CampaignIDs: []int32{223}, RaceRewardPlusBonus: []RaceReward{}, RaceRewardBonusWin: []RaceReward{}, }, LoseTipsID: 0, }, { RaceHistory: SingleRaceHistory{ Turn: 72, ProgramID: 1027, Weather: 1, GroundCondition: 1, RunningStyle: 1, ResultRank: 1, FrameOrder: 11, NPCCount: 0, }, RaceRewardInfo: CharaRaceReward{ ResultRank: 1, ResultTime: 0, RaceReward: []RaceReward{ { ItemType: 11, ItemID: 106, ItemNum: 2, }, { ItemType: 91, ItemID: 59, ItemNum: 800, }, { ItemType: 11, ItemID: 13, ItemNum: 2, }, }, RaceRewardBonus: []RaceReward{ { ItemType: 91, ItemID: 59, ItemNum: 800, }, }, GainedFans: 15264, CampaignIDs: []int32{223}, RaceRewardPlusBonus: []RaceReward{}, RaceRewardBonusWin: []RaceReward{}, }, LoseTipsID: 0, }, { RaceHistory: SingleRaceHistory{ Turn: 74, ProgramID: 2022, Weather: 2, GroundCondition: 1, RunningStyle: 1, ResultRank: 1, FrameOrder: 10, NPCCount: 0, }, RaceRewardInfo: CharaRaceReward{ ResultRank: 1, ResultTime: 0, RaceReward: []RaceReward{ { ItemType: 91, ItemID: 59, ItemNum: 1200, }, { ItemType: 11, ItemID: 7, ItemNum: 2, }, }, RaceRewardBonus: []RaceReward{ { ItemType: 91, ItemID: 59, ItemNum: 1200, }, }, GainedFans: 13986, CampaignIDs: []int32{223}, RaceRewardPlusBonus: []RaceReward{}, RaceRewardBonusWin: []RaceReward{}, }, LoseTipsID: 0, }, { RaceHistory: SingleRaceHistory{ Turn: 76, ProgramID: 2120, Weather: 1, GroundCondition: 2, RunningStyle: 1, ResultRank: 1, FrameOrder: 3, NPCCount: 0, }, RaceRewardInfo: CharaRaceReward{ ResultRank: 1, ResultTime: 0, RaceReward: []RaceReward{ { ItemType: 91, ItemID: 59, ItemNum: 1200, }, { ItemType: 11, ItemID: 7, ItemNum: 2, }, }, RaceRewardBonus: []RaceReward{ { ItemType: 91, ItemID: 59, ItemNum: 1200, }, { ItemType: 30, ItemID: 110, ItemNum: 80, }, }, GainedFans: 19980, CampaignIDs: []int32{223}, RaceRewardPlusBonus: []RaceReward{}, RaceRewardBonusWin: []RaceReward{}, }, LoseTipsID: 0, }, { RaceHistory: SingleRaceHistory{ Turn: 78, ProgramID: 2216, Weather: 3, GroundCondition: 4, RunningStyle: 1, ResultRank: 1, FrameOrder: 11, NPCCount: 0, }, RaceRewardInfo: CharaRaceReward{ ResultRank: 1, ResultTime: 0, RaceReward: []RaceReward{ { ItemType: 91, ItemID: 59, ItemNum: 1200, }, { ItemType: 11, ItemID: 7, ItemNum: 2, }, }, RaceRewardBonus: []RaceReward{ { ItemType: 91, ItemID: 59, ItemNum: 1200, }, { ItemType: 30, ItemID: 110, ItemNum: 80, }, }, GainedFans: 59940, CampaignIDs: []int32{223}, RaceRewardPlusBonus: []RaceReward{}, RaceRewardBonusWin: []RaceReward{}, }, LoseTipsID: 0, }, }, GainSkillIDs: []horse.SkillID{}, TotalSkillPoint: 3866, }, End: End{ Chara: SingleModeChara{ SingleModeCharaID: 1831, CardID: 104601, CharaGrade: 10, Speed: 1089, Stamina: 743, Power: 739, Wiz: 886, Guts: 673, Vital: 10, MaxSpeed: 1624, MaxStamina: 1348, MaxPower: 1300, MaxWiz: 1321, MaxGuts: 1517, DefaultMaxSpeed: 1200, DefaultMaxStamina: 1200, DefaultMaxPower: 1200, DefaultMaxWiz: 1200, DefaultMaxGuts: 1200, MaxVital: 100, Motivation: 5, Fans: 657766, Rarity: 3, RaceProgramID: 0, ReserveRaceProgramID: 0, RaceRunningStyle: 1, IsShortRace: 0, TalentLevel: 5, Skills: []Skill{ {SkillID: 100461, Level: 4}, }, DisableSkillIDs: []horse.SkillID{}, SkillTips: []SkillTip{ {GroupID: 90009, Rarity: 1, Level: 4}, {GroupID: 90024, Rarity: 1, Level: 3}, {GroupID: 20038, Rarity: 1, Level: 5}, {GroupID: 20071, Rarity: 1, Level: 5}, {GroupID: 20071, Rarity: 2, Level: 1}, {GroupID: 20126, Rarity: 1, Level: 5}, {GroupID: 21003, Rarity: 1, Level: 3}, {GroupID: 20004, Rarity: 1, Level: 5}, {GroupID: 20003, Rarity: 1, Level: 1}, {GroupID: 20203, Rarity: 1, Level: 2}, {GroupID: 20159, Rarity: 1, Level: 1}, {GroupID: 20021, Rarity: 1, Level: 4}, {GroupID: 20222, Rarity: 1, Level: 1}, {GroupID: 20014, Rarity: 1, Level: 1}, {GroupID: 21001, Rarity: 1, Level: 1}, {GroupID: 20167, Rarity: 1, Level: 3}, {GroupID: 20235, Rarity: 1, Level: 1}, {GroupID: 20054, Rarity: 1, Level: 3}, {GroupID: 20025, Rarity: 1, Level: 1}, {GroupID: 21007, Rarity: 1, Level: 1}, {GroupID: 21007, Rarity: 2, Level: 3}, {GroupID: 20166, Rarity: 2, Level: 3}, {GroupID: 20220, Rarity: 1, Level: 1}, {GroupID: 20226, Rarity: 1, Level: 1}, {GroupID: 20017, Rarity: 1, Level: 1}, {GroupID: 20053, Rarity: 1, Level: 1}, {GroupID: 20135, Rarity: 1, Level: 1}, {GroupID: 20001, Rarity: 1, Level: 1}, {GroupID: 20049, Rarity: 1, Level: 1}, {GroupID: 20018, Rarity: 1, Level: 5}, {GroupID: 20170, Rarity: 1, Level: 4}, {GroupID: 20055, Rarity: 1, Level: 1}, {GroupID: 20160, Rarity: 1, Level: 3}, {GroupID: 20035, Rarity: 1, Level: 5}, {GroupID: 20233, Rarity: 1, Level: 3}, {GroupID: 20073, Rarity: 1, Level: 1}, {GroupID: 20128, Rarity: 1, Level: 1}, }, SupportCards: []SingleModeSupportCard{ { Position: 1, SupportCardID: 30010, LimitBreakCount: 4, Exp: 118185, OwnerViewerID: 0, }, { Position: 2, SupportCardID: 30108, LimitBreakCount: 4, Exp: 118185, OwnerViewerID: 0, }, { Position: 3, SupportCardID: 30062, LimitBreakCount: 4, Exp: 118185, OwnerViewerID: 0, }, { Position: 4, SupportCardID: 30107, LimitBreakCount: 4, Exp: 118185, OwnerViewerID: 0, }, { Position: 5, SupportCardID: 30028, LimitBreakCount: 4, Exp: 118185, OwnerViewerID: 0, }, { Position: 6, SupportCardID: 30052, LimitBreakCount: 4, Exp: 118185, OwnerViewerID: 596515219419, }, }, SuccessionTrainedCharaID1: 4699, SuccessionTrainedCharaID2: 4702, ProperDistanceShort: horse.AptitudeLvB, ProperDistanceMile: horse.AptitudeLvA, ProperDistanceMiddle: horse.AptitudeLvA, ProperDistanceLong: horse.AptitudeLvE, ProperRunningStyleNige: horse.AptitudeLvA, ProperRunningStyleSenko: horse.AptitudeLvD, ProperRunningStyleSashi: horse.AptitudeLvG, ProperRunningStyleOikomi: horse.AptitudeLvG, ProperGroundTurf: horse.AptitudeLvA, ProperGroundDirt: horse.AptitudeLvS, Turn: 78, SkillPoint: 3866, ShortCutState: 0, State: 3, PlayingState: 1, ScenarioID: 3, RouteID: 31, StartTime: "2026-07-29 03:42:04", Evaluations: []Evaluation{ { TargetID: 1, TrainingPartner: 1, Evaluation: 15, IsOuting: 0, StoryStep: 0, IsAppear: 1, GroupOutingInfo: []GroupOuting{}, }, { TargetID: 2, TrainingPartner: 2, Evaluation: 20, IsOuting: 0, StoryStep: 0, IsAppear: 1, GroupOutingInfo: []GroupOuting{}, }, { TargetID: 3, TrainingPartner: 3, Evaluation: 30, IsOuting: 0, StoryStep: 0, IsAppear: 1, GroupOutingInfo: []GroupOuting{}, }, { TargetID: 4, TrainingPartner: 4, Evaluation: 30, IsOuting: 0, StoryStep: 0, IsAppear: 1, GroupOutingInfo: []GroupOuting{}, }, { TargetID: 5, TrainingPartner: 5, Evaluation: 35, IsOuting: 0, StoryStep: 0, IsAppear: 1, GroupOutingInfo: []GroupOuting{}, }, { TargetID: 6, TrainingPartner: 6, Evaluation: 30, IsOuting: 0, StoryStep: 0, IsAppear: 0, GroupOutingInfo: []GroupOuting{}, }, { TargetID: 101, TrainingPartner: 101, Evaluation: 0, IsOuting: 0, StoryStep: 0, IsAppear: 0, GroupOutingInfo: []GroupOuting{}, }, { TargetID: 102, TrainingPartner: 102, Evaluation: 0, IsOuting: 0, StoryStep: 0, IsAppear: 0, GroupOutingInfo: []GroupOuting{}, }, { TargetID: 103, TrainingPartner: 103, Evaluation: 0, IsOuting: 0, StoryStep: 0, IsAppear: 0, GroupOutingInfo: []GroupOuting{}, }, { TargetID: 104, TrainingPartner: 104, Evaluation: 0, IsOuting: 0, StoryStep: 0, IsAppear: 0, GroupOutingInfo: []GroupOuting{}, }, { TargetID: 106, TrainingPartner: 106, Evaluation: 0, IsOuting: 0, StoryStep: 0, IsAppear: 0, GroupOutingInfo: []GroupOuting{}, }, }, TrainingLevels: []TrainingLevel{ {CommandID: 101, Level: 1}, {CommandID: 102, Level: 1}, {CommandID: 103, Level: 1}, {CommandID: 105, Level: 1}, {CommandID: 106, Level: 1}, {CommandID: 601, Level: 5}, {CommandID: 602, Level: 5}, {CommandID: 603, Level: 5}, {CommandID: 604, Level: 5}, {CommandID: 605, Level: 5}, }, NicknameIDs: []int32{}, CharaEffectIDs: []int32{}, RouteRaceIDs: []int32{ 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, }, GuestOutings: []GuestOuting{}, SkillUpgrades: []SingleModeSkillUpgrade{}, }, RewardSummary: RewardSummary{ AddItem: []AddItem{ {ItemID: 59, Number: 34000}, {ItemID: 90, Number: 2}, {ItemID: 4, Number: 10}, {ItemID: 92, Number: 2}, {ItemID: 7, Number: 20}, {ItemID: 73, Number: 2}, {ItemID: 75, Number: 2}, {ItemID: 78, Number: 2}, {ItemID: 80, Number: 2}, {ItemID: 110, Number: 360}, {ItemID: 101, Number: 2}, {ItemID: 13, Number: 22}, {ItemID: 81, Number: 2}, {ItemID: 1, Number: 2}, {ItemID: 83, Number: 2}, {ItemID: 10, Number: 2}, {ItemID: 43, Number: 10}, {ItemID: 103, Number: 4}, {ItemID: 85, Number: 2}, {ItemID: 88, Number: 4}, {ItemID: 106, Number: 4}, {ItemID: 175, Number: 2}, {ItemID: 69, Number: 2}, {ItemID: 71, Number: 2}, {ItemID: 76, Number: 2}, {ItemID: 79, Number: 2}, {ItemID: 105, Number: 2}, {ItemID: 179, Number: 2}, {ItemID: 84, Number: 2}, {ItemID: 87, Number: 2}, }, }, }, }, }, } for _, c := range cases { t.Run(c.name, func(t *testing.T) { got, err := loadISM(strings.NewReader(c.json)) if err != nil { t.Error(err) } if diff := cmp.Diff(c.want, got); diff != "" { t.Errorf("wrong data (+got/-want):\n%s", diff) } }) } }