From 143491172786010ceee4916c6ee8925fea80b21d Mon Sep 17 00:00:00 2001 From: aerinon Date: Fri, 6 Oct 2023 10:47:22 -0600 Subject: [PATCH] Freeze fairy abyss/beam dash enemies Fix original key drops on split supertiles (pokey 1) Fix mystery/customizer boolean issue Enemy bans --- Bosses.py | 2 + Items.py | 4 +- Main.py | 4 +- PotShuffle.py | 2 + RELEASENOTES.md | 5 + Rom.py | 2 +- Rules.py | 2 +- data/base2current.bps | Bin 117445 -> 117471 bytes source/dungeon/EnemyList.py | 14 +- source/enemizer/Bossmizer.py | 27 +- source/enemizer/enemy_deny.yaml | 18 +- source/enemizer/enemy_weight.yaml | 2 +- source/item/FillUtil.py | 2 +- source/tools/MysteryUtils.py | 60 +- test/customizer/enemizer_test.yaml | 2058 ++++++++++++++++++++++++++++ test/customizer/test.yaml | 38 + 16 files changed, 2192 insertions(+), 48 deletions(-) create mode 100644 test/customizer/enemizer_test.yaml create mode 100644 test/customizer/test.yaml diff --git a/Bosses.py b/Bosses.py index 7052bb5c..6373fb5c 100644 --- a/Bosses.py +++ b/Bosses.py @@ -2,6 +2,7 @@ import logging import RaceRandom as random from BaseClasses import Boss, FillError +from source.enemizer.Bossmizer import boss_adjust def BossFactory(boss, player): @@ -238,6 +239,7 @@ def place_bosses(world, player): raise FillError('Could not place boss for location %s' % loc_text) place_boss(boss, level, loc, loc_text, world, player) + boss_adjust(world, player) def place_boss(boss, level, loc, loc_text, world, player): diff --git a/Items.py b/Items.py index 8f239fc7..1bbda012 100644 --- a/Items.py +++ b/Items.py @@ -61,8 +61,8 @@ item_table = {'Bow': (True, False, None, 0x0B, 200, 'You have\nchosen the\narche 'Progressive Glove': (True, False, None, 0x61, 150, 'A way to lift\nheavier things', 'and the lift upgrade', 'body-building kid', 'some glove for sale', 'fungus for gloves', 'body-building boy lifts again', 'a glove'), 'Silver Arrows': (True, False, None, 0x58, 100, 'Do you fancy\nsilver tipped\narrows?', 'and the ganonsbane', 'ganon-killing kid', 'ganon doom for sale', 'fungus for pork', 'archer boy shines again', 'the silver arrows'), 'Green Pendant': (True, False, 'Crystal', [0x04, 0x38, 0x62, 0x00, 0x69, 0x37, 0x08], 999, None, None, None, None, None, None, None), - 'Blue Pendant': (True, False, 'Crystal', [0x02, 0x34, 0x60, 0x00, 0x69, 0x38, 0x09], 999, None, None, None, None, None, None, None), - 'Red Pendant': (True, False, 'Crystal', [0x01, 0x32, 0x60, 0x00, 0x69, 0x39, 0x0a], 999, None, None, None, None, None, None, None), + 'Red Pendant': (True, False, 'Crystal', [0x02, 0x34, 0x60, 0x00, 0x69, 0x38, 0x09], 999, None, None, None, None, None, None, None), + 'Blue Pendant': (True, False, 'Crystal', [0x01, 0x32, 0x60, 0x00, 0x69, 0x39, 0x0a], 999, None, None, None, None, None, None, None), 'Triforce': (True, False, None, 0x6A, 777, '\n YOU WIN!', 'and the triforce', 'victorious kid', 'victory for sale', 'fungus for the win', 'greedy boy wins game again', 'the Triforce'), 'Power Star': (True, False, None, 0x6B, 100, 'A small victory', 'and the power star', 'star-struck kid', 'star for sale', 'see stars with shroom', 'mario powers up again', 'a Power Star'), 'Triforce Piece': (True, False, None, 0x6C, 100, 'A small victory', 'and the thirdforce', 'triangular kid', 'triangle for sale', 'fungus for triangle', 'wise boy has triangle again', 'a Triforce piece'), diff --git a/Main.py b/Main.py index aa543136..3a3a7a42 100644 --- a/Main.py +++ b/Main.py @@ -37,7 +37,7 @@ from source.enemizer.DamageTables import DamageTable from source.enemizer.Enemizer import randomize_enemies from source.rom.DataTables import init_data_tables -version_number = '1.3.0.3' +version_number = '1.3.0.4' version_branch = '-v' __version__ = f'{version_number}{version_branch}' @@ -213,9 +213,9 @@ def main(args, seed=None, fish=None): create_dungeons(world, player) world.damage_table[player] = DamageTable() world.data_tables[player] = init_data_tables(world, player) + place_bosses(world, player) randomize_enemies(world, player) adjust_locations(world, player) - place_bosses(world, player) if world.customizer and world.customizer.get_start_inventory(): for p, inv_list in world.customizer.get_start_inventory().items(): diff --git a/PotShuffle.py b/PotShuffle.py index c1d6bc1c..4ad16554 100644 --- a/PotShuffle.py +++ b/PotShuffle.py @@ -1034,6 +1034,8 @@ key_drop_data = { 'Ganons Tower - Mini Helmasaur Key Drop': ['Drop', (0x09DDC4, 0x3D, 2), "dropped atop Ganon's Tower", 'Small Key (Ganons Tower)'] } +key_drop_special = {(data[1][1], data[1][2]): name for name, data in key_drop_data.items() if data[0] == 'Drop'} + class PotSecretTable(object): def __init__(self): diff --git a/RELEASENOTES.md b/RELEASENOTES.md index b7e0bf7a..b38e23e8 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -141,6 +141,11 @@ These are now independent of retro mode and have three options: None, Random, an # Bug Fixes and Notes +* 1.3.0.4v + * Enemizer: The bunny beam near Lanmo 2 and the 4 fairies near Ice Armos are not shuffled anymore. This is due to how bosses shuffle works and since it cannot be guaranteed to work within the current system, they are vanilla. (Vitreous still overwrites the fairies and Arrghus only lets two spawn, etc.) + * Dropshuffle: Pokey 1 has been fixed to drop his item + * Mystery/Customizer: true/false and on/off in yaml files should behave the same. + * More enemy bans as have been reported * 1.3.0.3v * Faeries now part of the enemy shuffle pool. Take note, this will increase enemy drop locations to include fairy pools both in dungeons and in caves. * Enemy drop indicator (blue square) now works in caves based on entrance used diff --git a/Rom.py b/Rom.py index 15196757..42d39e04 100644 --- a/Rom.py +++ b/Rom.py @@ -40,7 +40,7 @@ from source.enemizer.Enemizer import write_enemy_shuffle_settings JAP10HASH = '03a63945398191337e896e5771f77173' -RANDOMIZERBASEHASH = '8f9863c742096d16cae181fe314be3d7' +RANDOMIZERBASEHASH = '4935e770465a9fa00a1d642a657e43a8' class JsonRom(object): diff --git a/Rules.py b/Rules.py index 1f576316..d5371318 100644 --- a/Rules.py +++ b/Rules.py @@ -1211,7 +1211,7 @@ std_kill_rooms = { 'Eastern Single Eyegore': (['Eastern Single Eyegore NE'], ['Eastern Single Eyegore ES'], 0xd8, [8, 9, 10]), 'Eastern Duo Eyegores': - (['Eastern Duo Eyegores NE'], ['Eastern Duo Eyegores S'], 0xd8, [0, 1, 2, 3, 4, 5, 6, 7]), + (['Eastern Duo Eyegores NE'], ['Eastern Duo Eyegores SE'], 0xd8, [0, 1, 2, 3, 4, 5, 6, 7]), 'Desert Compass Room': # Three popos (beamos) (['Desert Compass NE'], ['Desert Compass Key Door WN'], 0x085, [2, 3, 4, 5]), 'Desert Four Statues': # Four popos (beamos) diff --git a/data/base2current.bps b/data/base2current.bps index 1befcc5427d0a3653117beba996e2add6a951559..e6b5fa48e063f14271fe6b1263392af539b1f791 100644 GIT binary patch delta 1351 zcmWMkdrXse6uq~+3Vm2!QckviabQbxyWO<@%vDqMJmwG z`co>@QHGPsKpQQBP$}}LFY2-^V@m*|$(S+1LMCd|?)&HFo^x`NlbkcCahcG#Tyb#x z`=GSZ=;$!#!+TR@{OHSbz_FWtOAu3yA^y?MuBD3GFY7Qb@I0HfR~Fg4cXO`9`#^Hc(X|T2l=QRRCJ+3{c_U3Dy?FTa`0f7xjb@RXbRZa_kGR?l#0R zPaU9Kip|g~6U($!bsoJEQJFM1r)d@c)mTm=h^8hbwr89S0_$@dk9hR*1+~tE;Zux? zB<(qkQo+6w1abjexe zNj8(6bh;m7B!0eLMECviTSMneyK-;o{b{rX?@VC3|Qb1SZdVyC7OCUl!G%3 zE>0%e-SmqA48j3b72!Mm%T^pQS^I(8-b zQ3f&yfX(pvfD=u+k9Cr`^bbFE*%#S)cAsgrn=t+j(R-#k z)^Kly-OiTjDuC$IY5X82`XpwCk>17jV*7aP^a4A7j$foGQj7|yevoT5m_8lEMYw^! z9>mqI!eygMDXcg8)6gNTKtAmpLLaxiSzXE==rJBUK%WkwY~Av8qq_KoqYb{>n_Ats zH#Lal6%;Ew1iO?fJ1}5ctfX0KO0{^~&7Ku;Vq#wTrI=VYJ6&h9Q|QWJjK@@(H;e(k zX~zZJcs+!qeg@vd$Bu?lB5$_@64srz4r99Knv`yp5d6SWrvVrE0aW_6R62q?a1%W= zg5g0WPCi7L4t577YTtZfSsGfcjy+*zX4z1)Y5-1yE-!@M8o^VNh%gUgIoGrBPOao> zTOGTa%B|?NBVNW$cNX5kA20=GIfv+pJOQ~7U3x?F5lUh1?S(k$Gws(Lr#pTG`u zU(}_W=h-9kyh&|v58Zx-`S8%;vucyqhUy9cb5XXKP~KrNX$r_b-SE{+8r}8)Px6!C KFO4I;_~L(`(JiL{ delta 1347 zcmWMkYfw{X5dAhF3FOffgoIb*DHKFV6;P}q%24o0l{!EvRz;0M#YYt>YQBr22{r<` z#!o;JYb;hGMM*7`M}mnwuB|1^^hc>PK&#VYWrP_zrCRm&{@LBLbI#7$*&R3V`wjf7 zZtndBDQ2s?+nkK&p|QRW;JLxmc10w>e(S;o$sV5PHQ)VJ3&mmA={=D>@RSZ;7!NP4 zTNj$Vz(&s|!~sKxDwo2y)@@3~Dj1=UmS)2f>p*D>4-&114u`qJu=V1xJ3Pofol)MA zQ4Y7$;BPY51!d|Zz`Wz~GuHLqOLC^4i{8Cbv3#G(xL7cCSJi~XlM_2{rW zuRvIHl@gG^BqeTDHOYmO69U&nEhi1a1a2B@BA)OT~3kAqN_w zynmweJe8On2BYyPLdC6JBA4(c=(MP3E(h^v4H~0NtO))1H6PH+%$uZBRd*Hd5dt}40?%Pw>4DYv{pwLrj?{`5Vrf|EG!FF(vsvviDI=R~KG zNfNRF@(nd}c zun{||&0%_Kn)VssQ}c<9JYc{dl;jBm$?q2wcT#G)6k95;G+#FJ^Ww4Y4R>RblT_b+ zk@k}M;+lwVl68i9^+R}ib;r_`)l~@DWhx0KVY?;R7`pd#L*Yyy+4%sD3LYKw`F(V{ H?~nfhtT8S6 diff --git a/source/dungeon/EnemyList.py b/source/dungeon/EnemyList.py index 2a8a2377..7735c635 100644 --- a/source/dungeon/EnemyList.py +++ b/source/dungeon/EnemyList.py @@ -13,6 +13,7 @@ import RaceRandom as random from BaseClasses import Location, LocationType, RegionType from EntranceShuffle import door_addresses from Items import ItemFactory +from PotShuffle import key_drop_special from Utils import snes_to_pc, pc_to_snes, int16_as_bytes @@ -750,10 +751,10 @@ def init_vanilla_sprites(): create_sprite(0x001c, EnemySprite.ArmosKnight, 0x00, 0, 0x07, 0x08) create_sprite(0x001c, EnemySprite.ArmosKnight, 0x00, 0, 0x04, 0x08) create_sprite(0x001c, 0x19, SpriteType.Overlord, 0, 0x07, 0x08) - create_sprite(0x001c, EnemySprite.Faerie, 0x00, 0, 0x07, 0x07, 'GT Fairy Abyss') - create_sprite(0x001c, EnemySprite.Faerie, 0x00, 0, 0x08, 0x07, 'GT Fairy Abyss') - create_sprite(0x001c, EnemySprite.Faerie, 0x00, 0, 0x07, 0x08, 'GT Fairy Abyss') - create_sprite(0x001c, EnemySprite.Faerie, 0x00, 0, 0x08, 0x08, 'GT Fairy Abyss') + create_sprite(0x001c, EnemySprite.Faerie, 0x00, 0, 0x07, 0x07, 'GT Fairy Abyss', fix=True) + create_sprite(0x001c, EnemySprite.Faerie, 0x00, 0, 0x08, 0x07, 'GT Fairy Abyss', fix=True) + create_sprite(0x001c, EnemySprite.Faerie, 0x00, 0, 0x07, 0x08, 'GT Fairy Abyss', fix=True) + create_sprite(0x001c, EnemySprite.Faerie, 0x00, 0, 0x08, 0x08, 'GT Fairy Abyss', fix=True) create_sprite(0x001e, EnemySprite.CrystalSwitch, 0x00, 0, 0x1a, 0x09) create_sprite(0x001e, EnemySprite.RedBari, 0x00, 0, 0x16, 0x05, 'Ice Bomb Drop - Top') create_sprite(0x001e, EnemySprite.RedBari, 0x00, 0, 0x19, 0x05, 'Ice Bomb Drop - Top') @@ -2199,7 +2200,10 @@ def setup_enemy_dungeon_tables(world, player): if super_tile in splittable_supertiles: idx_adj = 0 for index, sprite in enumerate(enemy_list): - loc_name = f'{sprite.region} Enemy #{index+1}' + if (super_tile, index) in key_drop_special: + loc_name = key_drop_special[(super_tile, index)] + else: + 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 diff --git a/source/enemizer/Bossmizer.py b/source/enemizer/Bossmizer.py index 935b11e3..a028c871 100644 --- a/source/enemizer/Bossmizer.py +++ b/source/enemizer/Bossmizer.py @@ -110,7 +110,8 @@ def add_kholdstare_to_list(sprite_list, room_id): def add_vitreous_to_list(sprite_list, room_id): - sprite_list.insert(0, create_sprite(room_id, EnemySprite.Vitreous, 0x00, 0, 0x07, 0x05)) + sprite_list.clear() # vitreous does not play nice which other sprites on the tile, just kill them + sprite_list.append(create_sprite(room_id, EnemySprite.Vitreous, 0x00, 0, 0x07, 0x05)) def add_trinexx_to_list(sprite_list, room_id): @@ -119,14 +120,8 @@ def add_trinexx_to_list(sprite_list, room_id): sprite_list.insert(2, create_sprite(room_id, EnemySprite.TrinexxIceHead, 0x00, 0, 0x07, 0x05)) -def boss_writes(world, player, rom): - rom.write_byte(snes_to_pc(0x368107), 1) # centralize drops - eye_number = random.randint(0, 8) # randomize moldorm eyes (var + 1) - rom.write_byte(snes_to_pc(0x368102), eye_number) # enemizer flag - rom.write_byte(snes_to_pc(0x1DDBB3), eye_number) # loop variable +def boss_adjust(world, player): data_tables = world.data_tables[player] - arrghus_can_swim = True - water_tiles_on = True for dungeon in world.get_dungeons(player): for level, boss in dungeon.bosses.items(): if not boss or boss.name in ['Agahnim', 'Agahnim2']: @@ -143,6 +138,22 @@ def boss_writes(world, player, rom): if len(sprite_list) > 16: del sprite_list[16:] data_tables.room_headers[room_id].sprite_sheet = required_boss_sheets[sprite_type] + + +def boss_writes(world, player, rom): + rom.write_byte(snes_to_pc(0x368107), 1) # centralize drops + eye_number = random.randint(0, 8) # randomize moldorm eyes (var + 1) + rom.write_byte(snes_to_pc(0x368102), eye_number) # enemizer flag + rom.write_byte(snes_to_pc(0x1DDBB3), eye_number) # loop variable + data_tables = world.data_tables[player] + arrghus_can_swim = True + water_tiles_on = True + for dungeon in world.get_dungeons(player): + for level, boss in dungeon.bosses.items(): + if not boss or boss.name in ['Agahnim', 'Agahnim2']: + continue + room_data = get_dungeon_boss_room(dungeon.name, level) + room_id = room_data[0] # room changes if boss.name == 'Arrghus' and (dungeon.name != 'Swamp Palace' or level is not None): rom.write_byte(snes_to_pc(0x0DB6BE), 0) # arrghus can stand on ground diff --git a/source/enemizer/enemy_deny.yaml b/source/enemizer/enemy_deny.yaml index 05bb4e3d..0af02b7c 100644 --- a/source/enemizer/enemy_deny.yaml +++ b/source/enemizer/enemy_deny.yaml @@ -142,6 +142,7 @@ UwGeneralDeny: - [ 0x0065, 2, [ "Beamos", "AntiFairyCircle", "Bumper" ] ] #"Thieves' Town - Attic Window - Rat 3" - [ 0x0066, 0, [ "Beamos", "AntiFairyCircle", "BigSpike", "Bumper" ] ] #"Swamp Palace - Waterfall Room - Hover 1" - [ 0x0067, 1, [ "RollerVerticalUp", "RollerVerticalDown" ] ] #"Skull Woods - Firebar Pits - Blue Bari 1" + - [ 0x0067, 2, ["Bumper"]] #"Skull Woods - Firebar Pits - Blue Bari 2" - [ 0x0067, 3, [ "RollerVerticalUp", "RollerVerticalDown" ] ] #"Skull Woods - Firebar Pits - Hardhat Beetle 1" - [ 0x0067, 5, [ "RollerVerticalDown" ] ] #"Skull Woods - Firebar Pits - Hardhat Beetle 3" - [ 0x0067, 6, [ "RollerVerticalDown" ] ] #"Skull Woods - Firebar Pits - Hardhat Beetle 4" @@ -293,10 +294,13 @@ UwGeneralDeny: - [ 0x00ce, 4, [ "RollerVerticalDown", "RollerVerticalUp", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Beamos", "Bumper", "FirebarCW", "FirebarCCW"]] - [ 0x00ce, 5, [ "RollerVerticalDown", "RollerVerticalUp", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Beamos", "Bumper", "FirebarCW", "FirebarCCW"]] - [ 0x00ce, 6, [ "RollerVerticalDown", "RollerVerticalUp", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Beamos", "Bumper", "FirebarCW", "FirebarCCW"]] + - [ 0x00ce, 7, [ "RollerVerticalDown", "RollerVerticalUp", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Beamos", "Bumper", "FirebarCW", "FirebarCCW"]] - [ 0x00d0, 0, [ "Statue", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] + - [ 0x00d0, 1, [ "AntiFairyCircle", "BigSpike", "Bumper"]] - [ 0x00d0, 4, [ "Statue", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] - [ 0x00d0, 5, [ "Statue", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] - - [ 0x00ce, 7, [ "RollerVerticalDown", "RollerVerticalUp", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Beamos", "Bumper", "FirebarCW", "FirebarCCW"]] + - [ 0x00d0, 6, [ "Statue", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] + - [ 0x00d0, 7, [ "Statue", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper"]] - [ 0x00d0, 9, [ "AntiFairyCircle", "BigSpike", "Bumper"]] - [ 0x00d0, 6, [ "Statue", "RollerVerticalUp", "RollerVerticalDown", "RollerHorizontalLeft", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] # Agahnims Tower - Dark Maze - Blue Guard 2 - [ 0x00d2, 8, [ "RollerVerticalDown", "RollerHorizontalLeft", "Beamos", "AntiFairyCircle", "BigSpike", "SpikeBlock", "Bumper" ] ] #"Misery Mire - Mire 2 - Popo BL" @@ -347,14 +351,18 @@ UwGeneralDeny: - [ 0x0107, 2, ["Beamos", "Bumper", "BigSpike", "AntiFairyCircle"]] OwGeneralDeny: - [0x1e, 3, ["Beamos", "Bumper", "BigSpike", "AntiFairyCircle"]] # forbid a beamos here - - [0x40, 0, ["Beamos", "Bumper", "BigSpike", "AntiFairyCircle"]] - - [0x40, 7, ["Beamos", "Bumper", "BigSpike", "AntiFairyCircle"]] - - [0x40, 13, ["Beamos", "Bumper", "BigSpike", "AntiFairyCircle"]] - - [0x40, 14, ["Beamos", "Bumper", "BigSpike", "AntiFairyCircle"]] + - [0x40, 0, ["Beamos", "Bumper", "BigSpike", "AntiFairyCircle", "Thief"]] + - [0x40, 7, ["Beamos", "Bumper", "BigSpike", "AntiFairyCircle", "Thief"]] + - [0x40, 13, ["Beamos", "Bumper", "BigSpike", "AntiFairyCircle", "Thief"]] + - [0x40, 14, ["Beamos", "Bumper", "BigSpike", "AntiFairyCircle", "Thief"]] - [0x5e, 4, ["RollerVerticalUp", "Gibo"]] # forbid that one roller for kiki pod, and the kiki eating Gibo - [0x5e, 5, ["Gibo"]] # kiki eating Gibo UwEnemyDrop: - [0x0085, 9, ["Babasu"]] # ran off the edge and didn't return + - [0x00cb, 3, ["Zoro"]] # layer issues + - [0x00cb, 5, ["Zoro"]] # layer issues + - [0x00cb, 9, ["Zoro"]] # layer issues + - [0x00cb, 10, ["Zoro"]] # layer issues - [0x00cc, 5, ["Babasu"]] # little hard to see and kill appropriately # the following are behind rails or otherwise unactivate-able - [0x0077, 4, ["StalfosKnight", "Geldman", "Blob", "Stal", "Wizzrobe"]] # can't activate here diff --git a/source/enemizer/enemy_weight.yaml b/source/enemizer/enemy_weight.yaml index 7cef3326..97c011eb 100644 --- a/source/enemizer/enemy_weight.yaml +++ b/source/enemizer/enemy_weight.yaml @@ -53,7 +53,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: 500 # 0.17897% raw:169 1.49558% + Lynel: 400 # 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/item/FillUtil.py b/source/item/FillUtil.py index d5c63551..1a5c5692 100644 --- a/source/item/FillUtil.py +++ b/source/item/FillUtil.py @@ -357,7 +357,7 @@ def determine_major_items(world, player): major_item_set.add('Single Arrow') if world.keyshuffle[player] == 'universal': major_item_set.add('Small Key (Universal)') - if world.goal[player] in {'triforcehunt', 'ganonhunt'}: + if world.goal[player] in {'triforcehunt', 'ganonhunt', 'trinity'}: major_item_set.add('Triforce Piece') if world.bombbag[player]: major_item_set.add('Bomb Upgrade (+10)') diff --git a/source/tools/MysteryUtils.py b/source/tools/MysteryUtils.py index 7016d406..00df02ef 100644 --- a/source/tools/MysteryUtils.py +++ b/source/tools/MysteryUtils.py @@ -33,6 +33,22 @@ def roll_settings(weights): return default return choice + def get_choice_bool(option, root=weights): + choice = get_choice(option, root) + if choice is True or choice == 'on': + return True + if choice is False or choice == 'off': + return False + if choice is None: + return choice + raise Exception("This fields needs to be true/false or off/on") + + def get_choice_bool_default(option, root=weights, default=None): + choice = get_choice_bool(option, root) + if choice is None and default is not None: + return default + return choice + while True: subweights = weights.get('subweights', {}) if len(subweights) == 0: @@ -62,8 +78,8 @@ def roll_settings(weights): dungeon_items = get_choice('dungeon_items') dungeon_items = '' if dungeon_items == 'standard' or dungeon_items is None else dungeon_items dungeon_items = 'mcsb' if dungeon_items == 'full' else dungeon_items - ret.mapshuffle = get_choice('map_shuffle') == 'on' if 'map_shuffle' in weights else 'm' in dungeon_items - ret.compassshuffle = get_choice('compass_shuffle') == 'on' if 'compass_shuffle' in weights else 'c' in dungeon_items + ret.mapshuffle = get_choice_bool('map_shuffle') if 'map_shuffle' in weights else 'm' in dungeon_items + ret.compassshuffle = get_choice_bool('compass_shuffle') if 'compass_shuffle' in weights else 'c' in dungeon_items if 'smallkey_shuffle' in weights: ret.keyshuffle = get_choice('smallkey_shuffle') else: @@ -71,7 +87,7 @@ def roll_settings(weights): ret.keyshuffle = 'wild' if 'u' in dungeon_items: ret.keyshuffle = 'universal' - ret.bigkeyshuffle = get_choice('bigkey_shuffle') == 'on' if 'bigkey_shuffle' in weights else 'b' in dungeon_items + ret.bigkeyshuffle = get_choice_bool('bigkey_shuffle') if 'bigkey_shuffle' in weights else 'b' in dungeon_items ret.accessibility = get_choice('accessibility') ret.restrict_boss_items = get_choice('restrict_boss_items') @@ -86,26 +102,26 @@ def roll_settings(weights): ret.door_type_mode = get_choice('door_type_mode') ret.trap_door_mode = get_choice('trap_door_mode') ret.key_logic_algorithm = get_choice('key_logic_algorithm') - ret.decoupledoors = get_choice('decoupledoors') - ret.door_self_loops = get_choice('door_self_loops') - ret.experimental = get_choice('experimental') - ret.collection_rate = get_choice('collection_rate') + ret.decoupledoors = get_choice_bool('decoupledoors') + ret.door_self_loops = get_choice_bool('door_self_loops') + ret.experimental = get_choice_bool('experimental') + ret.collection_rate = get_choice_bool('collection_rate') ret.dungeon_counters = get_choice('dungeon_counters') if 'dungeon_counters' in weights else 'default' if ret.dungeon_counters == 'default': ret.dungeon_counters = 'pickup' if ret.door_shuffle != 'vanilla' or ret.compassshuffle == 'on' else 'off' - ret.shufflelinks = get_choice('shufflelinks') - ret.shuffletavern = get_choice('shuffletavern') - ret.pseudoboots = get_choice('pseudoboots') - ret.shopsanity = get_choice('shopsanity') - keydropshuffle = get_choice('keydropshuffle') + ret.shufflelinks = get_choice_bool('shufflelinks') + ret.shuffletavern = get_choice_bool('shuffletavern') + ret.pseudoboots = get_choice_bool('pseudoboots') + ret.shopsanity = get_choice_bool('shopsanity') + keydropshuffle = get_choice_bool('keydropshuffle') ret.dropshuffle = get_choice('dropshuffle') if 'dropshuffle' in weights else 'none' ret.dropshuffle = 'keys' if ret.dropshuffle == 'none' and keydropshuffle else ret.dropshuffle ret.pottery = get_choice('pottery') if 'pottery' in weights else 'none' ret.pottery = 'keys' if ret.pottery == 'none' and keydropshuffle else ret.pottery - ret.colorizepots = get_choice_default('colorizepots', default=True) - ret.shufflepots = get_choice('pot_shuffle') + ret.colorizepots = get_choice_bool_default('colorizepots', default=True) + ret.shufflepots = get_choice_bool('pot_shuffle') ret.mixed_travel = get_choice('mixed_travel') if 'mixed_travel' in weights else 'prevent' ret.standardize_palettes = (get_choice('standardize_palettes') if 'standardize_palettes' in weights else 'standardize') @@ -140,12 +156,12 @@ def roll_settings(weights): if ret.mode == 'retro': ret.mode = 'open' ret.retro = True - ret.retro = get_choice('retro') # this overrides world_state if used + ret.retro = get_choice_bool('retro') # this overrides world_state if used ret.take_any = get_choice_default('take_any', default='none') - ret.bombbag = get_choice('bombbag') + ret.bombbag = get_choice_bool('bombbag') - ret.hints = get_choice('hints') + ret.hints = get_choice_bool('hints') swords = get_choice('weapons') if swords is not None: @@ -198,15 +214,15 @@ def roll_settings(weights): if 'rom' in weights: romweights = weights['rom'] ret.sprite = get_choice('sprite', romweights) - ret.disablemusic = get_choice('disablemusic', romweights) - ret.quickswap = get_choice('quickswap', romweights) - ret.reduce_flashing = get_choice('reduce_flashing', romweights) + ret.disablemusic = get_choice_bool('disablemusic', romweights) + ret.quickswap = get_choice_bool('quickswap', romweights) + ret.reduce_flashing = get_choice_bool('reduce_flashing', romweights) ret.fastmenu = get_choice('menuspeed', romweights) ret.heartcolor = get_choice('heartcolor', romweights) ret.heartbeep = get_choice('heartbeep', romweights) ret.ow_palettes = get_choice('ow_palettes', romweights) ret.uw_palettes = get_choice('uw_palettes', romweights) - ret.shuffle_sfx = get_choice('shuffle_sfx', romweights) - ret.msu_resume = get_choice('msu_resume', romweights) + ret.shuffle_sfx = get_choice_bool('shuffle_sfx', romweights) + ret.msu_resume = get_choice_bool('msu_resume', romweights) return ret diff --git a/test/customizer/enemizer_test.yaml b/test/customizer/enemizer_test.yaml new file mode 100644 index 00000000..ce3f6753 --- /dev/null +++ b/test/customizer/enemizer_test.yaml @@ -0,0 +1,2058 @@ +#placements: +# 1: +# Dark Lake Hylia Shop - Left: Blue Potion +meta: + players: 1 +# seed: 140 + seed: 773569045 +settings: + 1: +# boss_shuffle: unique + enemy_shuffle: shuffled +# dropshuffle: underworld +# dungeon_counters: 'on' +# door_shuffle: crossed +# intensity: 3 +enemies: + 1: + Underworld: +# 0x2: +# 0: Wizzrobe +# 1: Wizzrobe +# 2: Wizzrobe +# 3: Wizzrobe +# 4: Wizzrobe +# 14: Wizzrobe +# 15: Wizzrobe + 0x4: + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 9: Wizzrobe + 13: Wizzrobe + 14: Wizzrobe + 15: Wizzrobe + 0x9: + 2: Wizzrobe + 0xa: + 0: Wizzrobe + 1: Wizzrobe + 0xb: + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 7: Wizzrobe + 8: Wizzrobe + 9: Wizzrobe + 0xe: + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 0x11: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 7: Wizzrobe + 0x13: + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 8: Wizzrobe + 9: Wizzrobe + 0x15: + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 7: Wizzrobe + 8: Wizzrobe + 9: Wizzrobe + 0x16: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 0x17: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 7: Wizzrobe + 8: Wizzrobe + 0x19: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 0x1a: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 7: Wizzrobe + 8: Wizzrobe + 9: Wizzrobe + 0x1b: + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 0x1e: + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 0x1f: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 7: Wizzrobe + 0x21: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 7: Wizzrobe + 8: Wizzrobe + 9: Wizzrobe + 10: Wizzrobe + 0x22: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 0x24: + 2: Wizzrobe + 3: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 0x26: + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 8: Wizzrobe + 9: Wizzrobe + 10: Wizzrobe + 11: Wizzrobe + 0x27: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 0x28: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 0x2a: + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 7: Wizzrobe + 0x2b: + 2: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 0x2e: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 0x31: + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 7: Wizzrobe + 8: Wizzrobe + 9: Wizzrobe + 10: Wizzrobe + 11: Wizzrobe + 0x32: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 0x34: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 0x35: + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 7: Wizzrobe + 9: Wizzrobe + 10: Wizzrobe + 0x36: + 1: Wizzrobe + 2: Wizzrobe + 5: Wizzrobe + 7: Wizzrobe + 8: Wizzrobe + 0x37: + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 7: Wizzrobe + 9: Wizzrobe + 0x38: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 0x39: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 0x3a: + 0: Wizzrobe + 1: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 0x3b: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 0x3c: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 0x3d: + 2: Wizzrobe + 3: Wizzrobe + 6: Wizzrobe + 7: Wizzrobe + 9: Wizzrobe + 10: Wizzrobe + 11: Wizzrobe + 12: Wizzrobe + 13: Wizzrobe + 0x3e: + 1: Wizzrobe + 2: Wizzrobe + 8: Wizzrobe + 9: Wizzrobe + 10: Wizzrobe + 11: Wizzrobe + 0x3f: + 1: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 0x40: + 0: Wizzrobe + 1: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 0x41: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 0x42: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 0x43: + 0: Wizzrobe + 0x44: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 8: Wizzrobe + 0x45: + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 7: Wizzrobe + 8: Wizzrobe + 9: Wizzrobe + 10: Wizzrobe +# 0x46: +# 0: Wizzrobe +# 2: Wizzrobe +# 4: Wizzrobe + 0x49: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 7: Wizzrobe + 8: Wizzrobe + 9: Wizzrobe + 10: Wizzrobe + 11: Wizzrobe + 12: Wizzrobe + 0x4a: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 0x4b: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 7: Wizzrobe + 0x4c: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 7: Wizzrobe + 0x4e: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 0x50: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 0x51: + 1: Wizzrobe + 2: Wizzrobe + 0x52: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 0x53: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 7: Wizzrobe + 8: Wizzrobe + 9: Wizzrobe + 10: Wizzrobe + 11: Wizzrobe + 12: Wizzrobe + 0x54: + 0: Wizzrobe + 1: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 7: Wizzrobe + 0x55: + 1: Wizzrobe + 2: Wizzrobe + 0x56: + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 7: Wizzrobe + 8: Wizzrobe + 9: Wizzrobe + 10: Wizzrobe + 11: Wizzrobe + 12: Wizzrobe + 0x57: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 7: Wizzrobe + 8: Wizzrobe + 9: Wizzrobe + 10: Wizzrobe + 11: Wizzrobe + 12: Wizzrobe + 13: Wizzrobe + 14: Wizzrobe + 0x58: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 6: Wizzrobe + 7: Wizzrobe + 8: Wizzrobe + 0x59: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 7: Wizzrobe + 8: Wizzrobe + 9: Wizzrobe + 10: Wizzrobe + 11: Wizzrobe + 0x5b: + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 7: Wizzrobe + 8: Wizzrobe + 0x5d: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 7: Wizzrobe + 8: Wizzrobe + 9: Wizzrobe + 10: Wizzrobe + 11: Wizzrobe + 12: Wizzrobe + 0x5e: + 3: Wizzrobe + 4: Wizzrobe + 0x5f: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 0x60: + 0: Wizzrobe + 0x61: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 0x62: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 0x63: + 1: Wizzrobe +# 0x64: +# 0: Wizzrobe +# 2: Wizzrobe +# 3: Wizzrobe +# 4: Wizzrobe +# 5: Wizzrobe +# 6: Wizzrobe + 0x65: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe +# 0x66: +# 0: Wizzrobe +# 2: Wizzrobe +# 3: Wizzrobe +# 6: Wizzrobe +# 7: Wizzrobe +# 8: Wizzrobe +# 9: Wizzrobe +# 11: Wizzrobe + 0x67: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 7: Wizzrobe + 8: Wizzrobe + 9: Wizzrobe + 0x68: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 7: Wizzrobe + 0x6a: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 0x6b: + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 7: Wizzrobe + 8: Wizzrobe + 9: Wizzrobe + 10: Wizzrobe + 11: Wizzrobe + 12: Wizzrobe + 13: Wizzrobe + 0x6d: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 7: Wizzrobe + 8: Wizzrobe + 0x6e: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 0x71: + 0: Wizzrobe + 1: Wizzrobe + 0x72: + 0: Wizzrobe + 1: Wizzrobe + 0x73: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 0x74: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 7: Wizzrobe + 0x75: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 8: Wizzrobe + 9: Wizzrobe +# 0x76: +# 1: Wizzrobe +# 2: Wizzrobe +# 3: Wizzrobe +# 4: Wizzrobe +# 6: Wizzrobe + 0x77: + 0: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 0x7b: + 0: Wizzrobe + 1: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 6: Wizzrobe + 7: Wizzrobe + 8: Wizzrobe + 0x7c: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 0x7d: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 6: Wizzrobe + 7: Wizzrobe + 8: Wizzrobe + 9: Wizzrobe + 10: Wizzrobe +# 0x7e: +# 0: Wizzrobe +# 1: Wizzrobe +# 2: Wizzrobe +# 5: Wizzrobe +# 6: Wizzrobe + 0x7f: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 7: Wizzrobe + 0x80: + 1: Wizzrobe + 2: Wizzrobe + 0x81: + 0: Wizzrobe + 1: Wizzrobe + 0x82: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 0x83: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 7: Wizzrobe + 8: Wizzrobe + 9: Wizzrobe + 0x84: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 0x85: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 7: Wizzrobe + 8: Wizzrobe + 9: Wizzrobe + 0x87: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 8: Wizzrobe + 9: Wizzrobe + 10: Wizzrobe + 12: Wizzrobe + 0x8b: + 0: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 7: Wizzrobe + 0x8c: + 6: Wizzrobe + 7: Wizzrobe + 8: Wizzrobe + 9: Wizzrobe + 10: Wizzrobe + 11: Wizzrobe + 12: Wizzrobe + 13: Wizzrobe + 14: Wizzrobe + 0x8d: + 2: Wizzrobe + 3: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 7: Wizzrobe + 8: Wizzrobe + 9: Wizzrobe + 10: Wizzrobe + 12: Wizzrobe + 0x8e: + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 7: Wizzrobe + 0x91: + 1: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 0x92: + 2: Wizzrobe + 4: Wizzrobe + 8: Wizzrobe + 9: Wizzrobe + 10: Wizzrobe + 11: Wizzrobe + 0x93: + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 7: Wizzrobe + 0x95: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 0x96: + 0: Wizzrobe + 0x98: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 0x99: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 7: Wizzrobe + 8: Wizzrobe + 9: Wizzrobe + 0x9b: + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 7: Wizzrobe + 8: Wizzrobe + 9: Wizzrobe + 10: Wizzrobe + 11: Wizzrobe + 12: Wizzrobe + 0x9c: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 0x9d: + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 7: Wizzrobe + 8: Wizzrobe +# 0x9e: +# 0: Wizzrobe +# 1: Wizzrobe +# 2: Wizzrobe +# 3: Wizzrobe + 0x9f: + 4: Wizzrobe + 5: Wizzrobe + 0xa0: + 1: Wizzrobe + 2: Wizzrobe + 0xa1: + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 6: Wizzrobe + 7: Wizzrobe + 8: Wizzrobe + 0xa5: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 7: Wizzrobe + 10: Wizzrobe + 11: Wizzrobe + 0xa6: + 1: Wizzrobe + 0xa8: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 0xa9: + 0: Wizzrobe + 1: Wizzrobe + 6: Wizzrobe + 7: Wizzrobe + 0xaa: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 0xab: + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 7: Wizzrobe + 0xae: + 0: Wizzrobe + 1: Wizzrobe + 0xaf: + 0: Wizzrobe + 0xb0: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 7: Wizzrobe + 8: Wizzrobe + 9: Wizzrobe + 10: Wizzrobe + 11: Wizzrobe + 12: Wizzrobe + 0xb1: + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 7: Wizzrobe + 8: Wizzrobe + 9: Wizzrobe + 0xb2: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 7: Wizzrobe + 10: Wizzrobe + 11: Wizzrobe + 12: Wizzrobe + 13: Wizzrobe + 0xb3: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 4: Wizzrobe + 0xb5: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 0xb6: + 0: Wizzrobe + 1: Wizzrobe + 5: Wizzrobe + 7: Wizzrobe + 8: Wizzrobe + 0xb7: + 0: Wizzrobe + 1: Wizzrobe + 0xb8: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 0xba: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 0xbb: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 7: Wizzrobe + 8: Wizzrobe + 9: Wizzrobe + 10: Wizzrobe + 0xbc: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 7: Wizzrobe + 8: Wizzrobe + 9: Wizzrobe + 10: Wizzrobe + 11: Wizzrobe +# 0xbe: +# 0: Wizzrobe +# 2: Wizzrobe +# 3: Wizzrobe +# 4: Wizzrobe +# 5: Wizzrobe +# 6: Wizzrobe + 0xbf: + 1: Wizzrobe + 0xc0: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 7: Wizzrobe + 0xc1: + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 8: Wizzrobe + 10: Wizzrobe + 11: Wizzrobe + 0xc2: + 0: Wizzrobe + 1: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 7: Wizzrobe + 0xc3: + 6: Wizzrobe + 0xc4: + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 7: Wizzrobe + 8: Wizzrobe + 9: Wizzrobe + 0xc5: + 6: Wizzrobe + 0xc6: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 0xc9: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 0xcb: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 7: Wizzrobe + 8: Wizzrobe + 9: Wizzrobe + 10: Wizzrobe + 11: Wizzrobe + 0xcc: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 7: Wizzrobe + 8: Wizzrobe + 9: Wizzrobe + 10: Wizzrobe + 11: Wizzrobe + 12: Wizzrobe + 13: Wizzrobe + 0xce: + 0: Wizzrobe + 1: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 7: Wizzrobe + 0xd0: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 7: Wizzrobe + 8: Wizzrobe + 9: Wizzrobe + 10: Wizzrobe + 0xd1: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 7: Wizzrobe + 0xd2: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 7: Wizzrobe + 8: Wizzrobe + 9: Wizzrobe + 0xd5: + 4: Wizzrobe + 0xd8: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 7: Wizzrobe + 8: Wizzrobe + 9: Wizzrobe + 10: Wizzrobe + 0xd9: + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 0xda: + 0: Wizzrobe + 1: Wizzrobe + 0xdb: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 0xdc: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 7: Wizzrobe + 8: Wizzrobe + 9: Wizzrobe + 10: Wizzrobe + 0xdf: + 0: Wizzrobe + 1: Wizzrobe + 0xe0: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe +# 0xe4: +# 0: Wizzrobe +# 1: Wizzrobe +# 2: Wizzrobe + 0xe5: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 0xe6: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 0xe7: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 0xe8: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 0xee: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 0xef: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe +# 0xf0: +# 0: Wizzrobe +# 1: Wizzrobe +# 2: Wizzrobe +# 3: Wizzrobe +# 4: Wizzrobe +# 5: Wizzrobe +# 6: Wizzrobe +# 7: Wizzrobe +# 9: Wizzrobe + 0xf1: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 7: Wizzrobe + 8: Wizzrobe + 9: Wizzrobe + 0xf9: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 0xfb: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 0xfd: + 0: Wizzrobe + 1: Wizzrobe + 4: Wizzrobe + 0xfe: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 0x107: + 1: Wizzrobe + 2: Wizzrobe + 0x108: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 0x10b: + 6: Wizzrobe + 0x10c: + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 7: Wizzrobe + 0x10d: + 0: Wizzrobe + 1: Wizzrobe +# 0x123: +# 0: Wizzrobe +# 1: Wizzrobe +# 2: Wizzrobe +# 3: Wizzrobe + Overworld: + 0x21b: + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 0x40: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 7: Wizzrobe + 8: Wizzrobe + 9: Wizzrobe + 10: Wizzrobe + 11: Wizzrobe + 12: Wizzrobe + 13: Wizzrobe + 14: Wizzrobe + 15: Wizzrobe + 16: Wizzrobe + 17: Wizzrobe + 18: Wizzrobe + 19: Wizzrobe + 0x42: + 0: Wizzrobe + 1: Wizzrobe + 3: Wizzrobe + 0x45: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 0x4a: + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 7: Wizzrobe + 8: Wizzrobe +# 0x4f: +# 0: Wizzrobe +# 2: Wizzrobe +# 3: Wizzrobe + 0x50: + 0: Wizzrobe + 1: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 0x51: + 0: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 0x52: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 0x53: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 0x54: + 0: Wizzrobe + 3: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 7: Wizzrobe + 0x55: + 1: Wizzrobe + 2: Wizzrobe + 4: Wizzrobe + 6: Wizzrobe + 0x56: + 0: Wizzrobe + 1: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 0x57: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 0x58: + 0: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 7: Wizzrobe + 8: Wizzrobe + 9: Wizzrobe + 10: Wizzrobe + 11: Wizzrobe + 12: Wizzrobe + 13: Wizzrobe + 14: Wizzrobe + 15: Wizzrobe + 0x5a: + 0: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 0x5b: + 0: Wizzrobe + 3: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 7: Wizzrobe + 8: Wizzrobe + 9: Wizzrobe + 10: Wizzrobe + 0x5d: + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 0x5e: + 0: Wizzrobe + 1: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 7: Wizzrobe + 8: Wizzrobe + 9: Wizzrobe + 10: Wizzrobe + 11: Wizzrobe + 12: Wizzrobe + 13: Wizzrobe + 14: Wizzrobe + 15: Wizzrobe + 16: Wizzrobe + 17: Wizzrobe + 19: Wizzrobe + 20: Wizzrobe + 0x62: + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 0x65: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 0x6b: + 1: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 0x6c: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 0x6d: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 0x6e: + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 0x6f: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 0x70: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 7: Wizzrobe + 8: Wizzrobe + 9: Wizzrobe + 10: Wizzrobe + 11: Wizzrobe + 0x72: + 1: Wizzrobe + 2: Wizzrobe + 4: Wizzrobe + 0x73: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 0x74: + 0: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 6: Wizzrobe + 0x75: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 7: Wizzrobe + 8: Wizzrobe + 9: Wizzrobe + 10: Wizzrobe + 11: Wizzrobe + 12: Wizzrobe + 13: Wizzrobe + 14: Wizzrobe + 15: Wizzrobe + 16: Wizzrobe + 17: Wizzrobe + 18: Wizzrobe + 19: Wizzrobe + 20: Wizzrobe + 21: Wizzrobe + 0x77: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 0x7a: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 0x7b: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 0x7c: + 0: Wizzrobe + 1: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 0x7f: + 0: Wizzrobe + 1: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 0x81: + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 7: Wizzrobe + 8: Wizzrobe + 9: Wizzrobe + 10: Wizzrobe + 11: Wizzrobe + 12: Wizzrobe + 14: Wizzrobe + 15: Wizzrobe + 16: Wizzrobe + 17: Wizzrobe + 18: Wizzrobe + 19: Wizzrobe + 20: Wizzrobe + 21: Wizzrobe + 22: Wizzrobe + 23: Wizzrobe + 24: Wizzrobe + 25: Wizzrobe + 26: Wizzrobe + 27: Wizzrobe + 28: Wizzrobe + 0x0: + 0: Wizzrobe + 1: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 7: Wizzrobe + 8: Wizzrobe + 9: Wizzrobe + 12: Wizzrobe + 13: Wizzrobe + 14: Wizzrobe +# 0x2: +# 0: Wizzrobe +# 2: Wizzrobe + 0x3: + 2: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 8: Wizzrobe + 9: Wizzrobe + 10: Wizzrobe + 0x5: + 0: Wizzrobe + 1: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 7: Wizzrobe + 8: Wizzrobe + 9: Wizzrobe + 10: Wizzrobe + 11: Wizzrobe + 12: Wizzrobe + 0x7: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 0xa: + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 7: Wizzrobe + 8: Wizzrobe + 0xf: + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 0x10: + 0: Wizzrobe + 3: Wizzrobe + 0x11: + 0: Wizzrobe + 1: Wizzrobe + 3: Wizzrobe + 0x12: + 0: Wizzrobe + 1: Wizzrobe + 3: Wizzrobe + 0x13: + 1: Wizzrobe + 0x14: + 0: Wizzrobe + 1: Wizzrobe + 0x15: + 1: Wizzrobe + 3: Wizzrobe +# 0x16: +# 0: Wizzrobe +# 2: Wizzrobe + 0x17: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 0x18: + 9: Wizzrobe + 10: Wizzrobe + 0x1a: + 0: Wizzrobe + 1: Wizzrobe + 4: Wizzrobe + 0x1b: + 2: Wizzrobe + 3: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 8: Wizzrobe + 9: Wizzrobe + 10: Wizzrobe + 11: Wizzrobe + 12: Wizzrobe + 13: Wizzrobe + 0x1d: + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 0x1e: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 7: Wizzrobe + 8: Wizzrobe + 9: Wizzrobe + 10: Wizzrobe + 11: Wizzrobe + 12: Wizzrobe + 13: Wizzrobe + 14: Wizzrobe + 15: Wizzrobe + 16: Wizzrobe + 17: Wizzrobe + 18: Wizzrobe + 0x22: + 1: Wizzrobe + 2: Wizzrobe + 0x25: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 7: Wizzrobe + 0x2b: + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 0x2c: + 0: Wizzrobe + 1: Wizzrobe + 0x2d: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 0x2e: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 0x2f: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 0x30: + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 7: Wizzrobe + 8: Wizzrobe + 9: Wizzrobe + 11: Wizzrobe + 12: Wizzrobe + 13: Wizzrobe + 15: Wizzrobe + 16: Wizzrobe + 17: Wizzrobe + 18: Wizzrobe + 19: Wizzrobe + 20: Wizzrobe + 21: Wizzrobe + 22: Wizzrobe + 0x32: + 1: Wizzrobe + 2: Wizzrobe + 0x33: + 0: Wizzrobe + 1: Wizzrobe + 3: Wizzrobe + 0x34: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 0x35: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 7: Wizzrobe + 8: Wizzrobe + 9: Wizzrobe + 10: Wizzrobe + 11: Wizzrobe + 12: Wizzrobe + 13: Wizzrobe + 14: Wizzrobe + 15: Wizzrobe + 16: Wizzrobe + 18: Wizzrobe + 19: Wizzrobe + 20: Wizzrobe + 21: Wizzrobe + 22: Wizzrobe + 0x37: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 0x3a: + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 0x3b: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 7: Wizzrobe + 0x3c: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 0x3f: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 4: Wizzrobe + 0x90: + 0: Wizzrobe + 1: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 6: Wizzrobe + 7: Wizzrobe + 8: Wizzrobe + 9: Wizzrobe + 10: Wizzrobe + 11: Wizzrobe + 13: Wizzrobe + 0x93: + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 7: Wizzrobe + 8: Wizzrobe + 9: Wizzrobe + 10: Wizzrobe + 12: Wizzrobe + 13: Wizzrobe + 14: Wizzrobe + 0x95: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 7: Wizzrobe + 9: Wizzrobe + 10: Wizzrobe + 11: Wizzrobe + 12: Wizzrobe + 13: Wizzrobe + 14: Wizzrobe + 0x97: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 0x9a: + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 0x9f: + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 6: Wizzrobe + 0xa0: + 0: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 0xa1: + 0: Wizzrobe + 1: Wizzrobe + 3: Wizzrobe + 0xa2: + 1: Wizzrobe + 3: Wizzrobe + 0xa3: + 2: Wizzrobe + 3: Wizzrobe + 0xa4: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 0xa5: + 1: Wizzrobe + 3: Wizzrobe +# 0xa6: +# 0: Wizzrobe +# 2: Wizzrobe + 0xa7: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 0xa8: + 0: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 6: Wizzrobe + 7: Wizzrobe + 8: Wizzrobe + 9: Wizzrobe + 10: Wizzrobe + 0xaa: + 0: Wizzrobe + 1: Wizzrobe + 3: Wizzrobe + 0xab: + 0: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 7: Wizzrobe + 8: Wizzrobe + 9: Wizzrobe + 0xad: + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 0xae: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 7: Wizzrobe + 8: Wizzrobe + 9: Wizzrobe + 10: Wizzrobe + 11: Wizzrobe + 12: Wizzrobe + 13: Wizzrobe + 14: Wizzrobe + 15: Wizzrobe + 16: Wizzrobe + 17: Wizzrobe + 19: Wizzrobe + 0xb2: + 1: Wizzrobe + 2: Wizzrobe + 0xb5: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 0xb8: + 0: Wizzrobe + 4: Wizzrobe + 0xb9: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 0xbb: + 0: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 0xbc: + 0: Wizzrobe + 1: Wizzrobe + 0xbd: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 0xbe: + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 0xbf: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 0xc0: + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 7: Wizzrobe + 8: Wizzrobe + 9: Wizzrobe + 10: Wizzrobe + 12: Wizzrobe + 13: Wizzrobe + 14: Wizzrobe + 16: Wizzrobe + 17: Wizzrobe + 18: Wizzrobe + 19: Wizzrobe + 0xc2: + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 5: Wizzrobe + 0xc3: + 0: Wizzrobe + 1: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 0xc4: + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 0xc5: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 7: Wizzrobe + 8: Wizzrobe + 9: Wizzrobe + 10: Wizzrobe + 11: Wizzrobe + 12: Wizzrobe + 13: Wizzrobe + 14: Wizzrobe + 15: Wizzrobe + 16: Wizzrobe + 17: Wizzrobe + 19: Wizzrobe + 20: Wizzrobe + 21: Wizzrobe + 22: Wizzrobe + 0xc7: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 0xca: + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 6: Wizzrobe + 7: Wizzrobe + 0xcb: + 0: Wizzrobe + 1: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 5: Wizzrobe + 0xcc: + 0: Wizzrobe + 1: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe + 4: Wizzrobe + 0xcf: + 0: Wizzrobe + 2: Wizzrobe + 3: Wizzrobe +start_inventory: + 1: + - Lamp + - Progressive Sword + - Ocarina (Activated) + - Hookshot + 2: [] + diff --git a/test/customizer/test.yaml b/test/customizer/test.yaml new file mode 100644 index 00000000..7d6381a7 --- /dev/null +++ b/test/customizer/test.yaml @@ -0,0 +1,38 @@ +meta: + players: 1 + seed: 96 +settings: + 1: +# mode: standard + + boss_shuffle: random + dropshuffle: underworld + enemy_shuffle: shuffled + door_shuffle: crossed + intensity: 3 + + dungeon_counters: 'on' +doors: + 1: + lobbies: + Hyrule Castle South: GT Bob's Room SE +bosses: + 1: + Ganons Tower (bottom): Armos Knights + + +# keyshuffle: wild +#placements: +# 1: +# 'Hera Basement Cage Enemy #4': Small Key (Palace of Darkness) +# 'Hera Basement Cage Enemy #9': Small Key (Tower of Hera) +# 'Hera Basement Cage Enemy #11': Fire Rod +# Tower of Hera - Basement Cage: Small Key (Turtle Rock) +#start_inventory: +# 1: +# - Lamp +# - Progressive Sword +# - Ocarina (Activated) +# - Hookshot + +