From cb48e238a8fee7051a419a7688931fd27c6c93a0 Mon Sep 17 00:00:00 2001 From: Branden J Brown Date: Wed, 19 Aug 2026 16:30:49 -0400 Subject: [PATCH] zenno: account for ism data with no start stats --- zenno/src/lib/ism.ts | 64 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 63 insertions(+), 1 deletion(-) diff --git a/zenno/src/lib/ism.ts b/zenno/src/lib/ism.ts index 472f51f..3cf7670 100644 --- a/zenno/src/lib/ism.ts +++ b/zenno/src/lib/ism.ts @@ -135,10 +135,72 @@ const SingleModeChara = z.strictObject({ skill_upgrade_info_array: z.array(SkillUpgrade), }); +const ZeroedSingleModeChara = z.strictObject({ + single_mode_chara_id: z.literal(0), + card_id: z.int32(), + chara_grade: z.literal(0), + speed: z.literal(0), + stamina: z.literal(0), + power: z.literal(0), + wiz: z.literal(0), + guts: z.literal(0), + vital: z.literal(0), + max_speed: z.literal(0), + max_stamina: z.literal(0), + max_power: z.literal(0), + max_wiz: z.literal(0), + max_guts: z.literal(0), + default_max_speed: z.literal(0), + default_max_stamina: z.literal(0), + default_max_power: z.literal(0), + default_max_wiz: z.literal(0), + default_max_guts: z.literal(0), + max_vital: z.literal(0), + motivation: z.literal(0), + fans: z.literal(0), + rarity: z.int32(), + race_program_id: z.literal(0), + reserve_race_program_id: z.literal(0), + race_running_style: z.literal(0), + is_short_race: z.literal(0), + talent_level: z.int32(), + skill_array: z.array(z.never()), + disable_skill_id_array: z.array(z.never()), + skill_tips_array: z.array(z.never()), + support_card_array: z.array(z.never()), + succession_trained_chara_id_1: z.int32(), + succession_trained_chara_id_2: z.int32(), + proper_distance_short: z.literal(0), + proper_distance_mile: z.literal(0), + proper_distance_middle: z.literal(0), + proper_distance_long: z.literal(0), + proper_running_style_nige: z.literal(0), + proper_running_style_senko: z.literal(0), + proper_running_style_sashi: z.literal(0), + proper_running_style_oikomi: z.literal(0), + proper_ground_turf: z.literal(0), + proper_ground_dirt: z.literal(0), + turn: z.literal(0), + skill_point: z.literal(0), + short_cut_state: z.literal(0), + state: z.literal(0), + playing_state: z.literal(0), + scenario_id: z.int32(), + route_id: z.literal(0), + start_time: z.literal(''), + evaluation_info_array: z.array(z.never()), + training_level_info_array: z.array(z.never()), + nickname_id_array: z.array(z.never()), + chara_effect_id_array: z.array(z.never()), + route_race_id_array: z.array(z.never()), + guest_outing_info_array: z.array(z.never()), + skill_upgrade_info_array: z.array(z.never()), +}); + export type SingleModeChara = z.infer; const ProgressInfo = z.strictObject({ - chara_info: z.optional(SingleModeChara), + chara_info: z.optional(SingleModeChara.or(ZeroedSingleModeChara)), start_time: z.string(), end_time: z.string(), dress_id: z.int32(),