Archipelago/worlds/kh2/Items.py

686 lines
30 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import typing
from BaseClasses import Item
from .Names import ItemName
class KH2Item(Item):
game: str = "Kingdom Hearts 2"
class ItemData(typing.NamedTuple):
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
# 0x130000
Reports_Table = {
ItemName.SecretAnsemsReport1: ItemData(1, 226, 0x36C4, 6),
ItemName.SecretAnsemsReport2: ItemData(1, 227, 0x36C4, 7),
ItemName.SecretAnsemsReport3: ItemData(1, 228, 0x36C5, 0),
ItemName.SecretAnsemsReport4: ItemData(1, 229, 0x36C5, 1),
ItemName.SecretAnsemsReport5: ItemData(1, 230, 0x36C5, 2),
ItemName.SecretAnsemsReport6: ItemData(1, 231, 0x36C5, 3),
ItemName.SecretAnsemsReport7: ItemData(1, 232, 0x36C5, 4),
ItemName.SecretAnsemsReport8: ItemData(1, 233, 0x36C5, 5),
ItemName.SecretAnsemsReport9: ItemData(1, 234, 0x36C5, 6),
ItemName.SecretAnsemsReport10: ItemData(1, 235, 0x36C5, 7),
ItemName.SecretAnsemsReport11: ItemData(1, 236, 0x36C6, 0),
ItemName.SecretAnsemsReport12: ItemData(1, 237, 0x36C6, 1),
ItemName.SecretAnsemsReport13: ItemData(1, 238, 0x36C6, 2),
}
Progression_Table = {
ItemName.ProofofConnection: ItemData(1, 593, 0x36B2),
ItemName.ProofofNonexistence: ItemData(1, 594, 0x36B3),
ItemName.ProofofPeace: ItemData(1, 595, 0x36B4),
ItemName.PromiseCharm: ItemData(1, 524, 0x3694),
ItemName.NamineSketches: ItemData(1, 368, 0x3642),
ItemName.CastleKey: ItemData(2, 460, 0x365D), # dummy 13
ItemName.BattlefieldsofWar: ItemData(2, 54, 0x35AE),
ItemName.SwordoftheAncestor: ItemData(2, 55, 0x35AF),
ItemName.BeastsClaw: ItemData(2, 59, 0x35B3),
ItemName.BoneFist: ItemData(2, 60, 0x35B4),
ItemName.ProudFang: ItemData(2, 61, 0x35B5),
ItemName.SkillandCrossbones: ItemData(2, 62, 0x35B6),
ItemName.Scimitar: ItemData(2, 72, 0x35C0),
ItemName.MembershipCard: ItemData(2, 369, 0x3643),
ItemName.IceCream: ItemData(3, 375, 0x3649),
# Changed to 3 instead of one poster, picture and ice cream respectively
ItemName.WaytotheDawn: ItemData(2, 73, 0x35C1),
# currently first visit locking doesn't work for twtnw.When goa is updated should be 2
ItemName.IdentityDisk: ItemData(2, 74, 0x35C2),
ItemName.TornPages: ItemData(5, 32, 0x3598),
}
Forms_Table = {
ItemName.ValorForm: ItemData(1, 26, 0x36C0, 1),
ItemName.WisdomForm: ItemData(1, 27, 0x36C0, 2),
ItemName.LimitForm: ItemData(1, 563, 0x36CA, 3),
ItemName.MasterForm: ItemData(1, 31, 0x36C0, 6),
ItemName.FinalForm: ItemData(1, 29, 0x36C0, 4),
ItemName.AntiForm: ItemData(1, 30, 0x36C0, 5)
}
Magic_Table = {
ItemName.FireElement: ItemData(3, 21, 0x3594),
ItemName.BlizzardElement: ItemData(3, 22, 0x3595),
ItemName.ThunderElement: ItemData(3, 23, 0x3596),
ItemName.CureElement: ItemData(3, 24, 0x3597),
ItemName.MagnetElement: ItemData(3, 87, 0x35CF),
ItemName.ReflectElement: ItemData(3, 88, 0x35D0),
}
Summon_Table = {
ItemName.Genie: ItemData(1, 159, 0x36C4, 4),
ItemName.PeterPan: ItemData(1, 160, 0x36C4, 5),
ItemName.Stitch: ItemData(1, 25, 0x36C0, 0),
ItemName.ChickenLittle: ItemData(1, 383, 0x36C0, 3),
}
Movement_Table = {
ItemName.HighJump: ItemData(4, 94, 0x05E, ability=True),
ItemName.QuickRun: ItemData(4, 98, 0x062, ability=True),
ItemName.DodgeRoll: ItemData(4, 564, 0x234, ability=True),
ItemName.AerialDodge: ItemData(4, 102, 0x066, ability=True),
ItemName.Glide: ItemData(4, 106, 0x06A, ability=True),
}
Keyblade_Table = {
ItemName.Oathkeeper: ItemData(1, 42, 0x35A2),
ItemName.Oblivion: ItemData(1, 43, 0x35A3),
ItemName.StarSeeker: ItemData(1, 480, 0x367B),
ItemName.HiddenDragon: ItemData(1, 481, 0x367C),
ItemName.HerosCrest: ItemData(1, 484, 0x367F),
ItemName.Monochrome: ItemData(1, 485, 0x3680),
ItemName.FollowtheWind: ItemData(1, 486, 0x3681),
ItemName.CircleofLife: ItemData(1, 487, 0x3682),
ItemName.PhotonDebugger: ItemData(1, 488, 0x3683),
ItemName.GullWing: ItemData(1, 489, 0x3684),
ItemName.RumblingRose: ItemData(1, 490, 0x3685),
ItemName.GuardianSoul: ItemData(1, 491, 0x3686),
ItemName.WishingLamp: ItemData(1, 492, 0x3687),
ItemName.DecisivePumpkin: ItemData(1, 493, 0x3688),
ItemName.SleepingLion: ItemData(1, 494, 0x3689),
ItemName.SweetMemories: ItemData(1, 495, 0x368A),
ItemName.MysteriousAbyss: ItemData(1, 496, 0x368B),
ItemName.TwoBecomeOne: ItemData(1, 543, 0x3698),
ItemName.FatalCrest: ItemData(1, 497, 0x368C),
ItemName.BondofFlame: ItemData(1, 498, 0x368D),
ItemName.Fenrir: ItemData(1, 499, 0x368E),
ItemName.UltimaWeapon: ItemData(1, 500, 0x368F),
ItemName.WinnersProof: ItemData(1, 544, 0x3699),
ItemName.Pureblood: ItemData(1, 71, 0x35BF),
}
Staffs_Table = {
ItemName.Centurion2: ItemData(1, 546, 0x369B),
ItemName.MeteorStaff: ItemData(1, 150, 0x35F1),
ItemName.NobodyLance: ItemData(1, 155, 0x35F6),
ItemName.PreciousMushroom: ItemData(1, 549, 0x369E),
ItemName.PreciousMushroom2: ItemData(1, 550, 0x369F),
ItemName.PremiumMushroom: ItemData(1, 551, 0x36A0),
ItemName.RisingDragon: ItemData(1, 154, 0x35F5),
ItemName.SaveTheQueen2: ItemData(1, 503, 0x3692),
ItemName.ShamansRelic: ItemData(1, 156, 0x35F7),
}
Shields_Table = {
ItemName.AkashicRecord: ItemData(1, 146, 0x35ED),
ItemName.FrozenPride2: ItemData(1, 553, 0x36A2),
ItemName.GenjiShield: ItemData(1, 145, 0x35EC),
ItemName.MajesticMushroom: ItemData(1, 556, 0x36A5),
ItemName.MajesticMushroom2: ItemData(1, 557, 0x36A6),
ItemName.NobodyGuard: ItemData(1, 147, 0x35EE),
ItemName.OgreShield: ItemData(1, 141, 0x35E8),
ItemName.SaveTheKing2: ItemData(1, 504, 0x3693),
ItemName.UltimateMushroom: ItemData(1, 558, 0x36A7),
}
Accessory_Table = {
ItemName.AbilityRing: ItemData(1, 8, 0x3587),
ItemName.EngineersRing: ItemData(1, 9, 0x3588),
ItemName.TechniciansRing: ItemData(1, 10, 0x3589),
ItemName.SkillRing: ItemData(1, 38, 0x359F),
ItemName.SkillfulRing: ItemData(1, 39, 0x35A0),
ItemName.ExpertsRing: ItemData(1, 11, 0x358A),
ItemName.MastersRing: ItemData(1, 34, 0x359B),
ItemName.CosmicRing: ItemData(1, 52, 0x35AD),
ItemName.ExecutivesRing: ItemData(1, 599, 0x36B5),
ItemName.SardonyxRing: ItemData(1, 12, 0x358B),
ItemName.TourmalineRing: ItemData(1, 13, 0x358C),
ItemName.AquamarineRing: ItemData(1, 14, 0x358D),
ItemName.GarnetRing: ItemData(1, 15, 0x358E),
ItemName.DiamondRing: ItemData(1, 16, 0x358F),
ItemName.SilverRing: ItemData(1, 17, 0x3590),
ItemName.GoldRing: ItemData(1, 18, 0x3591),
ItemName.PlatinumRing: ItemData(1, 19, 0x3592),
ItemName.MythrilRing: ItemData(1, 20, 0x3593),
ItemName.OrichalcumRing: ItemData(1, 28, 0x359A),
ItemName.SoldierEarring: ItemData(1, 40, 0x35A6),
ItemName.FencerEarring: ItemData(1, 46, 0x35A7),
ItemName.MageEarring: ItemData(1, 47, 0x35A8),
ItemName.SlayerEarring: ItemData(1, 48, 0x35AC),
ItemName.Medal: ItemData(1, 53, 0x35B0),
ItemName.MoonAmulet: ItemData(1, 35, 0x359C),
ItemName.StarCharm: ItemData(1, 36, 0x359E),
ItemName.CosmicArts: ItemData(1, 56, 0x35B1),
ItemName.ShadowArchive: ItemData(1, 57, 0x35B2),
ItemName.ShadowArchive2: ItemData(1, 58, 0x35B7),
ItemName.FullBloom: ItemData(1, 64, 0x35B9),
ItemName.FullBloom2: ItemData(1, 66, 0x35BB),
ItemName.DrawRing: ItemData(1, 65, 0x35BA),
ItemName.LuckyRing: ItemData(1, 63, 0x35B8),
}
Armor_Table = {
ItemName.ElvenBandana: ItemData(1, 67, 0x35BC),
ItemName.DivineBandana: ItemData(1, 68, 0x35BD),
ItemName.ProtectBelt: ItemData(1, 78, 0x35C7),
ItemName.GaiaBelt: ItemData(1, 79, 0x35CA),
ItemName.PowerBand: ItemData(1, 69, 0x35BE),
ItemName.BusterBand: ItemData(1, 70, 0x35C6),
ItemName.CosmicBelt: ItemData(1, 111, 0x35D1),
ItemName.FireBangle: ItemData(1, 173, 0x35D7),
ItemName.FiraBangle: ItemData(1, 174, 0x35D8),
ItemName.FiragaBangle: ItemData(1, 197, 0x35D9),
ItemName.FiragunBangle: ItemData(1, 284, 0x35DA),
ItemName.BlizzardArmlet: ItemData(1, 286, 0x35DC),
ItemName.BlizzaraArmlet: ItemData(1, 287, 0x35DD),
ItemName.BlizzagaArmlet: ItemData(1, 288, 0x35DE),
ItemName.BlizzagunArmlet: ItemData(1, 289, 0x35DF),
ItemName.ThunderTrinket: ItemData(1, 291, 0x35E2),
ItemName.ThundaraTrinket: ItemData(1, 292, 0x35E3),
ItemName.ThundagaTrinket: ItemData(1, 293, 0x35E4),
ItemName.ThundagunTrinket: ItemData(1, 294, 0x35E5),
ItemName.ShockCharm: ItemData(1, 132, 0x35D2),
ItemName.ShockCharm2: ItemData(1, 133, 0x35D3),
ItemName.ShadowAnklet: ItemData(1, 296, 0x35F9),
ItemName.DarkAnklet: ItemData(1, 297, 0x35FB),
ItemName.MidnightAnklet: ItemData(1, 298, 0x35FC),
ItemName.ChaosAnklet: ItemData(1, 299, 0x35FD),
ItemName.ChampionBelt: ItemData(1, 305, 0x3603),
ItemName.AbasChain: ItemData(1, 301, 0x35FF),
ItemName.AegisChain: ItemData(1, 302, 0x3600),
ItemName.Acrisius: ItemData(1, 303, 0x3601),
ItemName.Acrisius2: ItemData(1, 307, 0x3605),
ItemName.CosmicChain: ItemData(1, 308, 0x3606),
ItemName.PetiteRibbon: ItemData(1, 306, 0x3604),
ItemName.Ribbon: ItemData(1, 304, 0x3602),
ItemName.GrandRibbon: ItemData(1, 157, 0x35D4),
}
Usefull_Table = {
ItemName.MickeyMunnyPouch: ItemData(1, 535, 0x3695), # 5000 munny per
ItemName.OletteMunnyPouch: ItemData(2, 362, 0x363C), # 2500 munny per
ItemName.HadesCupTrophy: ItemData(1, 537, 0x3696),
ItemName.UnknownDisk: ItemData(1, 462, 0x365F),
ItemName.OlympusStone: ItemData(1, 370, 0x3644),
ItemName.MaxHPUp: ItemData(20, 112, 0x3671), # 470 is DUMMY 23, 112 is Encampment Area Map
ItemName.MaxMPUp: ItemData(4, 113, 0x3672), # 471 is DUMMY 24, 113 is Village Area Map
ItemName.DriveGaugeUp: ItemData(6, 114, 0x3673), # 472 is DUMMY 25, 114 is Cornerstone Hill Map
ItemName.ArmorSlotUp: ItemData(3, 116, 0x3674), # 473 is DUMMY 26, 116 is Lilliput Map
ItemName.AccessorySlotUp: ItemData(3, 117, 0x3675), # 474 is DUMMY 27, 117 is Building Site Map
ItemName.ItemSlotUp: ItemData(5, 118, 0x3660), # 463 is DUMMY 16, 118 is Mickeys House Map
}
SupportAbility_Table = {
ItemName.Scan: ItemData(2, 138, 0x08A, ability=True),
ItemName.AerialRecovery: ItemData(1, 158, 0x09E, ability=True),
ItemName.ComboMaster: ItemData(1, 539, 0x21B, ability=True),
ItemName.ComboPlus: ItemData(3, 162, 0x0A2, ability=True),
ItemName.AirComboPlus: ItemData(3, 163, 0x0A3, ability=True),
ItemName.ComboBoost: ItemData(2, 390, 0x186, ability=True),
ItemName.AirComboBoost: ItemData(2, 391, 0x187, ability=True),
ItemName.ReactionBoost: ItemData(3, 392, 0x188, ability=True),
ItemName.FinishingPlus: ItemData(3, 393, 0x189, ability=True),
ItemName.NegativeCombo: ItemData(2, 394, 0x18A, ability=True),
ItemName.BerserkCharge: ItemData(2, 395, 0x18B, ability=True),
ItemName.DamageDrive: ItemData(2, 396, 0x18C, ability=True),
ItemName.DriveBoost: ItemData(2, 397, 0x18D, ability=True),
ItemName.FormBoost: ItemData(3, 398, 0x18E, ability=True),
ItemName.SummonBoost: ItemData(1, 399, 0x18F, ability=True),
ItemName.ExperienceBoost: ItemData(2, 401, 0x191, ability=True),
ItemName.Draw: ItemData(4, 405, 0x195, ability=True),
ItemName.Jackpot: ItemData(2, 406, 0x196, ability=True),
ItemName.LuckyLucky: ItemData(3, 407, 0x197, ability=True),
ItemName.DriveConverter: ItemData(2, 540, 0x21C, ability=True),
ItemName.FireBoost: ItemData(2, 408, 0x198, ability=True),
ItemName.BlizzardBoost: ItemData(2, 409, 0x199, ability=True),
ItemName.ThunderBoost: ItemData(2, 410, 0x19A, ability=True),
ItemName.ItemBoost: ItemData(2, 411, 0x19B, ability=True),
ItemName.MPRage: ItemData(2, 412, 0x19C, ability=True),
ItemName.MPHaste: ItemData(2, 413, 0x19D, ability=True),
ItemName.MPHastera: ItemData(2, 421, 0x1A5, ability=True),
ItemName.MPHastega: ItemData(1, 422, 0x1A6, ability=True),
ItemName.Defender: ItemData(2, 414, 0x19E, ability=True),
ItemName.DamageControl: ItemData(2, 542, 0x21E, ability=True),
ItemName.NoExperience: ItemData(0, 404, 0x194, ability=True), # quantity changed to 0 because the player starts with one always.
ItemName.LightDarkness: ItemData(1, 541, 0x21D, ability=True),
ItemName.MagicLock: ItemData(1, 403, 0x193, ability=True),
ItemName.LeafBracer: ItemData(1, 402, 0x192, ability=True),
ItemName.CombinationBoost: ItemData(1, 400, 0x190, ability=True),
ItemName.OnceMore: ItemData(1, 416, 0x1A0, ability=True),
ItemName.SecondChance: ItemData(1, 415, 0x19F, ability=True),
}
ActionAbility_Table = {
ItemName.Guard: ItemData(1, 82, 0x052, ability=True),
ItemName.UpperSlash: ItemData(1, 137, 0x089, ability=True),
ItemName.HorizontalSlash: ItemData(1, 271, 0x10F, ability=True),
ItemName.FinishingLeap: ItemData(1, 267, 0x10B, ability=True),
ItemName.RetaliatingSlash: ItemData(1, 273, 0x111, ability=True),
ItemName.Slapshot: ItemData(1, 262, 0x106, ability=True),
ItemName.DodgeSlash: ItemData(1, 263, 0x107, ability=True),
ItemName.FlashStep: ItemData(1, 559, 0x22F, ability=True),
ItemName.SlideDash: ItemData(1, 264, 0x108, ability=True),
ItemName.VicinityBreak: ItemData(1, 562, 0x232, ability=True),
ItemName.GuardBreak: ItemData(1, 265, 0x109, ability=True),
ItemName.Explosion: ItemData(1, 266, 0x10A, ability=True),
ItemName.AerialSweep: ItemData(1, 269, 0x10D, ability=True),
ItemName.AerialDive: ItemData(1, 560, 0x230, ability=True),
ItemName.AerialSpiral: ItemData(1, 270, 0x10E, ability=True),
ItemName.AerialFinish: ItemData(1, 272, 0x110, ability=True),
ItemName.MagnetBurst: ItemData(1, 561, 0x231, ability=True),
ItemName.Counterguard: ItemData(1, 268, 0x10C, ability=True),
ItemName.AutoValor: ItemData(1, 385, 0x181, ability=True),
ItemName.AutoWisdom: ItemData(1, 386, 0x182, ability=True),
ItemName.AutoLimit: ItemData(1, 568, 0x238, ability=True),
ItemName.AutoMaster: ItemData(1, 387, 0x183, ability=True),
ItemName.AutoFinal: ItemData(1, 388, 0x184, ability=True),
ItemName.AutoSummon: ItemData(1, 389, 0x185, ability=True),
ItemName.TrinityLimit: ItemData(1, 198, 0x0C6, ability=True),
}
Boosts_Table = {
ItemName.PowerBoost: ItemData(1, 253, 0x359D), # 276, 0x3666, market place map
ItemName.MagicBoost: ItemData(1, 586, 0x35E0), # 277, 0x3667, dark rememberance map
ItemName.DefenseBoost: ItemData(1, 590, 0x35F8), # 278, 0x3668, depths of remembrance map
ItemName.APBoost: ItemData(1, 532, 0x35FE), # 279, 0x3669, mansion map
}
# These items cannot be in other games so these are done locally in kh2
DonaldAbility_Table = {
ItemName.DonaldFire: ItemData(1, 165, 0xA5, ability=True),
ItemName.DonaldBlizzard: ItemData(1, 166, 0xA6, ability=True),
ItemName.DonaldThunder: ItemData(1, 167, 0xA7, ability=True),
ItemName.DonaldCure: ItemData(1, 168, 0xA8, ability=True),
ItemName.Fantasia: ItemData(1, 199, 0xC7, ability=True),
ItemName.FlareForce: ItemData(1, 200, 0xC8, ability=True),
ItemName.DonaldMPRage: ItemData(1, 412, 0x19C, ability=True), # originally 3 but swapped to 1 because crit checks
ItemName.DonaldJackpot: ItemData(1, 406, 0x196, ability=True),
ItemName.DonaldLuckyLucky: ItemData(3, 407, 0x197, ability=True),
ItemName.DonaldFireBoost: ItemData(2, 408, 0x198, ability=True),
ItemName.DonaldBlizzardBoost: ItemData(2, 409, 0x199, ability=True),
ItemName.DonaldThunderBoost: ItemData(2, 410, 0x19A, ability=True),
ItemName.DonaldMPHaste: ItemData(1, 413, 0x19D, ability=True),
ItemName.DonaldMPHastera: ItemData(2, 421, 0x1A5, ability=True),
ItemName.DonaldMPHastega: ItemData(2, 422, 0x1A6, ability=True),
ItemName.DonaldAutoLimit: ItemData(1, 417, 0x1A1, ability=True),
ItemName.DonaldHyperHealing: ItemData(2, 419, 0x1A3, ability=True),
ItemName.DonaldAutoHealing: ItemData(1, 420, 0x1A4, ability=True),
ItemName.DonaldItemBoost: ItemData(1, 411, 0x19B, ability=True),
ItemName.DonaldDamageControl: ItemData(2, 542, 0x21E, ability=True),
ItemName.DonaldDraw: ItemData(1, 405, 0x195, ability=True),
}
GoofyAbility_Table = {
ItemName.GoofyTornado: ItemData(1, 423, 0x1A7, ability=True),
ItemName.GoofyTurbo: ItemData(1, 425, 0x1A9, ability=True),
ItemName.GoofyBash: ItemData(1, 429, 0x1AD, ability=True),
ItemName.TornadoFusion: ItemData(1, 201, 0xC9, ability=True),
ItemName.Teamwork: ItemData(1, 202, 0xCA, ability=True),
ItemName.GoofyDraw: ItemData(1, 405, 0x195, ability=True),
ItemName.GoofyJackpot: ItemData(1, 406, 0x196, ability=True),
ItemName.GoofyLuckyLucky: ItemData(1, 407, 0x197, ability=True),
ItemName.GoofyItemBoost: ItemData(2, 411, 0x19B, ability=True),
ItemName.GoofyMPRage: ItemData(2, 412, 0x19C, ability=True),
ItemName.GoofyDefender: ItemData(2, 414, 0x19E, ability=True),
ItemName.GoofyDamageControl: ItemData(1, 542, 0x21E, ability=True), # originally 3 but swapped to 1 because crit checks
ItemName.GoofyAutoLimit: ItemData(1, 417, 0x1A1, ability=True),
ItemName.GoofySecondChance: ItemData(1, 415, 0x19F, ability=True),
ItemName.GoofyOnceMore: ItemData(1, 416, 0x1A0, ability=True),
ItemName.GoofyAutoChange: ItemData(1, 418, 0x1A2, ability=True),
ItemName.GoofyHyperHealing: ItemData(2, 419, 0x1A3, ability=True),
ItemName.GoofyAutoHealing: ItemData(1, 420, 0x1A4, ability=True),
ItemName.GoofyMPHaste: ItemData(1, 413, 0x19D, ability=True),
ItemName.GoofyMPHastera: ItemData(1, 421, 0x1A5, ability=True),
ItemName.GoofyMPHastega: ItemData(1, 422, 0x1A6, ability=True),
ItemName.GoofyProtect: ItemData(2, 596, 0x254, ability=True),
ItemName.GoofyProtera: ItemData(2, 597, 0x255, ability=True),
ItemName.GoofyProtega: ItemData(2, 598, 0x256, ability=True),
}
Wincon_Table = {
ItemName.LuckyEmblem: ItemData(kh2id=367, memaddr=0x3641), # letter item
ItemName.Victory: ItemData(kh2id=263, memaddr=0x111),
ItemName.Bounty: ItemData(kh2id=461, memaddr=0x365E), # Dummy 14
# ItemName.UniversalKey:ItemData(,365,0x363F,0)#Tournament Poster
}
Consumable_Table = {
ItemName.Potion: ItemData(1, 127, 0x36B8), # 1, 0x3580, piglets house map
ItemName.HiPotion: ItemData(1, 126, 0x36B9), # 2, 0x03581, rabbits house map
ItemName.Ether: ItemData(1, 128, 0x36BA), # 3, 0x3582, kangas house map
ItemName.Elixir: ItemData(1, 129, 0x36BB), # 4, 0x3583, spooky cave map
ItemName.Megalixir: ItemData(1, 124, 0x36BC), # 7, 0x3586, starry hill map
ItemName.Tent: ItemData(1, 512, 0x36BD), # 131,0x35E1, savannah map
ItemName.DriveRecovery: ItemData(1, 252, 0x36BE), # 274,0x3664, pride rock map
ItemName.HighDriveRecovery: ItemData(1, 511, 0x36BF), # 275,0x3665, oasis map
}
Events_Table = {
ItemName.HostileProgramEvent,
ItemName.McpEvent,
ItemName.ASLarxeneEvent,
ItemName.DataLarxeneEvent,
ItemName.BarbosaEvent,
ItemName.GrimReaper1Event,
ItemName.GrimReaper2Event,
ItemName.DataLuxordEvent,
ItemName.DataAxelEvent,
ItemName.CerberusEvent,
ItemName.OlympusPeteEvent,
ItemName.HydraEvent,
ItemName.OcPainAndPanicCupEvent,
ItemName.OcCerberusCupEvent,
ItemName.HadesEvent,
ItemName.ASZexionEvent,
ItemName.DataZexionEvent,
ItemName.Oc2TitanCupEvent,
ItemName.Oc2GofCupEvent,
ItemName.Oc2CupsEvent,
ItemName.HadesCupEvents,
ItemName.PrisonKeeperEvent,
ItemName.OogieBoogieEvent,
ItemName.ExperimentEvent,
ItemName.ASVexenEvent,
ItemName.DataVexenEvent,
ItemName.ShanYuEvent,
ItemName.AnsemRikuEvent,
ItemName.StormRiderEvent,
ItemName.DataXigbarEvent,
ItemName.RoxasEvent,
ItemName.XigbarEvent,
ItemName.LuxordEvent,
ItemName.SaixEvent,
ItemName.XemnasEvent,
ItemName.ArmoredXemnasEvent,
ItemName.ArmoredXemnas2Event,
ItemName.FinalXemnasEvent,
ItemName.DataXemnasEvent,
ItemName.ThresholderEvent,
ItemName.BeastEvent,
ItemName.DarkThornEvent,
ItemName.XaldinEvent,
ItemName.DataXaldinEvent,
ItemName.TwinLordsEvent,
ItemName.GenieJafarEvent,
ItemName.ASLexaeusEvent,
ItemName.DataLexaeusEvent,
ItemName.ScarEvent,
ItemName.GroundShakerEvent,
ItemName.DataSaixEvent,
ItemName.HBDemyxEvent,
ItemName.ThousandHeartlessEvent,
ItemName.Mushroom13Event,
ItemName.SephiEvent,
ItemName.DataDemyxEvent,
ItemName.CorFirstFightEvent,
ItemName.CorSecondFightEvent,
ItemName.TransportEvent,
ItemName.OldPeteEvent,
ItemName.FuturePeteEvent,
ItemName.ASMarluxiaEvent,
ItemName.DataMarluxiaEvent,
ItemName.TerraEvent,
ItemName.TwilightThornEvent,
ItemName.Axel1Event,
ItemName.Axel2Event,
ItemName.DataRoxasEvent,
}
# 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": {
item_name for keys in [Progression_Table.keys(), Wincon_Table.keys(), Consumable_Table, [ItemName.MickeyMunnyPouch,
ItemName.OletteMunnyPouch,
ItemName.HadesCupTrophy,
ItemName.UnknownDisk,
ItemName.OlympusStone, ], Boosts_Table.keys()]
for item_name in keys
},
"Magic": {
magic for magic in Magic_Table.keys()
},
"Bitmask": {
item_name for keys in [Forms_Table.keys(), Summon_Table.keys(), Reports_Table.keys()] for item_name in keys
},
"Weapons": {
"Keyblades": {
keyblade for keyblade in Keyblade_Table.keys()
},
"Staffs": {
staff for staff in Staffs_Table.keys()
},
"Shields": {
shield for shield in Shields_Table.keys()
}
},
"Equipment": {
"Accessories": {
accessory for accessory in Accessory_Table.keys()
},
"Armor": {
armor for armor in Armor_Table.keys()
}
},
"Stat Increases": {
ItemName.MaxHPUp,
ItemName.MaxMPUp,
ItemName.DriveGaugeUp,
ItemName.ArmorSlotUp,
ItemName.AccessorySlotUp,
ItemName.ItemSlotUp,
},
"Abilities": {
"Sora": {
item_name for keys in [SupportAbility_Table.keys(), ActionAbility_Table.keys(), Movement_Table.keys()] for item_name in keys
},
"Donald": {
donald_ability for donald_ability in DonaldAbility_Table.keys()
},
"Goofy": {
goofy_ability for goofy_ability in GoofyAbility_Table.keys()
}
},
}
progression_set = {
# abilities
item_name for keys in [
Wincon_Table.keys(),
Progression_Table.keys(),
Forms_Table.keys(),
Magic_Table.keys(),
Summon_Table.keys(),
Movement_Table.keys(),
Keyblade_Table.keys(),
Staffs_Table.keys(),
Shields_Table.keys(),
[
ItemName.AerialRecovery,
ItemName.ComboMaster,
ItemName.ComboPlus,
ItemName.AirComboPlus,
ItemName.FinishingPlus,
ItemName.NegativeCombo,
ItemName.BerserkCharge,
ItemName.FormBoost,
ItemName.LightDarkness,
ItemName.OnceMore,
ItemName.SecondChance,
ItemName.Guard,
ItemName.HorizontalSlash,
ItemName.FinishingLeap,
ItemName.Slapshot,
ItemName.FlashStep,
ItemName.SlideDash,
ItemName.GuardBreak,
ItemName.Explosion,
ItemName.AerialSweep,
ItemName.AerialDive,
ItemName.AerialSpiral,
ItemName.AerialFinish,
ItemName.AutoValor,
ItemName.AutoWisdom,
ItemName.AutoLimit,
ItemName.AutoMaster,
ItemName.AutoFinal,
ItemName.TrinityLimit,
ItemName.DriveConverter,
# Party Limits
ItemName.FlareForce,
ItemName.Fantasia,
ItemName.Teamwork,
ItemName.TornadoFusion,
ItemName.HadesCupTrophy],
Events_Table]
for item_name in keys
}
party_filler_set = {
ItemName.GoofyAutoHealing,
ItemName.GoofyMPHaste,
ItemName.GoofyMPHastera,
ItemName.GoofyMPHastega,
ItemName.GoofyProtect,
ItemName.GoofyProtera,
ItemName.GoofyProtega,
ItemName.GoofyMPRage,
ItemName.GoofyDefender,
ItemName.GoofyDamageControl,
ItemName.DonaldFireBoost,
ItemName.DonaldBlizzardBoost,
ItemName.DonaldThunderBoost,
ItemName.DonaldMPHaste,
ItemName.DonaldMPHastera,
ItemName.DonaldMPHastega,
ItemName.DonaldAutoHealing,
ItemName.DonaldDamageControl,
ItemName.DonaldDraw,
ItemName.DonaldMPRage,
}
useful_set = {item_name for keys in [
SupportAbility_Table.keys(),
ActionAbility_Table.keys(),
DonaldAbility_Table.keys(),
GoofyAbility_Table.keys(),
Armor_Table.keys(),
Usefull_Table.keys(),
Accessory_Table.keys()]
for item_name in keys if item_name not in progression_set and item_name not in party_filler_set}
visit_locking_dict = {
"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: 2,
ItemName.IdentityDisk: 2,
ItemName.IceCream: 3,
ItemName.NamineSketches: 1,
}
}
exclusion_item_table = {
"StatUps": {
ItemName.MaxHPUp,
ItemName.MaxMPUp,
ItemName.DriveGaugeUp,
ItemName.ArmorSlotUp,
ItemName.AccessorySlotUp,
ItemName.ItemSlotUp,
},
"Ability": {
item_name for keys in [SupportAbility_Table.keys(), ActionAbility_Table.keys(), Movement_Table.keys()] for item_name in keys
}
}
default_itempool_option = {
item_name: ItemData.quantity for dic in [Magic_Table, Progression_Table, Summon_Table, Movement_Table, Forms_Table] for item_name, ItemData in dic.items()
}
item_dictionary_table = {
**Reports_Table,
**Progression_Table,
**Forms_Table,
**Magic_Table,
**Summon_Table,
**Armor_Table,
**Movement_Table,
**Staffs_Table,
**Shields_Table,
**Keyblade_Table,
**Accessory_Table,
**Usefull_Table,
**SupportAbility_Table,
**ActionAbility_Table,
**Boosts_Table,
**Wincon_Table,
**Boosts_Table,
**DonaldAbility_Table,
**GoofyAbility_Table,
**Consumable_Table
}
filler_items = [ItemName.PowerBoost, ItemName.MagicBoost, ItemName.DefenseBoost, ItemName.APBoost,
ItemName.Potion, ItemName.HiPotion, ItemName.Ether, ItemName.Elixir, ItemName.Megalixir,
ItemName.Tent, ItemName.DriveRecovery, ItemName.HighDriveRecovery,
]
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
visit_locking_dict["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],
"hitlist": [ItemName.Bounty],
}