2024-03-22 20:35:00 +00:00
|
|
|
import struct
|
|
|
|
from typing import TYPE_CHECKING
|
|
|
|
|
|
|
|
from .Options import YoshiColors, BabySound, LevelShuffle
|
|
|
|
|
|
|
|
if TYPE_CHECKING:
|
|
|
|
from . import YoshisIslandWorld
|
|
|
|
|
|
|
|
|
|
|
|
def setup_gamevars(world: "YoshisIslandWorld") -> None:
|
|
|
|
if world.options.luigi_pieces_in_pool < world.options.luigi_pieces_required:
|
|
|
|
world.options.luigi_pieces_in_pool.value = world.random.randint(world.options.luigi_pieces_required.value, 100)
|
|
|
|
world.starting_lives = struct.pack("H", world.options.starting_lives)
|
|
|
|
|
|
|
|
world.level_colors = []
|
|
|
|
world.color_order = []
|
|
|
|
for i in range(72):
|
|
|
|
world.level_colors.append(world.random.randint(0, 7))
|
|
|
|
if world.options.yoshi_colors == YoshiColors.option_singularity:
|
|
|
|
singularity_color = world.options.yoshi_singularity_color.value
|
|
|
|
for i in range(len(world.level_colors)):
|
|
|
|
world.level_colors[i] = singularity_color
|
|
|
|
elif world.options.yoshi_colors == YoshiColors.option_random_order:
|
|
|
|
world.leader_color = world.random.randint(0, 7)
|
|
|
|
for i in range(7):
|
|
|
|
world.color_order.append(world.random.randint(0, 7))
|
|
|
|
|
|
|
|
bonus_valid = [0x00, 0x02, 0x04, 0x06, 0x08, 0x0A]
|
|
|
|
|
|
|
|
world.world_bonus = []
|
|
|
|
for i in range(12):
|
|
|
|
world.world_bonus.append(world.random.choice(bonus_valid))
|
|
|
|
|
|
|
|
safe_baby_sounds = [0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E,
|
|
|
|
0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A,
|
|
|
|
0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x23, 0x24, 0x25, 0x26, 0x27,
|
|
|
|
0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33,
|
|
|
|
0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F,
|
|
|
|
0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B,
|
|
|
|
0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x52, 0x53, 0x54, 0x55, 0x56,
|
|
|
|
0x57, 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, 0x60, 0x61, 0x62,
|
|
|
|
0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E,
|
|
|
|
0x73, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F,
|
|
|
|
0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B,
|
|
|
|
0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
|
|
|
|
0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F, 0xA0, 0xA1, 0xA2]
|
|
|
|
|
|
|
|
if world.options.baby_mario_sound == BabySound.option_random_sound_effect:
|
|
|
|
world.baby_mario_sfx = world.random.choice(safe_baby_sounds)
|
|
|
|
elif world.options.baby_mario_sound == BabySound.option_disabled:
|
|
|
|
world.baby_mario_sfx = 0x42
|
|
|
|
else:
|
|
|
|
world.baby_mario_sfx = 0x44
|
|
|
|
|
|
|
|
boss_list = ["Burt The Bashful's Boss Room", "Salvo The Slime's Boss Room",
|
|
|
|
"Bigger Boo's Boss Room", "Roger The Ghost's Boss Room",
|
|
|
|
"Prince Froggy's Boss Room", "Naval Piranha's Boss Room",
|
|
|
|
"Marching Milde's Boss Room", "Hookbill The Koopa's Boss Room",
|
|
|
|
"Sluggy The Unshaven's Boss Room", "Raphael The Raven's Boss Room",
|
|
|
|
"Tap-Tap The Red Nose's Boss Room"]
|
|
|
|
|
|
|
|
world.boss_order = []
|
|
|
|
|
|
|
|
if world.options.boss_shuffle:
|
|
|
|
world.random.shuffle(boss_list)
|
|
|
|
world.boss_order = boss_list
|
|
|
|
|
|
|
|
burt_pointers = [0x3D, 0x05, 0x63, 0x00]
|
|
|
|
slime_pointers = [0x70, 0x04, 0x78, 0x00]
|
|
|
|
boo_pointers = [0x74, 0xBB, 0x7A, 0x00]
|
|
|
|
pot_pointers = [0xCF, 0x04, 0x4D, 0x00]
|
|
|
|
frog_pointers = [0xBF, 0x12, 0x62, 0x04]
|
|
|
|
plant_pointers = [0x7F, 0x0D, 0x42, 0x00]
|
|
|
|
milde_pointers = [0x82, 0x06, 0x64, 0x00]
|
|
|
|
koop_pointers = [0x86, 0x0D, 0x78, 0x00]
|
|
|
|
slug_pointers = [0x8A, 0x09, 0x7A, 0x00]
|
|
|
|
raph_pointers = [0xC4, 0x03, 0x4B, 0x05]
|
|
|
|
tap_pointers = [0xCC, 0x49, 0x64, 0x02]
|
|
|
|
|
|
|
|
boss_data_list = [
|
|
|
|
burt_pointers,
|
|
|
|
slime_pointers,
|
|
|
|
boo_pointers,
|
|
|
|
pot_pointers,
|
|
|
|
frog_pointers,
|
|
|
|
plant_pointers,
|
|
|
|
milde_pointers,
|
|
|
|
koop_pointers,
|
|
|
|
slug_pointers,
|
|
|
|
raph_pointers,
|
|
|
|
tap_pointers
|
|
|
|
]
|
|
|
|
|
|
|
|
boss_levels = [0x03, 0x07, 0x0F, 0x13, 0x1B, 0x1F, 0x27, 0x2B, 0x33, 0x37, 0x3F]
|
|
|
|
|
|
|
|
boss_room_idlist = {
|
|
|
|
"Burt The Bashful's Boss Room": 0,
|
|
|
|
"Salvo The Slime's Boss Room": 1,
|
|
|
|
"Bigger Boo's Boss Room": 2,
|
|
|
|
"Roger The Ghost's Boss Room": 3,
|
|
|
|
"Prince Froggy's Boss Room": 4,
|
|
|
|
"Naval Piranha's Boss Room": 5,
|
|
|
|
"Marching Milde's Boss Room": 6,
|
|
|
|
"Hookbill The Koopa's Boss Room": 7,
|
|
|
|
"Sluggy The Unshaven's Boss Room": 8,
|
|
|
|
"Raphael The Raven's Boss Room": 9,
|
|
|
|
"Tap-Tap The Red Nose's Boss Room": 10,
|
|
|
|
}
|
|
|
|
|
|
|
|
boss_check_list = {
|
|
|
|
"Burt The Bashful's Boss Room": "Burt The Bashful Defeated",
|
|
|
|
"Salvo The Slime's Boss Room": "Salvo The Slime Defeated",
|
|
|
|
"Bigger Boo's Boss Room": "Bigger Boo Defeated",
|
|
|
|
"Roger The Ghost's Boss Room": "Roger The Ghost Defeated",
|
|
|
|
"Prince Froggy's Boss Room": "Prince Froggy Defeated",
|
|
|
|
"Naval Piranha's Boss Room": "Naval Piranha Defeated",
|
|
|
|
"Marching Milde's Boss Room": "Marching Milde Defeated",
|
|
|
|
"Hookbill The Koopa's Boss Room": "Hookbill The Koopa Defeated",
|
|
|
|
"Sluggy The Unshaven's Boss Room": "Sluggy The Unshaven Defeated",
|
|
|
|
"Raphael The Raven's Boss Room": "Raphael The Raven Defeated",
|
|
|
|
"Tap-Tap The Red Nose's Boss Room": "Tap-Tap The Red Nose Defeated",
|
|
|
|
}
|
|
|
|
|
|
|
|
world.boss_room_id = [boss_room_idlist[roomnum] for roomnum in world.boss_order]
|
|
|
|
world.tap_tap_room = boss_levels[world.boss_room_id.index(10)]
|
|
|
|
world.boss_ap_loc = [boss_check_list[roomnum] for roomnum in world.boss_order]
|
|
|
|
|
|
|
|
world.boss_burt_data = boss_data_list[world.boss_room_id[0]]
|
|
|
|
|
|
|
|
world.boss_slime_data = boss_data_list[world.boss_room_id[1]]
|
|
|
|
|
|
|
|
world.boss_boo_data = boss_data_list[world.boss_room_id[2]]
|
|
|
|
|
|
|
|
world.boss_pot_data = boss_data_list[world.boss_room_id[3]]
|
|
|
|
|
|
|
|
world.boss_frog_data = boss_data_list[world.boss_room_id[4]]
|
|
|
|
|
|
|
|
world.boss_plant_data = boss_data_list[world.boss_room_id[5]]
|
|
|
|
|
|
|
|
world.boss_milde_data = boss_data_list[world.boss_room_id[6]]
|
|
|
|
|
|
|
|
world.boss_koop_data = boss_data_list[world.boss_room_id[7]]
|
|
|
|
|
|
|
|
world.boss_slug_data = boss_data_list[world.boss_room_id[8]]
|
|
|
|
|
|
|
|
world.boss_raph_data = boss_data_list[world.boss_room_id[9]]
|
|
|
|
|
|
|
|
world.boss_tap_data = boss_data_list[world.boss_room_id[10]]
|
|
|
|
|
|
|
|
world.global_level_list = [0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
|
|
|
|
0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13,
|
|
|
|
0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F,
|
|
|
|
0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B,
|
|
|
|
0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
|
|
|
|
0x3C, 0x3D, 0x3E, 0x3F, 0x40, 0x41, 0x42]
|
|
|
|
level_id_list = {
|
|
|
|
0x00: "1-1",
|
|
|
|
0x01: "1-2",
|
|
|
|
0x02: "1-3",
|
|
|
|
0x03: "1-4",
|
|
|
|
0x04: "1-5",
|
|
|
|
0x05: "1-6",
|
|
|
|
0x06: "1-7",
|
|
|
|
0x07: "1-8",
|
|
|
|
0x0C: "2-1",
|
|
|
|
0x0D: "2-2",
|
|
|
|
0x0E: "2-3",
|
|
|
|
0x0F: "2-4",
|
|
|
|
0x10: "2-5",
|
|
|
|
0x11: "2-6",
|
|
|
|
0x12: "2-7",
|
|
|
|
0x13: "2-8",
|
|
|
|
0x18: "3-1",
|
|
|
|
0x19: "3-2",
|
|
|
|
0x1A: "3-3",
|
|
|
|
0x1B: "3-4",
|
|
|
|
0x1C: "3-5",
|
|
|
|
0x1D: "3-6",
|
|
|
|
0x1E: "3-7",
|
|
|
|
0x1F: "3-8",
|
|
|
|
0x24: "4-1",
|
|
|
|
0x25: "4-2",
|
|
|
|
0x26: "4-3",
|
|
|
|
0x27: "4-4",
|
|
|
|
0x28: "4-5",
|
|
|
|
0x29: "4-6",
|
|
|
|
0x2A: "4-7",
|
|
|
|
0x2B: "4-8",
|
|
|
|
0x30: "5-1",
|
|
|
|
0x31: "5-2",
|
|
|
|
0x32: "5-3",
|
|
|
|
0x33: "5-4",
|
|
|
|
0x34: "5-5",
|
|
|
|
0x35: "5-6",
|
|
|
|
0x36: "5-7",
|
|
|
|
0x37: "5-8",
|
|
|
|
0x3C: "6-1",
|
|
|
|
0x3D: "6-2",
|
|
|
|
0x3E: "6-3",
|
|
|
|
0x3F: "6-4",
|
|
|
|
0x40: "6-5",
|
|
|
|
0x41: "6-6",
|
|
|
|
0x42: "6-7"
|
|
|
|
}
|
|
|
|
|
|
|
|
level_names = {
|
|
|
|
0x00: "Make Eggs, Throw Eggs",
|
|
|
|
0x01: "Watch Out Below!",
|
|
|
|
0x02: "The Cave Of Chomp Rock",
|
|
|
|
0x03: "Burt The Bashful's Fort",
|
|
|
|
0x04: "Hop! Hop! Donut Lifts",
|
|
|
|
0x05: "Shy-Guys On Stilts",
|
|
|
|
0x06: "Touch Fuzzy Get Dizzy",
|
|
|
|
0x07: "Salvo The Slime's Castle",
|
|
|
|
0x0C: "Visit Koopa And Para-Koopa",
|
|
|
|
0x0D: "The Baseball Boys",
|
|
|
|
0x0E: "What's Gusty Taste Like?",
|
|
|
|
0x0F: "Bigger Boo's Fort",
|
|
|
|
0x10: "Watch Out For Lakitu",
|
|
|
|
0x11: "The Cave Of The Mystery Maze",
|
|
|
|
0x12: "Lakitu's Wall",
|
|
|
|
0x13: "The Potted Ghost's Castle",
|
|
|
|
0x18: "Welcome To Monkey World!",
|
|
|
|
0x19: "Jungle Rhythm...",
|
|
|
|
0x1A: "Nep-Enuts' Domain",
|
|
|
|
0x1B: "Prince Froggy's Fort",
|
|
|
|
0x1C: "Jammin' Through The Trees",
|
|
|
|
0x1D: "The Cave Of Harry Hedgehog",
|
|
|
|
0x1E: "Monkeys' Favorite Lake",
|
|
|
|
0x1F: "Naval Piranha's Castle",
|
|
|
|
0x24: "GO! GO! MARIO!!",
|
|
|
|
0x25: "The Cave Of The Lakitus",
|
|
|
|
0x26: "Don't Look Back!",
|
|
|
|
0x27: "Marching Milde's Fort",
|
|
|
|
0x28: "Chomp Rock Zone",
|
|
|
|
0x29: "Lake Shore Paradise",
|
|
|
|
0x2A: "Ride Like The Wind",
|
|
|
|
0x2B: "Hookbill The Koopa's Castle",
|
|
|
|
0x30: "BLIZZARD!!!",
|
|
|
|
0x31: "Ride The Ski Lifts",
|
|
|
|
0x32: "Danger - Icy Conditions Ahead",
|
|
|
|
0x33: "Sluggy The Unshaven's Fort",
|
|
|
|
0x34: "Goonie Rides!",
|
|
|
|
0x35: "Welcome To Cloud World",
|
|
|
|
0x36: "Shifting Platforms Ahead",
|
|
|
|
0x37: "Raphael The Raven's Castle",
|
|
|
|
0x3C: "Scary Skeleton Goonies!",
|
|
|
|
0x3D: "The Cave Of The Bandits",
|
|
|
|
0x3E: "Beware The Spinning Logs",
|
|
|
|
0x3F: "Tap-Tap The Red Nose's Fort",
|
|
|
|
0x40: "The Very Loooooong Cave",
|
|
|
|
0x41: "The Deep, Underground Maze",
|
|
|
|
0x42: "KEEP MOVING!!!!"
|
|
|
|
}
|
|
|
|
|
|
|
|
world_1_offsets = [0x01, 0x00, 0x00, 0x00, 0x00, 0x00]
|
|
|
|
world_2_offsets = [0x01, 0x01, 0x00, 0x00, 0x00, 0x00]
|
|
|
|
world_3_offsets = [0x01, 0x01, 0x01, 0x00, 0x00, 0x00]
|
|
|
|
world_4_offsets = [0x01, 0x01, 0x01, 0x01, 0x00, 0x00]
|
|
|
|
world_5_offsets = [0x01, 0x01, 0x01, 0x01, 0x01, 0x00]
|
|
|
|
easy_start_lv = [0x02, 0x04, 0x06, 0x0E, 0x10, 0x18, 0x1C, 0x28,
|
|
|
|
0x30, 0x31, 0x35, 0x36, 0x3E, 0x40, 0x42]
|
|
|
|
norm_start_lv = [0x00, 0x01, 0x02, 0x04, 0x06, 0x0E, 0x10, 0x12, 0x18, 0x1A,
|
|
|
|
0x1C, 0x1E, 0x28, 0x30, 0x31, 0x34, 0x35, 0x36, 0x3D, 0x3E, 0x40, 0x42]
|
|
|
|
hard_start_lv = [0x00, 0x01, 0x02, 0x04, 0x06, 0x0D, 0x0E, 0x10, 0x11, 0x12, 0x18, 0x1A, 0x1C,
|
|
|
|
0x1E, 0x24, 0x25, 0x26, 0x28, 0x29, 0x30, 0x31, 0x34, 0x35, 0x36, 0x3D, 0x3E,
|
|
|
|
0x40, 0x42]
|
|
|
|
diff_index = [easy_start_lv, norm_start_lv, hard_start_lv]
|
|
|
|
diff_level = diff_index[world.options.stage_logic.value]
|
|
|
|
boss_lv = [0x03, 0x07, 0x0F, 0x13, 0x1B, 0x1F, 0x27, 0x2B, 0x33, 0x37, 0x3F]
|
|
|
|
world.world_start_lv = [0, 8, 16, 24, 32, 40]
|
|
|
|
if not world.options.shuffle_midrings:
|
|
|
|
easy_start_lv.extend([0x1A, 0x24, 0x34])
|
|
|
|
norm_start_lv.extend([0x24, 0x3C])
|
|
|
|
hard_start_lv.extend([0x1D, 0x3C])
|
|
|
|
|
2024-04-18 16:40:00 +00:00
|
|
|
if world.options.level_shuffle != LevelShuffle.option_bosses_guaranteed:
|
2024-03-22 20:35:00 +00:00
|
|
|
hard_start_lv.extend([0x07, 0x1B, 0x1F, 0x2B, 0x33, 0x37])
|
|
|
|
if not world.options.shuffle_midrings:
|
|
|
|
easy_start_lv.extend([0x1B])
|
|
|
|
norm_start_lv.extend([0x1B, 0x2B, 0x37])
|
|
|
|
|
|
|
|
starting_level = world.random.choice(diff_level)
|
|
|
|
|
|
|
|
starting_level_entrance = world.world_start_lv[world.options.starting_world.value]
|
|
|
|
if world.options.level_shuffle:
|
|
|
|
world.global_level_list.remove(starting_level)
|
|
|
|
world.random.shuffle(world.global_level_list)
|
2024-04-18 16:40:00 +00:00
|
|
|
if world.options.level_shuffle == LevelShuffle.option_bosses_guaranteed:
|
2024-03-22 20:35:00 +00:00
|
|
|
for i in range(11):
|
|
|
|
world.global_level_list = [item for item in world.global_level_list
|
|
|
|
if item not in boss_lv]
|
|
|
|
world.random.shuffle(boss_lv)
|
|
|
|
|
|
|
|
world.global_level_list.insert(3 - world_1_offsets[world.options.starting_world.value], boss_lv[0]) # 1 if starting world is 1, 0 otherwise
|
|
|
|
world.global_level_list.insert(7 - world_1_offsets[world.options.starting_world.value], boss_lv[1])
|
|
|
|
world.global_level_list.insert(11 - world_2_offsets[world.options.starting_world.value], boss_lv[2])
|
|
|
|
world.global_level_list.insert(15 - world_2_offsets[world.options.starting_world.value], boss_lv[3])
|
|
|
|
world.global_level_list.insert(19 - world_3_offsets[world.options.starting_world.value], boss_lv[4])
|
|
|
|
world.global_level_list.insert(23 - world_3_offsets[world.options.starting_world.value], boss_lv[5])
|
|
|
|
world.global_level_list.insert(27 - world_4_offsets[world.options.starting_world.value], boss_lv[6])
|
|
|
|
world.global_level_list.insert(31 - world_4_offsets[world.options.starting_world.value], boss_lv[7])
|
|
|
|
world.global_level_list.insert(35 - world_5_offsets[world.options.starting_world.value], boss_lv[8])
|
|
|
|
world.global_level_list.insert(39 - world_5_offsets[world.options.starting_world.value], boss_lv[9])
|
|
|
|
world.global_level_list.insert(43 - 1, boss_lv[10])
|
|
|
|
world.global_level_list.insert(starting_level_entrance, starting_level)
|
|
|
|
world.level_location_list = [level_id_list[LevelID] for LevelID in world.global_level_list]
|
|
|
|
world.level_name_list = [level_names[LevelID] for LevelID in world.global_level_list]
|
|
|
|
|
|
|
|
level_panel_dict = {
|
|
|
|
0x00: [0x04, 0x04, 0x53],
|
|
|
|
0x01: [0x20, 0x04, 0x53],
|
|
|
|
0x02: [0x3C, 0x04, 0x53],
|
|
|
|
0x03: [0x58, 0x04, 0x53],
|
|
|
|
0x04: [0x74, 0x04, 0x53],
|
|
|
|
0x05: [0x90, 0x04, 0x53],
|
|
|
|
0x06: [0xAC, 0x04, 0x53],
|
|
|
|
0x07: [0xC8, 0x04, 0x53],
|
|
|
|
0x0C: [0x04, 0x24, 0x53],
|
|
|
|
0x0D: [0x20, 0x24, 0x53],
|
|
|
|
0x0E: [0x3C, 0x24, 0x53],
|
|
|
|
0x0F: [0x58, 0x24, 0x53],
|
|
|
|
0x10: [0x74, 0x24, 0x53],
|
|
|
|
0x11: [0x90, 0x24, 0x53],
|
|
|
|
0x12: [0xAC, 0x24, 0x53],
|
|
|
|
0x13: [0xC8, 0x24, 0x53],
|
|
|
|
0x18: [0x04, 0x44, 0x53],
|
|
|
|
0x19: [0x20, 0x44, 0x53],
|
|
|
|
0x1A: [0x3C, 0x44, 0x53],
|
|
|
|
0x1B: [0x58, 0x44, 0x53],
|
|
|
|
0x1C: [0x74, 0x44, 0x53],
|
|
|
|
0x1D: [0x90, 0x44, 0x53],
|
|
|
|
0x1E: [0xAC, 0x44, 0x53],
|
|
|
|
0x1F: [0xC8, 0x44, 0x53],
|
|
|
|
0x24: [0x04, 0x64, 0x53],
|
|
|
|
0x25: [0x20, 0x64, 0x53],
|
|
|
|
0x26: [0x3C, 0x64, 0x53],
|
|
|
|
0x27: [0x58, 0x64, 0x53],
|
|
|
|
0x28: [0x74, 0x64, 0x53],
|
|
|
|
0x29: [0x90, 0x64, 0x53],
|
|
|
|
0x2A: [0xAC, 0x64, 0x53],
|
|
|
|
0x2B: [0xC8, 0x64, 0x53],
|
|
|
|
0x30: [0x04, 0x04, 0x53],
|
|
|
|
0x31: [0x20, 0x04, 0x53],
|
|
|
|
0x32: [0x3C, 0x04, 0x53],
|
|
|
|
0x33: [0x58, 0x04, 0x53],
|
|
|
|
0x34: [0x74, 0x04, 0x53],
|
|
|
|
0x35: [0x90, 0x04, 0x53],
|
|
|
|
0x36: [0xAC, 0x04, 0x53],
|
|
|
|
0x37: [0xC8, 0x04, 0x53],
|
|
|
|
0x3C: [0x04, 0x24, 0x53],
|
|
|
|
0x3D: [0x20, 0x24, 0x53],
|
|
|
|
0x3E: [0x3C, 0x24, 0x53],
|
|
|
|
0x3F: [0x58, 0x24, 0x53],
|
|
|
|
0x40: [0x74, 0x24, 0x53],
|
|
|
|
0x41: [0x90, 0x24, 0x53],
|
|
|
|
0x42: [0xAC, 0x24, 0x53],
|
|
|
|
}
|
|
|
|
panel_palette_1 = [0x00, 0x03, 0x04, 0x05, 0x0C, 0x10, 0x12, 0x13, 0x19, 0x1A, 0x1B, 0x1C, 0x1D,
|
|
|
|
0x24, 0x26, 0x27, 0x29, 0x2A, 0x2B, 0x30, 0x32, 0x34,
|
|
|
|
0x35, 0x37, 0x3C, 0x3D, 0x40, 0x41] # 000C
|
|
|
|
panel_palette_2 = [0x01, 0x02, 0x06, 0x07, 0x0D, 0x0E, 0x0F, 0x11, 0x18, 0x1E, 0x1F, 0x25, 0x28,
|
|
|
|
0x31, 0x33, 0x36, 0x3E, 0x3F, 0x42] # 0010
|
|
|
|
|
|
|
|
stage_number = 0
|
|
|
|
world_number = 1
|
|
|
|
for i in range(47):
|
|
|
|
stage_number += 1
|
|
|
|
if stage_number >= 9:
|
|
|
|
world_number += 1
|
|
|
|
stage_number = 1
|
|
|
|
for _ in range(3):
|
|
|
|
setattr(world, f"Stage{world_number}{stage_number}StageGFX",
|
|
|
|
level_panel_dict[world.global_level_list[i]])
|
|
|
|
|
|
|
|
world.level_gfx_table = []
|
|
|
|
world.palette_panel_list = []
|
|
|
|
|
|
|
|
for i in range(47):
|
|
|
|
if world.global_level_list[i] >= 0x30:
|
|
|
|
world.level_gfx_table.append(0x15)
|
|
|
|
else:
|
|
|
|
world.level_gfx_table.append(0x11)
|
|
|
|
|
|
|
|
if world.global_level_list[i] in panel_palette_1:
|
|
|
|
world.palette_panel_list.extend([0x00, 0x0C])
|
|
|
|
elif world.global_level_list[i] in panel_palette_2:
|
|
|
|
world.palette_panel_list.extend([0x00, 0x10])
|
|
|
|
|
|
|
|
world.palette_panel_list[16:16] = [0x00, 0x0c, 0x00, 0x0c, 0x00, 0x18, 0x00, 0x18]
|
|
|
|
world.palette_panel_list[40:40] = [0x00, 0x0c, 0x00, 0x0c, 0x00, 0x18, 0x00, 0x18]
|
|
|
|
world.palette_panel_list[64:64] = [0x00, 0x0c, 0x00, 0x0c, 0x00, 0x18, 0x00, 0x18]
|
|
|
|
world.palette_panel_list[88:88] = [0x00, 0x0c, 0x00, 0x0c, 0x00, 0x18, 0x00, 0x18]
|
|
|
|
world.palette_panel_list[112:112] = [0x00, 0x0c, 0x00, 0x0c, 0x00, 0x18, 0x00, 0x18]
|
|
|
|
|
|
|
|
world.level_gfx_table.insert(8, 0x15)
|
|
|
|
world.level_gfx_table.insert(8, 0x15)
|
|
|
|
world.level_gfx_table.insert(8, 0x15)
|
|
|
|
world.level_gfx_table.insert(8, 0x11)
|
|
|
|
|
|
|
|
world.level_gfx_table.insert(20, 0x15)
|
|
|
|
world.level_gfx_table.insert(20, 0x15)
|
|
|
|
world.level_gfx_table.insert(20, 0x15)
|
|
|
|
world.level_gfx_table.insert(20, 0x11)
|
|
|
|
|
|
|
|
world.level_gfx_table.insert(32, 0x15)
|
|
|
|
world.level_gfx_table.insert(32, 0x15)
|
|
|
|
world.level_gfx_table.insert(32, 0x15)
|
|
|
|
world.level_gfx_table.insert(32, 0x11)
|
|
|
|
|
|
|
|
world.level_gfx_table.insert(44, 0x15)
|
|
|
|
world.level_gfx_table.insert(44, 0x15)
|
|
|
|
world.level_gfx_table.insert(44, 0x15)
|
|
|
|
world.level_gfx_table.insert(44, 0x11)
|
|
|
|
|
|
|
|
world.level_gfx_table.insert(56, 0x15)
|
|
|
|
world.level_gfx_table.insert(56, 0x15)
|
|
|
|
world.level_gfx_table.insert(56, 0x15)
|
|
|
|
world.level_gfx_table.insert(56, 0x15)
|
|
|
|
|
|
|
|
castle_door_dict = {
|
|
|
|
0: [0xB8, 0x05, 0x77, 0x00],
|
|
|
|
1: [0xB8, 0x05, 0x77, 0x00],
|
|
|
|
2: [0xC6, 0x07, 0x7A, 0x00],
|
|
|
|
3: [0xCD, 0x05, 0x5B, 0x00],
|
|
|
|
4: [0xD3, 0x00, 0x77, 0x06],
|
|
|
|
5: [0xB8, 0x05, 0x77, 0x00],
|
|
|
|
}
|
|
|
|
|
|
|
|
world.castle_door = castle_door_dict[world.options.bowser_door_mode.value]
|
|
|
|
|
|
|
|
world.world_1_stages = world.global_level_list[0:8]
|
|
|
|
world.world_2_stages = world.global_level_list[8:16]
|
|
|
|
world.world_3_stages = world.global_level_list[16:24]
|
|
|
|
world.world_4_stages = world.global_level_list[24:32]
|
|
|
|
world.world_5_stages = world.global_level_list[32:40]
|
|
|
|
world.world_6_stages = world.global_level_list[40:47]
|
|
|
|
|
|
|
|
world.world_1_stages.extend([0x08, 0x09])
|
|
|
|
world.world_2_stages.extend([0x14, 0x15])
|
|
|
|
world.world_3_stages.extend([0x20, 0x21])
|
|
|
|
world.world_4_stages.extend([0x2C, 0x2D])
|
|
|
|
world.world_5_stages.extend([0x38, 0x39])
|
|
|
|
world.world_6_stages.extend([0x43, 0x44, 0x45])
|
|
|
|
|
|
|
|
bowser_text_table = {
|
|
|
|
0: [0xDE, 0xEE, 0xDC, 0xDC, 0xE5], # Gween
|
|
|
|
1: [0xE7, 0xE0, 0xE5, 0xE2, 0xD0], # Pink
|
|
|
|
3: [0xEB, 0xDF, 0xF0, 0xD8, 0xE5], # Thyan
|
|
|
|
2: [0xF0, 0xDC, 0xEE, 0xEE, 0xE6], # Yewow
|
|
|
|
4: [0xE7, 0xEC, 0xDF, 0xE7, 0xE3], # puhpl
|
|
|
|
5: [0xD9, 0xEE, 0xE6, 0xEE, 0xE5], # Bwown
|
|
|
|
6: [0xEE, 0xDC, 0xDB, 0xD0, 0xD0], # Wed
|
|
|
|
7: [0xD9, 0xEE, 0xEC, 0xDC, 0xD0], # Bwue
|
|
|
|
}
|
|
|
|
|
|
|
|
if world.options.yoshi_colors == YoshiColors.option_random_order:
|
|
|
|
world.bowser_text = bowser_text_table[world.leader_color]
|
|
|
|
else:
|
|
|
|
world.bowser_text = bowser_text_table[world.level_colors[67]]
|