diff --git a/BaseClasses.py b/BaseClasses.py index 034bcd60..fe0dce2a 100644 --- a/BaseClasses.py +++ b/BaseClasses.py @@ -164,6 +164,7 @@ class World(object): set_player_attr('bigkeyshuffle', 'none') set_player_attr('prizeshuffle', 'none') set_player_attr('showloot', 'never') + set_player_attr('loothud', 'never') set_player_attr('showmap', 'map') set_player_attr('restrict_boss_items', 'none') set_player_attr('bombbag', False) @@ -3156,6 +3157,7 @@ class Spoiler(object): 'bigkeyshuffle': self.world.bigkeyshuffle, 'prizeshuffle': self.world.prizeshuffle, 'showloot': self.world.showloot, + 'loothud': self.world.loothud, 'showmap': self.world.showmap, 'boss_shuffle': self.world.boss_shuffle, 'enemy_shuffle': self.world.enemy_shuffle, @@ -3430,6 +3432,7 @@ class Spoiler(object): outfile.write('Big Key Shuffle:'.ljust(line_width) + '%s\n' % self.metadata['bigkeyshuffle'][player]) outfile.write('Prize Shuffle:'.ljust(line_width) + '%s\n' % self.metadata['prizeshuffle'][player]) outfile.write('Show Value of Checks:'.ljust(line_width) + '%s\n' % self.metadata['showloot'][player]) + outfile.write('Show Value of Checks on HUD:'.ljust(line_width) + '%s\n' % self.metadata['loothud'][player]) outfile.write('Show Map:'.ljust(line_width) + '%s\n' % self.metadata['showmap'][player]) outfile.write('Key Logic Algorithm:'.ljust(line_width) + '%s\n' % self.metadata['key_logic'][player]) outfile.write('\n') diff --git a/CLI.py b/CLI.py index 6b9f416d..8711f649 100644 --- a/CLI.py +++ b/CLI.py @@ -153,31 +153,32 @@ def parse_cli(argv, no_defaults=False): 'crystals_ganon', 'crystals_gt', 'bosses_ganon', 'bosshunt_include_agas', 'ganon_item', 'openpyramid', 'mapshuffle', 'compassshuffle', 'keyshuffle', - 'bigkeyshuffle', 'prizeshuffle', 'showloot', 'showmap', - 'startinventory', 'usestartinventory', 'bombbag', - 'shuffleganon', 'overworld_map', 'restrict_boss_items', - 'triforce_max_difference', 'triforce_pool_min', - 'triforce_pool_max', 'triforce_goal_min', - 'triforce_goal_max', 'triforce_min_difference', - 'triforce_goal', 'triforce_pool', 'shufflelinks', - 'shuffletavern', 'skullwoods', 'linked_drops', - 'pseudoboots', 'mirrorscroll', 'dark_rooms', - 'damage_challenge', 'shuffle_damage_table', - 'crystal_book', 'extra_keys', 'retro', 'accessibility', - 'hints', 'beemizer', 'experimental', 'dungeon_counters', - 'shufflebosses', 'shuffleenemies', 'enemy_health', - 'enemy_damage', 'shufflepots', 'ow_palettes', - 'uw_palettes', 'sprite', 'triforce_gfx', 'disablemusic', - 'quickswap', 'fastmenu', 'heartcolor', 'heartbeep', - 'remote_items', 'shopsanity', 'dropshuffle', 'pottery', - 'keydropshuffle', 'mixed_travel', - 'standardize_palettes', 'code', 'reduce_flashing', - 'shuffle_sfx', 'shuffle_sfxinstruments', - 'shuffle_songinstruments', 'msu_resume', - 'collection_rate', 'colorizepots', 'decoupledoors', - 'door_type_mode', 'bonk_drops', 'trap_door_mode', - 'key_logic_algorithm', 'door_self_loops', - 'any_enemy_logic', 'aga_randomness', 'money_balance']: + 'bigkeyshuffle', 'prizeshuffle', 'showloot', 'loothud', + 'showmap', 'startinventory', 'usestartinventory', + 'bombbag', 'shuffleganon', 'overworld_map', + 'restrict_boss_items', 'triforce_max_difference', + 'triforce_pool_min', 'triforce_pool_max', + 'triforce_goal_min', 'triforce_goal_max', + 'triforce_min_difference', 'triforce_goal', + 'triforce_pool', 'shufflelinks', 'shuffletavern', + 'skullwoods', 'linked_drops', 'pseudoboots', + 'mirrorscroll', 'dark_rooms', 'damage_challenge', + 'shuffle_damage_table', 'crystal_book', 'extra_keys', + 'retro', 'accessibility', 'hints', 'beemizer', + 'experimental', 'dungeon_counters', 'shufflebosses', + 'shuffleenemies', 'enemy_health', 'enemy_damage', + 'shufflepots', 'ow_palettes', 'uw_palettes', 'sprite', + 'triforce_gfx', 'disablemusic', 'quickswap', 'fastmenu', + 'heartcolor', 'heartbeep', 'remote_items', 'shopsanity', + 'dropshuffle', 'pottery', 'keydropshuffle', + 'mixed_travel', 'standardize_palettes', 'code', + 'reduce_flashing', 'shuffle_sfx', + 'shuffle_sfxinstruments', 'shuffle_songinstruments', + 'msu_resume', 'collection_rate', 'colorizepots', + 'decoupledoors', 'door_type_mode', 'bonk_drops', + 'trap_door_mode', 'key_logic_algorithm', + 'door_self_loops', 'any_enemy_logic', 'aga_randomness', + 'money_balance']: value = getattr(defaults, name) if getattr(playerargs, name) is None else getattr(playerargs, name) if player == 1: setattr(ret, name, {1: value}) @@ -274,6 +275,7 @@ def parse_settings(): "bigkeyshuffle": "none", "prizeshuffle": "none", "showloot": "never", + "loothud": "never", "showmap": "map", "keysanity": False, "door_shuffle": "vanilla", diff --git a/Main.py b/Main.py index c7fabc3e..f2c19eff 100644 --- a/Main.py +++ b/Main.py @@ -516,6 +516,7 @@ def init_world(args, fish): world.bigkeyshuffle = args.bigkeyshuffle.copy() world.prizeshuffle = args.prizeshuffle.copy() world.showloot = args.showloot.copy() + world.loothud = args.loothud.copy() world.showmap = args.showmap.copy() world.bombbag = args.bombbag.copy() world.flute_mode = args.flute_mode.copy() @@ -837,6 +838,7 @@ def copy_world(world): ret.bigkeyshuffle = world.bigkeyshuffle.copy() ret.prizeshuffle = world.prizeshuffle.copy() ret.showloot = world.showloot.copy() + ret.loothud = world.loothud.copy() ret.showmap = world.showmap.copy() ret.bombbag = world.bombbag.copy() ret.flute_mode = world.flute_mode.copy() @@ -1070,6 +1072,7 @@ def copy_world_premature(world, player, create_flute_exits=True): ret.bigkeyshuffle = world.bigkeyshuffle.copy() ret.prizeshuffle = world.prizeshuffle.copy() ret.showloot = world.showloot.copy() + ret.loothud = world.loothud.copy() ret.showmap = world.showmap.copy() ret.bombbag = world.bombbag.copy() ret.flute_mode = world.flute_mode.copy() diff --git a/Rom.py b/Rom.py index e52b2aec..39c09788 100644 --- a/Rom.py +++ b/Rom.py @@ -85,7 +85,7 @@ from Utils import int16_as_bytes, int32_as_bytes, local_path, snes_to_pc from Versions import DRVersion, GKVersion, ORVersion JAP10HASH = '03a63945398191337e896e5771f77173' -RANDOMIZERBASEHASH = 'c4ba2f29976344e33ca1b5901b3073bb' +RANDOMIZERBASEHASH = '5fe97f04afd1880f281ec2c27cfabc17' class JsonRom(object): @@ -1516,6 +1516,18 @@ def patch_rom(world, rom, player, team, is_mystery=False, rom_header=None): rom.write_bytes(0x1CFF08, [0x02, 0x00, 0x00, 0x00]) rom.write_byte(0x1CFF11, 0x00) + if world.loothud[player] == 'never': + rom.write_byte(0x1CFF12, 0x00) + elif world.showloot[player] == 'presence': + rom.write_byte(0x1CFF12, 0x01) + rom.write_bytes(0x1CFF0E, [0x01, 0x01]) + elif world.showloot[player] == 'value': + rom.write_byte(0x1CFF12, 0x01) + rom.write_bytes(0x1CFF0E, [0xFF, 0xFF]) + elif world.showloot[player] == 'dungeon_value': + rom.write_byte(0x1CFF12, 0x01) + rom.write_bytes(0x1CFF0E, [0xFF, 0x01]) + if world.showmap[player] == 'visited': rom.write_bytes(0x1CFF00, [0x01, 0x00, 0x00, 0x05]) elif world.showmap[player] == 'map': diff --git a/data/base2current.bps b/data/base2current.bps index 8459f435..710f9438 100644 Binary files a/data/base2current.bps and b/data/base2current.bps differ diff --git a/resources/app/cli/args.json b/resources/app/cli/args.json index ae48628f..d62965e6 100644 --- a/resources/app/cli/args.json +++ b/resources/app/cli/args.json @@ -486,6 +486,14 @@ "always" ] }, + "loothud": { + "choices": [ + "never", + "presence", + "value", + "dungeon_value" + ] + }, "showmap": { "choices": [ "visited",