def paintEvent(self, event: QPaintEvent): painter = QPainter(self) bg_color = bg_color_for_object_set(self.object_set, 0) painter.setBrush(QBrush(bg_color)) painter.drawRect(QRect(QPoint(0, 0), self.size())) graphics_set = GraphicsSet(self.object_set) palette = load_palette_group(self.object_set, self.palette_group) tsa_data = ROM.get_tsa_data(self.object_set) horizontal = self.sprites_horiz block_length = Block.WIDTH * self.zoom for i in range(self.sprites): block = Block(i, palette, graphics_set, tsa_data) x = (i % horizontal) * block_length y = (i // horizontal) * block_length block.draw(painter, x, y, block_length) return
def __init__(self, parent, level_ref: LevelRef): title = f"Palette Groups for Object Set {level_ref.level.object_set_number}" super(PaletteViewer, self).__init__(parent, title=title) self.level_ref = level_ref layout = QGridLayout(self) for palette_group in range(PALETTE_GROUPS_PER_OBJECT_SET): group_box = QGroupBox() group_box.setTitle(f"Palette Group {palette_group}") group_box_layout = QVBoxLayout(group_box) group_box_layout.setSpacing(0) palette = load_palette_group( self.level_ref.level.object_set_number, palette_group) for palette_no in range(PALETTES_PER_PALETTES_GROUP): group_box_layout.addWidget(PaletteWidget(palette, palette_no)) row = palette_group // self.palettes_per_row col = palette_group % self.palettes_per_row layout.addWidget(group_box, row, col)
def __init__(self, object_set: int, palette_index: int): png = QImage(str(data_dir.joinpath("gfx.png"))) png.convertTo(QImage.Format_RGB888) rows_per_object_set = 256 // 64 y_offset = 12 * rows_per_object_set * Block.HEIGHT self.png_data = png.copy(QRect(0, y_offset, png.width(), png.height() - y_offset)) self.palette_group = load_palette_group(object_set, palette_index)
def _draw_background(self, painter: QPainter, level: Level): painter.save() if level.object_set_number == CLOUDY_OBJECT_SET: bg_color = QColor( *NESPalette[load_palette_group(level.object_set_number, level.header.object_palette_index)[3][2]] ) else: bg_color = bg_color_for_object_set(level.object_set_number, level.header.object_palette_index) painter.fillRect(level.get_rect(self.block_length), bg_color) painter.restore()
def _block_from_index(block_index: int, level: Level) -> Block: """ Returns the block at the given index, from the TSA table for the given level. :param block_index: :param level: :return: """ palette_group = load_palette_group(level.object_set_number, level.header.object_palette_index) graphics_set = GraphicsSet(level.header.graphic_set_index) tsa_data = ROM().get_tsa_data(level.object_set_number) return Block(block_index, palette_group, graphics_set, tsa_data)
def __init__(self, world_index): self._internal_world_map = _WorldMap.from_world_number(ROM(), world_index) super(WorldMap, self).__init__(0, self._internal_world_map.layout_address) self.name = f"World {world_index} - Overworld" self.graphics_set = GraphicsSet(OVERWORLD_GRAPHIC_SET) self.palette_group = load_palette_group(WORLD_MAP_OBJECT_SET, 0) self.object_set = WORLD_MAP_OBJECT_SET self.tsa_data = ROM.get_tsa_data(self.object_set) self.world = 0 self.level_number = 0 self.objects = [] self._load_objects() self._calc_size()
def set_palette_group_index(self, palette_group_index: int): self.palette_group_index = palette_group_index self.palette_group = load_palette_group(self.object_set, self.palette_group_index)