Example #1
0
 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)
Example #2
0
 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)
Example #3
0
    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()
Example #4
0
 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)
Example #5
0
 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)
Example #6
0
 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])
Example #7
0
    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)
Example #8
0
    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)
Example #9
0
 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)
Example #10
0
    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)
Example #11
0
 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)
Example #12
0
    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)
Example #13
0
 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)
Example #14
0
    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)
Example #15
0
    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)
Example #16
0
    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)
Example #17
0
    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)
Example #18
0
    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)
Example #19
0
    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)
Example #20
0
    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)
Example #21
0
    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)
Example #22
0
    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)
Example #23
0
 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)
Example #24
0
    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)
Example #25
0
 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)
Example #26
0
    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)
Example #27
0
    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)
Example #28
0
 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)
Example #29
0
    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]
Example #30
0
    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)