Added Heart of Stone and Supadow logic to prepare for it's eventual implementation

This commit is contained in:
MarioSpore
2025-08-03 19:43:54 -04:00
parent 0f2851e1b3
commit 3541e13f21
5 changed files with 193 additions and 120 deletions

View File

@@ -147,6 +147,8 @@ KEYS_TABLE: dict[str, GrinchItemData] = {
# "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()]),
# "Bike Race Door Unlock": GrinchItemData("Supadow Door Unlocks", 409, IC.progression,
# [GrinchRamData()])
}
@@ -170,8 +172,8 @@ TRAPS_TABLE: dict[str, GrinchItemData] = {
# "Tip Toe Trap": GrinchItemData("Traps", 603, IC.trap, [GrinchRamData()]), #alias to Slowness Trap for traplink
"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, #Alias to Home Trap for traplink
# [GrinchRamData(0x80010000, value=0x05), GrinchRamData(0x8008FB94, value=1)]),
"Dump it to Crumpit": GrinchItemData("Traps", 606, IC.trap, #Alias to Home Trap for traplink
[GrinchRamData(0x80010000, value=0x05), GrinchRamData(0x8008FB94, value=1)]),
# "Rocket Spring Trap": GrinchItemData("Traps", 607, IC.trap, [GrinchRamData()]), #alias to Spring Trap for traplink
"Who sent me here?": GrinchItemData("Traps", 608, IC.trap, [GrinchRamData(0x8008FB94, value=1)]), #alias to Home Trap for traplink
# "Cutscene Trap": GrinchItemData("Traps", 609, IC.trap, [GrinchRamData()]),

View File

@@ -26,7 +26,6 @@ class GrinchLocation(Location):
self.region = data.region
self.type = data.location_group
self.address = self.address
grinch_locations = {
#Going to use current map id as indicator whether or not you visited a location
#Visitsanity
@@ -49,8 +48,8 @@ grinch_locations = {
#Need to find mission completion address for handful of locations that are not documented.
#Missions that have value are those ones we need to find the check for
#Whoville Missions
"Smashing Snowmen": GrinchLocationData("Whoville", "Whoville Missions", 200, [GrinchRamData(0x8001020C, value=10)]),
"Shuffling The Mail": GrinchLocationData("Post Office", "Whoville Missions", 201, [GrinchRamData(0x800100BE, binary_bit_pos=1)]),
"Smashing Snowmen": GrinchLocationData("Whoville", "Whoville Missions", 200, [GrinchRamData(0x8001020C, value=10)]),
"Painting The Mayor's Posters": GrinchLocationData("Whoville", "Whoville Missions", 202, [GrinchRamData(0x800100C6, value=10)]),
"Launching Eggs Into Houses": GrinchLocationData("Whoville", "Whoville Missions", 203, [GrinchRamData(0x800100C7, value=10)]),
"Modifying The Mayor's Statue": GrinchLocationData("City Hall", "Whoville Missions", 204, [GrinchRamData(0x800100BE, binary_bit_pos=2)]),
@@ -156,7 +155,25 @@ grinch_locations = {
"GC Blueprint - Who Lake North Shore - Mayor's Villa - Cave": GrinchLocationData("Mayor's Villa", "Grinch Copter Blueprints", 1215, [GrinchRamData(0x80010275, binary_bit_pos=7)]),
#Sleigh Room Locations
"Stealing All Gifts": GrinchLocationData("Sleigh Room", "Sleigh Ride", 1300, [GrinchRamData(0x800100BF, binary_bit_pos=7)]),
"Neutralizing Santa": GrinchLocationData("Sleigh Room", "Sleigh Ride", None, [GrinchRamData(0x800100BF, binary_bit_pos=8)])
"Neutralizing Santa": GrinchLocationData("Sleigh Room", "Sleigh Ride", None, [GrinchRamData(0x800100BF, binary_bit_pos=8)]),
#Heart of Stones
# "Heart of Stone - Whoville": GrinchLocationData("Post Office", "Heart of Stones"), 1400, [GrinchRamData()]),
# "Heart of Stone - Who Forest": GrinchLocationData("Ski Resort", "Heart of Stones"), 1401, [GrinchRamData()]),
# "Heart of Stone - Who Dump": GrinchLocationData("Minefield", "Heart of Stones"), 1402, [GrinchRamData()]),
# "Heart of Stone - Who Lake": GrinchLocationData("North Shore", "Heart of Stones"), 1402, [GrinchRamData()]),
#Supadow Minigames
# "Spin N' Win - Easy": GrinchLocationData("Spin N' Win Supadow", "Supadow Minigames"), 1500, [GrinchRamData()]),
# "Spin N' Win - Hard": GrinchLocationData("Spin N' Win Supadow", "Supadow Minigames"), 1501, [GrinchRamData()]),
# "Spin N' Win - Real Tough": GrinchLocationData("Spin N' Win Supadow", "Supadow Minigames"), 1502, [GrinchRamData()]),
# "Dankamania - Easy - 15 Points": GrinchLocationData("Dankamania Supadow", "Supadow Minigames"), 1503, [GrinchRamData()]),
# "Dankamania - Hard - 15 Points": GrinchLocationData("Dankamania Supadow", "Supadow Minigames"), 1504, [GrinchRamData()]),
# "Dankamania - Real Tough - 15 Points": GrinchLocationData("Dankamania Supadow", "Supadow Minigames"), 1505, [GrinchRamData()]),
# "The Copter Race Contest - Easy": GrinchLocationData("The Copter Race Contest Supadow", "Supadow Minigames"), 1506, [GrinchRamData()]),
# "The Copter Race Contest - Hard": GrinchLocationData("The Copter Race Contest Supadow", "Supadow Minigames"), 1507, [GrinchRamData()]),
# "The Copter Race Contest - Real Tough": GrinchLocationData("The Copter Race Contest Supadow", "Supadow Minigames"), 1508, [GrinchRamData()]),
# "Bike Race - 1st Place": GrinchLocationData("Bike Race", "Supadow Minigames"), 1509, [GrinchRamData()]),
# "Bike Race - Top 2": GrinchLocationData("Bike Race", "Supadow Minigames"), 1510, [GrinchRamData()]),
# "Bike Race - Top 3": GrinchLocationData("Bike Race", "Supadow Minigames"), 1511, [GrinchRamData()]),
}
def grinch_locations_to_id() -> dict[str,int]:

View File

@@ -4,7 +4,7 @@ from Options import FreeText, NumericOption, Toggle, DefaultOnToggle, Choice, Te
PerGameCommonOptions
class ProgressiveVacuum(Toggle):
class ProgressiveVacuum(Toggle):#DefaultOnToggle
"""
Determines whether you get access to main areas progressively [NOT IMPLEMENTED]

View File

@@ -35,7 +35,8 @@ subareas_list = [
supadow_list = [
"Spin N' Win Supadow",
"Dankamania Supadow",
"The Copter Race Contest Supadow"
"The Copter Race Contest Supadow",
"Bike Race"
]
def create_regions(world: "GrinchWorld"):

View File

@@ -394,11 +394,60 @@ rules_dict: dict[str,list[list[str]]] = {
["Rotten Egg Launcher", "Rocket Spring"]
],
"Stealing All Gifts": [
["Exhaust Pipes", "GPS", "Tires", "Skis", "Twin-End Tuba"]
[]
],
"Neutralizing Santa": [
["Exhaust Pipes", "GPS", "Tires", "Skis", "Twin-End Tuba"]
]
[]
],
"Heart of Stone - Whoville": [
[]
],
"Heart of Stone - Who Forest": [
[]
],
"Heart of Stone - Who Dump": [
["Grinch Copter"],
["Rotten Egg Launcher", "Slime Shooter", "Rocket Spring"]
],
"Heart of Stone - Who Lake": [
[]
],
"Spin N' Win - Easy": [
[]
],
"Spin N' Win - Hard": [
[]
],
"Spin N' Win - Real Tough": [
[]
],
"Dankamania - Easy - 15 Points": [
[]
],
"Dankamania - Hard - 15 Points": [
[]
],
"Dankamania - Real Tough - 15 Points": [
[]
],
"The Copter Race Contest - Easy": [
[]
],
"The Copter Race Contest - Hard": [
[]
],
"The Copter Race Contest - Real Tough": [
[]
],
"Bike Race - 1st Place": [
[]
],
"Bike Race - Top 2": [
[]
],
"Bike Race - Top 3": [
[]
],
}
@@ -475,6 +524,10 @@ access_rules_dict: dict[str,list[list[str]]] = {
["The Copter Race Contest Door Unlock"],
# ["Progressive Supadow Door Unlock: 3"]
],
"Bike Race": [
["Bike Race Door Unlock"],
# ["Progressive Supadow Door Unlock: 4"]
]
}
def interpret_rule(rule_set: list[list[str]], player: int):