Example #1
0
 def add_wan(self, obj_name):
     self._tree_level_iter[obj_name] = self._tree_model.append(
         self._root, [
             'skytemple-e-object-symbolic', obj_name, self,
             ObjectController, obj_name, False, '', True
         ])
     recursive_generate_item_store_row_label(self._tree_model[self._root])
Example #2
0
    def load_tree_items(self, item_store: TreeStore, root_node):
        self._validator = DungeonValidator(self.get_mappa().floor_lists)
        root = item_store.append(root_node, [
            ICON_ROOT, DUNGEONS_NAME, self, MainController, 0, False, '', True
        ])
        self._tree_model = item_store
        self._root_iter = root

        static_data = self.project.get_rom_module().get_static_data()
        self._fixed_floor_data = self.project.open_file_in_rom(
            FIXED_PATH, FileType.FIXED_BIN, static_data=static_data)
        self._dungeon_bin: DungeonBinPack = self.project.open_file_in_rom(
            DUNGEON_BIN, FileType.DUNGEON_BIN, static_data=static_data)

        self._validator.validate(self.get_dungeon_list())

        self._fill_dungeon_tree()

        # Fixed rooms
        self._fixed_floor_root_iter = item_store.append(
            root_node, [
                ICON_FIXED_ROOMS, FIXED_ROOMS_NAME, self, FixedRoomsController,
                0, False, '', True
            ])
        for i in range(0, len(self._fixed_floor_data.fixed_floors)):
            self._fixed_floor_iters.append(
                item_store.append(self._fixed_floor_root_iter, [
                    ICON_FIXED_ROOMS,
                    f(_('Fixed Room {i}')), self, FixedController, i, False,
                    '', True
                ]))

        recursive_generate_item_store_row_label(self._tree_model[root])
        recursive_generate_item_store_row_label(
            self._tree_model[self._fixed_floor_root_iter])
Example #3
0
    def load_tree_items(self, item_store: TreeStore, root_node):
        root_items = item_store.append(root_node, [
            'skytemple-e-item-symbolic', ITEMS, self, MainItemsController, 0, False, '', True
        ])
        root_moves = item_store.append(root_node, [
            'skytemple-e-move-symbolic', MOVES, self, MainMovesController, 0, False, '', True
        ])
        self._item_lists_tree_iter = item_store.append(root_items, [
            'skytemple-view-list-symbolic', _('Item Lists'), self, ItemListsController, 0, False, '', True
        ])
        self._item_effects_tree_iter = item_store.append(root_items, [
            'skytemple-view-list-symbolic', _('Item Effects'), self, ItemEffectsController, 0, False, '', True
        ])
        self._move_effects_tree_iter = item_store.append(root_moves, [
            'skytemple-view-list-symbolic', _('Move Effects'), self, MoveEffectsController, 0, False, '', True
        ])

        for i, item in enumerate(self.get_item_p().item_list):
            name = self.project.get_string_provider().get_value(StringType.ITEM_NAMES, i)
            self.item_iters[i] = (item_store.append(root_items, [
                'skytemple-e-item-symbolic', f'#{i:04}: {name}', self, ItemController, i, False, '', True
            ]))

        for i, item in enumerate(self.get_waza_p().moves):
            name = self.project.get_string_provider().get_value(StringType.MOVE_NAMES, i)
            self.move_iters[i] = (item_store.append(root_moves, [
                'skytemple-e-move-symbolic', f'#{i:04}: {name}', self, MoveController, i, False, '', True
            ]))

        recursive_generate_item_store_row_label(item_store[root_items])
        recursive_generate_item_store_row_label(item_store[root_moves])
        self._tree_model = item_store
Example #4
0
    def load_tree_items(self, item_store: TreeStore, root_node):
        root = item_store.append(root_node, [
            'skytemple-e-monster-symbolic', MONSTER_NAME, self, MainController,
            0, False, '', True
        ])
        self._tree_model = item_store
        self._tree_iter__entity_roots = {}
        self._tree_iter__entries = {}

        monster_entries_by_base_id: Dict[int, List[MdEntry]] = {}
        for entry in self.monster_md.entries:
            if entry.md_index_base not in monster_entries_by_base_id:
                monster_entries_by_base_id[entry.md_index_base] = []
            monster_entries_by_base_id[entry.md_index_base].append(entry)

        for baseid, entry_list in monster_entries_by_base_id.items():
            name = self.project.get_string_provider().get_value(
                StringType.POKEMON_NAMES, baseid)
            ent_root = item_store.append(
                root, self.generate_entry__entity_root(baseid, name))
            self._tree_iter__entity_roots[baseid] = ent_root

            for entry in entry_list:
                self._tree_iter__entries[entry.md_index] = item_store.append(
                    ent_root,
                    self.generate_entry__entry(entry.md_index, entry.gender))

        recursive_generate_item_store_row_label(self._tree_model[root])
Example #5
0
    def load_tree_items(self, item_store: TreeStore, root_node):
        self.dungeon_bin: DungeonBinPack = self.project.open_file_in_rom(
            DUNGEON_BIN,
            FileType.DUNGEON_BIN,
            static_data=self.project.get_rom_module().get_static_data())

        root = item_store.append(root_node, [
            'skytemple-e-dungeon-tileset-symbolic', DUNGEON_GRAPHICS_NAME,
            self, MainController, 0, False, '', True
        ])
        self._tree_model = item_store
        self._tree_level_iter = []
        for i in range(0, NUMBER_OF_TILESETS):
            self._tree_level_iter.append(
                item_store.append(root, [
                    'skytemple-e-dungeon-tileset-symbolic',
                    f"{_('Tileset')} {i}", self, TilesetController, i, False,
                    '', True
                ]))
        for i in range(0, NUMBER_OF_BACKGROUNDS):
            self._tree_level_iter.append(
                item_store.append(root, [
                    'skytemple-e-mapbg-symbolic',
                    f"{_('Background')} {i + NUMBER_OF_TILESETS}", self,
                    DungeonBgController, i, False, '', True
                ]))
        self._tree_level_iter.append(
            item_store.append(root, [
                'skytemple-e-dungeon-tileset-symbolic',
                _("Color Map"), self, ColvecController, i, False, '', True
            ]))
        self._colvec_pos = len(self._tree_level_iter) - 1
        recursive_generate_item_store_row_label(self._tree_model[root])
Example #6
0
 def rebuild_dungeon_tree(self):
     # Collect modified of _dungeon_iters and _dungeon_floor_iters
     modified_dungeons = {
         x: self._tree_model[y][5]
         for x, y in self._dungeon_iters.items()
     }
     modified_floors = {}
     for dungeon, floors in self._dungeon_floor_iters.items():
         modified_floors[dungeon] = {
             x: self._tree_model[y][5]
             for x, y in floors.items()
         }
     # Delete everything under _root_iter
     child = self._tree_model.iter_children(self._root_iter)
     while child is not None:
         nxt = self._tree_model.iter_next(child)
         self._tree_model.remove(child)
         child = nxt
     self._dungeon_iters = {}
     self._dungeon_floor_iters = {}
     # _fill_dungeon_tree
     self._fill_dungeon_tree()
     # Apply modified of _dungeon_iters and _dungeon_floor_iters
     for dungeon, modified in modified_dungeons.items():
         if dungeon in self._dungeon_iters:
             self._tree_model[self._dungeon_iters[dungeon]][5] = modified
     for dungeon, floors in modified_floors.items():
         if dungeon in self._dungeon_floor_iters:
             for floor, modified in floors.items():
                 if floor in self._dungeon_floor_iters[dungeon]:
                     self._tree_model[self._dungeon_floor_iters[dungeon]
                                      [floor]][5] = modified
     # Re-generate label
     recursive_generate_item_store_row_label(
         self._tree_model[self._root_iter])
Example #7
0
    def load_tree_items(self, item_store: TreeStore, root_node):
        self.dungeon_bin_context: ModelContext[
            DungeonBinPack] = self.project.open_file_in_rom(
                DUNGEON_BIN,
                FileType.DUNGEON_BIN,
                static_data=self.project.get_rom_module().get_static_data(),
                threadsafe=True)

        root = self._root_node = item_store.append(root_node, [
            'skytemple-e-dungeon-tileset-symbolic', DUNGEON_GRAPHICS_NAME,
            self, MainController, 0, False, '', True
        ])
        tileset_root = item_store.append(root, [
            'skytemple-e-dungeon-tileset-symbolic', TILESETS_NAME, self,
            TilesetMainController, 0, False, '', True
        ])
        bg_root = item_store.append(root, [
            'skytemple-e-mapbg-symbolic', BACKGROUNDS_NAMES, self,
            DungeonBgMainController, 0, False, '', True
        ])
        self._tree_model = item_store
        self._tree_level_iter = []
        for i in range(0, NUMBER_OF_TILESETS):
            self._tree_level_iter.append(
                item_store.append(tileset_root, [
                    'skytemple-e-dungeon-tileset-symbolic',
                    f"{_('Tileset')} {i}", self, TilesetController, i, False,
                    '', True
                ]))
        for i in range(0, NUMBER_OF_BACKGROUNDS):
            self._tree_level_iter.append(
                item_store.append(bg_root, [
                    'skytemple-e-mapbg-symbolic',
                    f"{_('Background')} {i + NUMBER_OF_TILESETS}", self,
                    DungeonBgController, i, False, '', True
                ]))
        self._tree_level_iter.append(
            item_store.append(root, [
                'skytemple-e-graphics-symbolic', f"Traps", self,
                TrpItmImgController, ImgType.TRP, False, '', True
            ]))
        self._traps_pos = len(self._tree_level_iter) - 1
        self._tree_level_iter.append(
            item_store.append(root, [
                'skytemple-e-graphics-symbolic', f"Items", self,
                TrpItmImgController, ImgType.ITM, False, '', True
            ]))
        self._items_pos = len(self._tree_level_iter) - 1
        self._tree_level_iter.append(
            item_store.append(root, [
                'skytemple-e-dungeon-tileset-symbolic',
                _("Color Map"), self, ColvecController, i, False, '', True
            ]))
        self._colvec_pos = len(self._tree_level_iter) - 1
        recursive_generate_item_store_row_label(self._tree_model[root])
Example #8
0
 def load_tree_items(self, item_store: TreeStore, root_node):
     root = item_store.append(root_node, [
         'skytemple-e-string-symbolic', TEXT_STRINGS, self, MainController, 0, False, '', True
     ])
     config = self.project.get_rom_module().get_static_data()
     for language in config.string_index_data.languages:
         self._tree_iters[language.filename] = item_store.append(root, [
             'skytemple-e-string-symbolic', language.name_localized, self, StringsController, language, False, '', True
         ])
     self._tree_model = item_store
     recursive_generate_item_store_row_label(self._tree_model[root])
Example #9
0
    def load_tree_items(self, item_store: TreeStore, root_node):
        root = item_store.append(root_node, [
            'skytemple-e-object-symbolic', OBJECT_SPRTIES, self, ObjectMainController, 0, False, '', True
        ])
        self._tree_model = item_store
        self._tree_level_iter = {}

        for name in self.list_of_obj_sprites:
            self._tree_level_iter[name] = item_store.append(root, [
                'skytemple-e-object-symbolic', name, self,  ObjectController, name, False, '', True
            ])

        recursive_generate_item_store_row_label(self._tree_model[root])
Example #10
0
    def load_tree_items(self, item_store: TreeStore, root_node):
        root = item_store.append(root_node, [
            'skytemple-e-bgp-symbolic', BACKGROUNDS_NAME, self, MainController, 0, False, '', True
        ])
        self._tree_model = item_store
        self._tree_level_iter = []
        for i, bgp_name in enumerate(self.list_of_bgps):
            self._tree_level_iter.append(
                item_store.append(root, [
                    'skytemple-e-bgp-symbolic', bgp_name, self,  BgpController, i, False, '', True
                ])
            )

        recursive_generate_item_store_row_label(self._tree_model[root])
Example #11
0
 def add_map(self, map_name):
     item_id = len(self.bgs.level)
     self.bgs.level.append(
         BgListEntry(map_name, map_name, map_name, [None] * 8)
     )
     parent = self._other_node
     if map_name[0] in self._sub_nodes.keys():
         parent = self._sub_nodes[map_name[0]]
     self._tree_level_iter.append(
         self._tree_model.append(parent, [
             'skytemple-e-mapbg-symbolic', map_name, self, BgController, item_id, False, '', True
         ])
     )
     recursive_generate_item_store_row_label(self._tree_model[parent])
     self.mark_as_modified(item_id)
     self.mark_level_list_as_modified()
Example #12
0
    def load_tree_items(self, item_store: TreeStore, root_node):
        root = item_store.append(root_node, [
            'skytemple-e-mapbg-symbolic', MAPBG_NAME, self, MainController, 0, False, '', True
        ])
        self._sub_nodes = {
            'S': item_store.append(root, [
                'skytemple-folder-symbolic', _('S - System'), self, FolderController, 'S - System', False, '', True
            ]),
            'T': item_store.append(root, [
                'skytemple-folder-symbolic', _('T - Town'), self, FolderController, 'T - Town', False, '', True
            ]),
            'D': item_store.append(root, [
                'skytemple-folder-symbolic', _('D - Dungeon'), self, FolderController, 'D - Dungeon', False, '', True
            ]),
            'G': item_store.append(root, [
                'skytemple-folder-symbolic', _('G - Guild'), self, FolderController, 'G - Guild', False, '', True
            ]),
            'H': item_store.append(root, [
                'skytemple-folder-symbolic', _('H - Habitat'), self, FolderController, 'H - Habitat', False, '', True
            ]),
            'P': item_store.append(root, [
                'skytemple-folder-symbolic', _('P - Places'), self, FolderController, 'P - Places', False, '', True
            ]),
            'V': item_store.append(root, [
                'skytemple-folder-symbolic', _('V - Visual'), self, FolderController, 'V - Visual', False, '', True
            ]),
            'W': item_store.append(root, [
                'skytemple-folder-symbolic', _('W - Weather'), self, FolderController, 'W - Weather', False, '', True
            ])
        }
        # Other
        self._other_node = item_store.append(root, [
            'skytemple-folder-symbolic', _('Others'), self, FolderController, None, False, '', True
        ])
        self._tree_model = item_store
        self._tree_level_iter = []
        for i, level in enumerate(self.bgs.level):
            parent = self._other_node
            if level.bma_name[0] in self._sub_nodes.keys():
                parent = self._sub_nodes[level.bma_name[0]]
            self._tree_level_iter.append(
                item_store.append(parent, [
                    'skytemple-e-mapbg-symbolic', level.bma_name, self,  BgController, i, False, '', True
                ])
            )

        recursive_generate_item_store_row_label(self._tree_model[root])
Example #13
0
    def load_tree_items(self, item_store: TreeStore, root_node):
        if self._errored:
            display_error(
                self._errored,
                _("The dungeon floor data of this ROM is corrupt. SkyTemple will still try to open it, "
                  "but dungeon editing will not be available. Expect other bugs. Please fix your ROM."
                  ), _("SkyTemple"))
            return
        self._validator = DungeonValidator(self.get_mappa().floor_lists)
        root = item_store.append(root_node, [
            ICON_ROOT, DUNGEONS_NAME, self, MainController, 0, False, '', True
        ])
        self._tree_model = item_store
        self._root_iter = root

        static_data = self.project.get_rom_module().get_static_data()
        self._fixed_floor_data = self.project.open_file_in_rom(
            FIXED_PATH, FileType.FIXED_BIN, static_data=static_data)
        self._dungeon_bin_context: ModelContext[
            DungeonBinPack] = self.project.open_file_in_rom(
                DUNGEON_BIN,
                FileType.DUNGEON_BIN,
                static_data=static_data,
                threadsafe=True)

        self._validator.validate(self.get_dungeon_list())

        self._fill_dungeon_tree()

        # Fixed rooms
        self._fixed_floor_root_iter = item_store.append(
            root_node, [
                ICON_FIXED_ROOMS, FIXED_ROOMS_NAME, self, FixedRoomsController,
                0, False, '', True
            ])
        for i in range(0, len(self._fixed_floor_data.fixed_floors)):
            self._fixed_floor_iters.append(
                item_store.append(self._fixed_floor_root_iter, [
                    ICON_FIXED_ROOMS,
                    f(_('Fixed Room {i}')), self, FixedController, i, False,
                    '', True
                ]))

        recursive_generate_item_store_row_label(self._tree_model[root])
        recursive_generate_item_store_row_label(
            self._tree_model[self._fixed_floor_root_iter])
Example #14
0
 def add_scene_sub(self, level_name, scene_name):
     file_name, ssb_file_name = self._create_scene_file(level_name,
                                                        scene_name,
                                                        'sss',
                                                        matching_ssb='00')
     self._map_ssss[level_name][file_name] = self._tree_model.append(
         self._sub_roots[level_name], [
             'skytemple-e-ground-symbolic', scene_name, self, SsaController,
             {
                 'map': level_name,
                 'file': file_name,
                 'type': 'sss',
                 'scripts': [ssb_file_name.split('/')[-1]]
             }, False, '', True
         ])
     recursive_generate_item_store_row_label(
         self._tree_model[self._map_ssss[level_name][file_name]])
     self.mark_as_modified(level_name, 'sss', file_name)
Example #15
0
 def create_new_level(self, new_name):
     parent = self._other_node
     if new_name[0] in self._sub_nodes.keys():
         parent = self._sub_nodes[new_name[0]]
     self._map_ssas[new_name] = {}
     self._map_ssss[new_name] = {}
     map_root = self._tree_model.append(parent, [
         'skytemple-folder-symbolic', new_name, self, MapController,
         new_name, False, '', True
     ])
     self._map_scene_root[new_name] = map_root
     ar = self._tree_model.append(map_root, [
         'skytemple-folder-open-symbolic',
         _('Acting (ssa)'), self, LsdController, new_name, False, '', True
     ])
     self._acting_roots[new_name] = ar
     sr = self._tree_model.append(map_root, [
         'skytemple-folder-open-symbolic',
         _('Sub (sss)'), self, SubController, new_name, False, '', True
     ])
     self._sub_roots[new_name] = sr
     recursive_generate_item_store_row_label(self._tree_model[parent])
Example #16
0
    def load_tree_items(self, item_store: TreeStore, root_node):

        root = item_store.append(root_node, [
            'skytemple-e-patch-symbolic', PATCHES, self, MainController, 0,
            False, '', True
        ])

        self._asm_iter = item_store.append(root, [
            'skytemple-e-patch-symbolic',
            _('ASM'), self, AsmController, 0, False, '', True
        ])
        self._asm_special_procs = item_store.append(self._asm_iter, [
            'skytemple-e-special-symbolic',
            _('Special Process Effects'), self, SPEffectsController, 0, False,
            '', True
        ])
        self._asm_item_effects = item_store.append(self._asm_iter, [
            'skytemple-e-item-symbolic',
            _('Item Effects'), self, ItemEffectsController, 0, False, '', True
        ])
        self._asm_move_effects = item_store.append(self._asm_iter, [
            'skytemple-e-move-symbolic',
            _('Move Effects'), self, MoveEffectsController, 0, False, '', True
        ])

        self._asm_iter = item_store.append(root, [
            'skytemple-e-patch-symbolic',
            _('C/Rust'), self, CotController, 0, False, '', True
        ])

        self._asm_iter = item_store.append(root, [
            'skytemple-e-patch-symbolic',
            _('Symbols'), self, PmdSkyDebugController, 0, False, '', True
        ])

        recursive_generate_item_store_row_label(item_store[root])
        self._tree_model = item_store
Example #17
0
 def add_scene_acting(self, level_name, scene_name):
     file_name, ssb_file_name = self._create_scene_file(level_name,
                                                        scene_name,
                                                        'ssa',
                                                        matching_ssb='')
     lsd_path = f'{SCRIPT_DIR}/{level_name}/{level_name.lower()}{LSD_EXT}'
     if not self.project.file_exists(lsd_path):
         self.project.create_new_file(lsd_path, FileType.LSD.new(),
                                      FileType.LSD)
     lsd: Lsd = self.project.open_file_in_rom(lsd_path, FileType.LSD)
     lsd.entries.append(scene_name)
     self._map_ssas[level_name][file_name] = self._tree_model.append(
         self._acting_roots[level_name], [
             'skytemple-e-ground-symbolic', scene_name, self, SsaController,
             {
                 'map': level_name,
                 'file': file_name,
                 'type': 'ssa',
                 'scripts': [ssb_file_name.split('/')[-1]]
             }, False, '', True
         ])
     recursive_generate_item_store_row_label(
         self._tree_model[self._map_ssas[level_name][file_name]])
     self.mark_as_modified(level_name, 'ssa', file_name)
Example #18
0
    def load_tree_items(self, item_store: TreeStore, root_node):
        self.dungeon_bin_context = self.project.open_file_in_rom(
            DUNGEON_BIN_PATH,
            FileType.DUNGEON_BIN,
            static_data=self.project.get_rom_module().get_static_data(),
            threadsafe=True)
        with self.dungeon_bin_context as dungeon_bin:
            self.list_of_wtes_dungeon_bin = dungeon_bin.get_files_with_ext(
                WTE_FILE_EXT)
            self.list_of_wtus_dungeon_bin = dungeon_bin.get_files_with_ext(
                WTU_FILE_EXT)
            self.list_of_zmappats_dungeon_bin = dungeon_bin.get_files_with_ext(
                ZMAPPAT_FILE_EXT)

        root = item_store.append(root_node, [
            'skytemple-e-graphics-symbolic', MISC_GRAPHICS, self,
            MainController, 0, False, '', True
        ])
        self._tree_model = item_store
        self._tree_level_iter = {}
        self._tree_level_dungeon_iter = {}

        # chr at the beginning:
        for i, name in enumerate(self.list_of_chrs):
            self._tree_level_iter[name] = item_store.append(
                root, [
                    'skytemple-e-graphics-symbolic', name, self, ChrController,
                    name, False, '', True
                ])

        sorted_entries = {}
        for name in self.list_of_w16s:
            sorted_entries[name] = False
        for name in self.list_of_wtes:
            sorted_entries[name] = True
        sorted_entries = {
            k: v
            for k, v in sorted(sorted_entries.items(),
                               key=lambda item: item[0])
        }

        for i, (name, is_wte) in enumerate(sorted_entries.items()):
            if not is_wte:
                self._tree_level_iter[name] = item_store.append(
                    root, [
                        'skytemple-e-graphics-symbolic', name, self,
                        W16Controller,
                        self.list_of_w16s.index(name), False, '', True
                    ])
            else:
                wtu_name = name[:-3] + WTU_FILE_EXT
                if wtu_name not in self.list_of_wtus:
                    wtu_name = None
                self._tree_level_iter[name] = item_store.append(
                    root, [
                        'skytemple-e-graphics-symbolic', name, self,
                        WteWtuController,
                        WteOpenSpec(name, wtu_name, False), False, '', True
                    ])

        # fonts at the end:
        for i, name in enumerate(self.list_of_font_dats):
            spec = FontOpenSpec(name, None, FontType.FONT_DAT)
            self._tree_level_iter[spec.get_row_name()] = item_store.append(
                root, [
                    'skytemple-e-graphics-symbolic',
                    spec.get_row_name(), self, FontController, spec, False, '',
                    True
                ])

        for i, name in enumerate(self.list_of_font_sir0s):
            spec = FontOpenSpec(name, None, FontType.FONT_SIR0)
            self._tree_level_iter[spec.get_row_name()] = item_store.append(
                root, [
                    'skytemple-e-graphics-symbolic',
                    spec.get_row_name(), self, FontController, spec, False, '',
                    True
                ])

        for i, name in enumerate(self.list_of_banner_fonts):
            for assoc in FONT_PAL_ASSOC:
                if name == assoc[0]:
                    none_assoc = False
                    pal_name = assoc[1]
                    if pal_name not in self.list_of_bins:
                        pal_name = None
                    if not none_assoc or pal_name != None:
                        if pal_name == None:
                            none_assoc = True
                        spec = FontOpenSpec(name, pal_name,
                                            FontType.BANNER_FONT)
                        self._tree_level_iter[
                            spec.get_row_name()] = item_store.append(
                                root, [
                                    'skytemple-e-graphics-symbolic',
                                    spec.get_row_name(), self, FontController,
                                    spec, False, '', True
                                ])

        for i, name in enumerate(self.list_of_graphic_fonts):
            pal_name = name[:-3] + PAL_FILE_EXT
            if pal_name not in self.list_of_pals:
                pal_name = None
            spec = FontOpenSpec(name, pal_name, FontType.GRAPHIC_FONT)
            self._tree_level_iter[spec.get_row_name()] = item_store.append(
                root, [
                    'skytemple-e-graphics-symbolic',
                    spec.get_row_name(), self, GraphicFontController, spec,
                    False, '', True
                ])

        # dungeon bin entries at the end:
        for i, name in enumerate(
                self.list_of_wtes_dungeon_bin):  # type: ignore
            wtu_name = name[:-3] + WTU_FILE_EXT
            if name[:-3] + WTU_FILE_EXT not in self.list_of_wtus_dungeon_bin:  # type: ignore
                wtu_name = None
            self._tree_level_dungeon_iter[name] = item_store.append(
                root, [
                    'skytemple-e-graphics-symbolic', 'dungeon.bin:' + name,
                    self, WteWtuController,
                    WteOpenSpec(name, wtu_name, True), False, '', True
                ])
        # zmappat at the end:
        for i, name in enumerate(
                self.list_of_zmappats_dungeon_bin):  # type: ignore
            self._tree_level_dungeon_iter[name] = item_store.append(
                root, [
                    'skytemple-e-graphics-symbolic', 'dungeon.bin:' + name,
                    self, ZMappaTController, name, False, '', True
                ])

        # cart removed at the end:
        self._tree_level_iter[CART_REMOVED_NAME] = item_store.append(
            root, [
                'skytemple-e-graphics-symbolic', CART_REMOVED_NAME, self,
                CartRemovedController, CART_REMOVED_NAME, False, '', True
            ])

        recursive_generate_item_store_row_label(
            self._tree_model[root])  # type: ignore
Example #19
0
    def load_tree_items(self, item_store: TreeStore, root_node):
        # -> Script [main]
        root = item_store.append(root_node, [
            'skytemple-e-ground-symbolic', SCRIPT_SCENES, self, MainController,
            0, False, '', True
        ])
        self._root = root

        self._tree_model = item_store

        #    -> Common [common]
        item_store.append(root, [
            'skytemple-e-script-symbolic', SCRIPT_SCRIPTS, self, SsbController,
            0, False, '', True
        ])

        sub_nodes = {
            'S':
            item_store.append(root, [
                'skytemple-folder-symbolic',
                _('S - System'), self, FolderController,
                _('S - System'), False, '', True
            ]),
            'T':
            item_store.append(root, [
                'skytemple-folder-symbolic',
                _('T - Town'), self, FolderController,
                _('T - Town'), False, '', True
            ]),
            'D':
            item_store.append(root, [
                'skytemple-folder-symbolic',
                _('D - Dungeon'), self, FolderController,
                _('D - Dungeon'), False, '', True
            ]),
            'G':
            item_store.append(root, [
                'skytemple-folder-symbolic',
                _('G - Guild'), self, FolderController,
                _('G - Guild'), False, '', True
            ]),
            'H':
            item_store.append(root, [
                'skytemple-folder-symbolic',
                _('H - Habitat'), self, FolderController,
                _('H - Habitat'), False, '', True
            ]),
            'P':
            item_store.append(root, [
                'skytemple-folder-symbolic',
                _('P - Places'), self, FolderController,
                _('P - Places'), False, '', True
            ]),
            'V':
            item_store.append(root, [
                'skytemple-folder-symbolic',
                _('V - Visual'), self, FolderController,
                _('V - Visual'), False, '', True
            ])
        }
        # Other
        other = item_store.append(root, [
            'skytemple-folder-symbolic',
            _('Others'), self, FolderController, None, False, '', True
        ])
        self._other_node = other
        self._sub_nodes = sub_nodes

        for i, map_obj in enumerate(
                self.script_engine_file_tree['maps'].values()):
            parent = other
            if map_obj['name'][0] in sub_nodes.keys():
                parent = sub_nodes[map_obj['name'][0]]
            self._map_ssas[map_obj['name']] = {}
            self._map_ssss[map_obj['name']] = {}
            #    -> (Map Name) [map]
            map_root = item_store.append(parent, [
                'skytemple-folder-symbolic', map_obj['name'], self,
                MapController, map_obj['name'], False, '', True
            ])
            self._map_scene_root[map_obj['name']] = map_root

            if map_obj['enter_sse'] is not None:
                #          -> Enter [sse]
                self._map_sse[map_obj['name']] = item_store.append(
                    map_root, [
                        'skytemple-e-ground-symbolic',
                        _('Enter (sse)'), self, SsaController, {
                            'map': map_obj['name'],
                            'file':
                            f"{SCRIPT_DIR}/{map_obj['name']}/{map_obj['enter_sse']}",
                            'type': 'sse',
                            'scripts': map_obj['enter_ssbs'].copy()
                        }, False, '', True
                    ])

            #       -> Acting Scripts [lsd]
            acting_root = item_store.append(map_root, [
                'skytemple-folder-open-symbolic',
                _('Acting (ssa)'), self, LsdController, map_obj['name'], False,
                '', True
            ])
            self._acting_roots[map_obj['name']] = acting_root
            for ssa, ssb in map_obj['ssas']:
                stem = ssa[:-len(SSA_EXT)]
                #             -> Scene [ssa]
                filename = f"{SCRIPT_DIR}/{map_obj['name']}/{ssa}"
                self._map_ssas[map_obj['name']][filename] = item_store.append(
                    acting_root, [
                        'skytemple-e-ground-symbolic', stem, self,
                        SsaController, {
                            'map': map_obj['name'],
                            'file': filename,
                            'type': 'ssa',
                            'scripts': [ssb]
                        }, False, '', True
                    ])

            #       -> Sub Scripts [sub]
            sub_root = item_store.append(map_root, [
                'skytemple-folder-open-symbolic',
                _('Sub (sss)'), self, SubController, map_obj['name'], False,
                '', True
            ])
            self._sub_roots[map_obj['name']] = sub_root
            for sss, ssbs in map_obj['subscripts'].items():
                stem = sss[:-len(SSS_EXT)]
                #             -> Scene [sss]
                filename = f"{SCRIPT_DIR}/{map_obj['name']}/{sss}"
                self._map_ssss[map_obj['name']][filename] = item_store.append(
                    sub_root, [
                        'skytemple-e-ground-symbolic', stem, self,
                        SsaController, {
                            'map': map_obj['name'],
                            'file': filename,
                            'type': 'sss',
                            'scripts': ssbs.copy()
                        }, False, '', True
                    ])

        recursive_generate_item_store_row_label(self._tree_model[root])
Example #20
0
    def change_floor_count(self, dungeon_id,
                           number_floors_new):  #TODO: Unchanged
        """
        This will update the floor count for the given dungeon:
        - Will add or remove floors from the dungeon's mappa entry, starting at the end of this dungeon's floor
          based on the current floor count for this dungeon
        - Update the dungeon's data entry (floor count + total floor count in group)
        - For all other dungeons in the same group: Update data entries (total floor count + start offset)
        - Regenerate the UI in SkyTemple (dungeon tree)
        """

        dungeon_definitions = self.get_dungeon_list()

        is_group: Union[False, DungeonGroup] = False
        for dungeon_or_group in self.load_dungeons():
            if dungeon_or_group == dungeon_id:
                break
            elif isinstance(dungeon_or_group, DungeonGroup):
                if dungeon_id in dungeon_or_group.dungeon_ids:
                    is_group = dungeon_or_group
                    break

        mappa_index = dungeon_definitions[dungeon_id].mappa_index
        floor_offset = dungeon_definitions[dungeon_id].start_after
        number_floors_old = dungeon_definitions[dungeon_id].number_floors
        floor_list = self.get_mappa().floor_lists[mappa_index]
        floors_added = number_floors_new - number_floors_old

        # Update Mappa
        if floors_added == 0:
            return  # nothing to do
        if floors_added < 0:
            # We removed floors
            for _ in range(0, -floors_added):
                del floor_list[floor_offset + number_floors_new]
        else:
            # We added floors
            last_floor_xml = floor_list[floor_offset + number_floors_old -
                                        1].to_xml()
            for i in range(0, floors_added):
                floor_list.insert(floor_offset + number_floors_old + i,
                                  MappaFloor.from_xml(last_floor_xml))

        # Update floor ranks
        self.extend_nb_floors_ranks(
            dungeon_id, floor_offset + number_floors_old, floors_added,
            self.get_floor_rank(dungeon_id,
                                floor_offset + number_floors_old - 1))
        if self.has_floor_ranks():
            self.project.mark_as_modified(FLOOR_RANKS)
        # Update mission forbidden
        self.extend_nb_floors_mf(
            dungeon_id, floor_offset + number_floors_old, floors_added,
            self.get_floor_mf(dungeon_id,
                              floor_offset + number_floors_old - 1))
        if self.has_mission_forbidden():
            self.project.mark_as_modified(FLOOR_MISSION_FORBIDDEN)

        # Update dungeon data
        dungeon_definitions[dungeon_id].number_floors = number_floors_new
        if is_group:
            new_total_floor_count = sum([
                dungeon_definitions[x].number_floors
                for x in is_group.dungeon_ids
            ])
            dungeon_definitions[
                dungeon_id].number_floors_in_group = new_total_floor_count

            for dungeon_in_group in (x for x in is_group.dungeon_ids
                                     if x != dungeon_id):
                # Update dungeon data of group floors
                if dungeon_definitions[
                        dungeon_in_group].start_after > dungeon_definitions[
                            dungeon_id].start_after:
                    dungeon_definitions[
                        dungeon_in_group].start_after += floors_added
                dungeon_definitions[
                    dungeon_in_group].number_floors_in_group = new_total_floor_count
        else:
            dungeon_definitions[
                dungeon_id].number_floors_in_group = number_floors_new

        # Re-count floors
        for i, floor in enumerate(floor_list):
            floor.layout.floor_number = i + 1

        # Mark as changed
        self.mark_dungeon_as_modified(dungeon_id, True)
        self.save_dungeon_list(dungeon_definitions)
        if is_group:
            for dungeon_in_group in is_group.dungeon_ids:
                self._regenerate_dungeon_floors(
                    dungeon_in_group,
                    dungeon_definitions[dungeon_in_group].start_after)
        else:
            self._regenerate_dungeon_floors(dungeon_id, floor_offset)
        recursive_generate_item_store_row_label(
            self._tree_model[self._root_iter])