def fields(self, const): self.F("name", ConstIndex(const["multiname"])) k = self.F("kind", Format("B")) kind = k.data & 0x0F f = k.data >> 4 if kind in [0, 6]: self.F("slot_id", U30()) self.F("type_name", ConstIndex(const["multiname"])) v = self.F("vindex", U30()) if v.data != 0: self.F("vkind", Format("B")) elif kind in [4]: self.F("slot_id", U30()) self.F("classi", U30()) elif kind in [5]: self.F("slot_id", U30()) self.F("function", U30()) elif kind in [1, 2, 3]: self.F("disp_id", U30()) self.F("method", U30()) else: assert False, kind if f & 0x04: c = self.F("metadata_count", U30()) self.F("metadata", Array(c.data, U30))
def fields(self, strings): self.F("name", Index(strings, Format("I"))) self.F("flags", Flags(Format("B"), self.flag_types)) self.F("range", Format("ff")) self.F("samples", PrefixedArray(Format("H"), BVCDFlexSample)) if "combo" in self["flags"].data: self.F("combo_samples", PrefixedArray(Format("H"), BVCDFlexSample))
def fields(self): base = self.F("base", Offset()) self.F("cycle", Format("f")) self.F("event", Format("I")) self.F("type", Format("I")) self.F("options", FixedString(64)) self.F("szeventindex", RelativeString(base, "i"))
def fields(self, strings): self.F("namecrc", Format("I")) self.F("offset", Format("I")) self.F("length", Format("I")) # self.F("scenesummary", Format("I")) self.F("scenesummary", DataPointer(Format("I"), SceneSummary(strings))) self.F("scene", Pointer(self["offset"].data, Scene()))
def fields(self): self.F("method", Magic("LZMA")) self.F("uncompressed_size", Format("I")) self.F("compressed_size", Format("I")) self.F( "scene_data", LZMAField(self["uncompressed_size"].data, self["compressed_size"].data))
def unpack_data(self, s): data = Format("H").unpack_data(s) tagcode = (data >> 6) length = (data & ((1 << 6) - 1)) if length == 63: length = Format("I").unpack_data(s) return OrderedDict([ ("tagcode", tagcode), ("length", length), ])
def pack_data(self, s, data): tagcode = data["tagcode"] length = data["length"] if length > 62: taglength = 63 else: taglength = length Format("H").pack_data(s, (tagcode << 6) | taglength) if length > 62: Format("I").pack_data(s, length)
def fields(self): self.F("minor", Format("H")) self.F("major", Format("H")) const = self.F("constant_pool", ConstantPool()) c = self.F("method_count", U30()) self.F("method", Array(c.data, lambda: Method(const))) c = self.F("metadatacount", U30()) self.F("metadata", Array(c.data, lambda: MetaData(const))) c = self.F("class_count", U30()) self.F("instance", Array(c.data, lambda: Instance(const))) self.F("class", Array(c.data, lambda: Class(const))) c = self.F("script_count", U30()) self.F("script", Array(c.data, lambda: Script(const))) c = self.F("methodbody_count", U30()) self.F("methodbody", Array(c.data, lambda: MethodBody(const)))
def fields(self): f = self.F("flags", PlaceObject2Flags()) self.F("depth", Format("H")) if f["character"].data == 1: self.F("character", Format("H")) if f["matrix"].data == 1: self.F("matrix", Matrix()) if f["color_transform"].data == 1: self.F("color_transform", CXFormWithAlpha()) if f["ratio"].data == 1: self.F("ratio", Format("H")) if f["name"].data == 1: self.F("name", String()) if f["clip_depth"].data == 1: self.F("clip_depth", Format("H")) assert f["clip_actions"].data == 0
def fields(self, include_attributes=True): self.F("magic", Magic("<!-- dmx encoding ")) self.F("version", FixedString(len("binary 2 format pcf 1"))) self.F("magic2", Magic(" -->\n\0")) version = self["version"].data assert version in ["binary 2 format pcf 1", "binary 5 format pcf 2"], version if version == "binary 2 format pcf 1": prefix = Format("h") else: prefix = Format("I") strings = self.F("strings", PrefixedArray(prefix, String)) if version == "binary 2 format pcf 1": namefield = lambda: Index(strings, Format("h")) stringfield = String else: namefield = lambda: Index(strings, Format("I")) stringfield = namefield self.F( "elements", PrefixedArray(Format("I"), lambda: Element(namefield, stringfield))) if include_attributes: self.F( "attributes", Array(len(self["elements"]), field_function=lambda i, f: PrefixedArray( Format("I"), lambda: Attribute( namefield, stringfield, lambda: ElementIndex( self["elements"], f, Format("i")))))) for i in range(len(self["elements"])): self["elements"][i].attribute = self["attributes"][i]
def fields(self): self.F("magic", Magic("VSIF")) self.F("version", Format("I")) assert self["version"].data == 3, "Expected version 3, got {}".format( self["version"].data) self.F("nscenes", Format("I")) self.F("nstrings", Format("I")) self.F("scenesoffset", Format("I")) self.F( "strings", Array(self["nstrings"].data, lambda: DataPointer(Format("I"), String()))) self.F( "scenes", Pointer( self["scenesoffset"].data, Array(self["nscenes"].data, lambda: SceneEntry(self["strings"]))))
def fields(self, const): self.F("name", ConstIndex(const["multiname"])) self.F("super_name", ConstIndex(const["multiname"])) f = self.F("flags", Format("B")) if f.data & 0x08: self.F("protected_ns", ConstIndex(const["namespace"])) c = self.F("intrf_count", U30()) self.F("interface", Array(c.data, lambda: ConstIndex(const["multiname"]))) self.F("iinit", U30()) c = self.F("trait_count", U30()) self.F("trait", Array(c.data, lambda: Trait(const)))
def fields(self, const): param_c = self.F("param_count", U30()) self.F("return_type", ConstIndex(const["multiname"])) self.F("param_types", Array(param_c.data, lambda: ConstIndex(const["multiname"]))) self.F("name", ConstIndex(const["string"])) f = self.F("flags", Format("B")) if f.data & 0x08: c = self.F("option_count", U30()) self.F("option", Array(c.data, OptionDetail)) if f.data & 0x80: self.F("param_names", Array(param_c.data, lambda: ConstIndex(const["string"])))
def fields(self): c = self.F("int_count", U30()) self.F("integer", Array(c.data-1, S32)) c = self.F("uint_count", U30()) self.F("uinteger", Array(c.data-1, U32)) c = self.F("double_count", U30()) self.F("double", Array(c.data-1, lambda: Format("d"))) c = self.F("string_count", U30()) s = self.F("string", Array(c.data-1, PrefixedString)) c = self.F("namespace_count", U30()) ns = self.F("namespace", Array(c.data-1, lambda: Namespace(s))) c = self.F("namespaceset_count", U30()) nss = self.F("namespaceset", Array(c.data-1, lambda: NamespaceSet(ns))) c = self.F("multiname_count", U30()) self.F("multiname", Array(c.data-1, lambda: Multiname(s, ns, nss)))
def fields(self, s, ns, nss): k = self.F("kind", Format("B")) if k.data in [0x07, 0x0D]: self.F("ns", ConstIndex(ns)) self.F("name", ConstIndex(s)) elif k.data in [0x0F, 0x10]: self.F("name", ConstIndex(s)) elif k.data in [0x11, 0x12]: pass elif k.data in [0x09, 0x0E]: self.F("name", ConstIndex(s)) self.F("nsset", ConstIndex(nss)) elif k.data in [0x1B, 0x1C]: self.F("nsset", ConstIndex(nss)) elif k.data in [0x1D]: self.F("typedef", U30()) c = self.F("numparams", U30()) self.F("params", Array(c.data, U30)) else: assert False, k.data
def fields(self, strings): self.F("magic", Magic("bvcd")) self.F("version", Format("B")) assert self["version"].data == 4, "Expected version 4, got {}".format( self["version"].data) self.F("crc", Format("I")) self.F("events", PrefixedArray(Format("B"), lambda: BVCDEvent(strings))) self.F("actors", PrefixedArray(Format("B"), lambda: BVCDActors(strings))) self.F("ramp", PrefixedArray(Format("B"), BVCDRamp)) self.F("ignorephonemes", Format("B"))
def fields(self): self.F("flags", Format("I")) self.F("name", String()) self.F("abcdata", ABCFile())
def fields(self, strings): self.F("name", Index(strings, Format("I"))) self.F("channels", PrefixedArray(Format("B"), lambda: BVCDChannel(strings))) self.F("disabled", Format("B"))
def fields(self, strings): self.F("type", Mapping(Format("B"), self.event_types)) self.F("name", Index(strings, Format("I"))) self.F("time", Format("ff")) self.F("params", Array(3, lambda: Index(strings, Format("I")))) self.F("ramp", PrefixedArray(Format("B"), BVCDRamp)) self.F("flags", Flags(Format("B"), self.flag_types)) self.F("distancetotarget", Format("f")) self.F( "tags", PrefixedArray( Format("B"), lambda: BVCDTag(strings, ScaledField(Format("B"), 255.)))) self.F( "flextimingtags", PrefixedArray( Format("B"), lambda: BVCDTag(strings, ScaledField(Format("B"), 255.)))) self.F( "shifted_time", PrefixedArray( Format("B"), lambda: BVCDTag(strings, ScaledField(Format("H"), 4096.)))) self.F( "playback_time", PrefixedArray( Format("B"), lambda: BVCDTag(strings, ScaledField(Format("H"), 4096.)))) if self["type"].data == "gesture": self.F("sequenceduration", Format("f")) self.F( "relativetag", PrefixedArray( Format("B"), lambda: BVCDTag(strings, Index(strings, Format("I"))))) self.F("flex", PrefixedArray(Format("B"), lambda: BVCDFlexTrack(strings))) if self["type"].data == "loop": self.F("loopcount", Format("B")) if self["type"].data == "speak": self.F("cctype", Format("B")) self.F("cctoken", Index(strings, Format("I"))) self.F("ccflags", Flags(Format("B"), self.cc_flag_types))
def fields(self, strings): self.F("name", Index(strings, Format("I"))) self.F("events", PrefixedArray(Format("B"), lambda: BVCDEvent(strings))) self.F("disabled", Format("B"))
def fields(self): self.F("p", Format("f")) self.F("t", ScaledField(Format("B"), 255.)) self.F("from_type", Mapping(Format("B"), self.curve_types)) self.F("to_type", Mapping(Format("B"), self.curve_types))
def __init__(self, field, fmt): self.field = field Format.__init__(self, fmt)
def pack_data(self, s, data): if data != 0: data -= self.field.data Format.pack_data(self, s, data)
def fields(self): self.F("t", Format("f")) self.F("v", ScaledField(Format("B"), 255.))
def fields(self, strings): self.F("milliseconds", Format("I")) self.F("milliseconds_2", Format("I")) self.F("sounds", PrefixedArray(Format("I"), lambda: Index(strings, Format("I"))))
def fields(self): self.F("magic", Magic("IDST")) self.F("version", Format("I")) self.F("checksum", Format("I")) self.F("name", FixedString(64)) self.F("datalength", Format("I")) self.F("eyepos", Format("3f")) self.F("illum", Format("3f")) self.F("hull_min", Format("3f")) self.F("hull_max", Format("3f")) self.F("view_bbmin", Format("3f")) self.F("view_bbmax", Format("3f")) self.F("flags", Format("I")) self.F("bone", Format("II")) self.F("bonecontroller", Format("II")) self.F("hitbox", Format("II")) self.F("numlocalanim", Format("I")) self.F("localanimoffset", Format("I")) self.F("numlocalsequence", Format("I")) self.F("localsequenceoffset", Format("I")) self.F("texture", Format("II")) self.F("cdtexture", Format("II")) self.F("unknown", Format("II")) self.F("numskinref", Format("I")) self.F("numskinfamilies", Format("I")) self.F("skinindex", Format("I")) self.F("bodypart", Format("II")) self.F("localattachment", Format("II")) self.F("numlocalnodes", Format("I")) self.F("localnodeindex", Format("I")) self.F("localnodenameindex", Format("I")) self.F("flexdesc", Format("II")) self.F("flexcontroller", Format("II")) self.F("flexrule", Format("II")) self.F("ikchain", Format("II")) self.F("mouth", Format("II")) self.F("localposeparameters", Format("II")) self.F("surfacepropindex", Format("I")) self.F("keyvalueindex", Format("I")) self.F("keyvaluesize", Format("I")) # pointed fields # self.F("localanim", Pointer(self["localanimoffset"].data, Array(self["numlocalanim"].data, LocalAnim))) self.F("localsequence", Pointer(self["localsequenceoffset"].data, Array(self["numlocalsequence"].data, LocalSequence))) self.F("skin", Pointer(self["skinindex"].data, Array(self["numskinfamilies"].data, lambda: Array(self["numskinref"].data, lambda: Format("h"))))) self.F("keyvalue", Pointer(self["keyvalueindex"].data, FixedString(self["keyvaluesize"].data))) # here be dragons return self.F("localikautoplaylock", Format("II")) self.F("mass", Format("f")) self.F("contents", Format("I")) self.F("includemodels", Format("II")) self.F("bonetablebynameindex", Format("I")) self.F("vertexbase", Format("I")) self.F("indexbase", Format("I")) self.F("constdirectionallightdot", Format("B")) self.F("rootLOD", Format("B")) self.F("numAllowedRootLODs", Format("B")) self.F("unused", Format("B")) self.F("unused4", Format("I")) self.F("flexcontrollerui", Format("II")) self.F("unused3", Format("2I")) self.F("studiohdr2index", Format("I")) self.F("unused2", Format("1I"))
def __init__(self, fmt): Format.__init__(self, fmt)
def fields(self): self.F("sprite_id", Format("H")) self.F("frame_count", Format("H")) self.F("tags", TagArray())
def pack(self, s): this = s.tell() self.data = s Format.pack(self, s)
def pack(self, s): self.data = -s.tell() Format.pack(self, s)
def unpack_data(self, s): this = s.tell() data = Format.unpack_data(self, s) assert data == -this return data
def fields(self): self.F("frame_size", Rect()) self.F("frame_rate", Format("H")) self.F("frame_count", Format("H")) self.F("tags", TagArray())
def fields(self): self.F("magic", Magic(b"CFX\x0a")) self.F("content", ZlibField(Format("I"), SWFContent()))
def fields(self, strings, paramfield): self.F("name", Index(strings, Format("I"))) self.F("param", paramfield)
def unpack_data(self, s): data = Format.unpack_data(self, s) if data != 0: data += self.field.data return data