def initialize(self): self.palette = [] self.flags = BitDict('GrabDesktop', 'KeepDisplay', 'BackgroundCollisions', 'DisplayFrameTitle', 'ResizeToScreen', 'ForceLoadOnCall', 'NoDisplaySurface', 'ScreenSaverSetup', 'TimerBasedMovements', 'MochiAds', 'NoGlobalEvents')
def __init__(self, reader): self.reader = reader self.flags = BitDict( 'KeepScreenRatio', 'FrameTransition', # (HWA only) frame has a transition 'ResampleStretch', # (HWA only) resample while resizing 'GlobalRefresh' # (Mobile) force global refresh ) self.buildType = None self.buildFlags = None self.screenRatioTolerance = None self.screenAngle = None
def __init__(self, reader: ByteIO): self.reader = reader self.handle = None self.name = None self.checksum = None self.references = None self.flags = BitDict( 'Wave', 'MIDI', None, None, 'LoadOnCall', 'PlayFromDisk', 'Loaded' ) self.data = None self.ext = '.mp3'
def __init__(self, reader: ByteIO): self.reader = reader self.flags = BitDict('Color') currentPosition = self.reader.tell() self.module = self.reader.read(4) self.name = self.reader.read(4) self.duration = self.reader.read_int32() self.flags.setFlags(self.reader.read_uint32()) self.color = [self.reader.read_uint8() for _ in range(4)] nameOffset = self.reader.read_int32() parameterOffset = self.reader.read_int32() parameterSize = self.reader.read_int32() self.reader.seek(currentPosition + nameOffset) self.moduleFile = self.reader.read_ascii_string() self.reader.seek(currentPosition + parameterOffset) self.parameterData = self.reader.read(parameterSize)
class RTFObject(DataLoader): RTF_FLAGS = BitDict( 'Transparent', 'VerticalSlider', 'HorizontalSlider' ) def __init__(self, reader: ByteIO): self.reader = reader self.options = self.RTF_FLAGS.copy() size = self.reader.read_int32() self.version = self.reader.read_int32() self.options.setFlags(self.reader.read_int32()) self.backColor = [self.reader.read_uint8() for _ in range(4)] self.width = self.reader.read_int32() self.height = self.reader.read_int32() self.reader.read_bytes(4) self.value = self.reader.read(self.reader.read_int32())
def __init__(self, reader: ByteIO): self.reader = reader self.name = '' 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' ) self.x_coefficient = 0 self.y_coefficient = 0 self.number_of_backgrounds = 0 self.background_index = 0
def __init__(self, reader: ByteIO): self.reader = reader self.width = 0 self.height = 0 self.flags = BitDict( 'DisplayName', 'GrabDesktop', 'KeepDisplay', 'FadeIn', 'FadeOut', 'TotalCollisionMask', 'Password', 'ResizeAtStart', 'DoNotCenter', 'ForceLoadOnCall', 'NoSurface', 'Reserved_1', 'Reserved_2', 'RecordDemo', None, 'TimedMovements' ) self.background = None
def get_type(self): reader = ByteIO(byte_object=self.data) header = reader.read_fourcc() header2 = reader.read_fourcc() if header == 'RIFF': return 'WAV' elif header2 == 'AIFF': return 'AIFF' elif header == 'OggS': return 'OGG' else: # assume MOD return 'MOD' SOUND_FLAGS = BitDict('Wave', 'MIDI', None, None, 'LoadOnCall', 'PlayFromDisk', 'Loaded') class SoundItem(BaseSound): def __init__(self, reader): super().__init__(reader) self.compressed = not self.settings.get('debug', False) self.checksum = None self.references = None self.flags = SOUND_FLAGS.copy() def read(self): reader = self.reader start = reader.tell() self.handle = reader.read_uint32() self.checksum = reader.read_int32()
reader.writeInt(self.id) class Int(ParameterCommon): value = None def read(self, reader): self.value = reader.readInt() def write(self, reader): reader.writeInt(self.value) SAMPLE_FLAGS = BitDict( 'Uninterruptible', 'Bad', 'IPhoneAudioPlayer', 'IPhoneOpenAL' ) class Sample(ParameterCommon): handle = None flags = None def initialize(self): self.flags = SAMPLE_FLAGS.copy() def read(self, reader): self.handle = reader.readShort() self.flags.setFlags(reader.readShort(True)) self.name = self.readString(reader)
from CTF_ByteIO import ByteIO from Chunks.Common import ObjectInfoMixin, AceCommon from Chunks.Paramerers.Parameters import parameter_loaders, get_name from Loader import DataLoader from bitdict import BitDict HEADER = b'ER>>' EVENT_COUNT = b'ERes' EVENTGROUP_DATA = b'ERev' END = b'<<ER' ACE_FLAGS = BitDict('Repeat', 'Done', 'Default', 'DoneBeforeFadeIn', 'NotDoneInStart', 'Always', 'Bad', 'BadObject', None, 'Notable') ACE_OTHERFLAGS = BitDict('Not', 'Notable', 'Monitorable', 'ToDelete', 'NewSound') GROUP_FLAGS = BitDict('Once', 'NotAlways', 'Repeat', 'NoMore', 'Shuffle', 'EditorMark', 'UndoMark', 'ComplexGroup', 'Breakpoint', 'AlwaysClean', 'OrInGroup', 'StopInGroup', 'OrLogical', 'Grouped', 'Inactive', 'NoGood') class Qualifier(DataLoader, ObjectInfoMixin): def __init__(self, reader: ByteIO): self.reader = reader self.objectInfo = None self.type = None self.qualifier = None self.objects = None
NONE_EFFECT: 'None', SEMITRANSPARENT_EFFECT: 'Semitransparent', INVERTED_EFFECT: 'Inverted', XOR_EFFECT: 'XOR', AND_EFFECT: 'AND', OR_EFFECT: 'OR', ADD_EFFECT: 'Add', MONOCHROME_EFFECT: 'Monochrome', SUBTRACT_EFFECT: 'Subtract', SHADER_EFFECT: 'Shader', HWA_EFFECT: 'HWA' } OBJECT_FLAGS = BitDict( 'LoadOnCall', 'Discardable', 'Global', 'Reserved_1' ) (PLAYER, KEYBOARD, CREATE, TIMER, GAME, SPEAKER, SYSTEM, QUICKBACKDROP, BACKDROP, ACTIVE, TEXT, QUESTION, SCORE, LIVES, COUNTER, RTF, SUBAPPLICATION) = range(-7, 10) def get_object_type(id): if id < EXTENSION_BASE: return objectTypes[id] else: return 'Extension' class ObjectName(StringChunk):
'None', 'Solid', 'Gradient', 'Motif' ] HORIZONTAL_GRADIENT = 0 VERTICAL_GRADIENT = 1 GRADIENT_TYPES = [ 'Horizontal', 'Vertical' ] SHAPE_FLAGS = BitDict( 'InverseX', 'InverseY' ) class AlterableValues(DataLoader): def __init__(self, reader: ByteIO): self.reader = reader self.items = [self.reader.read_int32() for _ in range(self.reader.read_uint16())] class AlterableStrings(DataLoader): def __init__(self, reader: ByteIO): self.reader = reader self.items = [self.reader.read_ascii_string() for _ in range(self.reader.read_uint16())]
import os from math import ceil from typing import Dict from PIL import Image from CTF_ByteIO import ByteIO from Loader import DataLoader from ProgressBar import ProgressBar from bitdict import BitDict POINT_MODE = 4 # 16 million colors FIFTEENPOINT_MODE = 6 # 32768 colors IMAGE_FLAGS = BitDict('RLE', 'RLEW', 'RLET', 'LZX', 'Alpha', 'ACE', 'Mac') class BasePoint: pass class IndexPoint(BasePoint): def __init__(self): self.size = 1 def read(self, data, position) -> int: return data[position] class Point(BasePoint): def __init__(self):
def initialize(self): self.flags = BitDict('Color')
self.parent) continue items.append(self.new(CHUNK_LOADERS[id], data)) size = reader.tell() - start reader.seek(start) self.saved = reader.read(size) def write(self, reader): if self.saved is not None: reader.write(self.saved) else: reader.writeByte(0) LAYER_FLAGS = BitDict('Visible', 'Locked', 'Obsolete', 'HideAtStart', 'NoBackground', 'WrapHorizontally', 'WrapVertically', 'PreviousEffect') class Layer(DataLoader): name = None xCoefficient = None yCoefficient = None flags = None def initialize(self): self.flags = LAYER_FLAGS.copy() def read(self, reader): self.name = reader.read(reader.readInt()) self.flags.setFlags(reader.readInt())
'Joystick 1', 'Joystick 2', 'Joystick 3', 'Joystick 4', 'Keyboard' ] HEADER_FLAGS = BitDict( 'BorderMax', 'NoHeading', 'Panic', 'SpeedIndependent', 'Stretch', 'MusicOn', # obsolete? 'SoundOn', # obsolete? 'MenuHidden', 'MenuBar', 'Maximize', # maximized at bootup? 'MultiSamples', 'FullscreenAtStart', 'FullscreenSwitch', 'Protected', # wonder... 'Copyright', 'OneFile' # ? ) HEADER_NEW_FLAGS = BitDict( 'SamplesOverFrames', 'RelocFiles', 'RunFrame', 'SamplesWhenNotFocused', 'NoMinimizeBox',