Zamiel icon

floor_counter.py

Zamiel | PRO | 09/04/18 04:48:26 PM UTC | 0 ⭐ | 285 👁️ | Never ⏰ | []
text |

2.53 KB

|

None

|

0 👍

/

0 👎

import struct
 f = open('dump/layouts_47808388.bin', 'r')
 def main():
    seed = ReadUInt32()
    print('--------')
    print(SeedToString(seed))
    print('--------\n')
     # Stages
    for i in xrange(0, 14):
        stageId = ReadInt8()
        stageType = ReadInt8()
        roomCount = ReadInt8()
        gridCount = ReadInt8()
        print('Stage: ' + str(stageId) + '.' + str(stageType) + ', gridCount: ' + str(gridCount))
         w, h = 13, 13;
        grid = [[0 for x in range(w)] for y in range(h)] 
        for j in xrange(0, gridCount):
            room = readRoom()
            print('    Room ' + str(j) + ': ' + str(room.Id) + ' @ (' + str(room.X) + ', ' + str(room.Y) + ')')
            grid[room.X][room.Y] = room
         iAmEror = readRoom(True)
        crawlSpace = readRoom(True)
        blackMarket = readRoom(True)
        if stageId == 6:
            bossRush = readRoom(True)
         # Keep track of the stage
        # TODO
        print('    End of stage ' + str(stageId) + '.\n')
 def SeedToString(num):
    #print('Converting ' + str(num) + ' to a seed string...')
    chars = "ABCDEFGHJKLMNPQRSTWXYZ01234V6789"
    x = 0
    tnum = num;
    while tnum != 0:
        x = (tnum + x) & 0xFF;
        x = ((x >> 7) + (x << 1)) & 0xFF;
        tnum >>= 5
    num ^= 0x0FEF7FFD
    tnum = num << 8 | x
     s = ""
    for i in xrange(0, 8):
        if i >= 0 and i <= 5:
            index = num >> (27 - (i * 5)) & 0x1F
        elif i == 6:
            index = tnum >> 5 & 0x1F
        elif i == 7:
            index = tnum & 0x1F
        s += chars[index]
     return s
 def readRoom(grid = False):
    room = dotdict({})
    if grid:
        room.Offset = -1
        room.X = -1
        room.Y = 1
    else:
        room.Offset = ReadInt8()
        room.X = ReadInt8()
        room.Y = ReadInt8()
    room.StageIndex = ReadInt8()
    room.Type = ReadInt8()
    room.SubType = ReadInt8()
    room.Id = ReadInt16()
    return room
 def ReadInt8():
    #print(f.tell())
    return ord(struct.unpack('c', f.read(1))[0])
 def ReadInt16():
    return struct.unpack('H', f.read(2))[0]
 def ReadUInt32():
    return struct.unpack('I', f.read(4))[0]
 # From: https://stackoverflow.com/questions/2352181/how-to-use-a-dot-to-access-members-of-dictionary
class dotdict(dict):
     """dot.notation access to dictionary attributes"""
     __getattr__ = dict.get
     __setattr__ = dict.__setitem__
     __delattr__ = dict.__delitem__
 if __name__ == "__main__":
    main()

Comments