Mimic work

This commit is contained in:
aerinon
2023-08-09 12:06:20 -06:00
parent 90f1629f0e
commit 57da9efcb1
8 changed files with 25 additions and 6 deletions

2
Rom.py
View File

@@ -40,7 +40,7 @@ from source.enemizer.Enemizer import write_enemy_shuffle_settings
JAP10HASH = '03a63945398191337e896e5771f77173' JAP10HASH = '03a63945398191337e896e5771f77173'
RANDOMIZERBASEHASH = 'e5f3f7dd5be54dce0f490529803dafc3' RANDOMIZERBASEHASH = '465f19132309a103df2f2d802e863dd0'
class JsonRom(object): class JsonRom(object):

Binary file not shown.

View File

@@ -268,6 +268,8 @@ class EnemySprite(FastEnum):
HeartPiece = 0xeb HeartPiece = 0xeb
SomariaPlatform = 0xed SomariaPlatform = 0xed
CastleMantle = 0xee CastleMantle = 0xee
GreenMimic = 0xef
RedMimic = 0xf0
MedallionTablet = 0xf2 MedallionTablet = 0xf2
PositionTarget = 0xf3 PositionTarget = 0xf3
Boulders = 0xf4 Boulders = 0xf4
@@ -387,7 +389,7 @@ def init_enemy_stats():
EnemySprite.CannonTrooper: EnemyStats(EnemySprite.CannonTrooper, False, True, 1, health=3, dmg=1), 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.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.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), dmg=(0, 5), dmask=0x80),
# skip helmafireball for damage # skip helmafireball for damage
@@ -495,6 +497,8 @@ def init_enemy_stats():
EnemySprite.MagicShopAssistant: EnemyStats(EnemySprite.MagicShopAssistant, True, ignore=True, dmg=0), EnemySprite.MagicShopAssistant: EnemyStats(EnemySprite.MagicShopAssistant, True, ignore=True, dmg=0),
EnemySprite.HeartPiece: EnemyStats(EnemySprite.HeartPiece, True, ignore=True, dmg=0), EnemySprite.HeartPiece: EnemyStats(EnemySprite.HeartPiece, True, ignore=True, dmg=0),
EnemySprite.CastleMantle: EnemyStats(EnemySprite.CastleMantle, 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 return stats
@@ -2346,8 +2350,8 @@ enemy_names = {
0x80: 'Firesnake', 0x80: 'Firesnake',
0x81: 'Hover', 0x81: 'Hover',
0x82: 'AntiFairyCircle', 0x82: 'AntiFairyCircle',
0x83: 'GreenEyegoreMimic', 0x83: 'GreenEyegore',
0x84: 'RedEyegoreMimic', 0x84: 'RedEyegore',
0x85: 'YellowStalfos', # falling stalfos that shoots head 0x85: 'YellowStalfos', # falling stalfos that shoots head
0x86: 'Kodongo', 0x86: 'Kodongo',
0x88: 'Mothula', 0x88: 'Mothula',
@@ -2444,6 +2448,8 @@ enemy_names = {
0xeb: 'HeartPiece', 0xeb: 'HeartPiece',
0xed: 'SomariaPlatform', 0xed: 'SomariaPlatform',
0xee: 'CastleMantle', 0xee: 'CastleMantle',
0xef: 'GreenMimic',
0xf0: 'RedMimic',
0xf2: 'MedallionTablet', 0xf2: 'MedallionTablet',
0xf3: 'PositionTarget', 0xf3: 'PositionTarget',
0xf4: 'Boulders' 0xf4: 'Boulders'
@@ -2513,6 +2519,7 @@ sprite_translation = {
'GreenEyegoreMimic': EnemySprite.GreenEyegoreMimic, 'GreenEyegoreMimic': EnemySprite.GreenEyegoreMimic,
'GreenGuard': EnemySprite.GreenGuard, 'GreenGuard': EnemySprite.GreenGuard,
'GreenKnifeGuard': EnemySprite.GreenKnifeGuard, 'GreenKnifeGuard': EnemySprite.GreenKnifeGuard,
'GreenMimic': EnemySprite.GreenMimic,
'GreenZirro': EnemySprite.GreenZirro, 'GreenZirro': EnemySprite.GreenZirro,
'HardhatBeetle': EnemySprite.HardhatBeetle, 'HardhatBeetle': EnemySprite.HardhatBeetle,
'Hinox': EnemySprite.Hinox, 'Hinox': EnemySprite.Hinox,
@@ -2542,6 +2549,7 @@ sprite_translation = {
'RedBushGuard': EnemySprite.RedBushGuard, 'RedBushGuard': EnemySprite.RedBushGuard,
'RedEyegoreMimic': EnemySprite.RedEyegoreMimic, 'RedEyegoreMimic': EnemySprite.RedEyegoreMimic,
'RedJavelinGuard': EnemySprite.RedJavelinGuard, 'RedJavelinGuard': EnemySprite.RedJavelinGuard,
'RedMimic': EnemySprite.RedMimic,
'RedSpearGuard': EnemySprite.RedSpearGuard, 'RedSpearGuard': EnemySprite.RedSpearGuard,
'RedZazak': EnemySprite.RedZazak, 'RedZazak': EnemySprite.RedZazak,
'Ropa': EnemySprite.Ropa, 'Ropa': EnemySprite.Ropa,

View File

@@ -463,6 +463,9 @@ def write_enemy_shuffle_settings(world, player, rom):
if world.dropshuffle[player] in ['underworld']: if world.dropshuffle[player] in ['underworld']:
rom.write_byte(snes_to_pc(0x368109), 0x01) rom.write_byte(snes_to_pc(0x368109), 0x01)
if world.enemy_shuffle[player] != 'none': if world.enemy_shuffle[player] != 'none':
# enable new mimics
rom.write_byte(snes_to_pc(0x368105), 0x01)
# killable thief # killable thief
rom.write_byte(snes_to_pc(0x368108), 0xc4) rom.write_byte(snes_to_pc(0x368108), 0xc4)
rom.write_byte(snes_to_pc(0x0DB237), 4) # health value: # todo: thief health value rom.write_byte(snes_to_pc(0x0DB237), 4) # health value: # todo: thief health value

View File

@@ -360,6 +360,8 @@ def init_sprite_requirements():
SpriteRequirement(EnemySprite.MagicShopAssistant).affix().sub_group(0, 0x4b).sub_group(3, 0x5a), SpriteRequirement(EnemySprite.MagicShopAssistant).affix().sub_group(0, 0x4b).sub_group(3, 0x5a),
SpriteRequirement(EnemySprite.SomariaPlatform).affix().sub_group(2, 0x27), SpriteRequirement(EnemySprite.SomariaPlatform).affix().sub_group(2, 0x27),
SpriteRequirement(EnemySprite.CastleMantle).affix().sub_group(0, 0x5d), 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), SpriteRequirement(EnemySprite.MedallionTablet).affix().sub_group(2, 0x12),
# overlord requirements - encapsulated mostly in the required sheets # overlord requirements - encapsulated mostly in the required sheets

View File

@@ -300,3 +300,5 @@ SubClassTable:
0xD5: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 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] 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] 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]

View File

@@ -38,6 +38,7 @@ UW: # Total 94431
Gibo: 294 # 0.33993% raw:321 2.84071% Gibo: 294 # 0.33993% raw:321 2.84071%
GreenBushGuard: 325 # 0.30816% raw:291 2.57522% GreenBushGuard: 325 # 0.30816% raw:291 2.57522%
GreenEyegoreMimic: 175 # 0.57291% raw:541 4.78761% GreenEyegoreMimic: 175 # 0.57291% raw:541 4.78761%
GreenMimic: 175 # 0.57291% raw:541 4.78761%
GreenGuard: 55 # 1.80237% raw:1702 15.06195% GreenGuard: 55 # 1.80237% raw:1702 15.06195%
GreenKnifeGuard: 621 # 0.16096% raw:152 1.34513% GreenKnifeGuard: 621 # 0.16096% raw:152 1.34513%
GreenZirro: 180 # 0.55702% raw:526 4.65487% GreenZirro: 180 # 0.55702% raw:526 4.65487%
@@ -68,6 +69,7 @@ UW: # Total 94431
RedBari: 49 # 2.02688% raw:1914 16.93805% RedBari: 49 # 2.02688% raw:1914 16.93805%
RedBushGuard: 163 # 0.61526% raw:581 5.14159% RedBushGuard: 163 # 0.61526% raw:581 5.14159%
RedEyegoreMimic: 175 # 0.57291% raw:541 4.78761% RedEyegoreMimic: 175 # 0.57291% raw:541 4.78761%
RedMimic: 175 # 0.57291% raw:541 4.78761%
RedJavelinGuard: 163 # 0.61526% raw:581 5.14159% RedJavelinGuard: 163 # 0.61526% raw:581 5.14159%
RedSpearGuard: 44 # 2.28527% raw:2158 19.09735% RedSpearGuard: 44 # 2.28527% raw:2158 19.09735%
RedZazak: 294 # 0.33993% raw:321 2.84071% RedZazak: 294 # 0.33993% raw:321 2.84071%
@@ -137,6 +139,7 @@ OW: # Total 117724
Gibo: 247 # 0.40519% raw:477 4.22124% Gibo: 247 # 0.40519% raw:477 4.22124%
GreenBushGuard: 291 # 0.34403% raw:405 3.58407% GreenBushGuard: 291 # 0.34403% raw:405 3.58407%
GreenEyegoreMimic: 171 # 0.58527% raw:689 6.09735% GreenEyegoreMimic: 171 # 0.58527% raw:689 6.09735%
GreenMimic: 171 # 0.58527% raw:689 6.09735%
GreenGuard: 48 # 2.06330% raw:2429 21.49558% GreenGuard: 48 # 2.06330% raw:2429 21.49558%
GreenKnifeGuard: 589 # 0.16989% raw:200 1.76991% GreenKnifeGuard: 589 # 0.16989% raw:200 1.76991%
GreenZirro: 158 # 0.63369% raw:746 6.60177% GreenZirro: 158 # 0.63369% raw:746 6.60177%
@@ -167,6 +170,7 @@ OW: # Total 117724
RedBari: 47 # 2.11767% raw:2493 22.06195% RedBari: 47 # 2.11767% raw:2493 22.06195%
RedBushGuard: 121 # 0.82651% raw:973 8.61062% RedBushGuard: 121 # 0.82651% raw:973 8.61062%
RedEyegoreMimic: 171 # 0.58527% raw:689 6.09735% RedEyegoreMimic: 171 # 0.58527% raw:689 6.09735%
RedMimic: 171 # 0.58527% raw:689 6.09735%
RedJavelinGuard: 121 # 0.82651% raw:973 8.61062% RedJavelinGuard: 121 # 0.82651% raw:973 8.61062%
RedSpearGuard: 39 # 2.56617% raw:3021 26.73451% RedSpearGuard: 39 # 2.56617% raw:3021 26.73451%
RedZazak: 247 # 0.40519% raw:477 4.22124% RedZazak: 247 # 0.40519% raw:477 4.22124%

View File

@@ -65,7 +65,7 @@ SheetChoices:
- slots: [1] - slots: [1]
assignments: assignments:
1: 0x2c 1: 0x2c
weight: 2 # Beamos, Popos weight: 4 # Beamos, Popos, Mimics (2)
- slots: [1] - slots: [1]
assignments: assignments:
1: 0x49 1: 0x49
@@ -131,7 +131,7 @@ SheetChoices:
- slots: [2] - slots: [2]
assignments: assignments:
2: 0x2e 2: 0x2e
weight: 4 # GreenEyeGoreMimic(x2!), RedEyeGoreMimic(x2!) weight: 2 # GreenEyeGoreMimic, RedEyeGoreMimic (Eyegores only)
# Slot 3 (21 enemy types require slot 3) # Slot 3 (21 enemy types require slot 3)
- slots: [3] - slots: [3]