"""What sets the gate bytes, and what are they born as? The IS_* keys read single bytes in a contiguous block inside FutDataManagerImpl: 0x1fd2e tradingEnabled 0x1fd2f storeEnabled 0x1fd30 storeEnabled_JP 0x1fd3a friendlySeasons 0x1fd3b tournamentQuit 0x1fd3c processingState 0x1fd3d draftMode 0x1fd3f storyModeReward 0x1fd40 returningUserRewards These are NOT the int fields the /settings parser fills, so something copies across. Two questions, and the second is the one that decides whether an empty configs array blocks Seasons: (1) who WRITES these bytes (the applier, and the constructor default) (2) what value does the constructor give them CONTROL: 0x1fd2f storeEnabled. Its screen works today under an empty configs array, so whatever the ctor gives it is a non-blocking default, and any other byte born the same way is equally non-blocking. """ import re, struct OFFS = {0x1FD2E: "tradingEnabled", 0x1FD2F: "storeEnabled (CONTROL)", 0x1FD30: "storeEnabled_JP", 0x1FD3A: "friendlySeasonsEnabled", 0x1FD3B: "tournamentQuitEnabled", 0x1FD3C: "processingStateEnabled", 0x1FD3D: "enableDraftMode", 0x1FD3F: "storyModeRewardEnabled", 0x1FD40: "returningUserRewardsScreenEnabled"} print("#" * 78) print("# (1) every function whose code embeds one of these offsets") print("#" * 78) for off, name in sorted(OFFS.items()): pat = struct.pack("