Archipelago/worlds/yugioh06/items.py

399 lines
13 KiB
Python
Raw Normal View History

Yu-Gi-oh! 2006: implement new game (#2795) * Initial implementation of Yu-Gi-Oh! WC 2006 * Added Opponents and banlists * Initial implementation of Yu-Gi-Oh! WC 2006 * Added Opponents and banlists * Added Campaign Logic * Added Bonuses Logic * Added challenge logic * fixed yugioh client * ygo06 rom cleanup and include lua * ygo06 patch cleanup * ygo06 move client to world folder * lots of small changes * bug fixes * implemented filler item for yugioh06 * BizHawkClient: Add client and connector * BizHawkClient: Add launcher component and inno_setup lines * BizHawkClient: Misc stability updates and small improvements Bad commit organization a consequence of working with two different branches and not keeping the commits separated * BizHawkClient: Add docstrings * BizHawkClient: Pull in changes from other branch * BizHawkClient: Fix no handler message not displaying after changed ROMs * BizHawkClient: Remove extra print statement from lua * BizHawkClient: Change version command to use raw strings * BizHawkClient: Change script version to single integer * YGO06: added logic for "all expect type forbidden" limited duels * YGO06: Structure Deck choice now affects logic. Fixed a bug with tier 5 campaign opponents. Added logic for TD16 Union. * BizHawkClient: Add newline to version for lua script * BizHawkClient: Call send_connect from BizHawkClient's watcher loop * BizHawkClient: Add handling for failed request getting script version * BizHawkClient: Have base64.lua check lua version explicitly for bit operations On 2.9, it would detect LuaJIT and flood the console with deprecation warnings * BizHawkClient: Update connector script for slightly better errors and address Gambatte frame sync issue * BizHawkClient: Remove accidentally added print statements * BizHawkClient: Fix connector server not closing correctly * BizHawkClient: Move some connector code around, some linting * BizHawkClient: Small cleanup in lua * BizHawkClient: Lua linting * BizHawkClient: Remove outdated sentences in docstrings * YGO06: Logic additions and bug fixes * BizHawkClient: Correctly null check patch file arg * BizHawkClient: Initialize logging * BizHawkClient: Move code to worlds/_bizhawk Also splits out BizHawk communication functions to their own file for use outside this client * BizHawkClient: Add license to connector lua, add types to docs * BizHawkClient: Add module docstrings * YGO06: Logic additions * BizHawkClient: Allow clients to define multiple systems * BizHawkClient: Better logging and handling of interruptions to connection to script * YGO06: Logic additions * YGO06: Added text to options * YGO06: Ported to bizhawk client * YGO06: fix goal not being detected * YGO06: fix access item rule for tier 5 column 1 and 2 * YGO06: docu and bug fixes * YGO06: change name * YGO06: some fixes * YGO06: fix starting opponent and booster not applying * YGO06: added option to reduce the amount of challenges and remove the no ban list from pool. * YGO06: added rom being asked for on first use * YGO06: fix rules for challenges * YGO06: create proper rules for TD04 Ritual Summon * YGO06: mark most banlists as usefull instead of progression * YGO06: reduce the required core boosters across the board * YGO06: fix client not loading if another game already loaded the bizhawk client * YGO06: fix client not finding the bizhawk client. * YGO06: fix TD08 Draw not giving out an item * YGO06: small text changes * YGO06: update to version 0.4.4 * YGO06: logic mixin clean-up * YGO06: added option for campaign opponents as goal * Pokemon Emerald add encounter table randomization * Pokemon Emerald: Item ball randomization working * Pokemon Emerald: Clean up code a little * Pokemon Emerald: Partial rework of region/location creation * Pokemon Emerald: Dedupe items and add more readable names * Refactor region creation to manually defined regions * Split region json * Use new data.json with flattened constants and add HM locations * YGO06: bug fixes * YGO06: bug fix * YGO06: changes default options to be more beginner friendly * YGO06: attempt at universal tracker support. Settings are stored in slot data now. * YGO06: fix for older python versions * YGO06: fix slot data * YGO06: added diiferent opponents to the campaign * YGO06: fix small bug with opponent icons * YGO06: fix unwanted changes * YGO06: repair merge with main * YGO06: map out all of the opponents * YGO06: added opponent shuffle * YGO06: added logic to opponent shuffle * YGO06: added option to use ocg art * YGO06: bug_fixes * YGO06: removed todos, since they are not needed anymore * YGO06: added draft mode * YGO06: added logic to draft mode * YGO06: Added Money multiplier when you lose * YGO06: Fixed Unit Test errors * YGO06: Added Random deck option * YGO06: Bug fix with registering client * YGO06: client clean-up * YGO06: fixed card misspellings * YGO06: removed unused imports and other small changes * YGO06: small changes * YGO06: fix generation error when the combination of starting with "No Banlist" and not adding "No Banlist" to the pool is selected * YGO06: fix ocg art path overwriting Huge Revolution bugfix * YGO06: added comments and other minor changes * YGO06: fixed byte length in client for money * YGO06: fixes for webhost and options * YGO06: use the proper random function * YGO06: change settings to options * YGO06: move to procedure patch * YGO06: fix imports * YGO06: fix download link for patch not showing * YGO06: remove unnecessary Optional * YGO06: fix universal tracker stuff * YGO06: add typings * YGO06: small cleanup * yugioh06: small change to setup Co-authored-by: Scipio Wright <scipiowright@gmail.com> * YGO06: remove logic mixin * YGO06: fix create item and implement create filler and get filler item name * YGO06: remove double lambdas * YGO06: use pkgutil.get_data instaed pf zipFile * YGO06: fix starting items being duplicated * YGO06: lots of small changes * YGO06: moved functions to match execution order * YGO06: run ruff * YGO06: run ruff format * YGO06: fix ruff errors * YGO06: undo ruff format for rules * YGO06: move import to prevent circular dependency * YGO06: remove unused class * YGO06: optimizing rules * YGO06: some optimization and small bug fix --------- Co-authored-by: Zunawe <gyroscope15@gmail.com> Co-authored-by: Scipio Wright <scipiowright@gmail.com>
2024-05-17 17:23:05 +00:00
from typing import Dict, List
item_to_index: Dict[str, int] = {
"LEGEND OF B.E.W.D.": 1,
"METAL RAIDERS": 2,
"PHARAOH'S SERVANT": 3,
"PHARAONIC GUARDIAN": 4,
"SPELL RULER": 5,
"LABYRINTH OF NIGHTMARE": 6,
"LEGACY OF DARKNESS": 7,
"MAGICIAN'S FORCE": 8,
"DARK CRISIS": 9,
"INVASION OF CHAOS": 10,
"ANCIENT SANCTUARY": 11,
"SOUL OF THE DUELIST": 12,
"RISE OF DESTINY": 13,
"FLAMING ETERNITY": 14,
"THE LOST MILLENIUM": 15,
"CYBERNETIC REVOLUTION": 16,
"ELEMENTAL ENERGY": 17,
"SHADOW OF INFINITY": 18,
"GAME GIFT COLLECTION": 19,
"Special Gift Collection": 20,
"Fairy Collection": 21,
"Dragon Collection": 22,
"Warrior Collection A": 23,
"Warrior Collection B": 24,
"Fiend Collection A": 25,
"Fiend Collection B": 26,
"Machine Collection A": 27,
"Machine Collection B": 28,
"Spellcaster Collection A": 29,
"Spellcaster Collection B": 30,
"Zombie Collection": 31,
"Special Monsters A": 32,
"Special Monsters B": 33,
"Reverse Collection": 34,
"LP Recovery Collection": 35,
"Special Summon Collection A": 36,
"Special Summon Collection B": 37,
"Special Summon Collection C": 38,
"Equipment Collection": 39,
"Continuous Spell/Trap A": 40,
"Continuous Spell/Trap B": 41,
"Quick/Counter Collection": 42,
"Direct Damage Collection": 43,
"Direct Attack Collection": 44,
"Monster Destroy Collection": 45,
"All Normal Monsters": 46,
"All Effect Monsters": 47,
"All Fusion Monsters": 48,
"All Traps": 49,
"All Spells": 50,
"All at Random": 51,
"LD01 All except Level 4 forbidden Unlock": 52,
"LD02 Medium/high Level forbidden Unlock": 53,
"LD03 ATK 1500 or more forbidden Unlock": 54,
"LD04 Flip Effects forbidden Unlock": 55,
"LD05 Tributes forbidden Unlock": 56,
"LD06 Traps forbidden Unlock": 57,
"LD07 Large Deck A Unlock": 58,
"LD08 Large Deck B Unlock": 59,
"LD09 Sets Forbidden Unlock": 60,
"LD10 All except LV monsters forbidden Unlock": 61,
"LD11 All except Fairies forbidden Unlock": 62,
"LD12 All except Wind forbidden Unlock": 63,
"LD13 All except monsters forbidden Unlock": 64,
"LD14 Level 3 or below forbidden Unlock": 65,
"LD15 DEF 1500 or less forbidden Unlock": 66,
"LD16 Effect Monsters forbidden Unlock": 67,
"LD17 Spells forbidden Unlock": 68,
"LD18 Attacks forbidden Unlock": 69,
"LD19 All except E-Hero's forbidden Unlock": 70,
"LD20 All except Warriors forbidden Unlock": 71,
"LD21 All except Dark forbidden Unlock": 72,
"LD22 All limited cards forbidden Unlock": 73,
"LD23 Refer to Mar 05 Banlist Unlock": 74,
"LD24 Refer to Sept 04 Banlist Unlock": 75,
"LD25 Low Life Points Unlock": 76,
"LD26 All except Toons forbidden Unlock": 77,
"LD27 All except Spirits forbidden Unlock": 78,
"LD28 All except Dragons forbidden Unlock": 79,
"LD29 All except Spellcasters forbidden Unlock": 80,
"LD30 All except Light forbidden Unlock": 81,
"LD31 All except Fire forbidden Unlock": 82,
"LD32 Decks with multiples forbidden Unlock": 83,
"LD33 Special Summons forbidden Unlock": 84,
"LD34 Normal Summons forbidden Unlock": 85,
"LD35 All except Zombies forbidden Unlock": 86,
"LD36 All except Earth forbidden Unlock": 87,
"LD37 All except Water forbidden Unlock": 88,
"LD38 Refer to Mar 04 Banlist Unlock": 89,
"LD39 Monsters forbidden Unlock": 90,
"LD40 Refer to Sept 05 Banlist Unlock": 91,
"LD41 Refer to Sept 03 Banlist Unlock": 92,
"TD01 Battle Damage Unlock": 93,
"TD02 Deflected Damage Unlock": 94,
"TD03 Normal Summon Unlock": 95,
"TD04 Ritual Summon Unlock": 96,
"TD05 Special Summon A Unlock": 97,
"TD06 20x Spell Unlock": 98,
"TD07 10x Trap Unlock": 99,
"TD08 Draw Unlock": 100,
"TD09 Hand Destruction Unlock": 101,
"TD10 During Opponent's Turn Unlock": 102,
"TD11 Recover Unlock": 103,
"TD12 Remove Monsters by Effect Unlock": 104,
"TD13 Flip Summon Unlock": 105,
"TD14 Special Summon B Unlock": 106,
"TD15 Token Unlock": 107,
"TD16 Union Unlock": 108,
"TD17 10x Quick Spell Unlock": 109,
"TD18 The Forbidden Unlock": 110,
"TD19 20 Turns Unlock": 111,
"TD20 Deck Destruction Unlock": 112,
"TD21 Victory D. Unlock": 113,
"TD22 The Preventers Fight Back Unlock": 114,
"TD23 Huge Revolution Unlock": 115,
"TD24 Victory in 5 Turns Unlock": 116,
"TD25 Moth Grows Up Unlock": 117,
"TD26 Magnetic Power Unlock": 118,
"TD27 Dark Sage Unlock": 119,
"TD28 Direct Damage Unlock": 120,
"TD29 Destroy Monsters in Battle Unlock": 121,
"TD30 Tribute Summon Unlock": 122,
"TD31 Special Summon C Unlock": 123,
"TD32 Toon Unlock": 124,
"TD33 10x Counter Unlock": 125,
"TD34 Destiny Board Unlock": 126,
"TD35 Huge Damage in a Turn Unlock": 127,
"TD36 V-Z In the House Unlock": 128,
"TD37 Uria, Lord of Searing Flames Unlock": 129,
"TD38 Hamon, Lord of Striking Thunder Unlock": 130,
"TD39 Raviel, Lord of Phantasms Unlock": 131,
"TD40 Make a Chain Unlock": 132,
"TD41 The Gatekeeper Stands Tall Unlock": 133,
"TD42 Serious Damage Unlock": 134,
"TD43 Return Monsters with Effects Unlock": 135,
"TD44 Fusion Summon Unlock": 136,
"TD45 Big Damage at once Unlock": 137,
"TD46 XYZ In the House Unlock": 138,
"TD47 Spell Counter Unlock": 139,
"TD48 Destroy Monsters with Effects Unlock": 140,
"TD49 Plunder Unlock": 141,
"TD50 Dark Scorpion Combination Unlock": 142,
"Campaign Tier 1 Column 1": 143,
"Campaign Tier 1 Column 2": 144,
"Campaign Tier 1 Column 3": 145,
"Campaign Tier 1 Column 4": 146,
"Campaign Tier 1 Column 5": 147,
"Campaign Tier 2 Column 1": 148,
"Campaign Tier 2 Column 2": 149,
"Campaign Tier 2 Column 3": 150,
"Campaign Tier 2 Column 4": 151,
"Campaign Tier 2 Column 5": 152,
"Campaign Tier 3 Column 1": 153,
"Campaign Tier 3 Column 2": 154,
"Campaign Tier 3 Column 3": 155,
"Campaign Tier 3 Column 4": 156,
"Campaign Tier 3 Column 5": 157,
"Campaign Tier 4 Column 1": 158,
"Campaign Tier 4 Column 2": 159,
"Campaign Tier 4 Column 3": 160,
"Campaign Tier 4 Column 4": 161,
"Campaign Tier 4 Column 5": 162,
"Campaign Tier 5 Column 1": 163,
"Campaign Tier 5 Column 2": 164,
"No Banlist": 167,
"Banlist September 2003": 168,
"Banlist March 2004": 169,
"Banlist September 2004": 170,
"Banlist March 2005": 171,
"Banlist September 2005": 172,
"5000DP": 254,
"Remote": 255,
}
tier_1_opponents: List[str] = [
"Campaign Tier 1 Column 1",
"Campaign Tier 1 Column 2",
"Campaign Tier 1 Column 3",
"Campaign Tier 1 Column 4",
"Campaign Tier 1 Column 5",
]
tier_2_opponents: List[str] = [
"Campaign Tier 2 Column 1",
"Campaign Tier 2 Column 2",
"Campaign Tier 2 Column 3",
"Campaign Tier 2 Column 4",
"Campaign Tier 2 Column 5",
]
tier_3_opponents: List[str] = [
"Campaign Tier 3 Column 1",
"Campaign Tier 3 Column 2",
"Campaign Tier 3 Column 3",
"Campaign Tier 3 Column 4",
"Campaign Tier 3 Column 5",
]
tier_4_opponents: List[str] = [
"Campaign Tier 4 Column 1",
"Campaign Tier 4 Column 2",
"Campaign Tier 4 Column 3",
"Campaign Tier 4 Column 4",
"Campaign Tier 4 Column 5",
]
tier_5_opponents: List[str] = [
"Campaign Tier 5 Column 1",
"Campaign Tier 5 Column 2",
]
Yu-Gi-oh! 2006: implement new game (#2795) * Initial implementation of Yu-Gi-Oh! WC 2006 * Added Opponents and banlists * Initial implementation of Yu-Gi-Oh! WC 2006 * Added Opponents and banlists * Added Campaign Logic * Added Bonuses Logic * Added challenge logic * fixed yugioh client * ygo06 rom cleanup and include lua * ygo06 patch cleanup * ygo06 move client to world folder * lots of small changes * bug fixes * implemented filler item for yugioh06 * BizHawkClient: Add client and connector * BizHawkClient: Add launcher component and inno_setup lines * BizHawkClient: Misc stability updates and small improvements Bad commit organization a consequence of working with two different branches and not keeping the commits separated * BizHawkClient: Add docstrings * BizHawkClient: Pull in changes from other branch * BizHawkClient: Fix no handler message not displaying after changed ROMs * BizHawkClient: Remove extra print statement from lua * BizHawkClient: Change version command to use raw strings * BizHawkClient: Change script version to single integer * YGO06: added logic for "all expect type forbidden" limited duels * YGO06: Structure Deck choice now affects logic. Fixed a bug with tier 5 campaign opponents. Added logic for TD16 Union. * BizHawkClient: Add newline to version for lua script * BizHawkClient: Call send_connect from BizHawkClient's watcher loop * BizHawkClient: Add handling for failed request getting script version * BizHawkClient: Have base64.lua check lua version explicitly for bit operations On 2.9, it would detect LuaJIT and flood the console with deprecation warnings * BizHawkClient: Update connector script for slightly better errors and address Gambatte frame sync issue * BizHawkClient: Remove accidentally added print statements * BizHawkClient: Fix connector server not closing correctly * BizHawkClient: Move some connector code around, some linting * BizHawkClient: Small cleanup in lua * BizHawkClient: Lua linting * BizHawkClient: Remove outdated sentences in docstrings * YGO06: Logic additions and bug fixes * BizHawkClient: Correctly null check patch file arg * BizHawkClient: Initialize logging * BizHawkClient: Move code to worlds/_bizhawk Also splits out BizHawk communication functions to their own file for use outside this client * BizHawkClient: Add license to connector lua, add types to docs * BizHawkClient: Add module docstrings * YGO06: Logic additions * BizHawkClient: Allow clients to define multiple systems * BizHawkClient: Better logging and handling of interruptions to connection to script * YGO06: Logic additions * YGO06: Added text to options * YGO06: Ported to bizhawk client * YGO06: fix goal not being detected * YGO06: fix access item rule for tier 5 column 1 and 2 * YGO06: docu and bug fixes * YGO06: change name * YGO06: some fixes * YGO06: fix starting opponent and booster not applying * YGO06: added option to reduce the amount of challenges and remove the no ban list from pool. * YGO06: added rom being asked for on first use * YGO06: fix rules for challenges * YGO06: create proper rules for TD04 Ritual Summon * YGO06: mark most banlists as usefull instead of progression * YGO06: reduce the required core boosters across the board * YGO06: fix client not loading if another game already loaded the bizhawk client * YGO06: fix client not finding the bizhawk client. * YGO06: fix TD08 Draw not giving out an item * YGO06: small text changes * YGO06: update to version 0.4.4 * YGO06: logic mixin clean-up * YGO06: added option for campaign opponents as goal * Pokemon Emerald add encounter table randomization * Pokemon Emerald: Item ball randomization working * Pokemon Emerald: Clean up code a little * Pokemon Emerald: Partial rework of region/location creation * Pokemon Emerald: Dedupe items and add more readable names * Refactor region creation to manually defined regions * Split region json * Use new data.json with flattened constants and add HM locations * YGO06: bug fixes * YGO06: bug fix * YGO06: changes default options to be more beginner friendly * YGO06: attempt at universal tracker support. Settings are stored in slot data now. * YGO06: fix for older python versions * YGO06: fix slot data * YGO06: added diiferent opponents to the campaign * YGO06: fix small bug with opponent icons * YGO06: fix unwanted changes * YGO06: repair merge with main * YGO06: map out all of the opponents * YGO06: added opponent shuffle * YGO06: added logic to opponent shuffle * YGO06: added option to use ocg art * YGO06: bug_fixes * YGO06: removed todos, since they are not needed anymore * YGO06: added draft mode * YGO06: added logic to draft mode * YGO06: Added Money multiplier when you lose * YGO06: Fixed Unit Test errors * YGO06: Added Random deck option * YGO06: Bug fix with registering client * YGO06: client clean-up * YGO06: fixed card misspellings * YGO06: removed unused imports and other small changes * YGO06: small changes * YGO06: fix generation error when the combination of starting with "No Banlist" and not adding "No Banlist" to the pool is selected * YGO06: fix ocg art path overwriting Huge Revolution bugfix * YGO06: added comments and other minor changes * YGO06: fixed byte length in client for money * YGO06: fixes for webhost and options * YGO06: use the proper random function * YGO06: change settings to options * YGO06: move to procedure patch * YGO06: fix imports * YGO06: fix download link for patch not showing * YGO06: remove unnecessary Optional * YGO06: fix universal tracker stuff * YGO06: add typings * YGO06: small cleanup * yugioh06: small change to setup Co-authored-by: Scipio Wright <scipiowright@gmail.com> * YGO06: remove logic mixin * YGO06: fix create item and implement create filler and get filler item name * YGO06: remove double lambdas * YGO06: use pkgutil.get_data instaed pf zipFile * YGO06: fix starting items being duplicated * YGO06: lots of small changes * YGO06: moved functions to match execution order * YGO06: run ruff * YGO06: run ruff format * YGO06: fix ruff errors * YGO06: undo ruff format for rules * YGO06: move import to prevent circular dependency * YGO06: remove unused class * YGO06: optimizing rules * YGO06: some optimization and small bug fix --------- Co-authored-by: Zunawe <gyroscope15@gmail.com> Co-authored-by: Scipio Wright <scipiowright@gmail.com>
2024-05-17 17:23:05 +00:00
Banlist_Items: List[str] = [
"No Banlist",
"Banlist September 2003",
"Banlist March 2004",
"Banlist September 2004",
"Banlist March 2005",
"Banlist September 2005",
]
draft_boosters: List[str] = [
"METAL RAIDERS",
"PHARAOH'S SERVANT",
"PHARAONIC GUARDIAN",
"LABYRINTH OF NIGHTMARE",
"LEGACY OF DARKNESS",
"MAGICIAN'S FORCE",
"DARK CRISIS",
"INVASION OF CHAOS",
"RISE OF DESTINY",
"ELEMENTAL ENERGY",
"SHADOW OF INFINITY",
]
draft_opponents: List[str] = ["Campaign Tier 1 Column 1", "Campaign Tier 1 Column 5"]
booster_packs: List[str] = [
"LEGEND OF B.E.W.D.",
"METAL RAIDERS",
"PHARAOH'S SERVANT",
"PHARAONIC GUARDIAN",
"SPELL RULER",
"LABYRINTH OF NIGHTMARE",
"LEGACY OF DARKNESS",
"MAGICIAN'S FORCE",
"DARK CRISIS",
"INVASION OF CHAOS",
"ANCIENT SANCTUARY",
"SOUL OF THE DUELIST",
"RISE OF DESTINY",
"FLAMING ETERNITY",
"THE LOST MILLENIUM",
"CYBERNETIC REVOLUTION",
"ELEMENTAL ENERGY",
"SHADOW OF INFINITY",
"GAME GIFT COLLECTION",
"Special Gift Collection",
"Fairy Collection",
"Dragon Collection",
"Warrior Collection A",
"Warrior Collection B",
"Fiend Collection A",
"Fiend Collection B",
"Machine Collection A",
"Machine Collection B",
"Spellcaster Collection A",
"Spellcaster Collection B",
"Zombie Collection",
"Special Monsters A",
"Special Monsters B",
"Reverse Collection",
"LP Recovery Collection",
"Special Summon Collection A",
"Special Summon Collection B",
"Special Summon Collection C",
"Equipment Collection",
"Continuous Spell/Trap A",
"Continuous Spell/Trap B",
"Quick/Counter Collection",
"Direct Damage Collection",
"Direct Attack Collection",
"Monster Destroy Collection",
]
challenges: List[str] = [
"LD01 All except Level 4 forbidden Unlock",
"LD02 Medium/high Level forbidden Unlock",
"LD03 ATK 1500 or more forbidden Unlock",
"LD04 Flip Effects forbidden Unlock",
"LD05 Tributes forbidden Unlock",
"LD06 Traps forbidden Unlock",
"LD07 Large Deck A Unlock",
"LD08 Large Deck B Unlock",
"LD09 Sets Forbidden Unlock",
"LD10 All except LV monsters forbidden Unlock",
"LD11 All except Fairies forbidden Unlock",
"LD12 All except Wind forbidden Unlock",
"LD13 All except monsters forbidden Unlock",
"LD14 Level 3 or below forbidden Unlock",
"LD15 DEF 1500 or less forbidden Unlock",
"LD16 Effect Monsters forbidden Unlock",
"LD17 Spells forbidden Unlock",
"LD18 Attacks forbidden Unlock",
"LD19 All except E-Hero's forbidden Unlock",
"LD20 All except Warriors forbidden Unlock",
"LD21 All except Dark forbidden Unlock",
"LD22 All limited cards forbidden Unlock",
"LD23 Refer to Mar 05 Banlist Unlock",
"LD24 Refer to Sept 04 Banlist Unlock",
"LD25 Low Life Points Unlock",
"LD26 All except Toons forbidden Unlock",
"LD27 All except Spirits forbidden Unlock",
"LD28 All except Dragons forbidden Unlock",
"LD29 All except Spellcasters forbidden Unlock",
"LD30 All except Light forbidden Unlock",
"LD31 All except Fire forbidden Unlock",
"LD32 Decks with multiples forbidden Unlock",
"LD33 Special Summons forbidden Unlock",
"LD34 Normal Summons forbidden Unlock",
"LD35 All except Zombies forbidden Unlock",
"LD36 All except Earth forbidden Unlock",
"LD37 All except Water forbidden Unlock",
"LD38 Refer to Mar 04 Banlist Unlock",
"LD39 Monsters forbidden Unlock",
"LD40 Refer to Sept 05 Banlist Unlock",
"LD41 Refer to Sept 03 Banlist Unlock",
"TD01 Battle Damage Unlock",
"TD02 Deflected Damage Unlock",
"TD03 Normal Summon Unlock",
"TD04 Ritual Summon Unlock",
"TD05 Special Summon A Unlock",
"TD06 20x Spell Unlock",
"TD07 10x Trap Unlock",
"TD08 Draw Unlock",
"TD09 Hand Destruction Unlock",
"TD10 During Opponent's Turn Unlock",
"TD11 Recover Unlock",
"TD12 Remove Monsters by Effect Unlock",
"TD13 Flip Summon Unlock",
"TD14 Special Summon B Unlock",
"TD15 Token Unlock",
"TD16 Union Unlock",
"TD17 10x Quick Spell Unlock",
"TD18 The Forbidden Unlock",
"TD19 20 Turns Unlock",
"TD20 Deck Destruction Unlock",
"TD21 Victory D. Unlock",
"TD22 The Preventers Fight Back Unlock",
"TD23 Huge Revolution Unlock",
"TD24 Victory in 5 Turns Unlock",
"TD25 Moth Grows Up Unlock",
"TD26 Magnetic Power Unlock",
"TD27 Dark Sage Unlock",
"TD28 Direct Damage Unlock",
"TD29 Destroy Monsters in Battle Unlock",
"TD30 Tribute Summon Unlock",
"TD31 Special Summon C Unlock",
"TD32 Toon Unlock",
"TD33 10x Counter Unlock",
"TD34 Destiny Board Unlock",
"TD35 Huge Damage in a Turn Unlock",
"TD36 V-Z In the House Unlock",
"TD37 Uria, Lord of Searing Flames Unlock",
"TD38 Hamon, Lord of Striking Thunder Unlock",
"TD39 Raviel, Lord of Phantasms Unlock",
"TD40 Make a Chain Unlock",
"TD41 The Gatekeeper Stands Tall Unlock",
"TD42 Serious Damage Unlock",
"TD43 Return Monsters with Effects Unlock",
"TD44 Fusion Summon Unlock",
"TD45 Big Damage at once Unlock",
"TD46 XYZ In the House Unlock",
"TD47 Spell Counter Unlock",
"TD48 Destroy Monsters with Effects Unlock",
"TD49 Plunder Unlock",
"TD50 Dark Scorpion Combination Unlock",
]
excluded_items: List[str] = [
"All Normal Monsters",
"All Effect Monsters",
"All Fusion Monsters",
"All Traps",
"All Spells",
"All at Random",
"5000DP",
"Remote",
]
useful: List[str] = [
"Banlist March 2004",
"Banlist September 2004",
"Banlist March 2005",
"Banlist September 2005",
]