Esempio n. 1
0
    def __init__(self, level_name: str, layout_address: int,
                 enemy_data_offset: int, object_set_number: int):
        super(Level, self).__init__(object_set_number, layout_address)

        self._signal_emitter = LevelSignaller()

        self.attached_to_rom = True

        self.object_set = ObjectSet(object_set_number)

        self.undo_stack = UndoStack()

        self.name = level_name

        self.header_offset = layout_address
        self.enemy_offset = enemy_data_offset

        self.objects: List[LevelObject] = []
        self.jumps: List[Jump] = []
        self.enemies: List[EnemyObject] = []

        rom = ROM()

        self.header_bytes = rom.bulk_read(Level.HEADER_LENGTH,
                                          self.header_offset)
        self._parse_header()

        self.object_offset = self.header_offset + Level.HEADER_LENGTH

        object_data = ROM.rom_data[self.object_offset:]
        enemy_data = ROM.rom_data[self.enemy_offset:]

        self._load_level_data(object_data, enemy_data)

        self.changed = False
Esempio n. 2
0
    def __init__(self, world: int, level: int, layout_address: int,
                 enemy_data_offset: int, object_set_number: int):
        super(Level, self).__init__(object_set_number, layout_address)

        self._signal_emitter = LevelSignaller()

        self.attached_to_rom = True

        self.object_set = ObjectSet(object_set_number)

        self.undo_stack = UndoStack()

        level_index = Level.world_indexes[world] + level

        level_data: Mario3Level = Level.offsets[level_index]

        if world == 0:
            self.name = level_data.name
        else:
            self.name = f"Level {world}-{level}, '{level_data.name}'"

        # TODO get rid of this; only used for naming and M3L header
        self.world = world
        self.level_number = level

        self.header_offset = layout_address
        self.enemy_offset = enemy_data_offset

        self.objects: List[LevelObject] = []
        self.jumps: List[Jump] = []
        self.enemies: List[EnemyObject] = []

        rom = ROM()

        self.header_bytes = rom.bulk_read(Level.HEADER_LENGTH,
                                          self.header_offset)
        self._parse_header()

        self.object_offset = self.header_offset + Level.HEADER_LENGTH

        object_data = ROM.rom_data[self.object_offset:]
        enemy_data = ROM.rom_data[self.enemy_offset:]

        self._load_level_data(object_data, enemy_data)

        self.changed = False