def mark_zmappat_as_modified(self, zmappat, fn): with self.dungeon_bin_context as dungeon_bin: dungeon_bin.set(fn, zmappat) self.project.mark_as_modified(DUNGEON_BIN_PATH) # Mark as modified in tree row = self._tree_model[self._tree_level_dungeon_iter[fn]] recursive_up_item_store_mark_as_modified(row)
def mark_chr_as_modified(self, fn): """Mark a specific chr as modified""" self.project.mark_as_modified(fn) if fn[:-4] + ".pal" in self.list_of_pals: self.project.mark_as_modified(fn[:-4] + ".pal") row = self._tree_model[self._tree_level_iter[fn]] recursive_up_item_store_mark_as_modified(row)
def add_created_with_logo(self): """Add a 'Created with SkyTemple' logo to S05P01A.""" try: bma = self.project.open_file_in_rom(f'{MAP_BG_PATH}s05p01a.bma', FileType.BMA) bpc = self.project.open_file_in_rom(f'{MAP_BG_PATH}s05p01a.bpc', FileType.BPC) bpl = self.project.open_file_in_rom(f'{MAP_BG_PATH}s05p01a.bpl', FileType.BPL) AddCreatedWithLogo(bma, bpc, bpl).process() self.project.mark_as_modified(f'{MAP_BG_PATH}s05p01a.bma') self.project.mark_as_modified(f'{MAP_BG_PATH}s05p01a.bpc') self.project.mark_as_modified(f'{MAP_BG_PATH}s05p01a.bpl') item_id = -1 for i, entry in enumerate(self.bgs.level): if entry.bma_name == 'S05P01A': item_id = i break if item_id != -1: row = self._tree_model[self._tree_level_iter[item_id]] recursive_up_item_store_mark_as_modified(row) except BaseException as err: display_error(sys.exc_info(), str(err), "Error adding the logo.") else: md = SkyTempleMessageDialog(None, Gtk.DialogFlags.DESTROY_WITH_PARENT, Gtk.MessageType.INFO, Gtk.ButtonsType.OK, "Logo added successfully. Thank you!", is_success=True) md.set_position(Gtk.WindowPosition.CENTER) md.run() md.destroy()
def mark_w16_as_modified(self, item_id): """Mark a specific w16 as modified""" w16_filename = self.list_of_w16s[item_id] self.project.mark_as_modified(w16_filename) # Mark as modified in tree row = self._tree_model[self._tree_level_iter[w16_filename]] recursive_up_item_store_mark_as_modified(row)
def mark_as_modified(self, item_id): """Mark a specific bg as modified""" bgp_filename = self.list_of_bgps[item_id] self.project.mark_as_modified(bgp_filename) # Mark as modified in tree row = self._tree_model[self._tree_level_iter[item_id]] recursive_up_item_store_mark_as_modified(row)
def save_dungeon_tilesets(self, value: List[GroundTilesetMapping]): config = self.project.get_rom_module().get_static_data() self.project.modify_binary( BinaryName.OVERLAY_11, lambda binary: HardcodedGroundDungeonTilesets. set_ground_dungeon_tilesets(value, binary, config)) recursive_up_item_store_mark_as_modified(self._tree_model[self._root])
def set_starter_level_partner(self, level: int): def update(arm9): static_data = self.project.get_rom_module().get_static_data() HardcodedDefaultStarters.set_partner_level(level, arm9, static_data) self.project.modify_binary(BinaryName.ARM9, update) row = self._tree_model[self._starters_tree_iter] recursive_up_item_store_mark_as_modified(row)
def mark_dungeon_as_modified(self, dungeon_id, modified_mappa=True): self.project.get_string_provider().mark_as_modified() if modified_mappa: self.save_mappa() # Mark as modified in tree row = self._tree_model[self._dungeon_iters[dungeon_id]] recursive_up_item_store_mark_as_modified(row)
def set_tileset_properties(self, lst: List[TilesetProperties]): self.project.modify_binary( BinaryName.OVERLAY_10, lambda binary: HardcodedDungeons.set_tileset_properties( lst, binary, self.project.get_rom_module().get_static_data())) row = self._tree_model[self._root_node] recursive_up_item_store_mark_as_modified(row)
def mark_as_modified(self, item_id, is_background): self.project.mark_as_modified(DUNGEON_BIN) # Mark as modified in tree if is_background: item_id += NUMBER_OF_TILESETS row = self._tree_model[self._tree_level_iter[item_id]] recursive_up_item_store_mark_as_modified(row)
def mark_as_modified(self): """Mark as modified""" # We don't have to mark anything at the project as modified, the # binaries are already patched. self.project.force_mark_as_modified() # Mark as modified in tree row = self._tree_model[self._tree_iter] recursive_up_item_store_mark_as_modified(row)
def set_tactics(self, lst: List[int]): def update(arm9): static_data = self.project.get_rom_module().get_static_data() HardcodedTactics.set_unlock_levels(lst, arm9, static_data) self.project.modify_binary(BinaryName.ARM9, update) row = self._tree_model[self._tactics_root_iter] recursive_up_item_store_mark_as_modified(row)
def mark_font_as_modified(self, item: FontOpenSpec): """Mark a specific font as modified""" self.project.mark_as_modified(item.font_filename) if item.pal_filename: self.project.mark_as_modified(item.pal_filename) # Mark as modified in tree row = self._tree_model[self._tree_level_iter[item.get_row_name()]] recursive_up_item_store_mark_as_modified(row) self._mark_font_assoc_as_modified(item.font_filename)
def set_cart_removed_data(self, img: Image.Image): """Sets cart removed data""" def update(arm9): static_data = self.project.get_rom_module().get_static_data() HardcodedCartRemoved.set_cart_removed_data(img, arm9, static_data) self.project.modify_binary(BinaryName.ARM9, update) row = self._tree_model[self._tree_level_iter[CART_REMOVED_NAME]] recursive_up_item_store_mark_as_modified(row)
def set_rank_list(self, values: List[Rank]): """Sets the rank up table.""" def update(arm9bin): static_data = self.project.get_rom_module().get_static_data() HardcodedRankUpTable.set_rank_up_table(values, arm9bin, static_data) self.project.modify_binary(BinaryName.ARM9, update) row = self._tree_model[self._rank_list_tree_iter] recursive_up_item_store_mark_as_modified(row)
def set_starter_ids(self, player, partner): def update(ov13): static_data = self.project.get_rom_module().get_static_data() HardcodedPersonalityTestStarters.set_player_md_ids(player, ov13, static_data) HardcodedPersonalityTestStarters.set_partner_md_ids(partner, ov13, static_data) self.project.modify_binary(BinaryName.OVERLAY_13, update) row = self._tree_model[self._starters_tree_iter] recursive_up_item_store_mark_as_modified(row)
def set_world_map_markers(self, markers: List[MapMarkerPlacement]): """Sets the world map markers""" def update(arm9bin): static_data = self.project.get_rom_module().get_static_data() HardcodedDungeons.set_marker_placements(markers, arm9bin, static_data) self.project.modify_binary(BinaryName.ARM9, update) row = self._tree_model[self._world_map_tree_iter] recursive_up_item_store_mark_as_modified(row)
def set_special_pcs(self, lst: List[SpecialEpisodePc]): def update(arm9): static_data = self.project.get_rom_module().get_static_data() HardcodedDefaultStarters.set_special_episode_pcs( lst, arm9, static_data) self.project.modify_binary(BinaryName.ARM9, update) row = self._tree_model[self._special_episodes_root_iter] recursive_up_item_store_mark_as_modified(row)
def set_extra_dungeon_data(self, lst: List[ExtraDungeonDataEntry]): """Updates the extra dungeon data list""" def update(arm9): static_data = self.project.get_rom_module().get_static_data() ExtraDungeonDataList.write(lst, arm9, static_data) self.project.modify_binary(BinaryName.ARM9, update) row = self._tree_model[self._guest_pokemon_root_iter] recursive_up_item_store_mark_as_modified(row)
def set_menu(self, menu_id, values: List[MenuEntry]): """Sets the rank up table.""" def update(binary): static_data = self.project.get_rom_module().get_static_data() HardcodedMenus.set_menu(MenuType(menu_id), values, binary, static_data) self.project.modify_binary(MenuType(menu_id).binary, update) row = self._tree_model[self._menu_list_tree_iter] recursive_up_item_store_mark_as_modified(row)
def set_guest_pokemon_data(self, lst: List[GuestPokemon]): """Updates the guest pokémon data list""" def update(arm9): static_data = self.project.get_rom_module().get_static_data() GuestPokemonList.write(lst, arm9, static_data) self.project.modify_binary(BinaryName.ARM9, update) row = self._tree_model[self._guest_pokemon_root_iter] recursive_up_item_store_mark_as_modified(row)
def set_starter_default_ids(self, player, partner): """Sets players & partner default starters""" def update(arm9): static_data = self.project.get_rom_module().get_static_data() HardcodedDefaultStarters.set_player_md_id(player, arm9, static_data) HardcodedDefaultStarters.set_partner_md_id(partner, arm9, static_data) self.project.modify_binary(BinaryName.ARM9, update) row = self._tree_model[self._starters_tree_iter] recursive_up_item_store_mark_as_modified(row)
def _mark_font_assoc_as_modified(self, name: str): """Marks the other instances as modified (the ones with a different palette) """ for assoc in FONT_PAL_ASSOC: if name==assoc[0]: pal_name = assoc[1] if pal_name not in self.list_of_bins: pal_name = None if pal_name!=None: spec = FontOpenSpec(name, pal_name, FontType.BANNER_FONT) row = self._tree_model[self._tree_level_iter[spec.get_row_name()]] recursive_up_item_store_mark_as_modified(row)
def set_recruitment_list(self, species, level, location): """Sets the recruitment lists: species, levels, locations""" def update(ov11): static_data = self.project.get_rom_module().get_static_data() HardcodedRecruitmentTables.set_monster_species_list(species, ov11, static_data) HardcodedRecruitmentTables.set_monster_levels_list(level, ov11, static_data) HardcodedRecruitmentTables.set_monster_locations_list(location, ov11, static_data) self.project.modify_binary(BinaryName.OVERLAY_11, update) row = self._tree_model[self._recruitment_tree_iter] recursive_up_item_store_mark_as_modified(row)
def mark_floor_as_modified(self, item: FloorViewInfo, modified_mappag = False): if modified_mappag: # This is slow, since it builds the entire mappa_g file from scratch. # It would be better to only modify the floor attributes changed self.save_mappa() else: self.project.mark_as_modified(MAPPA_PATH) # Mark as modified in tree assert self._tree_model row = self._tree_model[self._dungeon_floor_iters[item.dungeon.dungeon_id][item.floor_id]] recursive_up_item_store_mark_as_modified(row)
def mark_as_modified(self, item_id): """Mark a specific map as modified""" l = self.bgs.level[item_id] self.project.mark_as_modified(f'{MAP_BG_PATH}{l.bma_name.lower()}.bma') self.project.mark_as_modified(f'{MAP_BG_PATH}{l.bpc_name.lower()}.bpc') self.project.mark_as_modified(f'{MAP_BG_PATH}{l.bpl_name.lower()}.bpl') for bpa in l.bpa_names: if bpa is not None: self.project.mark_as_modified(f'{MAP_BG_PATH}{bpa.lower()}.bpa') # Mark as modified in tree row = self._tree_model[self._tree_level_iter[item_id]] recursive_up_item_store_mark_as_modified(row)
def set_dungeon_music(self, lst, random): config = self.project.get_rom_module().get_static_data() self.project.modify_binary( BinaryName.OVERLAY_10, lambda ov10: HardcodedDungeonMusic.set_music_list( lst, ov10, config)) self.project.modify_binary( BinaryName.OVERLAY_10, lambda ov10: HardcodedDungeonMusic.set_random_music_list( random, ov10, config)) row = self._tree_model[self._dungeon_music_tree_iter] recursive_up_item_store_mark_as_modified(row)
def mark_wte_as_modified(self, item: WteOpenSpec, wte, wtu): if item.in_dungeon_bin: self.dungeon_bin.set(item.wte_filename, wte) if item.wtu_filename: self.dungeon_bin.set(item.wtu_filename, wtu) self.project.mark_as_modified(DUNGEON_BIN_PATH) # Mark as modified in tree row = self._tree_model[self._tree_level_dungeon_iter[item.wte_filename]] recursive_up_item_store_mark_as_modified(row) else: self.project.mark_as_modified(item.wte_filename) if item.wtu_filename: self.project.mark_as_modified(item.wtu_filename) # Mark as modified in tree row = self._tree_model[self._tree_level_iter[item.wte_filename]] recursive_up_item_store_mark_as_modified(row)
def mark_item_as_modified(self, item_id): self.project.mark_as_modified(ITEM_FILE) self.project.get_string_provider().mark_as_modified() if item_id >= FIRST_EXCLUSIVE_ITEM_ID: self.project.mark_as_modified(ITEM_S_FILE) # Mark as modified in tree row = self._tree_model[self.item_iters[item_id]] recursive_up_item_store_mark_as_modified(row) # Reload item categories: conf = self.project.get_rom_module().get_static_data() cats = {x: [] for x in conf.dungeon_data.item_categories.values()} for idx, entry in enumerate(self.get_item_p().item_list): cats[entry.category_pmd2obj(conf.dungeon_data.item_categories)].append(idx) for category in conf.dungeon_data.item_categories.values(): category.items = cats[category]
def save_fixed_floor_entity_lists(self, entities, items, monsters, tiles, stats): config = self.project.get_rom_module().get_static_data() def update_ov29(binary): HardcodedFixedFloorTables.set_entity_spawn_table(binary, entities, config) HardcodedFixedFloorTables.set_item_spawn_list(binary, items, config) HardcodedFixedFloorTables.set_monster_spawn_list(binary, monsters, config) HardcodedFixedFloorTables.set_tile_spawn_list(binary, tiles, config) self.project.modify_binary( BinaryName.OVERLAY_29, update_ov29 ) self.project.modify_binary( BinaryName.OVERLAY_10, lambda binary: HardcodedFixedFloorTables.set_monster_spawn_stats_table( binary, stats, config ) ) row = self._tree_model[self._fixed_floor_root_iter] recursive_up_item_store_mark_as_modified(row)