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())) pattern_table = PatternTable(self.object_set) palette = load_palette(self.object_set, 0) 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, pattern_table, tsa_data) x = (i % horizontal) * block_length y = (i // horizontal) * block_length block.draw(painter, x, y, block_length) return
def _draw_floor(self, painter: QPainter, level: Level): floor_level = (GROUND - 1) * self.block_length floor_block_index = 86 palette_group = load_palette(level.object_set_number, level.header.object_palette_index) pattern_table = PatternTable(level.header.graphic_set_index) tsa_data = ROM().get_tsa_data(level.object_set_number) floor_block = Block(floor_block_index, palette_group, pattern_table, tsa_data) for x in range(level.width): floor_block.draw(painter, x * self.block_length, floor_level, self.block_length)
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 _draw_block(self, painter: QPainter, block_index, x, y, block_length, transparent): if block_index not in self.block_cache: if block_index > 0xFF: rom_block_index = ROM().get_byte( block_index ) # block_index is an offset into the graphic memory block = Block(rom_block_index, self.palette_group, self.pattern_table, self.tsa_data) else: block = Block(block_index, self.palette_group, self.pattern_table, self.tsa_data) self.block_cache[block_index] = block self.block_cache[block_index].draw( painter, x * block_length, y * block_length, block_length=block_length, selected=self.selected, transparent=transparent, )
def _load_objects(self): self.objects.clear() for index, world_position in enumerate(self._internal_world_map.gen_positions()): screen_offset = (index // WORLD_MAP_SCREEN_SIZE) * WORLD_MAP_SCREEN_WIDTH x = screen_offset + (index % WORLD_MAP_SCREEN_WIDTH) y = (index // WORLD_MAP_SCREEN_WIDTH) % WORLD_MAP_HEIGHT block = Block(world_position.tile(), self.palette_group, self.pattern_table, self.tsa_data) self.objects.append(MapObject(block, x, y)) assert len(self.objects) % WORLD_MAP_HEIGHT == 0