Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
7389a55
shuffle_great_fairy_rewards: Conversion from "Toggle" to "Choice"
G4M3RL1F3 Nov 17, 2025
51d06da
Add spacing to ShuffleGreatFairyRewards description
G4M3RL1F3 Dec 20, 2025
256c6b9
Added the option to disable ShuffleSpiderhouseReward
G4M3RL1F3 Jan 22, 2026
41762d0
Added ShuffleTreasureChestGame option
G4M3RL1F3 Jan 23, 2026
00f40ec
Added ShuffleMinigames option
G4M3RL1F3 Feb 1, 2026
10d4486
Changed keysanity, bosskeysanity and fairysanity, and added maps & co…
G4M3RL1F3 May 16, 2026
67fa1fe
Added lottery shuffle option
G4M3RL1F3 May 17, 2026
26c5af8
Added beaver race shuffle option
G4M3RL1F3 May 17, 2026
26cc6e1
Added picture rewards shuffle option
G4M3RL1F3 May 18, 2026
9f6f89d
Changed option PermanentChateauRomani for InfiniteMagicBehavior
G4M3RL1F3 Jul 24, 2026
2d7943b
Fixed Honey & Darling logic
G4M3RL1F3 Jul 24, 2026
f0bbbb9
Fixed Tingle Stone Tower Map Purchase logic
G4M3RL1F3 Jul 24, 2026
7abff4a
Fixed H&D All Days logic (I made the initial mistake)
G4M3RL1F3 Jul 24, 2026
8874fac
Added option to customize max shop price, prices are now multiples of 5
G4M3RL1F3 Jul 26, 2026
bede253
Prepared option groups
G4M3RL1F3 Jul 31, 2026
fce5068
Added option to skip Graveyard night 3 Dampe digging
G4M3RL1F3 Aug 1, 2026
2d56a66
Added option to disable Zora Cape Pot Game
G4M3RL1F3 Aug 2, 2026
aa8c930
Many changes to approximately match 1.0's
G4M3RL1F3 Aug 3, 2026
b6b8591
Swapped IDs for Pirates' Fortress Sewers Underwater Upper and Lower c…
G4M3RL1F3 Aug 5, 2026
f247b43
Updated "Graveyard Captain Keeta Chest" logic
G4M3RL1F3 Aug 5, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
72 changes: 41 additions & 31 deletions worlds/mm_recomp/Items.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ class MMRItem(Item):


class MMRItemData(NamedTuple):
category: str = "Item"
code: Optional[int] = None
type: ItemClassification = ItemClassification.filler
num_exist: int = 1
Expand All @@ -16,25 +17,26 @@ class MMRItemData(NamedTuple):

item_data_table: Dict[str, MMRItemData] = {
"Stray Fairy (Clock Town)": MMRItemData(
category="Stray Fairy",
code=0x346942001007F,
type=ItemClassification.progression,
can_create=lambda options: options.fairysanity.value
can_create=lambda options: options.shuffle_stray_fairies.value == 4 or 5
),
"Progressive Magic": MMRItemData(
code=0x3469420020000,
type=ItemClassification.progression,
can_create=lambda options: options.shuffle_great_fairy_rewards.value,
can_create=lambda options: options.shuffle_great_fairy_rewards.value != 1,
num_exist=2
),
"Great Spin Attack": MMRItemData(
code=0x3469420020001,
type=ItemClassification.useful,
can_create=lambda options: options.shuffle_great_fairy_rewards.value
can_create=lambda options: options.shuffle_great_fairy_rewards.value != 1
),
"Double Defense": MMRItemData(
code=0x3469420020003,
type=ItemClassification.useful,
can_create=lambda options: options.shuffle_great_fairy_rewards.value
can_create=lambda options: options.shuffle_great_fairy_rewards.value != 1
),
"Bomber's Notebook": MMRItemData(
code=0x3469420000050,
Expand Down Expand Up @@ -195,7 +197,7 @@ class MMRItemData(NamedTuple):
"Great Fairy Mask": MMRItemData(
code=0x3469420000086,
type=ItemClassification.progression,
can_create=lambda options: options.shuffle_great_fairy_rewards.value
can_create=lambda options: options.shuffle_great_fairy_rewards.value != 1
),
"Gibdo Mask": MMRItemData(
code=0x3469420000087,
Expand All @@ -212,7 +214,7 @@ class MMRItemData(NamedTuple):
"Mask of Truth": MMRItemData(
code=0x346942000008A,
type=ItemClassification.progression,
can_create=lambda options: options.shuffle_spiderhouse_reward.value
can_create=lambda options: options.shuffle_spiderhouse_reward.value != 1
),
"Stone Mask": MMRItemData(
code=0x346942000008B,
Expand Down Expand Up @@ -253,7 +255,7 @@ class MMRItemData(NamedTuple):
"Bottle": MMRItemData(
code=0x346942000005A,
type=ItemClassification.progression,
num_exist=2
num_exist=3
),
"Bottle of Milk": MMRItemData(
code=0x3469420000060,
Expand All @@ -271,7 +273,7 @@ class MMRItemData(NamedTuple):
"Great Fairy Sword": MMRItemData(
code=0x346942000003B,
type=ItemClassification.progression,
can_create=lambda options: options.shuffle_great_fairy_rewards.value
can_create=lambda options: options.shuffle_great_fairy_rewards.value != 1
),
"Progressive Bow": MMRItemData(
code=0x3469420000022,
Expand Down Expand Up @@ -356,101 +358,109 @@ class MMRItemData(NamedTuple):
code=0x3469420010000,
type=ItemClassification.progression,
num_exist=15,
can_create=lambda options: options.fairysanity.value
can_create=lambda options: options.shuffle_stray_fairies.value == 4 or options.shuffle_stray_fairies.value == 5
),
"Stray Fairy (Snowhead)": MMRItemData(
code=0x3469420010001,
type=ItemClassification.progression,
num_exist=15,
can_create=lambda options: options.fairysanity.value
can_create=lambda options: options.shuffle_stray_fairies.value == 4 or options.shuffle_stray_fairies.value == 5
),
"Stray Fairy (Great Bay)": MMRItemData(
code=0x3469420010002,
type=ItemClassification.progression,
num_exist=15,
can_create=lambda options: options.fairysanity.value
can_create=lambda options: options.shuffle_stray_fairies.value == 4 or options.shuffle_stray_fairies.value == 5
),
"Stray Fairy (Stone Tower)": MMRItemData(
code=0x3469420010003,
type=ItemClassification.progression,
num_exist=15,
can_create=lambda options: options.fairysanity.value
can_create=lambda options: options.shuffle_stray_fairies.value == 4 or options.shuffle_stray_fairies.value == 5
),
"Small Key (Woodfall)": MMRItemData(
code=0x3469420090078,
type=ItemClassification.progression,
num_exist=1,
can_create=lambda options: options.keysanity.value
can_create=lambda options: options.shuffle_small_keys.value == 4 or options.shuffle_small_keys.value == 5
),
"Small Key (Snowhead)": MMRItemData(
code=0x3469420090178,
type=ItemClassification.progression,
num_exist=3,
can_create=lambda options: options.keysanity.value
can_create=lambda options: options.shuffle_small_keys.value == 4 or options.shuffle_small_keys.value == 5
),
"Small Key (Great Bay)": MMRItemData(
code=0x3469420090278,
type=ItemClassification.progression,
num_exist=1,
can_create=lambda options: options.keysanity.value
can_create=lambda options: options.shuffle_small_keys.value == 4 or options.shuffle_small_keys.value == 5
),
"Small Key (Stone Tower)": MMRItemData(
code=0x3469420090378,
type=ItemClassification.progression,
num_exist=4,
can_create=lambda options: options.keysanity.value
can_create=lambda options: options.shuffle_small_keys.value == 4 or options.shuffle_small_keys.value == 5
),
"Dungeon Map (Woodfall)": MMRItemData(
code=0x3469420090076,
type=ItemClassification.useful
type=ItemClassification.useful,
can_create=lambda options: options.shuffle_maps_and_compasses.value == 4 or options.shuffle_maps_and_compasses.value == 5
),
"Dungeon Map (Snowhead)": MMRItemData(
code=0x3469420090176,
type=ItemClassification.useful
type=ItemClassification.useful,
can_create=lambda options: options.shuffle_maps_and_compasses.value == 4 or options.shuffle_maps_and_compasses.value == 5
),
"Dungeon Map (Great Bay)": MMRItemData(
code=0x3469420090276,
type=ItemClassification.useful
type=ItemClassification.useful,
can_create=lambda options: options.shuffle_maps_and_compasses.value == 4 or options.shuffle_maps_and_compasses.value == 5
),
"Dungeon Map (Stone Tower)": MMRItemData(
code=0x3469420090376,
type=ItemClassification.useful
type=ItemClassification.useful,
can_create=lambda options: options.shuffle_maps_and_compasses.value == 4 or options.shuffle_maps_and_compasses.value == 5
),
"Compass (Woodfall)": MMRItemData(
code=0x3469420090075,
type=ItemClassification.useful
type=ItemClassification.useful,
can_create=lambda options: options.shuffle_maps_and_compasses.value == 4 or options.shuffle_maps_and_compasses.value == 5
),
"Compass (Snowhead)": MMRItemData(
code=0x3469420090175,
type=ItemClassification.useful
type=ItemClassification.useful,
can_create=lambda options: options.shuffle_maps_and_compasses.value == 4 or options.shuffle_maps_and_compasses.value == 5
),
"Compass (Great Bay)": MMRItemData(
code=0x3469420090275,
type=ItemClassification.useful
type=ItemClassification.useful,
can_create=lambda options: options.shuffle_maps_and_compasses.value == 4 or options.shuffle_maps_and_compasses.value == 5
),
"Compass (Stone Tower)": MMRItemData(
code=0x3469420090375,
type=ItemClassification.useful
type=ItemClassification.useful,
can_create=lambda options: options.shuffle_maps_and_compasses.value == 4 or options.shuffle_maps_and_compasses.value == 5
),
"Boss Key (Woodfall)": MMRItemData(
code=0x3469420090074,
type=ItemClassification.progression,
can_create=lambda options: options.bosskeysanity.value
can_create=lambda options: options.shuffle_boss_keys.value == 4 or options.shuffle_boss_keys.value == 5
),
"Boss Key (Snowhead)": MMRItemData(
code=0x3469420090174,
type=ItemClassification.progression,
can_create=lambda options: options.bosskeysanity.value
can_create=lambda options: options.shuffle_boss_keys.value == 4 or options.shuffle_boss_keys.value == 5
),
"Boss Key (Great Bay)": MMRItemData(
code=0x3469420090274,
type=ItemClassification.progression,
can_create=lambda options: options.bosskeysanity.value
can_create=lambda options: options.shuffle_boss_keys.value == 4 or options.shuffle_boss_keys.value == 5
),
"Boss Key (Stone Tower)": MMRItemData(
code=0x3469420090374,
type=ItemClassification.progression,
can_create=lambda options: options.bosskeysanity.value
can_create=lambda options: options.shuffle_boss_keys.value == 4 or options.shuffle_boss_keys.value == 5
),
"Odolwa's Remains": MMRItemData(
code=0x3469420000055,
Expand Down Expand Up @@ -508,19 +518,19 @@ class MMRItemData(NamedTuple):
"Blue Rupee": MMRItemData(
code=0x3469420000002,
type=ItemClassification.filler,
num_exist=14
num_exist=6
# ~ num_exist=6
),
"Red Rupee": MMRItemData(
code=0x3469420000004,
type=ItemClassification.filler,
num_exist=45
num_exist=23
# ~ num_exist=29
),
"Purple Rupee": MMRItemData(
code=0x3469420000005,
type=ItemClassification.filler,
num_exist=11
num_exist=10
),
"Silver Rupee": MMRItemData(
code=0x3469420000006,
Expand Down
Loading