def updateGraphicsBanks(self, romdata): self.banks = [] bankAddresses = [] for bankNum in range(0, self.BANK_AMOUNT): bankPointer = self.GRAPHICS_BANK_HEADER_ADDRESS + (bankNum * 8) bankAddresses.append(DataCompressor.readSnesPointer(romdata, bankPointer)) bankAddresses.append(DataCompressor.readSnesPointer(romdata, bankPointer + 3)) for bankNum in range(0, self.BANK_AMOUNT*2): bankData = DataCompressor.decompress(romdata, bankAddresses[bankNum]) hasPalettes = True if (bankNum % 2): hasPalettes = False bank = GraphicBank(bankData, hasPalettes) if not hasPalettes: bank.setPalettes(self.banks[bankNum-1].getPalettes()) bank.updateImage(self.DEFAULT_BANK_PALETTE) self.banks.append(bank)
def update(self, romdata): assert self.levelHeaderAddress >= 0 assert self.levelNumber >= 0 # level header amount might be changeable if some level data is moved around assert self.levelNumber < self.LEVEL_HEADER_AMOUNT self.levelPointer = DataCompressor.readSnesPointer(romdata, self.levelHeaderAddress) self.graphicsBankIndex = romdata[self.levelHeaderAddress + 0x03] self.fieldNumber = romdata[self.levelHeaderAddress + 0x04] self.musicSelect = romdata[self.levelHeaderAddress + 0x05] self.enemyType[0] = romdata[self.levelHeaderAddress + 0x06] self.enemyType[1] = romdata[self.levelHeaderAddress + 0x07] self.enemyType[2] = romdata[self.levelHeaderAddress + 0x08] self.enemyType[3] = romdata[self.levelHeaderAddress + 0x09] self.enemyType[4] = romdata[self.levelHeaderAddress + 0x0A] self.enemyType[5] = romdata[self.levelHeaderAddress + 0x0B] self.waterHeight = romdata[self.levelHeaderAddress + 0x1C] self.waterType = romdata[self.levelHeaderAddress + 0x1D] self.levelTimer = DataCompressor.readSnesPointer(romdata, self.levelHeaderAddress + 0x1F) self.doorExits[0] = romdata[self.levelHeaderAddress + 0x21] self.doorExits[1] = romdata[self.levelHeaderAddress + 0x22] self.doorExits[2] = romdata[self.levelHeaderAddress + 0x23] self.doorExits[3] = romdata[self.levelHeaderAddress + 0x24]
def setTileIndex(self, leveldata): offset = (self.LEVEL_TILE_AMOUNT * 3) + 2 tileIndexBytes = leveldata[offset : offset + self.LEVEL_TILE_INDEX_SIZE] self.tileIndex = DataCompressor.byteListIntoBitList(tileIndexBytes, False)
def openLevel(self, romdata, levelNumber): self.levelHeader = LevelHeader(levelNumber) self.levelHeader.update(romdata) levelData = DataCompressor.decompress(romdata, self.levelHeader.levelPointer) self.level = Level(self.levelHeader) self.level.update(levelData)