import typing from BaseClasses import Item from .Names import ItemName class KH2Item(Item): game: str = "Kingdom Hearts 2" class ItemData(typing.NamedTuple): code: typing.Optional[int] quantity: int = 0 kh2id: int = 0 # Save+ mem addr memaddr: int = 0 # some items have bitmasks. if bitmask>0 bitor to give item else bitmask: int = 0 # if ability then ability: bool = False Reports_Table = { ItemName.SecretAnsemsReport1: ItemData(0x130000, 1, 226, 0x36C4, 6), ItemName.SecretAnsemsReport2: ItemData(0x130001, 1, 227, 0x36C4, 7), ItemName.SecretAnsemsReport3: ItemData(0x130002, 1, 228, 0x36C5, 0), ItemName.SecretAnsemsReport4: ItemData(0x130003, 1, 229, 0x36C5, 1), ItemName.SecretAnsemsReport5: ItemData(0x130004, 1, 230, 0x36C5, 2), ItemName.SecretAnsemsReport6: ItemData(0x130005, 1, 231, 0x36C5, 3), ItemName.SecretAnsemsReport7: ItemData(0x130006, 1, 232, 0x36C5, 4), ItemName.SecretAnsemsReport8: ItemData(0x130007, 1, 233, 0x36C5, 5), ItemName.SecretAnsemsReport9: ItemData(0x130008, 1, 234, 0x36C5, 6), ItemName.SecretAnsemsReport10: ItemData(0x130009, 1, 235, 0x36C5, 7), ItemName.SecretAnsemsReport11: ItemData(0x13000A, 1, 236, 0x36C6, 0), ItemName.SecretAnsemsReport12: ItemData(0x13000B, 1, 237, 0x36C6, 1), ItemName.SecretAnsemsReport13: ItemData(0x13000C, 1, 238, 0x36C6, 2), } Progression_Table = { ItemName.ProofofConnection: ItemData(0x13000D, 1, 593, 0x36B2), ItemName.ProofofNonexistence: ItemData(0x13000E, 1, 594, 0x36B3), ItemName.ProofofPeace: ItemData(0x13000F, 1, 595, 0x36B4), ItemName.PromiseCharm: ItemData(0x130010, 1, 524, 0x3694), ItemName.NamineSketches: ItemData(0x130011, 1, 368, 0x3642), ItemName.CastleKey: ItemData(0x130012, 2, 460, 0x365D), # dummy 13 ItemName.BattlefieldsofWar: ItemData(0x130013, 2, 54, 0x35AE), ItemName.SwordoftheAncestor: ItemData(0x130014, 2, 55, 0x35AF), ItemName.BeastsClaw: ItemData(0x130015, 2, 59, 0x35B3), ItemName.BoneFist: ItemData(0x130016, 2, 60, 0x35B4), ItemName.ProudFang: ItemData(0x130017, 2, 61, 0x35B5), ItemName.SkillandCrossbones: ItemData(0x130018, 2, 62, 0x35B6), ItemName.Scimitar: ItemData(0x130019, 2, 72, 0x35C0), ItemName.MembershipCard: ItemData(0x13001A, 2, 369, 0x3643), ItemName.IceCream: ItemData(0x13001B, 3, 375, 0x3649), # Changed to 3 instead of one poster, picture and ice cream respectively ItemName.WaytotheDawn: ItemData(0x13001C, 1, 73, 0x35C1), # currently first visit locking doesn't work for twtnw.When goa is updated should be 2 ItemName.IdentityDisk: ItemData(0x13001D, 2, 74, 0x35C2), ItemName.TornPages: ItemData(0x13001E, 5, 32, 0x3598), } Forms_Table = { ItemName.ValorForm: ItemData(0x13001F, 1, 26, 0x36C0, 1), ItemName.WisdomForm: ItemData(0x130020, 1, 27, 0x36C0, 2), ItemName.LimitForm: ItemData(0x130021, 1, 563, 0x36CA, 3), ItemName.MasterForm: ItemData(0x130022, 1, 31, 0x36C0, 6), ItemName.FinalForm: ItemData(0x130023, 1, 29, 0x36C0, 4), } Magic_Table = { ItemName.FireElement: ItemData(0x130024, 3, 21, 0x3594), ItemName.BlizzardElement: ItemData(0x130025, 3, 22, 0x3595), ItemName.ThunderElement: ItemData(0x130026, 3, 23, 0x3596), ItemName.CureElement: ItemData(0x130027, 3, 24, 0x3597), ItemName.MagnetElement: ItemData(0x130028, 3, 87, 0x35CF), ItemName.ReflectElement: ItemData(0x130029, 3, 88, 0x35D0), ItemName.Genie: ItemData(0x13002A, 1, 159, 0x36C4, 4), ItemName.PeterPan: ItemData(0x13002B, 1, 160, 0x36C4, 5), ItemName.Stitch: ItemData(0x13002C, 1, 25, 0x36C0, 0), ItemName.ChickenLittle: ItemData(0x13002D, 1, 383, 0x36C0, 3), } Movement_Table = { ItemName.HighJump: ItemData(0x13002E, 4, 94, 0x05E, 0, True), ItemName.QuickRun: ItemData(0x13002F, 4, 98, 0x062, 0, True), ItemName.DodgeRoll: ItemData(0x130030, 4, 564, 0x234, 0, True), ItemName.AerialDodge: ItemData(0x130031, 4, 102, 0x066, 0, True), ItemName.Glide: ItemData(0x130032, 4, 106, 0x06A, 0, True), } Keyblade_Table = { ItemName.Oathkeeper: ItemData(0x130033, 1, 42, 0x35A2), ItemName.Oblivion: ItemData(0x130034, 1, 43, 0x35A3), ItemName.StarSeeker: ItemData(0x130035, 1, 480, 0x367B), ItemName.HiddenDragon: ItemData(0x130036, 1, 481, 0x367C), ItemName.HerosCrest: ItemData(0x130037, 1, 484, 0x367F), ItemName.Monochrome: ItemData(0x130038, 1, 485, 0x3680), ItemName.FollowtheWind: ItemData(0x130039, 1, 486, 0x3681), ItemName.CircleofLife: ItemData(0x13003A, 1, 487, 0x3682), ItemName.PhotonDebugger: ItemData(0x13003B, 1, 488, 0x3683), ItemName.GullWing: ItemData(0x13003C, 1, 489, 0x3684), ItemName.RumblingRose: ItemData(0x13003D, 1, 490, 0x3685), ItemName.GuardianSoul: ItemData(0x13003E, 1, 491, 0x3686), ItemName.WishingLamp: ItemData(0x13003F, 1, 492, 0x3687), ItemName.DecisivePumpkin: ItemData(0x130040, 1, 493, 0x3688), ItemName.SleepingLion: ItemData(0x130041, 1, 494, 0x3689), ItemName.SweetMemories: ItemData(0x130042, 1, 495, 0x368A), ItemName.MysteriousAbyss: ItemData(0x130043, 1, 496, 0x368B), ItemName.TwoBecomeOne: ItemData(0x130044, 1, 543, 0x3698), ItemName.FatalCrest: ItemData(0x130045, 1, 497, 0x368C), ItemName.BondofFlame: ItemData(0x130046, 1, 498, 0x368D), ItemName.Fenrir: ItemData(0x130047, 1, 499, 0x368E), ItemName.UltimaWeapon: ItemData(0x130048, 1, 500, 0x368F), ItemName.WinnersProof: ItemData(0x130049, 1, 544, 0x3699), ItemName.Pureblood: ItemData(0x13004A, 1, 71, 0x35BF), } Staffs_Table = { ItemName.Centurion2: ItemData(0x13004B, 1, 546, 0x369B), ItemName.MeteorStaff: ItemData(0x13004C, 1, 150, 0x35F1), ItemName.NobodyLance: ItemData(0x13004D, 1, 155, 0x35F6), ItemName.PreciousMushroom: ItemData(0x13004E, 1, 549, 0x369E), ItemName.PreciousMushroom2: ItemData(0x13004F, 1, 550, 0x369F), ItemName.PremiumMushroom: ItemData(0x130050, 1, 551, 0x36A0), ItemName.RisingDragon: ItemData(0x130051, 1, 154, 0x35F5), ItemName.SaveTheQueen2: ItemData(0x130052, 1, 503, 0x3692), ItemName.ShamansRelic: ItemData(0x130053, 1, 156, 0x35F7), } Shields_Table = { ItemName.AkashicRecord: ItemData(0x130054, 1, 146, 0x35ED), ItemName.FrozenPride2: ItemData(0x130055, 1, 553, 0x36A2), ItemName.GenjiShield: ItemData(0x130056, 1, 145, 0x35EC), ItemName.MajesticMushroom: ItemData(0x130057, 1, 556, 0x36A5), ItemName.MajesticMushroom2: ItemData(0x130058, 1, 557, 0x36A6), ItemName.NobodyGuard: ItemData(0x130059, 1, 147, 0x35EE), ItemName.OgreShield: ItemData(0x13005A, 1, 141, 0x35E8), ItemName.SaveTheKing2: ItemData(0x13005B, 1, 504, 0x3693), ItemName.UltimateMushroom: ItemData(0x13005C, 1, 558, 0x36A7), } Accessory_Table = { ItemName.AbilityRing: ItemData(0x13005D, 1, 8, 0x3587), ItemName.EngineersRing: ItemData(0x13005E, 1, 9, 0x3588), ItemName.TechniciansRing: ItemData(0x13005F, 1, 10, 0x3589), ItemName.SkillRing: ItemData(0x130060, 1, 38, 0x359F), ItemName.SkillfulRing: ItemData(0x130061, 1, 39, 0x35A0), ItemName.ExpertsRing: ItemData(0x130062, 1, 11, 0x358A), ItemName.MastersRing: ItemData(0x130063, 1, 34, 0x359B), ItemName.CosmicRing: ItemData(0x130064, 1, 52, 0x35AD), ItemName.ExecutivesRing: ItemData(0x130065, 1, 599, 0x36B5), ItemName.SardonyxRing: ItemData(0x130066, 1, 12, 0x358B), ItemName.TourmalineRing: ItemData(0x130067, 1, 13, 0x358C), ItemName.AquamarineRing: ItemData(0x130068, 1, 14, 0x358D), ItemName.GarnetRing: ItemData(0x130069, 1, 15, 0x358E), ItemName.DiamondRing: ItemData(0x13006A, 1, 16, 0x358F), ItemName.SilverRing: ItemData(0x13006B, 1, 17, 0x3590), ItemName.GoldRing: ItemData(0x13006C, 1, 18, 0x3591), ItemName.PlatinumRing: ItemData(0x13006D, 1, 19, 0x3592), ItemName.MythrilRing: ItemData(0x13006E, 1, 20, 0x3593), ItemName.OrichalcumRing: ItemData(0x13006F, 1, 28, 0x359A), ItemName.SoldierEarring: ItemData(0x130070, 1, 40, 0x35A6), ItemName.FencerEarring: ItemData(0x130071, 1, 46, 0x35A7), ItemName.MageEarring: ItemData(0x130072, 1, 47, 0x35A8), ItemName.SlayerEarring: ItemData(0x130073, 1, 48, 0x35AC), ItemName.Medal: ItemData(0x130074, 1, 53, 0x35B0), ItemName.MoonAmulet: ItemData(0x130075, 1, 35, 0x359C), ItemName.StarCharm: ItemData(0x130076, 1, 36, 0x359E), ItemName.CosmicArts: ItemData(0x130077, 1, 56, 0x35B1), ItemName.ShadowArchive: ItemData(0x130078, 1, 57, 0x35B2), ItemName.ShadowArchive2: ItemData(0x130079, 1, 58, 0x35B7), ItemName.FullBloom: ItemData(0x13007A, 1, 64, 0x35B9), ItemName.FullBloom2: ItemData(0x13007B, 1, 66, 0x35BB), ItemName.DrawRing: ItemData(0x13007C, 1, 65, 0x35BA), ItemName.LuckyRing: ItemData(0x13007D, 1, 63, 0x35B8), } Armor_Table = { ItemName.ElvenBandana: ItemData(0x13007E, 1, 67, 0x35BC), ItemName.DivineBandana: ItemData(0x13007F, 1, 68, 0x35BD), ItemName.ProtectBelt: ItemData(0x130080, 1, 78, 0x35C7), ItemName.GaiaBelt: ItemData(0x130081, 1, 79, 0x35CA), ItemName.PowerBand: ItemData(0x130082, 1, 69, 0x35BE), ItemName.BusterBand: ItemData(0x130083, 1, 70, 0x35C6), ItemName.CosmicBelt: ItemData(0x130084, 1, 111, 0x35D1), ItemName.FireBangle: ItemData(0x130085, 1, 173, 0x35D7), ItemName.FiraBangle: ItemData(0x130086, 1, 174, 0x35D8), ItemName.FiragaBangle: ItemData(0x130087, 1, 197, 0x35D9), ItemName.FiragunBangle: ItemData(0x130088, 1, 284, 0x35DA), ItemName.BlizzardArmlet: ItemData(0x130089, 1, 286, 0x35DC), ItemName.BlizzaraArmlet: ItemData(0x13008A, 1, 287, 0x35DD), ItemName.BlizzagaArmlet: ItemData(0x13008B, 1, 288, 0x35DE), ItemName.BlizzagunArmlet: ItemData(0x13008C, 1, 289, 0x35DF), ItemName.ThunderTrinket: ItemData(0x13008D, 1, 291, 0x35E2), ItemName.ThundaraTrinket: ItemData(0x13008E, 1, 292, 0x35E3), ItemName.ThundagaTrinket: ItemData(0x13008F, 1, 293, 0x35E4), ItemName.ThundagunTrinket: ItemData(0x130090, 1, 294, 0x35E5), ItemName.ShockCharm: ItemData(0x130091, 1, 132, 0x35D2), ItemName.ShockCharm2: ItemData(0x130092, 1, 133, 0x35D3), ItemName.ShadowAnklet: ItemData(0x130093, 1, 296, 0x35F9), ItemName.DarkAnklet: ItemData(0x130094, 1, 297, 0x35FB), ItemName.MidnightAnklet: ItemData(0x130095, 1, 298, 0x35FC), ItemName.ChaosAnklet: ItemData(0x130096, 1, 299, 0x35FD), ItemName.ChampionBelt: ItemData(0x130097, 1, 305, 0x3603), ItemName.AbasChain: ItemData(0x130098, 1, 301, 0x35FF), ItemName.AegisChain: ItemData(0x130099, 1, 302, 0x3600), ItemName.Acrisius: ItemData(0x13009A, 1, 303, 0x3601), ItemName.Acrisius2: ItemData(0x13009B, 1, 307, 0x3605), ItemName.CosmicChain: ItemData(0x13009C, 1, 308, 0x3606), ItemName.PetiteRibbon: ItemData(0x13009D, 1, 306, 0x3604), ItemName.Ribbon: ItemData(0x13009E, 1, 304, 0x3602), ItemName.GrandRibbon: ItemData(0x13009F, 1, 157, 0x35D4), } Usefull_Table = { ItemName.MickyMunnyPouch: ItemData(0x1300A0, 3, 535, 0x3695), # 5000 munny per ItemName.OletteMunnyPouch: ItemData(0x1300A1, 6, 362, 0x363C), # 2500 munny per ItemName.HadesCupTrophy: ItemData(0x1300A2, 1, 537, 0x3696), ItemName.UnknownDisk: ItemData(0x1300A3, 1, 462, 0x365F), ItemName.OlympusStone: ItemData(0x1300A4, 1, 370, 0x3644), ItemName.MaxHPUp: ItemData(0x1300A5, 20, 470, 0x3671), ItemName.MaxMPUp: ItemData(0x1300A6, 4, 471, 0x3672), ItemName.DriveGaugeUp: ItemData(0x1300A7, 6, 472, 0x3673), ItemName.ArmorSlotUp: ItemData(0x1300A8, 3, 473, 0x3674), ItemName.AccessorySlotUp: ItemData(0x1300A9, 3, 474, 0x3675), ItemName.ItemSlotUp: ItemData(0x1300AA, 5, 463, 0x3660), } SupportAbility_Table = { ItemName.Scan: ItemData(0x1300AB, 2, 138, 0x08A, 0, True), ItemName.AerialRecovery: ItemData(0x1300AC, 1, 158, 0x09E, 0, True), ItemName.ComboMaster: ItemData(0x1300AD, 1, 539, 0x21B, 0, True), ItemName.ComboPlus: ItemData(0x1300AE, 3, 162, 0x0A2, 0, True), ItemName.AirComboPlus: ItemData(0x1300AF, 3, 163, 0x0A3, 0, True), ItemName.ComboBoost: ItemData(0x1300B0, 2, 390, 0x186, 0, True), ItemName.AirComboBoost: ItemData(0x1300B1, 2, 391, 0x187, 0, True), ItemName.ReactionBoost: ItemData(0x1300B2, 3, 392, 0x188, 0, True), ItemName.FinishingPlus: ItemData(0x1300B3, 3, 393, 0x189, 0, True), ItemName.NegativeCombo: ItemData(0x1300B4, 2, 394, 0x18A, 0, True), ItemName.BerserkCharge: ItemData(0x1300B5, 2, 395, 0x18B, 0, True), ItemName.DamageDrive: ItemData(0x1300B6, 2, 396, 0x18C, 0, True), ItemName.DriveBoost: ItemData(0x1300B7, 2, 397, 0x18D, 0, True), ItemName.FormBoost: ItemData(0x1300B8, 3, 398, 0x18E, 0, True), ItemName.SummonBoost: ItemData(0x1300B9, 1, 399, 0x18F, 0, True), ItemName.ExperienceBoost: ItemData(0x1300BA, 2, 401, 0x191, 0, True), ItemName.Draw: ItemData(0x1300BB, 4, 405, 0x195, 0, True), ItemName.Jackpot: ItemData(0x1300BC, 2, 406, 0x196, 0, True), ItemName.LuckyLucky: ItemData(0x1300BD, 3, 407, 0x197, 0, True), ItemName.DriveConverter: ItemData(0x1300BE, 2, 540, 0x21C, 0, True), ItemName.FireBoost: ItemData(0x1300BF, 2, 408, 0x198, 0, True), ItemName.BlizzardBoost: ItemData(0x1300C0, 2, 409, 0x199, 0, True), ItemName.ThunderBoost: ItemData(0x1300C1, 2, 410, 0x19A, 0, True), ItemName.ItemBoost: ItemData(0x1300C2, 2, 411, 0x19B, 0, True), ItemName.MPRage: ItemData(0x1300C3, 2, 412, 0x19C, 0, True), ItemName.MPHaste: ItemData(0x1300C4, 2, 413, 0x19D, 0, True), ItemName.MPHastera: ItemData(0x1300C5, 2, 421, 0x1A5, 0, True), ItemName.MPHastega: ItemData(0x1300C6, 1, 422, 0x1A6, 0, True), ItemName.Defender: ItemData(0x1300C7, 2, 414, 0x19E, 0, True), ItemName.DamageControl: ItemData(0x1300C8, 2, 542, 0x21E, 0, True), ItemName.NoExperience: ItemData(0x1300C9, 1, 404, 0x194, 0, True), ItemName.LightDarkness: ItemData(0x1300CA, 1, 541, 0x21D, 0, True), ItemName.MagicLock: ItemData(0x1300CB, 1, 403, 0x193, 0, True), ItemName.LeafBracer: ItemData(0x1300CC, 1, 402, 0x192, 0, True), ItemName.CombinationBoost: ItemData(0x1300CD, 1, 400, 0x190, 0, True), ItemName.OnceMore: ItemData(0x1300CE, 1, 416, 0x1A0, 0, True), ItemName.SecondChance: ItemData(0x1300CF, 1, 415, 0x19F, 0, True), } ActionAbility_Table = { ItemName.Guard: ItemData(0x1300D0, 1, 82, 0x052, 0, True), ItemName.UpperSlash: ItemData(0x1300D1, 1, 137, 0x089, 0, True), ItemName.HorizontalSlash: ItemData(0x1300D2, 1, 271, 0x10F, 0, True), ItemName.FinishingLeap: ItemData(0x1300D3, 1, 267, 0x10B, 0, True), ItemName.RetaliatingSlash: ItemData(0x1300D4, 1, 273, 0x111, 0, True), ItemName.Slapshot: ItemData(0x1300D5, 1, 262, 0x106, 0, True), ItemName.DodgeSlash: ItemData(0x1300D6, 1, 263, 0x107, 0, True), ItemName.FlashStep: ItemData(0x1300D7, 1, 559, 0x22F, 0, True), ItemName.SlideDash: ItemData(0x1300D8, 1, 264, 0x108, 0, True), ItemName.VicinityBreak: ItemData(0x1300D9, 1, 562, 0x232, 0, True), ItemName.GuardBreak: ItemData(0x1300DA, 1, 265, 0x109, 0, True), ItemName.Explosion: ItemData(0x1300DB, 1, 266, 0x10A, 0, True), ItemName.AerialSweep: ItemData(0x1300DC, 1, 269, 0x10D, 0, True), ItemName.AerialDive: ItemData(0x1300DD, 1, 560, 0x230, 0, True), ItemName.AerialSpiral: ItemData(0x1300DE, 1, 270, 0x10E, 0, True), ItemName.AerialFinish: ItemData(0x1300DF, 1, 272, 0x110, 0, True), ItemName.MagnetBurst: ItemData(0x1300E0, 1, 561, 0x231, 0, True), ItemName.Counterguard: ItemData(0x1300E1, 1, 268, 0x10C, 0, True), ItemName.AutoValor: ItemData(0x1300E2, 1, 385, 0x181, 0, True), ItemName.AutoWisdom: ItemData(0x1300E3, 1, 386, 0x182, 0, True), ItemName.AutoLimit: ItemData(0x1300E4, 1, 568, 0x238, 0, True), ItemName.AutoMaster: ItemData(0x1300E5, 1, 387, 0x183, 0, True), ItemName.AutoFinal: ItemData(0x1300E6, 1, 388, 0x184, 0, True), ItemName.AutoSummon: ItemData(0x1300E7, 1, 389, 0x185, 0, True), ItemName.TrinityLimit: ItemData(0x1300E8, 1, 198, 0x0C6, 0, True), } Items_Table = { ItemName.PowerBoost: ItemData(0x1300E9, 1, 276, 0x3666), ItemName.MagicBoost: ItemData(0x1300EA, 1, 277, 0x3667), ItemName.DefenseBoost: ItemData(0x1300EB, 1, 278, 0x3668), ItemName.APBoost: ItemData(0x1300EC, 1, 279, 0x3669), } # These items cannot be in other games so these are done locally in kh2 DonaldAbility_Table = { ItemName.DonaldFire: ItemData(0x1300ED, 1, 165, 0xA5, 0, True), ItemName.DonaldBlizzard: ItemData(0x1300EE, 1, 166, 0xA6, 0, True), ItemName.DonaldThunder: ItemData(0x1300EF, 1, 167, 0xA7, 0, True), ItemName.DonaldCure: ItemData(0x1300F0, 1, 168, 0xA8, 0, True), ItemName.Fantasia: ItemData(0x1300F1, 1, 199, 0xC7, 0, True), ItemName.FlareForce: ItemData(0x1300F2, 1, 200, 0xC8, 0, True), ItemName.DonaldMPRage: ItemData(0x1300F3, 3, 412, 0x19C, 0, True), ItemName.DonaldJackpot: ItemData(0x1300F4, 1, 406, 0x196, 0, True), ItemName.DonaldLuckyLucky: ItemData(0x1300F5, 3, 407, 0x197, 0, True), ItemName.DonaldFireBoost: ItemData(0x1300F6, 2, 408, 0x198, 0, True), ItemName.DonaldBlizzardBoost: ItemData(0x1300F7, 2, 409, 0x199, 0, True), ItemName.DonaldThunderBoost: ItemData(0x1300F8, 2, 410, 0x19A, 0, True), ItemName.DonaldMPHaste: ItemData(0x1300F9, 1, 413, 0x19D, 0, True), ItemName.DonaldMPHastera: ItemData(0x1300FA, 2, 421, 0x1A5, 0, True), ItemName.DonaldMPHastega: ItemData(0x1300FB, 2, 422, 0x1A6, 0, True), ItemName.DonaldAutoLimit: ItemData(0x1300FC, 1, 417, 0x1A1, 0, True), ItemName.DonaldHyperHealing: ItemData(0x1300FD, 2, 419, 0x1A3, 0, True), ItemName.DonaldAutoHealing: ItemData(0x1300FE, 1, 420, 0x1A4, 0, True), ItemName.DonaldItemBoost: ItemData(0x1300FF, 1, 411, 0x19B, 0, True), ItemName.DonaldDamageControl: ItemData(0x130100, 2, 542, 0x21E, 0, True), ItemName.DonaldDraw: ItemData(0x130101, 1, 405, 0x195, 0, True), } GoofyAbility_Table = { ItemName.GoofyTornado: ItemData(0x130102, 1, 423, 0x1A7, 0, True), ItemName.GoofyTurbo: ItemData(0x130103, 1, 425, 0x1A9, 0, True), ItemName.GoofyBash: ItemData(0x130104, 1, 429, 0x1AD, 0, True), ItemName.TornadoFusion: ItemData(0x130105, 1, 201, 0xC9, 0, True), ItemName.Teamwork: ItemData(0x130106, 1, 202, 0xCA, 0, True), ItemName.GoofyDraw: ItemData(0x130107, 1, 405, 0x195, 0, True), ItemName.GoofyJackpot: ItemData(0x130108, 1, 406, 0x196, 0, True), ItemName.GoofyLuckyLucky: ItemData(0x130109, 1, 407, 0x197, 0, True), ItemName.GoofyItemBoost: ItemData(0x13010A, 2, 411, 0x19B, 0, True), ItemName.GoofyMPRage: ItemData(0x13010B, 2, 412, 0x19C, 0, True), ItemName.GoofyDefender: ItemData(0x13010C, 2, 414, 0x19E, 0, True), ItemName.GoofyDamageControl: ItemData(0x13010D, 3, 542, 0x21E, 0, True), ItemName.GoofyAutoLimit: ItemData(0x13010E, 1, 417, 0x1A1, 0, True), ItemName.GoofySecondChance: ItemData(0x13010F, 1, 415, 0x19F, 0, True), ItemName.GoofyOnceMore: ItemData(0x130110, 1, 416, 0x1A0, 0, True), ItemName.GoofyAutoChange: ItemData(0x130111, 1, 418, 0x1A2, 0, True), ItemName.GoofyHyperHealing: ItemData(0x130112, 2, 419, 0x1A3, 0, True), ItemName.GoofyAutoHealing: ItemData(0x130113, 1, 420, 0x1A4, 0, True), ItemName.GoofyMPHaste: ItemData(0x130114, 1, 413, 0x19D, 0, True), ItemName.GoofyMPHastera: ItemData(0x130115, 1, 421, 0x1A5, 0, True), ItemName.GoofyMPHastega: ItemData(0x130116, 1, 422, 0x1A6, 0, True), ItemName.GoofyProtect: ItemData(0x130117, 2, 596, 0x254, 0, True), ItemName.GoofyProtera: ItemData(0x130118, 2, 597, 0x255, 0, True), ItemName.GoofyProtega: ItemData(0x130119, 2, 598, 0x256, 0, True), } Misc_Table = { ItemName.LuckyEmblem: ItemData(0x13011A, 0, 367, 0x3641), # letter item ItemName.Victory: ItemData(0x13011B, 0, 263, 0x111), ItemName.Bounty: ItemData(0x13011C, 0, 461, 0, 0), # Dummy 14 # ItemName.UniversalKey:ItemData(0x130129,0,365,0x363F,0)#Tournament Poster } # Items that are prone to duping. # anchors for checking form keyblade # Save+32F4 Valor Form Save+339C Master Form Save+33D4 Final Form # Have to use the kh2id for checking stuff that sora has equipped # Equipped abilities have an offset of 0x8000 so check for if whatever || whatever+0x8000 CheckDupingItems = { "Items": { ItemName.ProofofConnection, ItemName.ProofofNonexistence, ItemName.ProofofPeace, ItemName.PromiseCharm, ItemName.NamineSketches, ItemName.CastleKey, ItemName.BattlefieldsofWar, ItemName.SwordoftheAncestor, ItemName.BeastsClaw, ItemName.BoneFist, ItemName.ProudFang, ItemName.SkillandCrossbones, ItemName.Scimitar, ItemName.MembershipCard, ItemName.IceCream, ItemName.WaytotheDawn, ItemName.IdentityDisk, ItemName.TornPages, ItemName.LuckyEmblem, ItemName.MickyMunnyPouch, ItemName.OletteMunnyPouch, ItemName.HadesCupTrophy, ItemName.UnknownDisk, ItemName.OlympusStone, }, "Magic": { ItemName.FireElement, ItemName.BlizzardElement, ItemName.ThunderElement, ItemName.CureElement, ItemName.MagnetElement, ItemName.ReflectElement, }, "Bitmask": { ItemName.ValorForm, ItemName.WisdomForm, ItemName.LimitForm, ItemName.MasterForm, ItemName.FinalForm, ItemName.Genie, ItemName.PeterPan, ItemName.Stitch, ItemName.ChickenLittle, ItemName.SecretAnsemsReport1, ItemName.SecretAnsemsReport2, ItemName.SecretAnsemsReport3, ItemName.SecretAnsemsReport4, ItemName.SecretAnsemsReport5, ItemName.SecretAnsemsReport6, ItemName.SecretAnsemsReport7, ItemName.SecretAnsemsReport8, ItemName.SecretAnsemsReport9, ItemName.SecretAnsemsReport10, ItemName.SecretAnsemsReport11, ItemName.SecretAnsemsReport12, ItemName.SecretAnsemsReport13, }, "Weapons": { "Keyblades": { ItemName.Oathkeeper, ItemName.Oblivion, ItemName.StarSeeker, ItemName.HiddenDragon, ItemName.HerosCrest, ItemName.Monochrome, ItemName.FollowtheWind, ItemName.CircleofLife, ItemName.PhotonDebugger, ItemName.GullWing, ItemName.RumblingRose, ItemName.GuardianSoul, ItemName.WishingLamp, ItemName.DecisivePumpkin, ItemName.SleepingLion, ItemName.SweetMemories, ItemName.MysteriousAbyss, ItemName.TwoBecomeOne, ItemName.FatalCrest, ItemName.BondofFlame, ItemName.Fenrir, ItemName.UltimaWeapon, ItemName.WinnersProof, ItemName.Pureblood, }, "Staffs": { ItemName.Centurion2, ItemName.MeteorStaff, ItemName.NobodyLance, ItemName.PreciousMushroom, ItemName.PreciousMushroom2, ItemName.PremiumMushroom, ItemName.RisingDragon, ItemName.SaveTheQueen2, ItemName.ShamansRelic, }, "Shields": { ItemName.AkashicRecord, ItemName.FrozenPride2, ItemName.GenjiShield, ItemName.MajesticMushroom, ItemName.MajesticMushroom2, ItemName.NobodyGuard, ItemName.OgreShield, ItemName.SaveTheKing2, ItemName.UltimateMushroom, } }, "Equipment": { "Accessories": { ItemName.AbilityRing, ItemName.EngineersRing, ItemName.TechniciansRing, ItemName.SkillRing, ItemName.SkillfulRing, ItemName.ExpertsRing, ItemName.MastersRing, ItemName.CosmicRing, ItemName.ExecutivesRing, ItemName.SardonyxRing, ItemName.TourmalineRing, ItemName.AquamarineRing, ItemName.GarnetRing, ItemName.DiamondRing, ItemName.SilverRing, ItemName.GoldRing, ItemName.PlatinumRing, ItemName.MythrilRing, ItemName.OrichalcumRing, ItemName.SoldierEarring, ItemName.FencerEarring, ItemName.MageEarring, ItemName.SlayerEarring, ItemName.Medal, ItemName.MoonAmulet, ItemName.StarCharm, ItemName.CosmicArts, ItemName.ShadowArchive, ItemName.ShadowArchive2, ItemName.FullBloom, ItemName.FullBloom2, ItemName.DrawRing, ItemName.LuckyRing, }, "Armor": { ItemName.ElvenBandana, ItemName.DivineBandana, ItemName.ProtectBelt, ItemName.GaiaBelt, ItemName.PowerBand, ItemName.BusterBand, ItemName.CosmicBelt, ItemName.FireBangle, ItemName.FiraBangle, ItemName.FiragaBangle, ItemName.FiragunBangle, ItemName.BlizzardArmlet, ItemName.BlizzaraArmlet, ItemName.BlizzagaArmlet, ItemName.BlizzagunArmlet, ItemName.ThunderTrinket, ItemName.ThundaraTrinket, ItemName.ThundagaTrinket, ItemName.ThundagunTrinket, ItemName.ShockCharm, ItemName.ShockCharm2, ItemName.ShadowAnklet, ItemName.DarkAnklet, ItemName.MidnightAnklet, ItemName.ChaosAnklet, ItemName.ChampionBelt, ItemName.AbasChain, ItemName.AegisChain, ItemName.Acrisius, ItemName.Acrisius2, ItemName.CosmicChain, ItemName.PetiteRibbon, ItemName.Ribbon, ItemName.GrandRibbon, } }, "Stat Increases": { ItemName.MaxHPUp, ItemName.MaxMPUp, ItemName.DriveGaugeUp, ItemName.ArmorSlotUp, ItemName.AccessorySlotUp, ItemName.ItemSlotUp, }, "Abilities": { "Sora": { ItemName.Scan, ItemName.AerialRecovery, ItemName.ComboMaster, ItemName.ComboPlus, ItemName.AirComboPlus, ItemName.ComboBoost, ItemName.AirComboBoost, ItemName.ReactionBoost, ItemName.FinishingPlus, ItemName.NegativeCombo, ItemName.BerserkCharge, ItemName.DamageDrive, ItemName.DriveBoost, ItemName.FormBoost, ItemName.SummonBoost, ItemName.ExperienceBoost, ItemName.Draw, ItemName.Jackpot, ItemName.LuckyLucky, ItemName.DriveConverter, ItemName.FireBoost, ItemName.BlizzardBoost, ItemName.ThunderBoost, ItemName.ItemBoost, ItemName.MPRage, ItemName.MPHaste, ItemName.MPHastera, ItemName.MPHastega, ItemName.Defender, ItemName.DamageControl, ItemName.NoExperience, ItemName.LightDarkness, ItemName.MagicLock, ItemName.LeafBracer, ItemName.CombinationBoost, ItemName.OnceMore, ItemName.SecondChance, ItemName.Guard, ItemName.UpperSlash, ItemName.HorizontalSlash, ItemName.FinishingLeap, ItemName.RetaliatingSlash, ItemName.Slapshot, ItemName.DodgeSlash, ItemName.FlashStep, ItemName.SlideDash, ItemName.VicinityBreak, ItemName.GuardBreak, ItemName.Explosion, ItemName.AerialSweep, ItemName.AerialDive, ItemName.AerialSpiral, ItemName.AerialFinish, ItemName.MagnetBurst, ItemName.Counterguard, ItemName.AutoValor, ItemName.AutoWisdom, ItemName.AutoLimit, ItemName.AutoMaster, ItemName.AutoFinal, ItemName.AutoSummon, ItemName.TrinityLimit, ItemName.HighJump, ItemName.QuickRun, ItemName.DodgeRoll, ItemName.AerialDodge, ItemName.Glide, }, "Donald": { ItemName.DonaldFire, ItemName.DonaldBlizzard, ItemName.DonaldThunder, ItemName.DonaldCure, ItemName.Fantasia, ItemName.FlareForce, ItemName.DonaldMPRage, ItemName.DonaldJackpot, ItemName.DonaldLuckyLucky, ItemName.DonaldFireBoost, ItemName.DonaldBlizzardBoost, ItemName.DonaldThunderBoost, ItemName.DonaldMPHaste, ItemName.DonaldMPHastera, ItemName.DonaldMPHastega, ItemName.DonaldAutoLimit, ItemName.DonaldHyperHealing, ItemName.DonaldAutoHealing, ItemName.DonaldItemBoost, ItemName.DonaldDamageControl, ItemName.DonaldDraw, }, "Goofy": { ItemName.GoofyTornado, ItemName.GoofyTurbo, ItemName.GoofyBash, ItemName.TornadoFusion, ItemName.Teamwork, ItemName.GoofyDraw, ItemName.GoofyJackpot, ItemName.GoofyLuckyLucky, ItemName.GoofyItemBoost, ItemName.GoofyMPRage, ItemName.GoofyDefender, ItemName.GoofyDamageControl, ItemName.GoofyAutoLimit, ItemName.GoofySecondChance, ItemName.GoofyOnceMore, ItemName.GoofyAutoChange, ItemName.GoofyHyperHealing, ItemName.GoofyAutoHealing, ItemName.GoofyMPHaste, ItemName.GoofyMPHastera, ItemName.GoofyMPHastega, ItemName.GoofyProtect, ItemName.GoofyProtera, ItemName.GoofyProtega, } }, "Boosts": { ItemName.PowerBoost, ItemName.MagicBoost, ItemName.DefenseBoost, ItemName.APBoost, } } Progression_Dicts = { # Items that are classified as progression "Progression": { # Wincons ItemName.Victory, ItemName.LuckyEmblem, ItemName.Bounty, ItemName.ProofofConnection, ItemName.ProofofNonexistence, ItemName.ProofofPeace, ItemName.PromiseCharm, # visit locking ItemName.NamineSketches, # dummy 13 ItemName.CastleKey, ItemName.BattlefieldsofWar, ItemName.SwordoftheAncestor, ItemName.BeastsClaw, ItemName.BoneFist, ItemName.ProudFang, ItemName.SkillandCrossbones, ItemName.Scimitar, ItemName.MembershipCard, ItemName.IceCream, ItemName.WaytotheDawn, ItemName.IdentityDisk, ItemName.TornPages, # forms ItemName.ValorForm, ItemName.WisdomForm, ItemName.LimitForm, ItemName.MasterForm, ItemName.FinalForm, # magic ItemName.FireElement, ItemName.BlizzardElement, ItemName.ThunderElement, ItemName.CureElement, ItemName.MagnetElement, ItemName.ReflectElement, ItemName.Genie, ItemName.PeterPan, ItemName.Stitch, ItemName.ChickenLittle, # movement ItemName.HighJump, ItemName.QuickRun, ItemName.DodgeRoll, ItemName.AerialDodge, ItemName.Glide, # abilities ItemName.Scan, ItemName.AerialRecovery, ItemName.ComboMaster, ItemName.ComboPlus, ItemName.AirComboPlus, ItemName.ComboBoost, ItemName.AirComboBoost, ItemName.ReactionBoost, ItemName.FinishingPlus, ItemName.NegativeCombo, ItemName.BerserkCharge, ItemName.DamageDrive, ItemName.DriveBoost, ItemName.FormBoost, ItemName.SummonBoost, ItemName.ExperienceBoost, ItemName.Draw, ItemName.Jackpot, ItemName.LuckyLucky, ItemName.DriveConverter, ItemName.FireBoost, ItemName.BlizzardBoost, ItemName.ThunderBoost, ItemName.ItemBoost, ItemName.MPRage, ItemName.MPHaste, ItemName.MPHastera, ItemName.MPHastega, ItemName.Defender, ItemName.DamageControl, ItemName.NoExperience, ItemName.LightDarkness, ItemName.MagicLock, ItemName.LeafBracer, ItemName.CombinationBoost, ItemName.OnceMore, ItemName.SecondChance, ItemName.Guard, ItemName.UpperSlash, ItemName.HorizontalSlash, ItemName.FinishingLeap, ItemName.RetaliatingSlash, ItemName.Slapshot, ItemName.DodgeSlash, ItemName.FlashStep, ItemName.SlideDash, ItemName.VicinityBreak, ItemName.GuardBreak, ItemName.Explosion, ItemName.AerialSweep, ItemName.AerialDive, ItemName.AerialSpiral, ItemName.AerialFinish, ItemName.MagnetBurst, ItemName.Counterguard, ItemName.AutoValor, ItemName.AutoWisdom, ItemName.AutoLimit, ItemName.AutoMaster, ItemName.AutoFinal, ItemName.AutoSummon, ItemName.TrinityLimit, # keyblades ItemName.Oathkeeper, ItemName.Oblivion, ItemName.StarSeeker, ItemName.HiddenDragon, ItemName.HerosCrest, ItemName.Monochrome, ItemName.FollowtheWind, ItemName.CircleofLife, ItemName.PhotonDebugger, ItemName.GullWing, ItemName.RumblingRose, ItemName.GuardianSoul, ItemName.WishingLamp, ItemName.DecisivePumpkin, ItemName.SleepingLion, ItemName.SweetMemories, ItemName.MysteriousAbyss, ItemName.TwoBecomeOne, ItemName.FatalCrest, ItemName.BondofFlame, ItemName.Fenrir, ItemName.UltimaWeapon, ItemName.WinnersProof, ItemName.Pureblood, # Staffs ItemName.Centurion2, ItemName.MeteorStaff, ItemName.NobodyLance, ItemName.PreciousMushroom, ItemName.PreciousMushroom2, ItemName.PremiumMushroom, ItemName.RisingDragon, ItemName.SaveTheQueen2, ItemName.ShamansRelic, # Shields ItemName.AkashicRecord, ItemName.FrozenPride2, ItemName.GenjiShield, ItemName.MajesticMushroom, ItemName.MajesticMushroom2, ItemName.NobodyGuard, ItemName.OgreShield, ItemName.SaveTheKing2, ItemName.UltimateMushroom, # Party Limits ItemName.FlareForce, ItemName.Fantasia, ItemName.Teamwork, ItemName.TornadoFusion }, "2VisitLocking": { ItemName.CastleKey, ItemName.BattlefieldsofWar, ItemName.SwordoftheAncestor, ItemName.BeastsClaw, ItemName.BoneFist, ItemName.ProudFang, ItemName.SkillandCrossbones, ItemName.Scimitar, ItemName.MembershipCard, ItemName.IceCream, ItemName.WaytotheDawn, ItemName.IdentityDisk, ItemName.IceCream, ItemName.NamineSketches }, "AllVisitLocking": { ItemName.CastleKey: 2, ItemName.BattlefieldsofWar: 2, ItemName.SwordoftheAncestor: 2, ItemName.BeastsClaw: 2, ItemName.BoneFist: 2, ItemName.ProudFang: 2, ItemName.SkillandCrossbones: 2, ItemName.Scimitar: 2, ItemName.MembershipCard: 2, ItemName.WaytotheDawn: 1, ItemName.IdentityDisk: 2, ItemName.IceCream: 3, ItemName.NamineSketches: 1, } } exclusionItem_table = { "Ability": { ItemName.Scan, ItemName.AerialRecovery, ItemName.ComboMaster, ItemName.ComboPlus, ItemName.AirComboPlus, ItemName.ComboBoost, ItemName.AirComboBoost, ItemName.ReactionBoost, ItemName.FinishingPlus, ItemName.NegativeCombo, ItemName.BerserkCharge, ItemName.DamageDrive, ItemName.DriveBoost, ItemName.FormBoost, ItemName.SummonBoost, ItemName.ExperienceBoost, ItemName.Draw, ItemName.Jackpot, ItemName.LuckyLucky, ItemName.DriveConverter, ItemName.FireBoost, ItemName.BlizzardBoost, ItemName.ThunderBoost, ItemName.ItemBoost, ItemName.MPRage, ItemName.MPHaste, ItemName.MPHastera, ItemName.MPHastega, ItemName.Defender, ItemName.DamageControl, ItemName.NoExperience, ItemName.LightDarkness, ItemName.MagicLock, ItemName.LeafBracer, ItemName.CombinationBoost, ItemName.DamageDrive, ItemName.OnceMore, ItemName.SecondChance, ItemName.Guard, ItemName.UpperSlash, ItemName.HorizontalSlash, ItemName.FinishingLeap, ItemName.RetaliatingSlash, ItemName.Slapshot, ItemName.DodgeSlash, ItemName.FlashStep, ItemName.SlideDash, ItemName.VicinityBreak, ItemName.GuardBreak, ItemName.Explosion, ItemName.AerialSweep, ItemName.AerialDive, ItemName.AerialSpiral, ItemName.AerialFinish, ItemName.MagnetBurst, ItemName.Counterguard, ItemName.AutoValor, ItemName.AutoWisdom, ItemName.AutoLimit, ItemName.AutoMaster, ItemName.AutoFinal, ItemName.AutoSummon, ItemName.TrinityLimit, ItemName.HighJump, ItemName.QuickRun, ItemName.DodgeRoll, ItemName.AerialDodge, ItemName.Glide, }, "StatUps": { ItemName.MaxHPUp, ItemName.MaxMPUp, ItemName.DriveGaugeUp, ItemName.ArmorSlotUp, ItemName.AccessorySlotUp, ItemName.ItemSlotUp, }, } item_dictionary_table = {**Reports_Table, **Progression_Table, **Forms_Table, **Magic_Table, **Armor_Table, **Movement_Table, **Staffs_Table, **Shields_Table, **Keyblade_Table, **Accessory_Table, **Usefull_Table, **SupportAbility_Table, **ActionAbility_Table, **Items_Table, **Misc_Table, **Items_Table, **DonaldAbility_Table, **GoofyAbility_Table, } lookup_id_to_name: typing.Dict[int, str] = {data.code: item_name for item_name, data in item_dictionary_table.items() if data.code} item_groups: typing.Dict[str, list] = {"Drive Form": [item_name for item_name in Forms_Table.keys()], "Growth": [item_name for item_name in Movement_Table.keys()], "Donald Limit": [ItemName.FlareForce, ItemName.Fantasia], "Goofy Limit": [ItemName.Teamwork, ItemName.TornadoFusion], "Magic": [ItemName.FireElement, ItemName.BlizzardElement, ItemName.ThunderElement, ItemName.CureElement, ItemName.MagnetElement, ItemName.ReflectElement], "Summon": [ItemName.ChickenLittle, ItemName.Genie, ItemName.Stitch, ItemName.PeterPan], "Gap Closer": [ItemName.SlideDash, ItemName.FlashStep], "Ground Finisher": [ItemName.GuardBreak, ItemName.Explosion, ItemName.FinishingLeap], "Visit Lock": [item_name for item_name in Progression_Dicts["2VisitLocking"]], "Keyblade": [item_name for item_name in Keyblade_Table.keys()], "Fire": [ItemName.FireElement], "Blizzard": [ItemName.BlizzardElement], "Thunder": [ItemName.ThunderElement], "Cure": [ItemName.CureElement], "Magnet": [ItemName.MagnetElement], "Reflect": [ItemName.ReflectElement], "Proof": [ItemName.ProofofNonexistence, ItemName.ProofofPeace, ItemName.ProofofConnection], "Filler": [ ItemName.PowerBoost, ItemName.MagicBoost, ItemName.DefenseBoost, ItemName.APBoost] } # lookup_kh2id_to_name: typing.Dict[int, str] = {data.kh2id: item_name for item_name, data in # item_dictionary_table.items() if data.kh2id}