Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
31 changes: 31 additions & 0 deletions BaseClasses.py
Original file line number Diff line number Diff line change
Expand Up @@ -2975,6 +2975,10 @@ def __init__(self, world):
self.lobbies = {}
self.medallions = {}
self.bottles = {}
self.drops = {}
self.dig_game_digs = {}
self.prize_packs = {}
self.ingame_texts = {}
self.playthrough = {}
self.unreachables = []
self.startinventory = []
Expand Down Expand Up @@ -3554,6 +3558,33 @@ def extras(self, filename):
for idx, sprite in enumerate(sprite_list):
outfile.write(f'{hex(area)} Enemy #{idx + 1}{player_tag}: {str(sprite)}\n')

outfile.write('\n\nDrops:\n\n')
for player in range(1, self.world.players + 1):
player_name = '' if self.world.players == 1 else str(' (' + self.world.get_player_names(player) + ')')
player_drops = self.drops[f'Drops{player_name}']
outfile.write(f'Tree Pull Tier 1{player_name}: {player_drops["PullTree"]["Tier1"]}\n')
outfile.write(f'Tree Pull Tier 2{player_name}: {player_drops["PullTree"]["Tier2"]}\n')
outfile.write(f'Tree Pull Tier 3{player_name}: {player_drops["PullTree"]["Tier3"]}\n')
outfile.write(f'Rupee Crab Main{player_name}: {player_drops["RupeeCrab"]["Main"]}\n')
outfile.write(f'Rupee Crab Final{player_name}: {player_drops["RupeeCrab"]["Final"]}\n')
outfile.write(f'Stun Prize{player_name}: {player_drops["Stun"]}\n')
outfile.write(f'Fish Save Prize{player_name}: {player_drops["FishSave"]}\n')
outfile.write(f'Digging Game Digs{player_name}: {self.dig_game_digs[player_name]}\n')

outfile.write('\n\nPrize Packs:\n\n')
for player in range(1, self.world.players + 1):
player_name = '' if self.world.players == 1 else str(' (' + self.world.get_player_names(player) + ')')
player_prize_packs = self.prize_packs[f'PrizePacks{player_name}']
for enemy_group, prize_pack_info in player_prize_packs.items():
outfile.write(f'{enemy_group}{player_name}: {prize_pack_info["PrizePackName"]}\n'
f'Drop Order{player_name}: {prize_pack_info["DropOrder"]}\n')
outfile.write('\n\nIn-Game Text:\n\n')
for player in range(1, self.world.players + 1):
player_name = '' if self.world.players == 1 else str(' (' + self.world.get_player_names(player) + ')')
player_ingame_text = self.ingame_texts[f'{player_name}']
for game_text_type, game_text_value in player_ingame_text.items():
outfile.write(f'{game_text_type}{player_name}: {game_text_value}\n')

def playthrough_to_file(self, filename):
with open(filename, 'a') as outfile:
# locations: Change up location names; in the instance of a location with multiple sections, it'll try to translate the room name
Expand Down
67 changes: 66 additions & 1 deletion Rom.py
Original file line number Diff line number Diff line change
Expand Up @@ -430,6 +430,21 @@ def handle_native_dungeon(location, itemid):
return 0x25
return itemid

def get_prize_pack_name(prize_pack_set):
if prize_pack_set[0] == "Small Heart": # Heart
if prize_pack_set[1] == "Fairy": # Fairy
return "LargeVarietyPack"
return "HeartsPack"
if prize_pack_set[0] == "Rupees (5)": # RupeeBlue
return "RupeesPack"
if prize_pack_set[0] == "Single Bomb": # BombRefill1
return "BombsPack"
if prize_pack_set[0] == "Small Magic": # MagicRefillSmall
return "SmallVarietyPack"
if prize_pack_set[0] == "Big Magic": # MagicRefillFull
return "MagicPack"
if prize_pack_set[0] == "Arrows (5)": # ArrowRefill5
return "ArrowsPack"

def patch_rom(world, rom, player, team, is_mystery=False, rom_header=None):
random.seed(world.rom_seeds[player])
Expand Down Expand Up @@ -1096,6 +1111,50 @@ def credits_digit(num):
if difficulty.progressive_bow_limit < 2 and world.swords[player] == 'swordless':
rom.write_bytes(0x180098, [2, overflow_replacement])

# store drops for spoiler log
possible_prizes = {
'Small Heart': 0xD8, 'Fairy': 0xE3,
'Rupee (1)': 0xD9, 'Rupees (5)': 0xDA, 'Rupees (20)': 0xDB,
'Big Magic': 0xE0, 'Small Magic': 0xDF,
'Single Bomb': 0xDC, 'Bombs (4)': 0xDD,
'Bombs (8)': 0xDE, 'Arrows (5)': 0xE1, 'Arrows (10)': 0xE2
} #weights, if desired 13, 1, 9, 7, 6, 3, 6, 7, 1, 2, 5, 3
possible_memory_locations_to_prizes = {v: k for k, v in possible_prizes.items()}

# store drops for spoiler log
player_name = '' if world.players == 1 else str(' (' + world.get_player_names(player) + ')')
drops_section = {
f'Drops{player_name}': {
"PullTree": {
"Tier1": possible_memory_locations_to_prizes[world.prizes[player]['pull'][0]],
"Tier2": possible_memory_locations_to_prizes[world.prizes[player]['pull'][1]],
"Tier3": possible_memory_locations_to_prizes[world.prizes[player]['pull'][2]],
},
"RupeeCrab": {
"Main": possible_memory_locations_to_prizes[world.prizes[player]['crab'][0]],
"Final": possible_memory_locations_to_prizes[world.prizes[player]['crab'][1]],
},
"Stun": possible_memory_locations_to_prizes[world.prizes[player]['stun']],
"FishSave": possible_memory_locations_to_prizes[world.prizes[player]['fish']],
}
}
world.spoiler.drops.update(drops_section)

prize_packs_section = {
f'PrizePacks{player_name}': {}
}
prize_pack_values = list(zip(*[iter(world.prizes[player]['enemies'])] * 8))
for group_index, prize_pack_set in enumerate(prize_pack_values, 1):
group_name = f'EnemyGroup{group_index}'
prize_pack_sprites = [possible_memory_locations_to_prizes[prize] for prize in prize_pack_set]
prize_pack_name = get_prize_pack_name(prize_pack_sprites)
drop_order = ', '.join(prize_pack_sprites)
prize_packs_section[f'PrizePacks{player_name}'][group_name] = {
f'PrizePackName': prize_pack_name,
f'DropOrder': drop_order,
}
world.spoiler.prize_packs.update(prize_packs_section)

# set up game internal RNG seed
for i in range(1024):
rom.write_byte(0x178000 + i, random.randint(0, 255))
Expand Down Expand Up @@ -1638,6 +1697,7 @@ def get_reveal_bytes(itemName):
digging_game_rng = random.randint(1, 30) # set rng for digging game
rom.write_byte(0x180020, digging_game_rng)
rom.write_byte(0xEFD95, digging_game_rng)
world.spoiler.dig_game_digs[player_name] = digging_game_rng
glitches_enabled = world.logic[player] in ['owglitches', 'hybridglitches', 'nologic']
rom.write_byte(0x1800A3, 0x01) # enable correct world setting behaviour after agahnim kills
rom.write_byte(0x1800A4, 0x01 if not glitches_enabled else 0x00) # enable POD EG fix
Expand Down Expand Up @@ -2762,7 +2822,12 @@ def missing_prize():

# this is what shows after getting the green pendant item in rando
tt['sahasrahla_quest_have_master_sword'] = Sahasrahla2_texts[random.randint(0, len(Sahasrahla2_texts) - 1)]
tt['blind_by_the_light'] = Blind_texts[random.randint(0, len(Blind_texts) - 1)]
blind_by_the_light_text = Blind_texts[random.randint(0, len(Blind_texts) - 1)]
tt['blind_by_the_light'] = blind_by_the_light_text
player_name = '' if world.players == 1 else str(' (' + world.get_player_names(player) + ')')
world.spoiler.ingame_texts[player_name] = {
'Blind Pun': str(blind_by_the_light_text).replace('\n', ' ')
}

if world.goal[player] in ['triforcehunt']:
tt['ganon_fall_in_alt'] = 'Why are you even here?\n You can\'t even hurt me! Get the Triforce Pieces.'
Expand Down