Initial files

This commit is contained in:
MarioSpore
2025-07-25 16:24:08 -04:00
parent 8499c2fd24
commit a7d5d45d14
10 changed files with 491 additions and 0 deletions

0
worlds/grinch/Client.py Normal file
View File

145
worlds/grinch/Items.py Normal file
View File

@@ -0,0 +1,145 @@
from typing import NamedTuple, Optional
from BaseClasses import Item
from BaseClasses import ItemClassification as IC
class GrinchItemData(NamedTuple):
type: str
code: Optional[int]
classification: IC
update_ram_addr: Optional[list[GrinchRamData]] = None
value: Optional[int] = None #I can either set or add either hex or unsigned values through Client.py
binary_bit_pos: Optional[int] = None
bit_size: int = 1
#Gadgets
GADGETS_TABLE: dict[str, GrinchItemData] = {
"Binoculars": GrinchItemData("Gadgets", 100, IC.useful,
[GrinchRamData(0x800102B6, value=0x40), GrinchRamData(0x800102B7, value=0x41),
GrinchRamData(0x800102B8, value=0x44), GrinchRamData(0x800102B9, value=0x45)]),
"Rotten Egg Launcher": GrinchItemData("Gadgets", 101, IC.progression,
[GrinchRamData(0x800102BA, value=0x40), GrinchRamData(0x800102BB, value=0x41),
GrinchRamData(0x800102BC, value=0x44), GrinchRamData(0x800102BD, value=0x45)]),
"Rocket Spring": GrinchItemData("Gadgets", 102, IC.progression,
[GrinchRamData(0x800102BE, value=0x40), GrinchRamData(0x800102BF, value=0x41),
GrinchRamData(0x800102C0, value=0x42), GrinchRamData(0x800102C1, value=0x44),
GrinchRamData(0x800102C2, value=0x45), GrinchRamData(0x800102C3, value=0x46),
GrinchRamData(0x800102C4, value=0x48), GrinchRamData(0x800102C5, value=0x49),
GrinchRamData(0x800102C6, value=0x4A)]),
"Slime Shooter": GrinchItemData("Gadgets", 103, IC.progression,
[GrinchRamData(0x800102C7, value=0x40), GrinchRamData(0x800102C8, value=0x41),
GrinchRamData(0x800102C9, value=0x42), GrinchRamData(0x800102CA, value=0x44),
GrinchRamData(0x800102CB, value=0x45), GrinchRamData(0x800102CC, value=0x46),
GrinchRamData(0x800102CD, value=0x48), GrinchRamData(0x800102CE, value=0x49),
GrinchRamData(0x800102CF, value=0x4A)]),
"Octopus Climbing Device": GrinchItemData("Gadgets", 104, IC.progression,
[GrinchRamData(0x800102D0, value=0x40), GrinchRamData(0x800102DA, value=0x41),
GrinchRamData(0x800102DB, value=0x42), GrinchRamData(0x800102DC, value=0x44),
GrinchRamData(0x800102DD, value=0x45), GrinchRamData(0x800102DE, value=0x46),
GrinchRamData(0x800102DF, value=0x48), GrinchRamData(0x800102E0, value=0x49),
GrinchRamData(0x800102E1, value=0x4A)]),
"Marine Mobile": GrinchItemData("Gadgets", 105, IC.progression,
[GrinchRamData(0x800102D9, value=0x40), GrinchRamData(0x800102DA, value=0x41),
GrinchRamData(0x800102DB, value=0x42), GrinchRamData(0x800102DC, value=0x43),
GrinchRamData(0x800102DD, value=0x43), GrinchRamData(0x800102DE, value=0x44),
GrinchRamData(0x800102DF, value=0x44), GrinchRamData(0x800102E0, value=0x45),
GrinchRamData(0x800102E1, value=0x46), GrinchRamData(0x800102E2, value=0x47),
GrinchRamData(0x800102E3, value=0x48), GrinchRamData(0x800102E4, value=0x49),
GrinchRamData(0x800102E5, value=0x4A), GrinchRamData(0x800102E6, value=0x4B),
GrinchRamData(0x800102E7, value=0x4C), GrinchRamData(0x800102E8, value=0x4D)]),
"Grinch Copter": GrinchItemData("Gadgets", 106, IC.progression,
[GrinchRamData(0x800102E9, value=0x40), GrinchRamData(0x800102EA, value=0x41),
GrinchRamData(0x800102EB, value=0x42), GrinchRamData(0x800102EC, value=0x43),
GrinchRamData(0x800102ED, value=0x43), GrinchRamData(0x800102EE, value=0x44),
GrinchRamData(0x800102EF, value=0x44), GrinchRamData(0x800102F0, value=0x45),
GrinchRamData(0x800102F1, value=0x46), GrinchRamData(0x800102F2, value=0x47),
GrinchRamData(0x800102F3, value=0x48), GrinchRamData(0x800102F4, value=0x49),
GrinchRamData(0x800102F5, value=0x4A), GrinchRamData(0x800102F6, value=0x4B),
GrinchRamData(0x800102F7, value=0x4C), GrinchRamData(0x800102F8, value=0x4D)])
}
#Mission Specific Items
MISSION_ITEMS_TABLE: dict[str, GrinchItemData] = {
"Who Cloak": GrinchItemData("Mission Specific Items", 200, IC.progression,
[GrinchRamData(0x800101F9, binary_bit_pos=1)]),
"Painting Bucket": GrinchItemData("Mission Specific Items", 201, IC.progression,
[GrinchRamData(0x800101F9, binary_bit_pos=2)]),
"Scissors": GrinchItemData("Mission Specific Items", 202, IC.progression,
[GrinchRamData(0x800101F9, binary_bit_pos=7)]),
"Glue Bucket": GrinchItemData("Mission Specific Items", 203, IC.progression,
[GrinchRamData(0x800101F9, binary_bit_pos=5)]),
"Cable Car Access Card": GrinchItemData("Mission Specific Items", 204, IC.progression,
[GrinchRamData(0x800101F9, binary_bit_pos=6)]),
"Drill": GrinchItemData("Mission Specific Items", 205, IC.progression,
[GrinchRamData(0x800101FA, binary_bit_pos=3)]),
"Rope": GrinchItemData("Mission Specific Items", 206, IC.progression,
[GrinchRamData(0x800101FA, binary_bit_pos=2)]),
"Hook": GrinchItemData("Mission Specific Items", 207, IC.progression,
[GrinchRamData(0x800101FA, binary_bit_pos=1)]),
"Sculpting Tools": GrinchItemData("Mission Specific Items", 208, IC.progression,
[GrinchRamData(0x800101F9, binary_bit_pos=3)]),
"Hammer": GrinchItemData("Mission Specific Items", 209, IC.progression,
[GrinchRamData(0x800101F9, binary_bit_pos=4)]),
"Scout Clothes": GrinchItemData("Mission Specific Items", 210, IC.progression,
[GrinchRamData(0x800101F9, binary_bit_pos=8)])
}
#Sleigh Parts
SLEIGH_PARTS_TABLE: dict[str, GrinchItemData] = {
"Exhaust Pipes": GrinchItemData("Sleigh Parts", 300, IC.progression_skip_balancing,
[GrinchRamData(0x800101FB, binary_bit_pos=3), GrinchRamData(0x800100AA, binary_bit_pos=6)]),
"GPS": GrinchItemData("Sleigh Parts", 301, IC.progression_skip_balancing,
[GrinchRamData(0x800101FB, binary_bit_pos=6), GrinchRamData(0x800100AA, binary_bit_pos=6)]),
"Tires": GrinchItemData("Sleigh Parts", 302, IC.progression_skip_balancing,
[GrinchRamData(0x800101FB, binary_bit_pos=5), GrinchRamData(0x800100AA, binary_bit_pos=6)]),
"Skis": GrinchItemData("Sleigh Parts", 303, IC.progression_skip_balancing,
[GrinchRamData(0x800101FB, binary_bit_pos=4), GrinchRamData(0x800100AA, binary_bit_pos=6)]),
"Twin-End Tuba": GrinchItemData("Sleigh Parts", 304, IC.progression_skip_balancing,
[GrinchRamData(0x800101FB, binary_bit_pos=7), GrinchRamData(0x800100AA, binary_bit_pos=6)])
}
#Access Keys
KEYS_TABLE: dict[str, GrinchItemData] = {
"Whoville Vacuum Access": GrinchItemData("Vacuum Access", 400, IC.progression,
[GrinchRamData()]),
"Who Forest Vacuum Access": GrinchItemData("Vacuum Access", 401, IC.progression,
[GrinchRamData(0x800100AA, binary_bit_pos=3)]),
"Who Dump Vacuum Access": GrinchItemData("Vacuum Access", 402, IC.progression,
[GrinchRamData(0x800100AA, binary_bit_pos=4)]),
"Who Lake Vacuum Access": GrinchItemData("Vacuum Access", 403, IC.progression,
[GrinchRamData(0x800100AA, binary_bit_pos=5)]),
"Progressive Vacuum Access": GrinchItemData("Vacuum Access", 404, IC.progression,
[GrinchRamData()]),
"Spin N' Win Door Unlock": GrinchItemData("Supadow Door Unlocks", 405, IC.progression,
[GrinchRamData()]),
"Dankamania Door Unlock": GrinchItemData("Supadow Door Unlocks", 406, IC.progression,
[GrinchRamData()]),
"The Copter Race Contest Door Unlock": GrinchItemData("Supadow Door Unlocks", 407, IC.progression,
[GrinchRamData()]),
"Progressive Supadow Door Unlock": GrinchItemData("Supadow Door Unlocks", 408, IC.progression,
[GrinchRamData()])
}
#Misc Items
MISC_ITEMS_TABLE: dict[str, GrinchItemData] = {
"Fully Healed Grinch": GrinchItemData("Health Items", 500, IC.filler, [GrinchRamData(0x800E8FDC, value=120)]),
"Heart of Stones": GrinchItemData("Health Items", 501, IC.useful, [GrinchRamData(0x800100ED, value=1)]),
"5 Rotten Eggs": GrinchItemData("Rotten Egg Bundles", 502, IC.filler, [GrinchRamData(0x80010058, value=5)]),
"10 Rotten Eggs": GrinchItemData("Rotten Egg Bundles", 503, IC.filler, [GrinchRamData(0x80010058, value=10)]),
"20 Rotten Eggs": GrinchItemData("Rotten Egg Bundles", 504, IC.filler, [GrinchRamData(0x80010058, value=20)])
}
#Traps
TRAPS_TABLE: dict[str, GrinchItemData] = {
"Ice Trap": GrinchItemData("Traps", 600, IC.trap, [GrinchRamData()]),
"Bee Trap": GrinchItemData("Traps", 601, IC.trap, [GrinchRamData()]),
"Electric Trap": GrinchItemData("Traps", 602, IC.trap, [GrinchRamData()]),
"Tip Toe Trap": GrinchItemData("Traps", 603, IC.trap, [GrinchRamData()]),
"Damage Trap": GrinchItemData("Traps", 604, IC.trap, [GrinchRamData(0x800E8FDC, value=20)]),
"Depletion Trap": GrinchItemData("Traps", 605, IC.trap, [GrinchRamData(0x80010058, value=0)]),
"Dump it to Crumpit": GrinchItemData("Traps", 606, IC.trap,
[GrinchRamData(0x80010000, value=0x05), GrinchRamData(0x8008FB94, value=1)]),
"Rocket Spring Trap": GrinchItemData("Traps", 607, IC.trap, [GrinchRamData()]),
"Who sent me here?": GrinchItemData("Traps", 608, IC.trap, [GrinchRamData(0x8008FB94, value=1)])
}

130
worlds/grinch/Locations.py Normal file
View File

@@ -0,0 +1,130 @@
from BaseClasses import Location
class GrinchLocation(Location):
region: str
code: Optional[int]
location_group: str
update_ram_addr: Optional[list[GrinchRamData]]
grinch_locations = {
#Visitsanity
"Enter Whoville": GrinchLocationData("Visitsanity", 100, [GrinchRamData()]),
"Enter the Post Office": GrinchLocationData("Visitsanity", 101, [GrinchRamData()]),
"Enter the Town Hall": GrinchLocationData("Visitsanity", 102, [GrinchRamData()]),
"Enter the Countdown-To-Xmas Clock Tower": GrinchLocationData("Visitsanity", 103, [GrinchRamData()]),
"Enter Who Forest": GrinchLocationData("Visitsanity", 104, [GrinchRamData()]),
"Enter the Ski Resort": GrinchLocationData("Visitsanity", 105, [GrinchRamData()]),
"Enter the Civic Center": GrinchLocationData("Visitsanity", 106, [GrinchRamData()]),
"Enter Who Dump": GrinchLocationData("Visitsanity", 107, [GrinchRamData()]),
"Enter the Guardian's House Mine Field": GrinchLocationData("Visitsanity", 108, [GrinchRamData()]),
"Enter the exterior of the Power Plant": GrinchLocationData("Visitsanity", 109, [GrinchRamData()]),
"Enter the interior of the Power Plant": GrinchLocationData("Visitsanity", 110, [GrinchRamData()]),
"Enter Who Lake": GrinchLocationData("Visitsanity", 111, [GrinchRamData()]),
"Enter the Submarine World": GrinchLocationData("Visitsanity", 112, [GrinchRamData()]),
"Enter the Scout's Hut": GrinchLocationData("Visitsanity", 113, [GrinchRamData()]),
"Enter the North Shore": GrinchLocationData("Visitsanity", 114, [GrinchRamData()]),
"Enter the Mayor's Villa": GrinchLocationData("Visitsanity", 115, [GrinchRamData()]),
#Whoville Missions
"Smashing Snowmen": GrinchLocationData("Whoville Missions", 200, [GrinchRamData()]),
"Shuffling The Mail": GrinchLocationData("Whoville Missions", 201, [GrinchRamData()]),
"Painting The Mayor's Posters": GrinchLocationData("Whoville Missions", 202, [GrinchRamData()]),
"Launching Eggs Into Houses": GrinchLocationData("Whoville Missions", 203, [GrinchRamData()]),
"Modifying The Mayor's Statue": GrinchLocationData("Whoville Missions", 204, [GrinchRamData()]),
"Advancing The Countdown-To-Xmas Clock": GrinchLocationData("Whoville Missions", 205, [GrinchRamData()]),
"Squashing All Gifts in Whoville": GrinchLocationData("Whoville Missions", 206, [GrinchRamData()]),
#Who Forest Missions
"Making Xmas Trees Droop": GrinchLocationData("Who Forest Missions", 300, [GrinchRamData()]),
"Sabotaging Snow Cannon With Glue": GrinchLocationData("Who Forest Missions", 301, [GrinchRamData()]),
"Putting Beehives In Cabins": GrinchLocationData("Who Forest Missions", 302, [GrinchRamData()]),
"Sliming The Mayor's Skis": GrinchLocationData("Who Forest Missions", 303, [GrinchRamData()]),
"Replacing The Candles On The Cake With Fireworks": GrinchLocationData("Who Forest Missions", 304, [GrinchRamData()]),
"Squashing All Gifts in Who Forest": GrinchLocationData("Who Forest Missions", 305, [GrinchRamData()]),
#Who Dump Missions
"Stealing Food From Birds": GrinchLocationData("Who Dump Missions", 400, [GrinchRamData()]),
"Feeding The Computer With Robot Parts": GrinchLocationData("Who Dump Missions", 401, [GrinchRamData()]),
"Infesting The Mayor's House With Rats": GrinchLocationData("Who Dump Missions", 402, [GrinchRamData()]),
"Conducting The Stinky Gas To Who-Bris' Shack": GrinchLocationData("Who Dump Missions", 403, [GrinchRamData()]),
"Shaving Who Dump Guardian": GrinchLocationData("Who Dump Missions", 404, [GrinchRamData()]),
"Short-Circuiting Power-Plant": GrinchLocationData("Who Dump Missions", 405, [GrinchRamData()]),
"Squashing All Gifts in Who Dump": GrinchLocationData("Who Dump Missions", 406, [GrinchRamData()]),
#Who Lake Missions
"Putting Thistles In Shorts": GrinchLocationData("Who Lake Missions", 500, [GrinchRamData()]),
"Sabotaging The Tents": GrinchLocationData("Who Lake Missions", 501, [GrinchRamData()]),
"Drilling Holes In Canoes": GrinchLocationData("Who Lake Missions", 502, [GrinchRamData()]),
"Modifying The Marine Mobile": GrinchLocationData("Who Lake Missions", 503, [GrinchRamData()]),
"Hooking The Mayor's Bed To The Motorboat": GrinchLocationData("Who Lake Missions", 504, [GrinchRamData()]),
"Squashing All Gifts in Who Lake": GrinchLocationData("Who Lake Missions", 505, [GrinchRamData()]),
#Binoculars Blueprints
"Binoculars Blueprint - Post Office Roof": GrinchLocationData("Binocular Blueprints", 600, [GrinchRamData()]),
"Binoculars Blueprint - City Hall Library - Left Side": GrinchLocationData("Binocular Blueprints", 601, [GrinchRamData()]),
"Binoculars Blueprint - City Hall Library - Front Side": GrinchLocationData("Binocular Blueprints", 602, [GrinchRamData()]),
"Binoculars Blueprint - City Hall Library - Right Side": GrinchLocationData("Binocular Blueprints", 603, [GrinchRamData()]),
#Rotten Egg Launcher Blueprints
"Rotten Egg Launcher Blueprint - Outside City Hall": GrinchLocationData("Rotten Egg Launcher Blueprints", 700, [GrinchRamData()]),
"Rotten Egg Launcher Blueprint - Outside Clock Tower": GrinchLocationData("Rotten Egg Launcher Blueprints", 701, [GrinchRamData()]),
"Rotten Egg Launcher Blueprint - Post Office - Front of Silver Door": GrinchLocationData("Rotten Egg Launcher Blueprints", 702, [GrinchRamData()]),
"Rotten Egg Launcher Blueprint - Post Office - After Mission Completion": GrinchLocationData("Rotten Egg Launcher Blueprints", 703, [GrinchRamData()]),
#Rocket Spring Blueprints
"Rocket Spring Blueprint - Behind Vacuum": GrinchLocationData("Rocket Spring Blueprints", 800, [GrinchRamData()]),
"Rocket Spring Blueprint - Front of 2nd House near entrance": GrinchLocationData("Rocket Spring Blueprints", 801, [GrinchRamData()]),
"Rocket Spring Blueprint - Near Tree House on Ground": GrinchLocationData("Rocket Spring Blueprints", 802, [GrinchRamData()]),
"Rocket Spring Blueprint - Near Cable Car House": GrinchLocationData("Rocket Spring Blueprints", 804, [GrinchRamData()]),
"Rocket Spring Blueprint - Near Who Snowball in Cave": GrinchLocationData("Rocket Spring Blueprints", 805, [GrinchRamData()]),
"Rocket Spring Blueprint - Branch Platform Closest to Glue Cannon": GrinchLocationData("Rocket Spring Blueprints", 806, [GrinchRamData()]),
"Rocket Spring Blueprint - Branch Platform Near Beast": GrinchLocationData("Rocket Spring Blueprints", 807, [GrinchRamData()]),
"Rocket Spring Blueprint - Branch Platform Ledge Grab House": GrinchLocationData("Rocket Spring Blueprints", 808, [GrinchRamData()]),
"Rocket Spring Blueprint - On Tree House": GrinchLocationData("Rocket Spring Blueprints", 809, [GrinchRamData()]),
#Slime Shooter Blueprints
"Slime Shooter Blueprint - Branch Platform Elevated House": GrinchLocationData("Slime Shooter Blueprints", 900, [GrinchRamData()]),
"Slime Shooter Blueprint - Branch Platform House next to Beast": GrinchLocationData("Slime Shooter Blueprint", 901, [GrinchRamData()]),
"Slime Shooter Blueprint - House near Civic Center Cave": GrinchLocationData("Slime Shooter Blueprints", 902, [GrinchRamData()]),
"Slime Shooter Blueprint - House next to Tree House": GrinchLocationData("Slime Shooter Blueprints", 903, [GrinchRamData()]),
"Slime Shooter Blueprint - House across from Tree House": GrinchLocationData("Slime Shooter Blueprints", 904, [GrinchRamData()]),
"Slime Shooter Blueprint - 2nd House near entrance right side": GrinchLocationData("Slime Shooter Blueprints", 905, [GrinchRamData()]),
"Slime Shooter Blueprint - 2nd House near entrance left side": GrinchLocationData("Slime Shooter Blueprints", 906, [GrinchRamData()]),
"Slime Shooter Blueprint - 2nd House near entrance inbetween blueprints": GrinchLocationData("Slime Shooter Blueprints", 907, [GrinchRamData()]),
"Slime Shooter Blueprint - House near entrance": GrinchLocationData("Slime Shooter Blueprints", 908, [GrinchRamData()]),
#Octopus Climbing Device
"Octopus Climbing Device Blueprint - Middle Pipe": GrinchLocationData("Octopus Climbing Device Blueprints", 1001, [GrinchRamData()]),
"Octopus Climbing Device Blueprint - Right Pipe": GrinchLocationData("Octopus Climbing Device Blueprints", 1002, [GrinchRamData()]),
"Octopus Climbing Device Blueprint - Mayor's House Vent Cage": GrinchLocationData("Octopus Climbing Device Blueprints", 1003, [GrinchRamData()]),
"Octopus Climbing Device Blueprint - Left Pipe": GrinchLocationData("Octopus Climbing Device Blueprints", 1004, [GrinchRamData()]),
"Octopus Climbing Device Blueprint - Near Power Plant Wall on left side": GrinchLocationData("Octopus Climbing Device Blueprints", 1005, [GrinchRamData()]),
"Octopus Climbing Device Blueprint - Near Who-Bris' Shack": GrinchLocationData("Octopus Climbing Device Blueprints", 1006, [GrinchRamData()]),
"Octopus Climbing Device Blueprint - Guardian's House - Left side of Guardian House": GrinchLocationData("Octopus Climbing Device Blueprints", 1007, [GrinchRamData()]),
"Octopus Climbing Device Blueprint - Guardian's House - Right side of Guardian House": GrinchLocationData("Octopus Climbing Device Blueprints", 1008, [GrinchRamData()]),
"Octopus Climbing Device Blueprint - Inside Guardian's House": GrinchLocationData("Octopus Climbing Device Blueprints", 1009, [GrinchRamData()]),
#Marine Mobile Blueprints
"Marine Mobile Blueprint - South Shore - Bridge to Scout's Hut": GrinchLocationData("Marine Mobile Blueprints", 1100, [GrinchRamData()]),
"Marine Mobile Blueprint - South Shore - Tent near Porcupine": GrinchLocationData("Marine Mobile Blueprints", 1101, [GrinchRamData()]),
"Marine Mobile Blueprint - South Shore - Near Scout Shack": GrinchLocationData("Marine Mobile Blueprints", 1102, [GrinchRamData()]),
"Marine Mobile Blueprint - South Shore - Under a Hill Bridge": GrinchLocationData("Marine Mobile Blueprints", 1103, [GrinchRamData()]),
"Marine Mobile Blueprint - South Shore - Scout's Hut Roof": GrinchLocationData("Marine Mobile Blueprints", 1104, [GrinchRamData()]),
"Marine Mobile Blueprint - South Shore - Jump from Boulder": GrinchLocationData("Marine Mobile Blueprints", 1105, [GrinchRamData()]),
"Marine Mobile Blueprint - South Shore - Rope Swing by Beast": GrinchLocationData("Marine Mobile Blueprints", 1106, [GrinchRamData()]),
"Marine Mobile Blueprint - South Shore - Near Summer Beast": GrinchLocationData("Marine Mobile Blueprints", 1107, [GrinchRamData()]),
"Marine Mobile Blueprint - North Shore - Below Bridge": GrinchLocationData("Marine Mobile Blueprints", 1108, [GrinchRamData()]),
"Marine Mobile Blueprint - North Shore - Behind Skunk Hut": GrinchLocationData("Marine Mobile Blueprints", 1109, [GrinchRamData()]),
"Marine Mobile Blueprint - North Shore - Inside Skunk Hut": GrinchLocationData("Marine Mobile Blueprints", 1110, [GrinchRamData()]),
"Marine Mobile Blueprint - North Shore - Fenced in Area": GrinchLocationData("Marine Mobile Blueprints", 1111, [GrinchRamData()]),
"Marine Mobile Blueprint - North Shore - Boulder Box near Bridge": GrinchLocationData("Marine Mobile Blueprints", 1112, [GrinchRamData()]),
"Marine Mobile Blueprint - North Shore - Boulder Box behind Skunk Hut": GrinchLocationData("Marine Mobile Blueprints", 1113, [GrinchRamData()]),
"Marine Mobile Blueprint - North Shore - Inside Drill House": GrinchLocationData("Marine Mobile Blueprints", 1114, [GrinchRamData()]),
"Marine Mobile Blueprint - North Shore - Crow Platform": GrinchLocationData("Marine Mobile Blueprints", 1115, [GrinchRamData()]),
#Grinch Copter Blueprints
"Grinch Copter Blueprint - Whoville City Hall - Safe Room": GrinchLocationData("Grinch Copter Blueprints", 1200, [GrinchRamData()]),
"Grinch Copter Blueprint - Whoville City Hall - Statue Room": GrinchLocationData("Grinch Copter Blueprints", 1201, [GrinchRamData()]),
"Grinch Copter Blueprint - Whoville Clock Tower - Before Bells": GrinchLocationData("Grinch Copter Blueprints", 1202, [GrinchRamData()]),
"Grinch Copter Blueprint - Whoville Clock Tower - After Bells": GrinchLocationData("Grinch Copter Blueprints", 1203, [GrinchRamData()]),
"Grinch Copter Blueprint - Who Forest Ski Resort - Inside Dog's Fence": GrinchLocationData("Grinch Copter Blueprints", 1204, [GrinchRamData()]),
"Grinch Copter Blueprint - Who Forest Ski Resort - Max Cave": GrinchLocationData("Grinch Copter Blueprints", 1205, [GrinchRamData()]),
"Grinch Copter Blueprint - Who Forest Civic Center - Climb across wall": GrinchLocationData("Grinch Copter Blueprints", 1206, [GrinchRamData()]),
"Grinch Copter Blueprint - Who Forest Civic Center - Icicle": GrinchLocationData("Grinch Copter Blueprints", 1207, [GrinchRamData()]),
"Grinch Copter Blueprint - Who Dump Outside of Power Plant - First": GrinchLocationData("Grinch Copter Blueprints", 1208, [GrinchRamData()]),
"Grinch Copter Blueprint - Who Dump Outside of Power Plant - Second Gate": GrinchLocationData("Grinch Copter Blueprints", 1209, [GrinchRamData()]),
"Grinch Copter Blueprint - Who Dump Inside of Power Plant - Before Mission": GrinchLocationData("Grinch Copter Blueprints", 1210, [GrinchRamData()]),
"Grinch Copter Blueprint - Who Dump Inside of Power Plant - After Mission": GrinchLocationData("Grinch Copter Blueprints", 1211, [GrinchRamData()]),
"Grinch Copter Blueprint - Who Lake South Shore - Submarine World - Above Surface": GrinchLocationData("Grinch Copter Blueprints", 1212, [GrinchRamData()]),
"Grinch Copter Blueprint - Who Lake South Shore - Submarine World - Underwater": GrinchLocationData("Grinch Copter Blueprints", 1213, [GrinchRamData()]),
"Grinch Copter Blueprint - Who Lake North Shore - Mayor's Villa - Tree Branch": GrinchLocationData("Grinch Copter Blueprints", 1214, [GrinchRamData()]),
"Grinch Copter Blueprint - Who Lake North Shore - Mayor's Villa - Cave": GrinchLocationData("Grinch Copter Blueprints", 1215, [GrinchRamData()]),

37
worlds/grinch/Options.py Normal file
View File

@@ -0,0 +1,37 @@
from Options import FreeText, NumericOption, Toggle, DefaultOnToggle, Choice, TextChoice, Range, NamedRange, OptionList
class KeyType(Choice):
"""Selects whether you want your access items to be separated or progressive"""
display_name = "Key Type"
option_separated = 0
option_progressive = 1
default = 0
# class StartingArea(Choice):
# """
# Here, you can select which area you'll start the game with. Whichever one you pick is the region you'll have access to at the start of the Multiworld.
# """
# option_whoville = 0
# option_who_forest = 1
# option_who_dump = 2
# option_who_lake = 3
# display_name = "Starting Area"
# class Supadow(Toggle):
# """Enables completing minigames through the Supadows in Mount Crumpit as checks. (9 locations)"""
# display_name = "Supadow Minigame Locations"
#
#
# class Gifts(Toggle):
# """Missions that require you to squash every present in a level. (4 locations)"""
# display_name = "Gift Collection Locations"
# class Movesanity(Toggle):
# """Randomizes Grinch's moveset along with randomizing max into the pool. (Currently randomizes Max)"""
# display_name = "Movesanity"
class RottenEggs(Toggle):
"""Determine whether or not you run out of rotten eggs when you utilize your gadgets."""
display_name = "Unlimited Rotten Eggs"

View File

26
worlds/grinch/Regions.py Normal file
View File

@@ -0,0 +1,26 @@
from BaseClasses import Region, MultiWorld
from .Locations import GrinchLocation, grinch_locations
from .Options import GrinchOptions
def create_regions(player: int, world: World, options: GrinchOptions):
mainareas_list = [
"Whoville",
"Who Forest",
"Who Dump",
"Who Lake"
]
subareas_list = [
"Post Office",
"City Hall",
"Countdown to X-Mas Tower",
"Ski Resort",
"Civic Center",
"Minefield",
"Outside Power Plant",
"Inside Power Plant",
"Submarine World",
"Scout's Hut",
"North Shore",
"Mayor's Villa"
]

64
worlds/grinch/Rules.py Normal file
View File

@@ -0,0 +1,64 @@
def set_rules(world: World, world: World, options: GrinchOptions, int):
rules_dict = {
}
access_rules_dict = {
"Whoville": (
"WV Key"
"Post Office": (
"Who Cloak"
),
"City Hall": (
connect_region = "Whoville",
"REL"
),
"Who Forest": (
"WF Key",
"Prog Access Key": 1
),
"Ski Resort": (
connect_region = "Who Forest",
"Cable Car Access Card"
),
"Civic Center": (
connect_region = "Who Forest",
"GC",
"OCD"
),
"Who Dump": (
"WD Key",
"Prog Access Key": 2
),
"Minefield" (
connect_region = "Who Dump",
"REL+SS+RS",
"REL+GC"
),
"Outside Power Plant": (
connect_region = "Who Dump",
"(REL|SS)+GC",
"(REL|SS)+OCD+SS+RS"
),
"Inside Power Plant": (
connect_region = "Outside Power Plant",
"REL+GC",
"REL+OCD+SS+RS"
),
"Who Lake": (
"WL Key",
"Prog Access Key": 3
),
"North Shore": (
connect_region: "Who Lake",
"Scout Clothes"
),
"Mayor's Villa": (
connect_region = "North Shore"
),
"Submarine World": (
connect_region = "Who Lake",
"MM"
)
}

View File

@@ -0,0 +1 @@
class GrinchWorld(world):

View File

@@ -0,0 +1,21 @@
# The Grinch
## Where is the options page?
The [player options page for this game](../player-options) contains all the
options you need to configure and export a config file.
## What does randomization do to this game?
## What is the goal of The Grinch when randomized?
## Which items can be in another player's world?
## When the player receives an item, what happens?

View File

@@ -0,0 +1,67 @@
# The Grinch - Setup Guide
## Required Software
- [Archipelago](https://github.com/ArchipelagoMW/Archipelago/releases). Please use version 0.6.2 or later for integrated
BizHawk support.
- Legally obtained NTSC Bin ROM file, probably named something like `Grinch, The (USA) (En,Fr,Es).bin`.
- [BizHawk](https://tasvideos.org/BizHawk/ReleaseHistory) Version 2.9.1 is supported, but I can't promise if any version is stable or not.
- The latest `thegrinch.apworld` file. You can find this on the [Releases page](https://github.com/MarioSpore/Grinch-AP/releases/latest). Put this in your `Archipelago/custom_worlds` folder.
## Configuring BizHawk
## Configuring your Config (.yaml) file
### What is a config file and why do I need one?
See the guide on setting up a basic YAML at the Archipelago setup
guide: [Basic Multiworld Setup Guide](/tutorial/Archipelago/setup/en)
### Where do I get a config file?
The Player options page on the website allows you to configure your personal
options and export a config file from them: [The Grinch Player Options Page](../player-options)
### Verifying your config file
If you would like to validate your config file to make sure it works, you may do
so on the YAML Validator page: [YAML Validation page](/check)
## Joining a MultiWorld Game
### Obtain your patch file and create your ROM
When you join a multiworld game, you will be asked to provide your config file to whomever is
hosting. Once that is done, the host will provide you with either a link to download your patch
file, or with a zip file containing everyone's patch files. Your patch file should have a `.apgrinch`
extension.
Put your patch file on your desktop or somewhere convenient, and double click it. This should
automatically launch the client, and will also create your ROM in the same place as your patch file.
### Connect to the Multiserver
Once both the client and the emulator are started, they must be connected. **This should happen automatically.**
However, if the lua script window doesn't appear, then within the emulator click
on the "Tools" menu and select "Lua Console". Click the folder button or press Ctrl+O to open a Lua
script. Navigate to your Archipelago install folder and open `data/lua/connector_bizhawk_generic.lua`.
To connect the client to the multiserver simply put `<address>:<port>` on the text field on top and
press enter (if the server uses a password, type in the bottom text field
`/connect <address>:<port> [password]`)
## Hosting a MultiWorld game
The recommended way to host a game is to use our hosting service. The process is relatively simple:
1. Collect config files from your players.
2. Upload the config files to the Generate page above.
- Generate page: [WebHost Seed Generation Page](/generate)
3. Wait a moment while the seed is generated.
4. When the seed is generated, you will be redirected to a "Seed Info" page.
5. Click "Create New Room". This will take you to the server page. Provide the link to this page to
your players, so they may download their patch files from there.
6. Note that a link to a MultiWorld Tracker is at the top of the room page. The tracker shows the
progress of all players in the game. Any observers may also be given the link to this page.
7. Once all players have joined, you may begin playing.