Ejemplo n.º 1
0
class ExtendedHeader(DataLoader):
    flags = None
    buildType = None
    buildFlags = None
    screenRatioTolerance = None
    screenAngle = None

    def initialize(self):
        self.flags = BitDict(
            'KeepScreenRatio',
            'FrameTransition',  # (HWA only) frame has a transition
            'ResampleStretch',  # (HWA only) resample while resizing
            'GlobalRefresh'  # (Mobile) force global refresh
        )

    def read(self, reader):
        self.flags.setFlags(reader.readInt())
        self.buildType = reader.readInt(True)
        self.buildFlags = reader.readInt(True)
        self.screenRatioTolerance = reader.readShort()
        self.screenAngle = reader.readShort()
        reader.readInt()  # unused

    def write(self, reader):
        reader.writeInt(self.flags.getFlags())
        reader.writeInt(self.buildType, True)
        reader.writeInt(self.buildFlags, True)
        reader.writeShort(self.screenRatioTolerance)
        reader.writeShort(self.screenAngle)
        reader.writeInt(0)  # unused
Ejemplo n.º 2
0
class ExtendedHeader(DataLoader):
    flags = None
    buildType = None
    buildFlags = None
    screenRatioTolerance = None
    screenAngle = None
    
    def initialize(self):
        self.flags = BitDict(
            'KeepScreenRatio',
            'FrameTransition', # (HWA only) frame has a transition
            'ResampleStretch', # (HWA only) resample while resizing
            'GlobalRefresh' # (Mobile) force global refresh
        )

    def read(self, reader):
        self.flags.setFlags(reader.readInt())
        self.buildType = reader.readInt(True)
        self.buildFlags = reader.readInt(True)
        self.screenRatioTolerance = reader.readShort()
        self.screenAngle = reader.readShort()
        reader.readInt() # unused
    
    def write(self, reader):
        reader.writeInt(self.flags.getFlags())
        reader.writeInt(self.buildType, True)
        reader.writeInt(self.buildFlags, True)
        reader.writeShort(self.screenRatioTolerance)
        reader.writeShort(self.screenAngle)
        reader.writeInt(0) # unused
Ejemplo n.º 3
0
class FrameHeader(DataLoader):
    width = None
    height = None
    flags = None
    background = None

    def initialize(self):
        # 0x8000 == TimedMovements
        self.flags = BitDict('DisplayName', 'GrabDesktop', 'KeepDisplay',
                             'FadeIn', 'FadeOut', 'TotalCollisionMask',
                             'Password', 'ResizeAtStart', 'DoNotCenter',
                             'ForceLoadOnCall', 'NoSurface', 'Reserved_1',
                             'Reserved_2', 'RecordDemo', None,
                             'TimedMovements')

    def read(self, reader):
        self.width = reader.readInt()
        self.height = reader.readInt()
        self.background = reader.readColor()
        self.flags.setFlags(reader.readInt(True))

    def write(self, reader):
        reader.writeInt(self.width)
        reader.writeInt(self.height)
        reader.writeColor(self.background)
        reader.writeInt(self.flags.getFlags(), True)
Ejemplo n.º 4
0
class Transition(DataLoader):
    module = None
    name = None
    id = None
    transitionId = None
    duration = None # in ms
    flags = None
    color = None
    parameterData = None

    def initialize(self):
        self.flags = BitDict('Color')

    def read(self, reader):
        self.module = reader.read(reader.readInt())
        self.name = reader.read(reader.readInt())
        self.id = reader.read(4)
        self.transitionId = reader.read(4)
        self.duration = reader.readInt()
        self.flags.setFlags(reader.readInt())
        self.color = reader.readColor()
        self.parameterData = reader.read(reader.readInt())

    def write(self, reader):
        reader.writeInt(len(self.module)); reader.write(self.module)
        reader.writeInt(len(self.name)); reader.write(self.name)
        reader.write(self.id)
        reader.write(self.transitionId)
        reader.writeInt(self.duration)
        reader.writeInt(self.flags.getFlags())
        reader.writeColor(self.color)
        reader.writeInt(len(self.parameterData)); reader.write(
            self.parameterData)
Ejemplo n.º 5
0
class Transition(DataLoader):
    module = None
    name = None
    id = None
    transitionId = None
    duration = None # in ms
    flags = None
    color = None
    parameterData = None

    def initialize(self):
        self.flags = BitDict('Color')

    def read(self, reader):
        self.module = reader.read(reader.readInt())
        self.name = reader.read(reader.readInt())
        self.id = reader.read(4)
        self.transitionId = reader.read(4)
        self.duration = reader.readInt()
        self.flags.setFlags(reader.readInt())
        self.color = reader.readColor()
        self.parameterData = reader.read(reader.readInt())

    def write(self, reader):
        reader.writeInt(len(self.module)); reader.write(self.module)
        reader.writeInt(len(self.name)); reader.write(self.name)
        reader.write(self.id)
        reader.write(self.transitionId)
        reader.writeInt(self.duration)
        reader.writeInt(self.flags.getFlags())
        reader.writeColor(self.color)
        reader.writeInt(len(self.parameterData)); reader.write(
            self.parameterData)
Ejemplo n.º 6
0
class ExtendedHeader(DataLoader):
    flags = None
    buildType = None
    buildFlags = None
    screenRatioTolerance = None
    screenAngle = None

    def initialize(self):
        self.flags = BitDict(
            "KeepScreenRatio",
            "FrameTransition",  # (HWA only) frame has a transition
            "ResampleStretch",  # (HWA only) resample while resizing
            "GlobalRefresh",  # (Mobile) force global refresh
        )

    def read(self, reader):
        self.flags.setFlags(reader.readInt())
        self.buildType = reader.readInt(True)
        self.buildFlags = reader.readInt(True)
        self.screenRatioTolerance = reader.readShort()
        self.screenAngle = reader.readShort()
        reader.readInt()  # unused
        if self.buildType >= 0x10000000:
            self.parent.settings["compat"] = True

    def write(self, reader):
        reader.writeInt(self.flags.getFlags())
        reader.writeInt(self.buildType, True)
        reader.writeInt(self.buildFlags, True)
        reader.writeShort(self.screenRatioTolerance)
        reader.writeShort(self.screenAngle)
        reader.writeInt(0)  # unused
Ejemplo n.º 7
0
class Layer(DataLoader):
    name = None
    flags = None
    xCoefficient = None
    yCoefficient = None
    numberOfBackgrounds = None
    backgroundIndex = None
    effect = None

    def initialize(self):
        self.flags = BitDict(
            'XCoefficient',
            'YCoefficient',
            'DoNotSaveBackground',
            None,  #Wrap (Obsolete)
            'Visible',  # visible
            'WrapHorizontally',
            'WrapVertically',
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            'Redraw',
            'ToHide',
            'ToShow')

    def read(self, reader):
        value = reader.readInt(True)
        self.flags.setFlags(value)
        self.xCoefficient = reader.readFloat()
        self.yCoefficient = reader.readFloat()
        self.numberOfBackgrounds = reader.readInt()
        self.backgroundIndex = reader.readInt()
        self.name = self.readString(reader)

    def write(self, reader):
        reader.writeInt(self.flags.getFlags(), True)
        reader.writeFloat(self.xCoefficient)
        reader.writeFloat(self.yCoefficient)
        reader.writeInt(self.numberOfBackgrounds)
        reader.writeInt(self.backgroundIndex)
        reader.writeString(self.name)

    def getBackgrounds(self, objectInstances):
        return objectInstances.items[self.
                                     backgroundIndex:self.backgroundIndex +
                                     self.numberOfBackgrounds]

    def getInstances(self, objectInstances):
        return self.parent.getObjectInstances(self, objectInstances)
Ejemplo n.º 8
0
class Layer(DataLoader):
    name = None
    flags = None
    xCoefficient = None
    yCoefficient = None
    numberOfBackgrounds = None
    backgroundIndex = None
    effect = None

    def initialize(self):
        self.flags = BitDict(
            'XCoefficient',
            'YCoefficient',
            'DoNotSaveBackground',
            None, #Wrap (Obsolete)
            'Visible', # visible
            'WrapHorizontally',
            'WrapVertically',
            None, None, None, None,
            None, None, None, None, None,
            'Redraw',
            'ToHide',
            'ToShow'
        )

    def read(self, reader):
        value = reader.readInt(True)
        self.flags.setFlags(value)
        self.xCoefficient = reader.readFloat()
        self.yCoefficient = reader.readFloat()
        self.numberOfBackgrounds = reader.readInt()
        self.backgroundIndex = reader.readInt()
        self.name = self.readString(reader)

    def write(self, reader):
        reader.writeInt(self.flags.getFlags(), True)
        reader.writeFloat(self.xCoefficient)
        reader.writeFloat(self.yCoefficient)
        reader.writeInt(self.numberOfBackgrounds)
        reader.writeInt(self.backgroundIndex)
        reader.writeString(self.name)

    def getBackgrounds(self, objectInstances):
        return objectInstances.items[
            self.backgroundIndex:self.backgroundIndex+self.numberOfBackgrounds]

    def getInstances(self, objectInstances):
        return self.parent.getObjectInstances(self,
            objectInstances)
Ejemplo n.º 9
0
class FrameHeader(DataLoader):
    width = None
    height = None
    flags = None
    background = None
    
    def initialize(self):
        # 0x8000 == TimedMovements
        self.flags = BitDict(
            'DisplayName',
            'GrabDesktop',
            'KeepDisplay',
            'FadeIn',
            'FadeOut',
            'TotalCollisionMask',
            'Password',
            'ResizeAtStart',
            'DoNotCenter',
            'ForceLoadOnCall',
            'NoSurface',
            'Reserved_1',
            'Reserved_2',
            'RecordDemo',
            None,
            'TimedMovements'
        )

    def read(self, reader):
        self.width = reader.readInt()
        self.height = reader.readInt()
        self.background = reader.readColor()
        self.flags.setFlags(reader.readInt(True))

    def write(self, reader):
        reader.writeInt(self.width)
        reader.writeInt(self.height)
        reader.writeColor(self.background)
        reader.writeInt(self.flags.getFlags(), True)
Ejemplo n.º 10
0
class Frame(DataLoader):
    handle = None
    name = None
    size = None
    background = None
    maxObjects = None
    password = None
    palette = None
    fadeIn = None
    fadeOut = None
    def initialize(self):
        self.palette = []
        self.flags = BitDict(
            'GrabDesktop',
            'KeepDisplay',
            'BackgroundCollisions',
            'DisplayFrameTitle',
            'ResizeToScreen',
            'ForceLoadOnCall',
            'NoDisplaySurface',
            'ScreenSaverSetup',
            'TimerBasedMovements',
            'MochiAds',
            'NoGlobalEvents'
        )

    def read(self, reader):
        self.handle = reader.readInt()
        self.name = reader.read(reader.readInt())
        self.size = (reader.readInt(), reader.readInt())
        self.background = reader.readColor()
        self.flags.setFlags(reader.readInt(True))

        self.maxObjects = reader.readInt()
        self.password = reader.read(reader.readInt())
        checkDefault(reader, reader.readInt(), 0)

        self.lastViewedX = reader.readInt()
        self.lastViewedY = reader.readInt()

        self.palette = [reader.readColor()
            for _ in xrange(reader.readInt())]

        self.stampHandle = reader.readInt()

        self.activeLayer = reader.readInt()

        self.layers = [self.new(Layer, reader)
            for _ in xrange(reader.readInt())]

        if reader.readByte() != 0:
            self.fadeIn = self.new(Transition, reader)

        if reader.readByte() != 0:
            self.fadeOut = self.new(Transition, reader)

        self.items = items = [self.new(FrameItem, reader)
            for _ in xrange(reader.readInt())]

        self.folders = [self.new(ItemFolder, reader)
            for _ in xrange(reader.readInt(True))]

        self.instances = [self.new(FrameInstance, reader)
            for _ in xrange(reader.readInt())]
        self.events = self.new(Events, reader)
        self.chunks = self.new(ChunkList, reader)

    def write(self, reader):
        reader.writeInt(self.handle)
        reader.writeInt(len(self.name)); reader.write(self.name)
        reader.writeInt(self.size[0]); reader.writeInt(self.size[1])
        reader.writeColor(self.background)
        reader.writeInt(self.flags.getFlags(), True)
        reader.writeInt(self.maxObjects)
        reader.writeInt(len(self.password)); reader.write(self.password)
        reader.writeInt(0)
        reader.writeInt(self.lastViewedX)
        reader.writeInt(self.lastViewedY)
        reader.writeInt(len(self.palette))
        for item in self.palette:
            reader.writeColor(item)
        reader.writeInt(self.stampHandle)
        reader.writeInt(self.activeLayer)
        reader.writeInt(len(self.layers))
        for item in self.layers:
            item.write(reader)
        for item in (self.fadeIn, self.fadeOut):
            if item is not None:
                reader.writeByte(1)
                item.write(reader)
            else:
                reader.writeByte(0)
        for item in (self.items, self.folders, self.instances):
            reader.writeInt(len(item), True)
            for subitem in item:
                subitem.write(reader)

        self.events.write(reader)
        self.chunks.write(reader)
Ejemplo n.º 11
0
class MMFArray(DataLoader):
    items = None
    size = None
    default = None

    def initialize(self):
        self.flags = BitDict("Numeric", "Text", "Base1", "Global")
        self.flags.setFlags(0)  # to prevent BitDict from complaining :)
        self.flags["Base1"] = True  # default
        self.flags["Text"] = True  # default
        self.default = ""

    def read(self, reader):
        if reader.readString() != MAGIC:
            raise InvalidData("data is invalid")
        if reader.readShort() != MAJOR_VERSION:
            raise InvalidData("major version incompatibility")
        if reader.readShort() != MINOR_VERSION:
            raise InvalidData("minor version incompatibility")
        xDimension = reader.readInt(True)
        yDimension = reader.readInt(True)
        zDimension = reader.readInt(True)
        self.size = (xDimension, yDimension, zDimension)
        items = self.items = {}
        self.flags.setFlags(reader.readInt())
        if self.flags["Numeric"]:
            self.default = 0
        elif self.flags["Text"]:
            self.default = ""
        else:
            raise NotImplementedError('invalid array type (should be "Text" or "Numeric")')
        for z in xrange(zDimension):
            currentZ = {}
            for y in xrange(yDimension):
                currentY = {}
                for x in xrange(xDimension):
                    if self.flags["Numeric"]:
                        item = reader.readInt(True)
                    elif self.flags["Text"]:
                        item = reader.read(reader.readInt(True))
                    else:
                        raise InvalidData("invalid flags")
                    currentY[x] = item
                currentZ[y] = currentY
            items[z] = currentZ

    def write(self, reader):
        reader.writeString(MAGIC)
        reader.writeShort(MAJOR_VERSION)
        reader.writeShort(MINOR_VERSION)
        xDimension, yDimension, zDimension = self.size
        reader.writeInt(xDimension)
        reader.writeInt(yDimension)
        reader.writeInt(zDimension)
        reader.writeInt(self.flags.getFlags())
        for z in xrange(zDimension):
            for y in xrange(yDimension):
                for x in xrange(xDimension):
                    try:
                        item = self.items[z][y][x]
                    except KeyError:
                        item = self.default
                    if self.flags["Numeric"]:
                        reader.writeInt(int(item))
                    elif self.flags["Text"]:
                        item = str(item)
                        reader.writeInt(len(item))
                        reader.write(item)
                    else:
                        raise NotImplementedError("invalid flags")

    def get(self, x, y, z):
        if self.flags["Base1"]:
            x -= 1
            y -= 1
            z -= 1
        return self.items[z][y][x]

    def set(self, x, y, z, value):
        if self.flags["Base1"]:
            x -= 1
            y -= 1
            z -= 1
        xDimension, yDimension, zDimension = self.size
        self.size = (max(x + 1, xDimension), max(y + 1, yDimension), max(z + 1, zDimension))
        if not z in self.items:
            self.items[z] = {}
        if not y in self.items[z]:
            self.items[z][y] = {}
        self.items[z][y][x] = value

    def setup(self, xDimension, yDimension, zDimension, arrayType):
        if arrayType == "Text":
            self.flags["Numeric"] = False
            self.flags["Text"] = True
            self.default = ""
        elif arrayType == "Numeric":
            self.flags["Numeric"] = True
            self.flags["Text"] = False
            self.default = 0
        else:
            raise NotImplementedError('invalid array type (should be "Text" or "Numeric")')
        self.size = (xDimension, yDimension, zDimension)
        self.clear()

    def clear(self):
        self.items = {}
Ejemplo n.º 12
0
class MMFArray(DataLoader):
    items = None
    size = None
    default = None

    def initialize(self):
        self.flags = BitDict('Numeric', 'Text', 'Base1', 'Global')
        self.flags.setFlags(0)  # to prevent BitDict from complaining :)
        self.flags['Base1'] = True  # default
        self.flags['Text'] = True  # default
        self.default = ''

    def read(self, reader):
        if reader.readString() != MAGIC:
            raise InvalidData('data is invalid')
        if reader.readShort() != MAJOR_VERSION:
            raise InvalidData('major version incompatibility')
        if reader.readShort() != MINOR_VERSION:
            raise InvalidData('minor version incompatibility')
        xDimension = reader.readInt(True)
        yDimension = reader.readInt(True)
        zDimension = reader.readInt(True)
        self.size = (xDimension, yDimension, zDimension)
        items = self.items = {}
        self.flags.setFlags(reader.readInt())
        if self.flags['Numeric']:
            self.default = 0
        elif self.flags['Text']:
            self.default = ''
        else:
            raise NotImplementedError(
                'invalid array type (should be "Text" or "Numeric")')
        for z in xrange(zDimension):
            currentZ = {}
            for y in xrange(yDimension):
                currentY = {}
                for x in xrange(xDimension):
                    if self.flags['Numeric']:
                        item = reader.readInt(True)
                    elif self.flags['Text']:
                        item = reader.read(reader.readInt(True))
                    else:
                        raise InvalidData('invalid flags')
                    currentY[x] = item
                currentZ[y] = currentY
            items[z] = currentZ

    def write(self, reader):
        reader.writeString(MAGIC)
        reader.writeShort(MAJOR_VERSION)
        reader.writeShort(MINOR_VERSION)
        xDimension, yDimension, zDimension = self.size
        reader.writeInt(xDimension)
        reader.writeInt(yDimension)
        reader.writeInt(zDimension)
        reader.writeInt(self.flags.getFlags())
        for z in xrange(zDimension):
            for y in xrange(yDimension):
                for x in xrange(xDimension):
                    try:
                        item = self.items[z][y][x]
                    except KeyError:
                        item = self.default
                    if self.flags['Numeric']:
                        reader.writeInt(int(item))
                    elif self.flags['Text']:
                        item = str(item)
                        reader.writeInt(len(item))
                        reader.write(item)
                    else:
                        raise NotImplementedError('invalid flags')

    def get(self, x, y, z):
        if self.flags['Base1']:
            x -= 1
            y -= 1
            z -= 1
        return self.items[z][y][x]

    def set(self, x, y, z, value):
        if self.flags['Base1']:
            x -= 1
            y -= 1
            z -= 1
        xDimension, yDimension, zDimension = self.size
        self.size = (max(x + 1,
                         xDimension), max(y + 1,
                                          yDimension), max(z + 1, zDimension))
        if not z in self.items:
            self.items[z] = {}
        if not y in self.items[z]:
            self.items[z][y] = {}
        self.items[z][y][x] = value

    def setup(self, xDimension, yDimension, zDimension, arrayType):
        if arrayType == 'Text':
            self.flags['Numeric'] = False
            self.flags['Text'] = True
            self.default = ''
        elif arrayType == 'Numeric':
            self.flags['Numeric'] = True
            self.flags['Text'] = False
            self.default = 0
        else:
            raise NotImplementedError(
                'invalid array type (should be "Text" or "Numeric")')
        self.size = (xDimension, yDimension, zDimension)
        self.clear()

    def clear(self):
        self.items = {}
Ejemplo n.º 13
0
class Frame(DataLoader):
    handle = None
    name = None
    size = None
    background = None
    maxObjects = None
    password = None
    palette = None
    fadeIn = None
    fadeOut = None
    def initialize(self):
        self.palette = []
        self.flags = BitDict(
            'GrabDesktop',
            'KeepDisplay',
            'BackgroundCollisions',
            'DisplayFrameTitle',
            'ResizeToScreen',
            'ForceLoadOnCall',
            'NoDisplaySurface',
            'ScreenSaverSetup',
            'TimerBasedMovements',
            'MochiAds',
            'NoGlobalEvents'
        )

    def read(self, reader):
        self.handle = reader.readInt()
        self.name = reader.read(reader.readInt())
        self.size = (reader.readInt(), reader.readInt())
        self.background = reader.readColor()
        self.flags.setFlags(reader.readInt(True))

        self.maxObjects = reader.readInt()
        self.password = reader.read(reader.readInt())
        checkDefault(reader, reader.readInt(), 0)

        self.lastViewedX = reader.readInt()
        self.lastViewedY = reader.readInt()

        self.palette = [reader.readColor()
            for _ in xrange(reader.readInt())]

        self.stampHandle = reader.readInt()

        self.activeLayer = reader.readInt()

        self.layers = [self.new(Layer, reader)
            for _ in xrange(reader.readInt())]

        if reader.readByte() != 0:
            self.fadeIn = self.new(Transition, reader)

        if reader.readByte() != 0:
            self.fadeOut = self.new(Transition, reader)

        self.items = items = [self.new(FrameItem, reader)
            for _ in xrange(reader.readInt())]

        self.folders = [self.new(ItemFolder, reader)
            for _ in xrange(reader.readInt(True))]

        self.instances = [self.new(FrameInstance, reader)
            for _ in xrange(reader.readInt())]
        self.events = self.new(Events, reader)
        self.chunks = self.new(ChunkList, reader)

    def write(self, reader):
        reader.writeInt(self.handle)
        reader.writeInt(len(self.name)); reader.write(self.name)
        reader.writeInt(self.size[0]); reader.writeInt(self.size[1])
        reader.writeColor(self.background)
        reader.writeInt(self.flags.getFlags(), True)
        reader.writeInt(self.maxObjects)
        reader.writeInt(len(self.password)); reader.write(self.password)
        reader.writeInt(0)
        reader.writeInt(self.lastViewedX)
        reader.writeInt(self.lastViewedY)
        reader.writeInt(len(self.palette))
        for item in self.palette:
            reader.writeColor(item)
        reader.writeInt(self.stampHandle)
        reader.writeInt(self.activeLayer)
        reader.writeInt(len(self.layers))
        for item in self.layers:
            item.write(reader)
        for item in (self.fadeIn, self.fadeOut):
            if item is not None:
                reader.writeByte(1)
                item.write(reader)
            else:
                reader.writeByte(0)
        for item in (self.items, self.folders, self.instances):
            reader.writeInt(len(item), True)
            for subitem in item:
                subitem.write(reader)

        self.events.write(reader)
        self.chunks.write(reader)