72 lines
2.6 KiB
Python
72 lines
2.6 KiB
Python
import RaceRandom as random
|
|
from Utils import snes_to_pc
|
|
|
|
from source.dungeon.EnemyList import EnemySprite, SpriteType, sprite_translation, enemy_names
|
|
|
|
def can_combine_req(req1, req2):
|
|
for i in range(0, 4):
|
|
if req1.sub_groups[i] and req2.sub_groups[i]:
|
|
if len(set(req1.sub_groups[i]).intersection(req2.sub_groups[i])) == 0:
|
|
return False
|
|
return True
|
|
|
|
def get_enemy_map(mode, reqs, vanilla_map):
|
|
data = {}
|
|
|
|
if mode != "mimics":
|
|
return data
|
|
|
|
green_mimic = reqs.get((EnemySprite.GreenMimic, 0))
|
|
|
|
for room_id, sprites in vanilla_map.items():
|
|
data[room_id] = {}
|
|
for idx, sprite in enumerate(sprites):
|
|
subtype = 0 if sprite.sub_type != SpriteType.Overlord else sprite.sub_type
|
|
req = reqs.get((sprite.kind, subtype))
|
|
if not req or isinstance(req, dict) or req.boss:
|
|
continue
|
|
if req.static:
|
|
if not can_combine_req(green_mimic, req):
|
|
data[room_id] = {}
|
|
break
|
|
continue
|
|
if req.killable:
|
|
if random.random() > 0.1:
|
|
data[room_id][idx] = 'GreenMimic'
|
|
else:
|
|
data[room_id][idx] = 'RedMimic'
|
|
else:
|
|
data[room_id][idx] = enemy_names[sprite.kind]
|
|
if len(data[room_id]) == 0:
|
|
del data[room_id]
|
|
return data
|
|
|
|
|
|
def get_enemy_map_ow(mode, data_tables):
|
|
reqs = data_tables.sprite_requirements
|
|
return get_enemy_map(mode, reqs, data_tables.ow_enemy_table)
|
|
|
|
def get_enemy_map_uw(mode, data_tables):
|
|
reqs = data_tables.sprite_requirements
|
|
return get_enemy_map(mode, reqs, data_tables.uw_enemy_table.room_map)
|
|
|
|
def write_mimic_changes(rom, double = False):
|
|
if double:
|
|
rom.write_bytes(snes_to_pc(0x1EC71B),
|
|
[0x00, 0xE0, 0x20, 0x00, 0x00, 0xE6, 0x1A, 0x00,
|
|
0x00, 0xE6, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0xD0, 0x30, 0x00, 0x00, 0xE0, 0x20, 0x00,
|
|
0x00, 0xE0, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
|
0x00, 0x00, 0x00, 0x00, 0xE0, 0xF6, 0xF6, 0x00,
|
|
0x20, 0x1A, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xE0, 0xE0,
|
|
0x30, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00])
|
|
else:
|
|
rom.write_bytes(snes_to_pc(0x1EC71B),
|
|
[0x00, 0xF0, 0x10, 0x00, 0x00, 0xF3, 0x0D, 0x00,
|
|
0x00, 0xF3, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00])
|
|
rom.write_bytes(snes_to_pc(0x1EC75C), [0x01, 0x00])
|
|
# rom.write_byte(snes_to_pc(0x0DB3DD), 0x0D) # make red mimics use green palette
|
|
|