From 57da9efcb1109855a616b454466292b578f7a722 Mon Sep 17 00:00:00 2001 From: aerinon Date: Wed, 9 Aug 2023 12:06:20 -0600 Subject: [PATCH] Mimic work --- Rom.py | 2 +- data/base2current.bps | Bin 99600 -> 99601 bytes source/dungeon/EnemyList.py | 14 +++++++++++--- source/enemizer/Enemizer.py | 3 +++ source/enemizer/SpriteSheets.py | 2 ++ source/enemizer/damage_table.yaml | 2 ++ source/enemizer/enemy_weight.yaml | 4 ++++ source/enemizer/sheet_weight.yaml | 4 ++-- 8 files changed, 25 insertions(+), 6 deletions(-) diff --git a/Rom.py b/Rom.py index 18525b17..c0ead0f0 100644 --- a/Rom.py +++ b/Rom.py @@ -40,7 +40,7 @@ from source.enemizer.Enemizer import write_enemy_shuffle_settings JAP10HASH = '03a63945398191337e896e5771f77173' -RANDOMIZERBASEHASH = 'e5f3f7dd5be54dce0f490529803dafc3' +RANDOMIZERBASEHASH = '465f19132309a103df2f2d802e863dd0' class JsonRom(object): diff --git a/data/base2current.bps b/data/base2current.bps index 68ef7ec152976c133366d9a2f3224aee564b54cc..188882a8554a4430a8b24129087779ded6714278 100644 GIT binary patch delta 70 zcmV-M0J;B=iUyI22C!lQ1g}O=xr1f_w`KtWe{~<96as>s4aXj9uLXfNmS-;6q3`en c$?(tu7;B?GI_9?ncL4uLXfNmUFA2@9+f4 b@X!JnYolU4>9+)T0R;{SuyYk!Qez#z*$o^c diff --git a/source/dungeon/EnemyList.py b/source/dungeon/EnemyList.py index 28143dfd..f15308c5 100644 --- a/source/dungeon/EnemyList.py +++ b/source/dungeon/EnemyList.py @@ -268,6 +268,8 @@ class EnemySprite(FastEnum): HeartPiece = 0xeb SomariaPlatform = 0xed CastleMantle = 0xee + GreenMimic = 0xef + RedMimic = 0xf0 MedallionTablet = 0xf2 PositionTarget = 0xf3 Boulders = 0xf4 @@ -387,7 +389,7 @@ def init_enemy_stats(): EnemySprite.CannonTrooper: EnemyStats(EnemySprite.CannonTrooper, False, True, 1, health=3, dmg=1), EnemySprite.CricketRat: EnemyStats(EnemySprite.CricketRat, False, True, 2, health=(2, 8), dmg=(0, 5)), EnemySprite.Snake: EnemyStats(EnemySprite.Snake, False, True, (1, 7), health=(4, 8), dmg=(1, 5)), - EnemySprite.Keese: EnemyStats(EnemySprite.Keese, False, True, (0, 7), health=(1, 4), ignore=True, + EnemySprite.Keese: EnemyStats(EnemySprite.Keese, False, False, (0, 7), health=(1, 4), ignore=True, dmg=(0, 5), dmask=0x80), # skip helmafireball for damage @@ -495,6 +497,8 @@ def init_enemy_stats(): EnemySprite.MagicShopAssistant: EnemyStats(EnemySprite.MagicShopAssistant, True, ignore=True, dmg=0), EnemySprite.HeartPiece: EnemyStats(EnemySprite.HeartPiece, True, ignore=True, dmg=0), EnemySprite.CastleMantle: EnemyStats(EnemySprite.CastleMantle, True, dmg=0), + EnemySprite.GreenMimic: EnemyStats(EnemySprite.GreenMimic, False, True, 5, health=16, dmg=4), + EnemySprite.RedMimic: EnemyStats(EnemySprite.RedMimic, False, True, 5, health=8, dmg=4), } return stats @@ -2346,8 +2350,8 @@ enemy_names = { 0x80: 'Firesnake', 0x81: 'Hover', 0x82: 'AntiFairyCircle', - 0x83: 'GreenEyegoreMimic', - 0x84: 'RedEyegoreMimic', + 0x83: 'GreenEyegore', + 0x84: 'RedEyegore', 0x85: 'YellowStalfos', # falling stalfos that shoots head 0x86: 'Kodongo', 0x88: 'Mothula', @@ -2444,6 +2448,8 @@ enemy_names = { 0xeb: 'HeartPiece', 0xed: 'SomariaPlatform', 0xee: 'CastleMantle', + 0xef: 'GreenMimic', + 0xf0: 'RedMimic', 0xf2: 'MedallionTablet', 0xf3: 'PositionTarget', 0xf4: 'Boulders' @@ -2513,6 +2519,7 @@ sprite_translation = { 'GreenEyegoreMimic': EnemySprite.GreenEyegoreMimic, 'GreenGuard': EnemySprite.GreenGuard, 'GreenKnifeGuard': EnemySprite.GreenKnifeGuard, + 'GreenMimic': EnemySprite.GreenMimic, 'GreenZirro': EnemySprite.GreenZirro, 'HardhatBeetle': EnemySprite.HardhatBeetle, 'Hinox': EnemySprite.Hinox, @@ -2542,6 +2549,7 @@ sprite_translation = { 'RedBushGuard': EnemySprite.RedBushGuard, 'RedEyegoreMimic': EnemySprite.RedEyegoreMimic, 'RedJavelinGuard': EnemySprite.RedJavelinGuard, + 'RedMimic': EnemySprite.RedMimic, 'RedSpearGuard': EnemySprite.RedSpearGuard, 'RedZazak': EnemySprite.RedZazak, 'Ropa': EnemySprite.Ropa, diff --git a/source/enemizer/Enemizer.py b/source/enemizer/Enemizer.py index f14893ec..9181add5 100644 --- a/source/enemizer/Enemizer.py +++ b/source/enemizer/Enemizer.py @@ -463,6 +463,9 @@ def write_enemy_shuffle_settings(world, player, rom): if world.dropshuffle[player] in ['underworld']: rom.write_byte(snes_to_pc(0x368109), 0x01) if world.enemy_shuffle[player] != 'none': + # enable new mimics + rom.write_byte(snes_to_pc(0x368105), 0x01) + # killable thief rom.write_byte(snes_to_pc(0x368108), 0xc4) rom.write_byte(snes_to_pc(0x0DB237), 4) # health value: # todo: thief health value diff --git a/source/enemizer/SpriteSheets.py b/source/enemizer/SpriteSheets.py index b132dddd..717a51bf 100644 --- a/source/enemizer/SpriteSheets.py +++ b/source/enemizer/SpriteSheets.py @@ -360,6 +360,8 @@ def init_sprite_requirements(): SpriteRequirement(EnemySprite.MagicShopAssistant).affix().sub_group(0, 0x4b).sub_group(3, 0x5a), SpriteRequirement(EnemySprite.SomariaPlatform).affix().sub_group(2, 0x27), SpriteRequirement(EnemySprite.CastleMantle).affix().sub_group(0, 0x5d), + SpriteRequirement(EnemySprite.GreenMimic).sub_group(1, 0x2c), + SpriteRequirement(EnemySprite.RedMimic).sub_group(1, 0x2c), SpriteRequirement(EnemySprite.MedallionTablet).affix().sub_group(2, 0x12), # overlord requirements - encapsulated mostly in the required sheets diff --git a/source/enemizer/damage_table.yaml b/source/enemizer/damage_table.yaml index 8e1f3bf1..a87db369 100644 --- a/source/enemizer/damage_table.yaml +++ b/source/enemizer/damage_table.yaml @@ -300,3 +300,5 @@ SubClassTable: 0xD5: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 0xD6: [0, 0, 0, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 0xD7: [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0] + 0xEF: [0, 1, 1, 2, 2, 1, 2, 0, 1, 2, 0, 0, 0, 0, 0, 0] + 0xF0: [0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0] diff --git a/source/enemizer/enemy_weight.yaml b/source/enemizer/enemy_weight.yaml index f98db4b3..a140e861 100644 --- a/source/enemizer/enemy_weight.yaml +++ b/source/enemizer/enemy_weight.yaml @@ -38,6 +38,7 @@ UW: # Total 94431 Gibo: 294 # 0.33993% raw:321 2.84071% GreenBushGuard: 325 # 0.30816% raw:291 2.57522% GreenEyegoreMimic: 175 # 0.57291% raw:541 4.78761% + GreenMimic: 175 # 0.57291% raw:541 4.78761% GreenGuard: 55 # 1.80237% raw:1702 15.06195% GreenKnifeGuard: 621 # 0.16096% raw:152 1.34513% GreenZirro: 180 # 0.55702% raw:526 4.65487% @@ -68,6 +69,7 @@ UW: # Total 94431 RedBari: 49 # 2.02688% raw:1914 16.93805% RedBushGuard: 163 # 0.61526% raw:581 5.14159% RedEyegoreMimic: 175 # 0.57291% raw:541 4.78761% + RedMimic: 175 # 0.57291% raw:541 4.78761% RedJavelinGuard: 163 # 0.61526% raw:581 5.14159% RedSpearGuard: 44 # 2.28527% raw:2158 19.09735% RedZazak: 294 # 0.33993% raw:321 2.84071% @@ -137,6 +139,7 @@ OW: # Total 117724 Gibo: 247 # 0.40519% raw:477 4.22124% GreenBushGuard: 291 # 0.34403% raw:405 3.58407% GreenEyegoreMimic: 171 # 0.58527% raw:689 6.09735% + GreenMimic: 171 # 0.58527% raw:689 6.09735% GreenGuard: 48 # 2.06330% raw:2429 21.49558% GreenKnifeGuard: 589 # 0.16989% raw:200 1.76991% GreenZirro: 158 # 0.63369% raw:746 6.60177% @@ -167,6 +170,7 @@ OW: # Total 117724 RedBari: 47 # 2.11767% raw:2493 22.06195% RedBushGuard: 121 # 0.82651% raw:973 8.61062% RedEyegoreMimic: 171 # 0.58527% raw:689 6.09735% + RedMimic: 171 # 0.58527% raw:689 6.09735% RedJavelinGuard: 121 # 0.82651% raw:973 8.61062% RedSpearGuard: 39 # 2.56617% raw:3021 26.73451% RedZazak: 247 # 0.40519% raw:477 4.22124% diff --git a/source/enemizer/sheet_weight.yaml b/source/enemizer/sheet_weight.yaml index 3337ef89..03d151c5 100644 --- a/source/enemizer/sheet_weight.yaml +++ b/source/enemizer/sheet_weight.yaml @@ -65,7 +65,7 @@ SheetChoices: - slots: [1] assignments: 1: 0x2c - weight: 2 # Beamos, Popos + weight: 4 # Beamos, Popos, Mimics (2) - slots: [1] assignments: 1: 0x49 @@ -131,7 +131,7 @@ SheetChoices: - slots: [2] assignments: 2: 0x2e - weight: 4 # GreenEyeGoreMimic(x2!), RedEyeGoreMimic(x2!) + weight: 2 # GreenEyeGoreMimic, RedEyeGoreMimic (Eyegores only) # Slot 3 (21 enemy types require slot 3) - slots: [3]