From 2a5ceaacd8ba4f84e948697ae6bd95e9e83f5f36 Mon Sep 17 00:00:00 2001 From: aerinon Date: Thu, 17 Aug 2023 13:54:14 -0600 Subject: [PATCH] Several small fixes Added special bitmask table for cross dungeon drops and indicator --- Rom.py | 5 +- data/base2current.bps | Bin 99616 -> 99875 bytes source/dungeon/EnemyList.py | 78 +++++++++++++++++++++++++++--- source/enemizer/enemy_deny.yaml | 17 +++++++ source/enemizer/enemy_weight.yaml | 2 +- source/rom/DataTables.py | 2 + 6 files changed, 95 insertions(+), 9 deletions(-) diff --git a/Rom.py b/Rom.py index e4d8a072..42f0cfa8 100644 --- a/Rom.py +++ b/Rom.py @@ -33,14 +33,14 @@ from InitialSram import InitialSram from source.classes.SFX import randomize_sfx from source.item.FillUtil import valid_pot_items -from source.dungeon.EnemyList import EnemySprite +from source.dungeon.EnemyList import EnemySprite, setup_enemy_dungeon_tables from source.dungeon.RoomObject import DoorObject from source.enemizer.Bossmizer import boss_writes from source.enemizer.Enemizer import write_enemy_shuffle_settings JAP10HASH = '03a63945398191337e896e5771f77173' -RANDOMIZERBASEHASH = '8c20d2bcccfc543a1201ff082e0ebe8e' +RANDOMIZERBASEHASH = '6d43fb7bd4cf5ec2d10d03cf04772240' class JsonRom(object): @@ -1408,6 +1408,7 @@ def patch_rom(world, rom, player, team, is_mystery=False): if world.data_tables[player]: colorize_pots = (world.pottery[player] != 'vanilla', 'lottery' and (world.colorizepots[player] or world.pottery[player] in ['reduced', 'clustered'])) + setup_enemy_dungeon_tables(world, player) world.data_tables[player].write_to_rom(rom, colorize_pots, world.enemy_shuffle[player] == 'random') write_enemizer_tweaks(rom, world, player) diff --git a/data/base2current.bps b/data/base2current.bps index 14f6759aecf7644cc663c740b375fe5fe027a6f9..a51a2d2611bd370763bf73d0c7047bf2ea02c321 100644 GIT binary patch delta 2298 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 256: + raise Exception("256 bytes limit reached on special bitmask table. Please revise") + + def write_special_bitmask_table(self, rom): + pointer = 0 + for super_tile, dungeon_list in self.special_bitmasks.items(): + pointer_index = pointer // 2 + rom.write_byte(snes_to_pc(0x28AF00) + super_tile, pointer_index) + is_even = len(dungeon_list) % 2 == 0 + for dungeon, bitmask in dungeon_list.items(): + dungeon_id = dungeon * 2 + rom.write_bytes(snes_to_pc(0x28B028) + pointer, [dungeon_id] + int16_as_bytes(bitmask)) + pointer += 3 + if is_even: + rom.write_bytes(snes_to_pc(0x28B028) + pointer, [0xFF, 0xFF]) + pointer += 2 + else: + rom.write_byte(snes_to_pc(0x28B028) + pointer, 0xFF) + pointer += 1 + def setup_enemy_locations(world, player): for super_tile, enemy_list in world.data_tables[player].uw_enemy_table.room_map.items(): @@ -2147,11 +2175,49 @@ def setup_enemy_locations(world, player): create_drop_location(sprite, index, super_tile, world, player) +# 1,1,1,1,2,1,2,2,1,2,3,2,2,2,2,2,2,1,2,1(2),1,1,1,1,2 +splittable_supertiles = {0x9, 0x1a, 0x35, 0x36, 0x37, 0x2a, 0x57, 0x74, 0x75, 0x6a, 0x7b, 0x7c, 0x7d, 0x9d, 0x8c, + 0x9b, 0x87, 0x82, 0xa2, 0xb2, 0xb6, 0xa9, 0xaa, 0xbc, 0xdb, 0xd1} +# minimum 159 bytes maybe reserve 256 (0x100) +# tr pipes, mire left/right bridges, eastern cannonball, tr front entrance = have zero enemies so far but are splittable +# 0x14, 0xa2, 0xb9, 0xd6 + +# only a concern once pits are done and cave interiors are shuffled somehow? +# identify by entrance ids, maybe? may need multiple +# e8? - separated hardhats, fa (if fairies (quardants)), fd (if fairies (quadrants almost...) + + +def setup_enemy_dungeon_tables(world, player): + enemy_table = world.data_tables[player].uw_enemy_table + dungeon_map = defaultdict(lambda: defaultdict(list)) + for super_tile, enemy_list in enemy_table.room_map.items(): + if super_tile in splittable_supertiles: + idx_adj = 0 + for index, sprite in enumerate(enemy_list): + loc_name = f'{sprite.region} Enemy #{index+1}' + loc = world.get_location_unsafe(loc_name, player) + if sprite.sub_type == 0x07: # overlord + idx_adj += 1 + continue # overlords can't have locations + if loc: + # possible to-do: caves really aren't supported yet - entrance ids? + dungeon = loc.parent_region.dungeon.dungeon_id if loc.parent_region.dungeon else 0xFF + dungeon_map[super_tile][dungeon].append((loc, index-idx_adj)) + special_bitmasks = defaultdict(lambda: defaultdict(int)) + for super_tile, dungeon_list in dungeon_map.items(): + for dungeon, data_list in dungeon_list.items(): + for loc, index in data_list: + special_bitmasks[super_tile][dungeon] |= (1 << (15 - index)) + enemy_table.special_bitmasks = special_bitmasks + + def valid_drop_location(sprite, index, world, player): if world.dropshuffle[player] == 'underworld': if sprite.drops_item and sprite.drop_item_kind in [0xe4, 0xe5]: # already has a location return False + elif sprite.never_drop: + return False elif sprite.sub_type != SpriteType.Overlord: stat = world.data_tables[player].enemy_stats[sprite.kind] return stat.drop_flag and (not sprite.embedded or sprite.static) # static for the babusu spawners in Ice diff --git a/source/enemizer/enemy_deny.yaml b/source/enemizer/enemy_deny.yaml index 7e07e370..b98a4b98 100644 --- a/source/enemizer/enemy_deny.yaml +++ b/source/enemizer/enemy_deny.yaml @@ -29,8 +29,10 @@ UwGeneralDeny: - [ 0x001e, 5, [ "SparkCW", "SparkCCW", "RollerVerticalDown", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "Bumper" ] ] #"Ice Palace - Blob Ambush - Zol 1" - [ 0x001e, 6, [ "SparkCW", "SparkCCW", "RollerVerticalDown", "RollerVerticalUp", "RollerHorizontalRight", "RollerHorizontalLeft", "Beamos", "AntiFairyCircle", "BigSpike", "Bumper" ] ] #"Ice Palace - Blob Ambush - Zol 2" - [ 0x001f, 0, [ "RollerHorizontalRight" ] ] #"Ice Palace - Big Key View - Pengator 1" + - [ 0x001f, 3, [ "Wizzrobe" ] ] # Wizzrobes can't spawn on pots - [ 0x0021, 3, [ "RollerVerticalDown", "RollerVerticalUp" ] ] #"Sewers - Dark U - Rat 2" - [ 0x0021, 4, [ "RollerVerticalDown", "RollerVerticalUp" ] ] #"Sewers - Dark U - Rat 3" + - [ 0x0024, 6, [ "Wizzrobe" ] ] # Wizzrobes can't spawn on pots - [ 0x0026, 1, [ "SparkCW", "SparkCCW", "RollerVerticalDown", "RollerVerticalUp", "RollerHorizontalRight", "RollerHorizontalLeft", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Swamp Palace - Big Spoon - Red Bari 1" - [ 0x0026, 8, [ "AntiFairyCircle", "Bumper" ] ] #"Swamp Palace - Big Spoon - Red Bari 3" - [ 0x0026, 9, [ "RollerHorizontalRight" ] ] #"Swamp Palace - Big Spoon - Kyameron" @@ -70,6 +72,7 @@ UwGeneralDeny: - [ 0x003d, 13, [ "AntiFairyCircle", "Bumper" ] ] #"Ganon's Tower - Torches 2 - Antifairy" - [ 0x003f, 1, [ "RollerHorizontalLeft", "RollerHorizontalRight", "AntiFairyCircle", "BigSpike", "FirebarCW", "FirebarCCW", "SpikeBlock", "Bumper" ] ] #"Ice Palace - P Room - Stalfos Knight 1" - [ 0x003f, 3, [ "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Ice Palace - P Room - Stalfos Knight 2" + - [ 0x003f, 4, [ "Wizzrobe" ] ] # Wizzrobes can't spawn on pots - [ 0x0040, 0, [ "RollerVerticalUp", "RollerVerticalDown", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] # Agahnims Tower - Bridge - Blue Guard 1 - [ 0x0040, 1, [ "Statue", "RollerVerticalUp", "RollerVerticalDown", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] # Agahnims Tower - Bridge - Blue Guard 2 - [ 0x0041, 0, [ "RollerHorizontalLeft" ] ] #"Sewers - Dark Cactus - Rat 1" @@ -85,6 +88,7 @@ UwGeneralDeny: - [ 0x0044, 6, [ "RollerVerticalUp", "RollerVerticalDown", "Beamos", "BigSpike" ] ] #"Thieves' Town - Joke Room - Red Bari" - [ 0x0044, 8, [ "Statue", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "AntiFairyCircle", "SpikeBlock", "Bumper" ] ] #"Thieves' Town - Joke Room - Blue Bari 4" - [ 0x0045, 1, [ "RollerVerticalUp", "RollerVerticalDown" ] ] #"Thieves' Town - Basement Block Totems - Red Zazak" + - [ 0x0045, 4, [ "Wizzrobe" ] ] # Wizzrobes can't spawn on pots - [ 0x0045, 7, [ "AntiFairyCircle", "Bumper" ] ] #"Thieves' Town - Cells - Blue Zazak 4" - [ 0x0045, 8, [ "RollerHorizontalRight" ] ] #"Thieves' Town - Cells - Zol" - [ 0x0046, 0, [ "RollerVerticalUp", "RollerHorizontalRight", "AntiFairyCircle", "BigSpike", "Bumper" ] ] #"Swamp Palace - Big O Top - Hover 1" @@ -111,6 +115,7 @@ UwGeneralDeny: - [ 0x0053, 5, [ "RollerVerticalDown" ] ] #"Desert Palace - Popo Genocide - Popo TL" - [ 0x0053, 7, [ "Beamos", "AntiFairyCircle", "Bumper" ] ] #"Desert Palace - Bridge - Popo 5" - [ 0x0055, 1, [ "RollerVerticalUp", "RollerHorizontalRight", "AntiFairyCircle", "BigSpike", "Bumper" ] ] #"Secret Passage Exit - Green Knife Guard 1" + - [ 0x0057, 0, [ "Wizzrobe" ] ] # Wizzrobes can't spawn on pots - [ 0x0057, 2, [ "RollerVerticalUp", "AntiFairyCircle", "Bumper" ] ] #"Skull Woods - Big Key Room - Spike Trap" - [ 0x0057, 7, [ "RollerVerticalUp", "RollerVerticalDown" ] ] #"Skull Woods - Big Key Room - Gibdo 2" - [ 0x0057, 12, [ "RollerVerticalUp", "RollerVerticalDown" ] ] #"Skull Woods - Big Key Room - Gibdo 6" @@ -127,6 +132,7 @@ UwGeneralDeny: - [ 0x0060, 0, [ "RollerVerticalUp", "RollerHorizontalLeft", "AntiFairyCircle", "BigSpike", "Bumper" ] ] #"Hyrule Castle - West - Blue Guard" - [ 0x0062, 0, [ "RollerVerticalUp", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Hyrule Castle - East - Blue Guard" - [ 0x0064, 2, [ "Bumper" , "Beamos" ] ] #"Thieves' Town - Attic Hall Left - Keese 2" + - [ 0x0064, 3, [ "Wizzrobe" ] ] # Wizzrobes can't spawn on pots - [ 0x0064, 4, [ "RollerHorizontalLeft", "RollerHorizontalRight" ] ] #"Thieves' Town - Attic Hall Left - Rat 1" - [ 0x0065, 0, [ "RollerVerticalUp", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Thieves' Town - Attic Window - Rat 1" - [ 0x0065, 1, [ "RollerHorizontalLeft", "RollerHorizontalRight" ] ] #"Thieves' Town - Attic Window - Rat 2" @@ -190,6 +196,7 @@ UwGeneralDeny: - [ 0x008d, 9, [ "Statue", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Ganon's Tower - Tile Room - Fire Bar (Clockwise)" - [ 0x008d, 10, [ "RollerVerticalUp", "RollerVerticalDown" ] ] #"Ganon's Tower - Tile Room - Blue Bari 1" - [ 0x008d, 12, [ "RollerVerticalUp", "RollerVerticalDown" ] ] #"Ganon's Tower - Tile Room - Blue Bari 2" + - [ 0x008e, 2, [ "Wizzrobe" ] ] # Wizzrobes can't spawn on pots - [ 0x0092, 8, [ "RollerVerticalUp", "Beamos", "AntiFairyCircle", "Bumper" ] ] #"Misery Mire - Dark Weave - Spike Trap" - [ 0x0092, 9, [ "RollerHorizontalRight" ] ] #"Misery Mire - Dark Weave - Antifairy 3" - [ 0x0092, 10, [ "RollerHorizontalLeft" ] ] #"Misery Mire - Dark Weave - Stalfos" @@ -225,6 +232,7 @@ UwGeneralDeny: - [ 0x009e, 3, [ "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Ice Palace - Fairy Drop - blue - Red Bari 3" - [ 0x00a0, 1, [ "RollerHorizontalLeft", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Misery Mire - Boss Antechamber - Antifairy" - [ 0x00a1, 2, [ "Statue", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Misery Mire - Fish Room - Spark (Clockwise) 2" + - [ 0x00a1, 7, [ "Wizzrobe" ] ] # Wizzrobes can't spawn on pots - [ 0x00a5, 2, [ "BigSpike" ] ] #"GT Wizzrobes 1 - Wizzrobe 3" - [ 0x00a5, 10, [ "RollerHorizontalLeft", "RollerHorizontalRight", "AntiFairyCircle", "BigSpike", "Bumper" ] ] #"Ganon's Tower - Laser Bridge - Red Spear Guard" - [ 0x00a8, 1, [ "RollerVerticalUp", "RollerHorizontalLeft" ] ] #"Eastern Palace - West Wing - Top - Stalfos 2" @@ -237,6 +245,8 @@ UwGeneralDeny: - [ 0x00af, 0, [ "RollerHorizontalRight", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Ice Palace - Ice Clock - Fire Bar (Clockwise)" - [ 0x00b1, 2, [ "RollerVerticalUp", "RollerVerticalDown" ] ] #"Misery Mire - Hourglass - Spike Trap 1" - [ 0x00b1, 3, [ "RollerVerticalUp", "RollerVerticalDown" ] ] #"Misery Mire - Hourglass - Spike Trap 2" + - [ 0x00b2, 1, [ "Wizzrobe" ] ] # Wizzrobes can't spawn on pots + - [ 0x00b2, 3, [ "Wizzrobe" ] ] # Wizzrobes can't spawn on pots - [ 0x00b2, 6, [ "RollerVerticalUp", "RollerHorizontalLeft" ] ] #"Misery Mire - Sluggula Cross - Sluggula TR" - [ 0x00b2, 8, [ "RollerVerticalDown" ] ] #"Misery Mire - Popo Push - Medusa 1" - [ 0x00b2, 9, [ "RollerVerticalUp" ] ] #"Misery Mire - Sluggula Cross - Sluggula BL" @@ -259,12 +269,18 @@ UwGeneralDeny: - [ 0x00bc, 6, [ "AntiFairyCircle", "SpikeBlock", "Bumper" ] ] #"Thieves' Town - Toilet - Stalfos 2" - [ 0x00bc, 7, [ "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Thieves' Town - Toilet - Stalfos 3" - [ 0x00bc, 8, [ "RollerVerticalUp", "RollerVerticalDown" ] ] #"Thieves' Town - Toilet - Stalfos 4" + - [ 0x00bf, 0, [ "Wizzrobe" ] ] # Wizzrobes can't spawn on collision - [ 0x00c1, 3, [ "RollerVerticalUp", "RollerHorizontalLeft" ] ] #"Misery Mire - 4 Rails - Stalfos 1" - [ 0x00c2, 0, [ "RollerHorizontalLeft", "RollerHorizontalRight" ] ] #"Misery Mire - Main Lobby - blue - Fire Snake 1" + - [ 0x00c2, 5, [ "Wizzrobe" ] ] # Wizzrobes can't spawn on pots - [ 0x00c5, 6, [ "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Turtle Rock - Catwalk - Mini Helmasaur" - [ 0x00c5, 7, [ "Statue" ] ] #"Turtle Rock - Catwalk - Laser Eye (Left) 4" + - [ 0x00cb, 0, [ "Wizzrobe" ] ] # Wizzrobes can't spawn on pots - [ 0x00cb, 3, [ "RollerVerticalUp", "RollerVerticalDown", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Thieves' Town - Grand Room NW - Zol 1" - [ 0x00cb, 5, [ "RollerVerticalUp", "RollerVerticalDown", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Thieves' Town - Grand Room NW - Zol 2" + - [ 0x00cb, 11, [ "Wizzrobe" ] ] # Wizzrobes can't spawn on pots + - [ 0x00cc, 8, [ "RollerVerticalUp", "RollerVerticalDown", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #Prevents Pot access (Beamos okay?) + - [ 0x00cc, 12, [ "RollerVerticalUp", "RollerVerticalDown", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #Prevents Pot access (Beamos okay?) - [ 0x00ce, 0, [ "RollerVerticalDown", "RollerVerticalUp", "RollerHorizontalRight", "RollerHorizontalLeft", "AntiFairyCircle", "Antifairy", "BigSpike", "FirebarCCW", "Bumper" ] ] #"Ice Palace - Over Boss - top - Red Bari 1" - [ 0x00ce, 1, [ "RollerVerticalDown", "RollerVerticalUp", "RollerHorizontalRight", "RollerHorizontalLeft", "AntiFairyCircle", "Antifairy", "BigSpike", "FirebarCW", "Bumper" ] ] #"Ice Palace - Over Boss - top - Red Bari 2" - [ 0x00ce, 3, [ "SparkCW", "SparkCCW", "RollerVerticalDown", "RollerVerticalUp", "RollerHorizontalRight", "RollerHorizontalLeft", "Beamos", "AntiFairyCircle", "Antifairy", "BigSpike", "FirebarCW", "FirebarCCW", "SpikeBlock", "Bumper" ] ] #"Ice Palace - Over Boss - top - Statue" @@ -281,6 +297,7 @@ UwGeneralDeny: - [ 0x00d8, 7, [ "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "Bumper" ] ] #"Eastern Palace - Kill Room 2 - Popo RB" - [ 0x00d8, 8, [ "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Eastern Palace - Kill Room 1 - Red Eyegore" - [ 0x00d9, 1, [ "RollerHorizontalRight" ] ] #"Eastern Palace - Dodgeball - Green Eyegore 1" + - [ 0x00db, 0, [ "Wizzrobe" ] ] # Wizzrobes can't spawn on pots - [ 0x00dc, 9, [ "RollerVerticalDown", "RollerHorizontalLeft", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "Bumper" ] ] #"Thieves' Town - Grand Room SE - Fire Snake 2" - [ 0x00df, 0, [ "RollerVerticalDown", "RollerHorizontalRight", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Paradox Cave - Top - Mini Moldorm 1" - [ 0x00df, 1, [ "RollerVerticalDown", "RollerHorizontalRight", "AntiFairyCircle" ] ] #"Paradox Cave - Top - Mini Moldorm 2" diff --git a/source/enemizer/enemy_weight.yaml b/source/enemizer/enemy_weight.yaml index a140e861..58126bf3 100644 --- a/source/enemizer/enemy_weight.yaml +++ b/source/enemizer/enemy_weight.yaml @@ -52,7 +52,7 @@ UW: # Total 94431 Kyameron: 237 # 0.42147% raw:398 3.52212% Landmine: 19 # 5.40077% raw:5100 45.13274% Leever: 154 # 0.65127% raw:615 5.44248% - Lynel: 559 # 0.17897% raw:169 1.49558% + Lynel: 500 # 0.17897% raw:169 1.49558% MiniHelmasaur: 109 # 0.91495% raw:864 7.64602% MiniMoldorm: 109 # 0.91495% raw:864 7.64602% Moblin: 367 # 0.27216% raw:257 2.27434% diff --git a/source/rom/DataTables.py b/source/rom/DataTables.py index 41b1f7ec..c818dfc4 100644 --- a/source/rom/DataTables.py +++ b/source/rom/DataTables.py @@ -82,6 +82,8 @@ class DataTables: if self.uw_enemy_table.size() > 0x2800: raise Exception('Sprite table is too big for current area') self.uw_enemy_table.write_sprite_data_to_rom(rom) + self.uw_enemy_table.check_special_bitmasks_size() + self.uw_enemy_table.write_special_bitmask_table(rom) for area_id, sheet in self.overworld_sprite_sheets.items(): if area_id in [0x80, 0x81]: offset = area_id - 0x80 # 02E575 for special areas?