mirror of
https://github.com/MarioSpore/Grinch-AP.git
synced 2025-10-21 20:21:32 -06:00
SMW: v1.1 Content Update (#1344)
* Make Bowser unkillable on Egg Hunt * Increment Data Package version Changed a location name. * Baseline for Bowser Rooms shuffling * Add boss shuffle * Remove extra space * Overworld Palette Shuffle * Fix Literature Trap typo * Handle Queuing traps and new Timer Trap * Fix trap name and actually create them * Early Climb and Overworld Speed * Add correct tooltip for Early Climb * Tooltip text edit * Address unconnected regions * Add option to fully exclude Special Zone levels from the seed * Fix Chocolate Island 4 Dragon Coins logic * Update worlds/smw/Client.py to use `getattr`
This commit is contained in:
@@ -1,6 +1,80 @@
|
||||
|
||||
from .Names import LocationName
|
||||
|
||||
|
||||
class BowserRoom():
|
||||
name: str
|
||||
exitAddress: int
|
||||
roomID: int
|
||||
|
||||
def __init__(self, name: str, exitAddress: int, roomID: int):
|
||||
self.name = name
|
||||
self.exitAddress = exitAddress
|
||||
self.roomID = roomID
|
||||
|
||||
full_bowser_rooms = [
|
||||
BowserRoom("Hallway 1 - Door 1", 0x3A680, 0x0D),
|
||||
BowserRoom("Hallway 1 - Door 2", 0x3A684, 0x0D),
|
||||
BowserRoom("Hallway 1 - Door 3", 0x3A688, 0x0D),
|
||||
BowserRoom("Hallway 1 - Door 4", 0x3A68C, 0x0D),
|
||||
BowserRoom("Hallway 2 - Door 1", 0x3A8CB, 0xD0),
|
||||
BowserRoom("Hallway 2 - Door 2", 0x3A8CF, 0xD0),
|
||||
BowserRoom("Hallway 2 - Door 3", 0x3A8D3, 0xD0),
|
||||
BowserRoom("Hallway 2 - Door 4", 0x3A8D7, 0xD0),
|
||||
|
||||
BowserRoom("Room 1", 0x3A705, 0xD4),
|
||||
BowserRoom("Room 2", 0x3A763, 0xD3),
|
||||
BowserRoom("Room 3", 0x3A800, 0xD2),
|
||||
BowserRoom("Room 4", 0x3A83D, 0xD1),
|
||||
BowserRoom("Room 5", 0x3A932, 0xCF),
|
||||
BowserRoom("Room 6", 0x3A9E1, 0xCE),
|
||||
BowserRoom("Room 7", 0x3AA75, 0xCD),
|
||||
BowserRoom("Room 8", 0x3AAC7, 0xCC),
|
||||
]
|
||||
|
||||
standard_bowser_rooms = [
|
||||
BowserRoom("Room 1", 0x3A705, 0xD4),
|
||||
BowserRoom("Room 2", 0x3A763, 0xD3),
|
||||
BowserRoom("Room 3", 0x3A800, 0xD2),
|
||||
BowserRoom("Room 4", 0x3A83D, 0xD1),
|
||||
BowserRoom("Room 5", 0x3A932, 0xCF),
|
||||
BowserRoom("Room 6", 0x3A9E1, 0xCE),
|
||||
BowserRoom("Room 7", 0x3AA75, 0xCD),
|
||||
BowserRoom("Room 8", 0x3AAC7, 0xCC),
|
||||
]
|
||||
|
||||
|
||||
class BossRoom():
|
||||
name: str
|
||||
exitAddress: int
|
||||
exitAddressAlt: int
|
||||
roomID: int
|
||||
|
||||
def __init__(self, name: str, exitAddress: int, roomID: int, exitAddressAlt=None):
|
||||
self.name = name
|
||||
self.exitAddress = exitAddress
|
||||
self.roomID = roomID
|
||||
self.exitAddressAlt = exitAddressAlt
|
||||
|
||||
|
||||
submap_boss_rooms = [
|
||||
BossRoom("#1 Lemmy Koopa", 0x311E3, 0xF6), # Submap 0x1F6
|
||||
BossRoom("#3 Lemmy Koopa", 0x33749, 0xF2), # Submap 0x1F2
|
||||
BossRoom("Valley Reznor", 0x3A132, 0xDE), # Submap 0x1DE
|
||||
BossRoom("#7 Larry Koopa", 0x3A026, 0xEB), # Submap 0x1EB
|
||||
]
|
||||
|
||||
ow_boss_rooms = [
|
||||
BossRoom("#2 Morton Koopa Jr.", 0x3209B, 0xE5), # OW 0x0E5
|
||||
BossRoom("Vanilla Reznor", 0x33EAB, 0xDF), # OW 0x0DF
|
||||
BossRoom("#4 Ludwig von Koopa", 0x346EA, 0xD9), # OW 0x0D9
|
||||
BossRoom("Forest Reznor", 0x3643E, 0xD5, 0x36442), # OW 0x0D5
|
||||
BossRoom("#5 Roy Koopa", 0x35ABC, 0xCC), # OW 0x0CC
|
||||
BossRoom("Chocolate Reznor", 0x3705B, 0xE2), # OW 0x0E2
|
||||
BossRoom("#6 Wendy O. Koopa", 0x38BB5, 0xD3), # OW 0x0D3
|
||||
]
|
||||
|
||||
|
||||
class SMWPath():
|
||||
thisEndDirection: int
|
||||
otherLevelID: int
|
||||
@@ -203,6 +277,9 @@ hard_single_levels = [
|
||||
0x3B,
|
||||
0x3A,
|
||||
0x37,
|
||||
]
|
||||
|
||||
special_zone_levels = [
|
||||
0x4E,
|
||||
0x4F,
|
||||
0x50,
|
||||
@@ -443,6 +520,7 @@ def generate_level_list(world, player):
|
||||
world.random.shuffle(easy_single_levels_copy)
|
||||
hard_single_levels_copy = hard_single_levels.copy()
|
||||
world.random.shuffle(hard_single_levels_copy)
|
||||
special_zone_levels_copy = special_zone_levels.copy()
|
||||
easy_double_levels_copy = easy_double_levels.copy()
|
||||
world.random.shuffle(easy_double_levels_copy)
|
||||
hard_double_levels_copy = hard_double_levels.copy()
|
||||
@@ -474,6 +552,8 @@ def generate_level_list(world, player):
|
||||
shuffled_level_list.append(0x16)
|
||||
|
||||
single_levels_copy = (easy_single_levels_copy.copy() + hard_single_levels_copy.copy())
|
||||
if not world.exclude_special_zone[player]:
|
||||
single_levels_copy.extend(special_zone_levels_copy)
|
||||
world.random.shuffle(single_levels_copy)
|
||||
|
||||
castle_fortress_levels_copy = (easy_castle_fortress_levels_copy.copy() + hard_castle_fortress_levels_copy.copy())
|
||||
@@ -566,14 +646,17 @@ def generate_level_list(world, player):
|
||||
|
||||
# Special Zone
|
||||
shuffled_level_list.append(0x4D)
|
||||
shuffled_level_list.append(single_levels_copy.pop(0))
|
||||
shuffled_level_list.append(single_levels_copy.pop(0))
|
||||
shuffled_level_list.append(single_levels_copy.pop(0))
|
||||
shuffled_level_list.append(single_levels_copy.pop(0))
|
||||
shuffled_level_list.append(single_levels_copy.pop(0))
|
||||
shuffled_level_list.append(single_levels_copy.pop(0))
|
||||
shuffled_level_list.append(single_levels_copy.pop(0))
|
||||
shuffled_level_list.append(single_levels_copy.pop(0))
|
||||
if not world.exclude_special_zone[player]:
|
||||
shuffled_level_list.append(single_levels_copy.pop(0))
|
||||
shuffled_level_list.append(single_levels_copy.pop(0))
|
||||
shuffled_level_list.append(single_levels_copy.pop(0))
|
||||
shuffled_level_list.append(single_levels_copy.pop(0))
|
||||
shuffled_level_list.append(single_levels_copy.pop(0))
|
||||
shuffled_level_list.append(single_levels_copy.pop(0))
|
||||
shuffled_level_list.append(single_levels_copy.pop(0))
|
||||
shuffled_level_list.append(single_levels_copy.pop(0))
|
||||
else:
|
||||
shuffled_level_list.extend(special_zone_levels_copy)
|
||||
shuffled_level_list.append(0x48)
|
||||
|
||||
return shuffled_level_list
|
||||
|
Reference in New Issue
Block a user