From 66770e2d49523894419da15168868e832c7b2c92 Mon Sep 17 00:00:00 2001 From: fatsbrown <123950591+fatsbrown@users.noreply.github.com> Date: Wed, 13 May 2026 13:41:20 -0300 Subject: [PATCH] Update to Zwift 1.0.161309 --- cdn/gameassets/ZwiftAndroid_ver_cur.xml | 2 +- .../Zwift_Updates_Root/ZwiftMac_ver_cur.xml | 2 +- .../Zwift_Updates_Root/Zwift_ver_cur.xml | 2 +- data/climbs.txt | 4 + data/entitlements.txt | 2 +- data/start_lines.txt | 50 ++++++ data/variants.txt | 161 +++++++++++------- protobuf/user_storage.proto | 6 + protobuf/user_storage_pb2.py | 24 +-- 9 files changed, 171 insertions(+), 82 deletions(-) diff --git a/cdn/gameassets/ZwiftAndroid_ver_cur.xml b/cdn/gameassets/ZwiftAndroid_ver_cur.xml index 6be67ce..95b1d6d 100644 --- a/cdn/gameassets/ZwiftAndroid_ver_cur.xml +++ b/cdn/gameassets/ZwiftAndroid_ver_cur.xml @@ -1 +1 @@ - + diff --git a/cdn/gameassets/Zwift_Updates_Root/ZwiftMac_ver_cur.xml b/cdn/gameassets/Zwift_Updates_Root/ZwiftMac_ver_cur.xml index ac3f23e..a32ff07 100644 --- a/cdn/gameassets/Zwift_Updates_Root/ZwiftMac_ver_cur.xml +++ b/cdn/gameassets/Zwift_Updates_Root/ZwiftMac_ver_cur.xml @@ -1 +1 @@ - + diff --git a/cdn/gameassets/Zwift_Updates_Root/Zwift_ver_cur.xml b/cdn/gameassets/Zwift_Updates_Root/Zwift_ver_cur.xml index e3731ba..92e7143 100644 --- a/cdn/gameassets/Zwift_Updates_Root/Zwift_ver_cur.xml +++ b/cdn/gameassets/Zwift_Updates_Root/Zwift_ver_cur.xml @@ -1 +1 @@ - + diff --git a/data/climbs.txt b/data/climbs.txt index 263d9cf..11610fc 100644 --- a/data/climbs.txt +++ b/data/climbs.txt @@ -1,4 +1,8 @@ [ + { + "name": "Alto de Patios (5.9 km / 376 m)", + "road": "10052" + }, { "name": "Bealach na Ba (9 km / 632 m)", "road": "10011" diff --git a/data/entitlements.txt b/data/entitlements.txt index 1e94501..973cb96 100644 --- a/data/entitlements.txt +++ b/data/entitlements.txt @@ -1 +1 @@ -{"first": 1687, "last": 2143} \ No newline at end of file +{"first": 1687, "last": 2144} \ No newline at end of file diff --git a/data/start_lines.txt b/data/start_lines.txt index 27e51eb..a7be329 100644 --- a/data/start_lines.txt +++ b/data/start_lines.txt @@ -804,6 +804,36 @@ "road": 0, "time": 485875 }, + "-59983043": { + "name": "Paris - Cirque du Suffer", + "road": 0, + "time": 972899 + }, + "-1153887298": { + "name": "Paris - Cr\u00c3\u00aape Escape", + "road": 0, + "time": 485874 + }, + "1365497350": { + "name": "Paris - Double Espresso", + "road": 0, + "time": 485874 + }, + "565111133": { + "name": "Paris - Heart of Montmartre", + "road": 0, + "time": 485874 + }, + "870135081": { + "name": "Paris - La Boucle", + "road": 0, + "time": 485874 + }, + "-913743341": { + "name": "Paris - Loop de loop de loop", + "road": 0, + "time": 485874 + }, "1236439870": { "name": "Paris - Lutece Express", "road": 0, @@ -814,6 +844,26 @@ "road": 0, "time": 485875 }, + "1247427185": { + "name": "Paris - Montmartre Mixer", + "road": 0, + "time": 485874 + }, + "2128895616": { + "name": "Paris - Paris Pacer", + "road": 0, + "time": 888371 + }, + "-1489331213": { + "name": "Paris - Paris Toujours", + "road": 0, + "time": 485874 + }, + "-1978050323": { + "name": "Paris - Rues in Rythme", + "road": 0, + "time": 36583 + }, "-2098947784": { "name": "Richmond - 2015 Worlds Course", "road": 0, diff --git a/data/variants.txt b/data/variants.txt index 6f2264c..b9dc1b8 100644 --- a/data/variants.txt +++ b/data/variants.txt @@ -266,7 +266,8 @@ "value": true }, { - "name": "game_1_105_zui_logout_earlier" + "name": "game_1_105_zui_logout_earlier", + "value": true }, { "name": "game_1_106_zml_rnl", @@ -283,7 +284,8 @@ "name": "game_1_108_allow_experimental_uploading" }, { - "name": "game_1_108_challenge_poster_cards" + "name": "game_1_108_challenge_poster_cards", + "value": true }, { "name": "game_1_108_data_collection_consent", @@ -334,16 +336,33 @@ "name": "game_1_110_auto_pairing_fixes" }, { - "name": "game_1_110_customizable_workout_hud" + "name": "game_1_110_customizable_workout_hud", + "value": true, + "values": { + "fields": { + "bUseCustomizedHUD": { + "boolValue": true + } + } + } }, { "name": "game_1_110_disable_sensor_relay_on_ble" }, { - "name": "game_1_110_high_density_just_watch" + "name": "game_1_110_high_density_just_watch", + "value": true, + "values": { + "fields": { + "botCategory": { + "stringValue": "d" + } + } + } }, { - "name": "game_1_110_prestige_badging" + "name": "game_1_110_prestige_badging", + "value": true }, { "name": "game_1_110_prevent_auto_continue_when_background_pairing", @@ -370,12 +389,26 @@ }, { "name": "game_1_112_tune_experiment", - "values": {} + "value": true, + "values": { + "fields": { + "tune_button": { + "stringValue": "MORE OPTIONS" + } + } + } }, { "name": "game_1_112_use_steering_and_braking_on_zp", "value": true }, + { + "name": "game_1_113_lan_timeout_lowering" + }, + { + "name": "game_1_113_quest_xp_reward_icons", + "value": true + }, { "name": "game_1_15_assert_disable_abort", "value": true, @@ -786,20 +819,6 @@ } } }, - { - "name": "game_1_49_pvs", - "value": true, - "values": {} - }, - { - "name": "game_1_50_zc_rf1", - "value": true, - "values": {} - }, - { - "name": "game_1_50_zc_rf2", - "values": {} - }, { "name": "game_1_51_zc_workout_asset_patch_fix", "value": true, @@ -828,21 +847,6 @@ { "name": "game_1_53_enable_hardcoded_repackrush__for_you_carousel__card" }, - { - "name": "game_1_53_update_payment_capture", - "values": {} - }, - { - "name": "game_1_53_zp_sgpd", - "value": true, - "values": { - "fields": { - "DelayInMs": { - "varintValue": "800" - } - } - } - }, { "name": "game_1_53_zui_tp", "value": true, @@ -905,11 +909,6 @@ "value": true, "values": {} }, - { - "name": "game_1_62_zp_user_input_device_event_logging", - "value": true, - "values": {} - }, { "name": "game_1_63_autobraking", "values": {} @@ -1121,18 +1120,13 @@ } } }, - { - "name": "game_1_70_device_identifier_analytics", - "value": true, - "values": {} - }, { "name": "game_1_71_challenge_carousel", "value": true, "values": { "fields": { "challenge_carousel_id": { - "stringValue": "prod_home_challenge_carousel" + "stringValue": "prod_home_challenge_carousel_1_113" } } } @@ -1274,7 +1268,15 @@ "values": {} }, { - "name": "game_1_77_prevent_teleport_to_player_type" + "name": "game_1_77_prevent_teleport_to_player_type", + "value": true, + "values": { + "fields": { + "restricted_teleports": { + "stringValue": "{\"Player Type\":[{\"ZWIFT_STAFF,NORMAL,PRO_CYCLIST,AMBASSADOR,VERIFIED,ZED,ZAC,PRO_TRIATHLETE,PRO_RUNNER,\":[{\"World ID\":11,\"Road IDs\":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164]}]}]}" + } + } + } }, { "name": "game_1_77_ttt_team_car_shows_znl_when_fanviewing", @@ -1486,9 +1488,6 @@ } } }, - { - "name": "game_1_90_ios_link_to_web_payment_provider" - }, { "name": "game_1_90_use_web_onboarding_skill_level" }, @@ -1583,8 +1582,7 @@ } }, { - "name": "game_1_98_aup", - "value": true + "name": "game_1_98_aup" }, { "name": "game_1_98_prevent_creation_zp_controller_sensor_relay_sensor" @@ -1907,7 +1905,7 @@ "stringValue": "dlc_asset" }, "build_id": { - "stringValue": "161037" + "stringValue": "160612" }, "canary_test": { "boolValue": true @@ -2038,7 +2036,24 @@ "values": {} }, { - "name": "game_instrumental_rock_bass" + "name": "game_instrumental_rock_bass", + "value": true, + "values": { + "fields": { + "end": { + "varintValue": "1783328400" + }, + "ints": { + "stringValue": "1,11,1,1 2,11,0,1 4,11,3,0 4,11,0,1 5,11,1,0 5,11,1,1 3,11,1,0 6,11,0,1 7,11,1,1 7,11,3,1 9,11,0,0 0,11,0,0 8,11,3,0 8,11,0,0 10,11,1,1 730000,11,0,0 870000,11,1,1 1060000,11,0,0" + }, + "routes": { + "stringValue": "3141079998,870135081,2805636083,1365497350,1247427185,3381223955,4234984253,2316916973,2128895616,565111133" + }, + "start": { + "varintValue": "1775631600" + } + } + } }, { "name": "game_lauterbrunnen", @@ -2102,6 +2117,20 @@ } } }, + { + "name": "game_os_deprecation_warning", + "value": true, + "values": { + "fields": { + "iOS": { + "stringValue": "15.0;2026/08/04" + }, + "showInGameWarning": { + "boolValue": true + } + } + } + }, { "name": "game_prize_wheel_schedule", "value": true, @@ -2185,7 +2214,15 @@ "values": {} }, { - "name": "game_routes_delivery" + "name": "game_routes_delivery", + "value": true, + "values": { + "fields": { + "version": { + "stringValue": "1.113.0" + } + } + } }, { "name": "game_sentry_log_upload", @@ -2214,6 +2251,9 @@ "value": true, "values": {} }, + { + "name": "game_spatial_frame_time_telemetry" + }, { "name": "game_staged_quest_rewards_ui", "value": true @@ -2321,18 +2361,11 @@ } } }, - { - "name": "game_uiupdateinupdate", - "value": true - }, { "name": "game_user_storage_service", "value": true, "values": {} }, - { - "name": "game_watopian_force_1080p" - }, { "name": "game_wd1_data_acq" }, @@ -2402,10 +2435,6 @@ "name": "gfx_romsdalen", "values": {} }, - { - "name": "gfx_waipio", - "value": true - }, { "name": "gn_deferred_lighting", "value": true, diff --git a/protobuf/user_storage.proto b/protobuf/user_storage.proto index 97bb017..0b1e7ad 100644 --- a/protobuf/user_storage.proto +++ b/protobuf/user_storage.proto @@ -24,6 +24,12 @@ message GameSettings { optional int32 streaks_flair_visuals = 11; optional int32 ride_stats_slot0 = 13; optional int32 ride_stats_slot1 = 14; + optional int32 workout_stats_slot0 = 15; + optional int32 workout_stats_slot1 = 16; + optional int32 workout_stats_slot2 = 17; + optional int32 workout_stats_slot3 = 18; + optional int32 ride_stats_workout_slot0 = 19; + optional int32 ride_stats_workout_slot1 = 20; } message GarageItemLastSelected { diff --git a/protobuf/user_storage_pb2.py b/protobuf/user_storage_pb2.py index f0337e6..7276331 100644 --- a/protobuf/user_storage_pb2.py +++ b/protobuf/user_storage_pb2.py @@ -13,7 +13,7 @@ _sym_db = _symbol_database.Default() -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x12user_storage.proto\".\n\x0bUserStorage\x12\x1f\n\nattributes\x18\x02 \x03(\x0b\x32\x0b.Attributes\"\xf7\x01\n\nAttributes\x12$\n\rgame_settings\x18\x16 \x01(\x0b\x32\r.GameSettings\x12\x35\n\x14garage_last_selected\x18\x17 \x01(\x0b\x32\x17.GarageItemLastSelected\x12$\n\rbike_progress\x18\x18 \x01(\x0b\x32\r.BikeProgress\x12-\n\x12special_event_seen\x18\x19 \x01(\x0b\x32\x11.SpecialEventSeen\x12\x37\n\x17\x64\x61ta_collection_consent\x18\x1d \x01(\x0b\x32\x16.DataCollectionConsent\"\xb4\x02\n\x0cGameSettings\x12\n\n\x02\x66\x32\x18\x02 \x01(\x02\x12\x1c\n\x14minimal_leaderboards\x18\x03 \x01(\x05\x12\x19\n\x11power_meter_slot0\x18\x04 \x01(\x05\x12\x19\n\x11power_meter_slot1\x18\x05 \x01(\x05\x12\x19\n\x11power_meter_slot2\x18\x06 \x01(\x05\x12\x19\n\x11power_meter_slot3\x18\x07 \x01(\x05\x12\x1f\n\x17\x63limb_graph_sensitivity\x18\t \x01(\x05\x12\x1a\n\x12screen_shake_scale\x18\n \x01(\x02\x12\x1d\n\x15streaks_flair_visuals\x18\x0b \x01(\x05\x12\x18\n\x10ride_stats_slot0\x18\r \x01(\x05\x12\x18\n\x10ride_stats_slot1\x18\x0e \x01(\x05\"9\n\x16GarageItemLastSelected\x12\x11\n\tsignature\x18\x01 \x01(\t\x12\x0c\n\x04time\x18\x02 \x01(\x04\"3\n\x10SpecialEventSeen\x12\x11\n\tsignature\x18\x01 \x01(\t\x12\x0c\n\x04time\x18\x02 \x01(\x04\"\xbf\x02\n\x0c\x42ikeProgress\x12\x11\n\tsignature\x18\x01 \x01(\t\x12\r\n\x05level\x18\x02 \x01(\r\x12\x16\n\x0elevel_distance\x18\x03 \x01(\x02\x12\x16\n\x0etotal_distance\x18\x04 \x01(\x02\x12\x17\n\x0flevel_elevation\x18\x05 \x01(\x02\x12\x17\n\x0ftotal_elevation\x18\x06 \x01(\x02\x12\x19\n\x11level_moving_time\x18\x07 \x01(\x02\x12\x19\n\x11total_moving_time\x18\x08 \x01(\x02\x12\x14\n\x0clast_upgrade\x18\n \x01(\x04\x12\x0c\n\x04time\x18\x0b \x01(\x04\x12#\n\rbike_upgrades\x18\x0c \x03(\x0b\x32\x0c.BikeUpgrade\x12\x0b\n\x03\x66\x31\x34\x18\x0e \x01(\r\x12\x12\n\npercentage\x18\x0f \x01(\x02\x12\x0b\n\x03\x66\x31\x36\x18\x10 \x01(\r\"9\n\x0b\x42ikeUpgrade\x12\x0c\n\x04time\x18\x01 \x01(\x04\x12\r\n\x05level\x18\x02 \x01(\r\x12\r\n\x05price\x18\x03 \x01(\r\"F\n\x15\x44\x61taCollectionConsent\x12\x0e\n\x06\x64\x65vice\x18\x01 \x01(\t\x12\x0f\n\x07\x63onsent\x18\x02 \x01(\x05\x12\x0c\n\x04time\x18\x03 \x01(\x04') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x12user_storage.proto\".\n\x0bUserStorage\x12\x1f\n\nattributes\x18\x02 \x03(\x0b\x32\x0b.Attributes\"\xf7\x01\n\nAttributes\x12$\n\rgame_settings\x18\x16 \x01(\x0b\x32\r.GameSettings\x12\x35\n\x14garage_last_selected\x18\x17 \x01(\x0b\x32\x17.GarageItemLastSelected\x12$\n\rbike_progress\x18\x18 \x01(\x0b\x32\r.BikeProgress\x12-\n\x12special_event_seen\x18\x19 \x01(\x0b\x32\x11.SpecialEventSeen\x12\x37\n\x17\x64\x61ta_collection_consent\x18\x1d \x01(\x0b\x32\x16.DataCollectionConsent\"\xec\x03\n\x0cGameSettings\x12\n\n\x02\x66\x32\x18\x02 \x01(\x02\x12\x1c\n\x14minimal_leaderboards\x18\x03 \x01(\x05\x12\x19\n\x11power_meter_slot0\x18\x04 \x01(\x05\x12\x19\n\x11power_meter_slot1\x18\x05 \x01(\x05\x12\x19\n\x11power_meter_slot2\x18\x06 \x01(\x05\x12\x19\n\x11power_meter_slot3\x18\x07 \x01(\x05\x12\x1f\n\x17\x63limb_graph_sensitivity\x18\t \x01(\x05\x12\x1a\n\x12screen_shake_scale\x18\n \x01(\x02\x12\x1d\n\x15streaks_flair_visuals\x18\x0b \x01(\x05\x12\x18\n\x10ride_stats_slot0\x18\r \x01(\x05\x12\x18\n\x10ride_stats_slot1\x18\x0e \x01(\x05\x12\x1b\n\x13workout_stats_slot0\x18\x0f \x01(\x05\x12\x1b\n\x13workout_stats_slot1\x18\x10 \x01(\x05\x12\x1b\n\x13workout_stats_slot2\x18\x11 \x01(\x05\x12\x1b\n\x13workout_stats_slot3\x18\x12 \x01(\x05\x12 \n\x18ride_stats_workout_slot0\x18\x13 \x01(\x05\x12 \n\x18ride_stats_workout_slot1\x18\x14 \x01(\x05\"9\n\x16GarageItemLastSelected\x12\x11\n\tsignature\x18\x01 \x01(\t\x12\x0c\n\x04time\x18\x02 \x01(\x04\"3\n\x10SpecialEventSeen\x12\x11\n\tsignature\x18\x01 \x01(\t\x12\x0c\n\x04time\x18\x02 \x01(\x04\"\xbf\x02\n\x0c\x42ikeProgress\x12\x11\n\tsignature\x18\x01 \x01(\t\x12\r\n\x05level\x18\x02 \x01(\r\x12\x16\n\x0elevel_distance\x18\x03 \x01(\x02\x12\x16\n\x0etotal_distance\x18\x04 \x01(\x02\x12\x17\n\x0flevel_elevation\x18\x05 \x01(\x02\x12\x17\n\x0ftotal_elevation\x18\x06 \x01(\x02\x12\x19\n\x11level_moving_time\x18\x07 \x01(\x02\x12\x19\n\x11total_moving_time\x18\x08 \x01(\x02\x12\x14\n\x0clast_upgrade\x18\n \x01(\x04\x12\x0c\n\x04time\x18\x0b \x01(\x04\x12#\n\rbike_upgrades\x18\x0c \x03(\x0b\x32\x0c.BikeUpgrade\x12\x0b\n\x03\x66\x31\x34\x18\x0e \x01(\r\x12\x12\n\npercentage\x18\x0f \x01(\x02\x12\x0b\n\x03\x66\x31\x36\x18\x10 \x01(\r\"9\n\x0b\x42ikeUpgrade\x12\x0c\n\x04time\x18\x01 \x01(\x04\x12\r\n\x05level\x18\x02 \x01(\r\x12\r\n\x05price\x18\x03 \x01(\r\"F\n\x15\x44\x61taCollectionConsent\x12\x0e\n\x06\x64\x65vice\x18\x01 \x01(\t\x12\x0f\n\x07\x63onsent\x18\x02 \x01(\x05\x12\x0c\n\x04time\x18\x03 \x01(\x04') _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'user_storage_pb2', globals()) @@ -25,15 +25,15 @@ if _descriptor._USE_C_DESCRIPTORS == False: _ATTRIBUTES._serialized_start=71 _ATTRIBUTES._serialized_end=318 _GAMESETTINGS._serialized_start=321 - _GAMESETTINGS._serialized_end=629 - _GARAGEITEMLASTSELECTED._serialized_start=631 - _GARAGEITEMLASTSELECTED._serialized_end=688 - _SPECIALEVENTSEEN._serialized_start=690 - _SPECIALEVENTSEEN._serialized_end=741 - _BIKEPROGRESS._serialized_start=744 - _BIKEPROGRESS._serialized_end=1063 - _BIKEUPGRADE._serialized_start=1065 - _BIKEUPGRADE._serialized_end=1122 - _DATACOLLECTIONCONSENT._serialized_start=1124 - _DATACOLLECTIONCONSENT._serialized_end=1194 + _GAMESETTINGS._serialized_end=813 + _GARAGEITEMLASTSELECTED._serialized_start=815 + _GARAGEITEMLASTSELECTED._serialized_end=872 + _SPECIALEVENTSEEN._serialized_start=874 + _SPECIALEVENTSEEN._serialized_end=925 + _BIKEPROGRESS._serialized_start=928 + _BIKEPROGRESS._serialized_end=1247 + _BIKEUPGRADE._serialized_start=1249 + _BIKEUPGRADE._serialized_end=1306 + _DATACOLLECTIONCONSENT._serialized_start=1308 + _DATACOLLECTIONCONSENT._serialized_end=1378 # @@protoc_insertion_point(module_scope)