diff --git a/randomizer.py b/randomizer.py index b2b5975..5703e77 100644 --- a/randomizer.py +++ b/randomizer.py @@ -1101,7 +1101,12 @@ def intershuffle_valid(self): @cached_property def name(self): - name = self.name_text.decode('utf8').strip() + if b'\x00' in self.name_text: + null_index = self.name_text.index(b'\x00') + name_text = self.name_text[:null_index] + else: + name_text = self.name_text + name = name_text.decode('utf8').strip() return ''.join([c for c in name if c in printable]) @property @@ -1159,7 +1164,13 @@ def intershuffle(cls): candidates=[m for m in MonsterObject.every if m.is_boss]) def guess_sprite(self): - return self.monster_overworld_sprites[self.index] + if self.index in self.monster_overworld_sprites: + return self.monster_overworld_sprites[self.index] + elif (get_global_label() == 'LUFIA2_SPEKKIO_V6' + and 'Lady Spider' in self.name): + return 0x89 + else: + return 0x94 def set_drop(self, item): if isinstance(item, ItemObject): @@ -1372,7 +1383,10 @@ def rank(self): 0x1d2: 0, } artemis_mods = ['L2_FRUE', 'L2_SPEKKIO', 'L2_KUREJI', 'L2_KUREJI_NB', - 'L2_KUREJI_HC', 'L2_KUREJI_HC_NB'] + 'L2_KUREJI_HC', 'L2_KUREJI_HC_NB', + 'LUFIA2_FRUE_V6', 'LUFIA2_SPEKKIO_V6', + 'LUFIA2_KUREJI_V6', + ] if get_global_label() in artemis_mods and self.index >= 0x1a7: self._rank = -1 elif self.index in rankdict: @@ -1853,12 +1867,18 @@ def __init__(self, data): self.misc = data[7] if {self.boundary_west, self.boundary_east, self.boundary_north, self.boundary_south} != {0xff}: - assert self.boundary_west < self.boundary_east - assert self.boundary_north < self.boundary_south - if self.x != 0xff: - assert self.boundary_west <= self.x < self.boundary_east - if self.y != 0xff: - assert self.boundary_north <= self.y < self.boundary_south + try: + assert self.boundary_west < self.boundary_east + assert self.boundary_north < self.boundary_south + if self.x != 0xff: + assert (self.boundary_west <= self.x + < self.boundary_east) + if self.y != 0xff: + assert (self.boundary_north <= self.y + < self.boundary_south) + except: + print('WARNING: NPC {0} has boundary errors.'.format( + hexify(data))) def __repr__(self): if self.is_mobile: diff --git a/tables/master.txt b/tables/master.txt index f1d8751..1bf6214 100644 --- a/tables/master.txt +++ b/tables/master.txt @@ -2,6 +2,6 @@ LUFIA2_NA 6efc477d6203ed2b3b9133c1cd9e9c5d tables_list.txt LUFIA2_JP 18567d21df6a95a7b52029d250bac721 tables_list_jp.txt LUFIA2_FIX 026b649ed316448e038349e39a6fe579 tables_list.fixxxer.txt LUFIA2_FRUE_V6 b58c76f2ac0b2aeb9b779e880d2bff18 tables_list.frue.txt -LUFIA2_SPEKKIO 5afddb3ba7788123c4cff6ee7fa83f3f tables_list.spekkio.txt -LUFIA2_KUREJI faba981aa1f3831d1b065ae071ea555b tables_list.kureji.txt +LUFIA2_SPEKKIO_V6 b4c4973a5f1cfd40bb1863dbad260de4 tables_list.spekkio.txt +LUFIA2_KUREJI_V6 5983201c45de814dc3672ab7d8279886 tables_list.kureji.txt !LUFIA2_NA->LUFIA2_FIX lufia2_fixxxer_unheadered.ips diff --git a/tables/tables_list.spekkio.txt b/tables/tables_list.spekkio.txt index fbfb336..d7c100b 100644 --- a/tables/tables_list.spekkio.txt +++ b/tables/tables_list.spekkio.txt @@ -1,23 +1,52 @@ # objname tablefile address count grouped +EventInstObject struct_2pointer.txt 4a14 205 +IPAttackObject struct_ip_attack.txt pointers_ip_attack.txt +CharLevelObject struct_level.txt pointers_level.txt +CharExpObject struct_exp.txt pointers_xp.txt +InitialEquipObject struct_initial_equip.txt pointers_initial_equip.txt +OverPaletteObject struct_over_palette.txt 36ca6 3 +OverSpriteObject struct_over_sprite.txt 37086 6 +MapEventObject struct_map_event.txt 38010 242 +RoamingNPCObject struct_roaming_npc.txt 3ae4e 34 ChestObject struct_chest.txt pointers_chest.txt +CapsuleLevelObject struct_capsule_level.txt 764c4 7 +WordObject struct_word.txt 76a00 640 AncientChest2Object struct_ancient_chest.txt 8ffdc 9 BlueChestObject struct_blue_chest.txt 30d880 42 AncientChest1Object struct_ancient_chest.txt a713d 31 SpellObject struct_spell.txt pointers_spell.frue.txt # 235 monsters, Spekkio is 235th -MonsterObject struct_monster.txt pointers_monster.frue.txt +MonsterObject struct_monster.txt 282000 240 point1 282000 2 ItemObject struct_item.txt b4f69 467 point1 b4f69 2 CharGrowthObject struct_char_growth.txt pointers_char_growth.txt CharacterObject struct_character.txt bb93c 7 +MapFormationsObject struct_2pointer.txt bb9ac 248 +FormationObject struct_formation.txt bbe93 192 +BossFormationObject struct_2pointer.txt bc53d 39 +SpriteMetaObject struct_sprite_meta.txt bca64 134 CapPaletteObject struct_cap_palette.txt bd258 35 CapsuleObject struct_capsule.txt bdcb8 35 point1 bdcb8 2 -ShopObject struct_shop.txt pointers_shop.txt +ShopObject struct_2pointer.txt bee9f 66 +CapAttackObject struct_cap_attack.txt bf63b 84 point1 bf63b 2 ItemNameObject struct_item_name.txt f47e8 467 CapSpritePTRObject struct_cap_sprite_ptr.txt 1384bc 35 +TownSpriteObject struct_town_sprite.txt pointers_town_sprite.txt MonsterMoveObject struct_monster_move.txt 27f6b5 112 +MapMetaObject struct_3pointer.txt 27fcbc 242 $capsule_end beead $rng1 63 $rng2 2f4 -.patch patch_spekkio.txt +$starting_tool 2b2ca +$credits 89aff +$credits_pointer1 73449 +$credits_pointer2 73496 +$credits_pointer3 7349d +$credits_pointer4 734b3 +$credits_pointer5 73503 +$credits_pointer6 73511 +$sprites names_sprites.txt .patch patch_clear_initial_spells.txt -.option patch_ac_music_hack.txt +.patch patch_zero_gold_command.txt +.patch patch_secondary_tool.txt +#.option patch_ac_music_hack.txt +.patch patch_spekkio.txt