コード例 #1
0
ファイル: swf_abc.py プロジェクト: hanfan1803/dota2_nohats
 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))
コード例 #2
0
ファイル: vsif.py プロジェクト: hanfan1803/dota2_nohats
 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))
コード例 #3
0
 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"))
コード例 #4
0
ファイル: vsif.py プロジェクト: hanfan1803/dota2_nohats
    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()))
コード例 #5
0
ファイル: vsif.py プロジェクト: hanfan1803/dota2_nohats
    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))
コード例 #6
0
ファイル: swf.py プロジェクト: hanfan1803/dota2_nohats
 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),
     ])
コード例 #7
0
ファイル: swf.py プロジェクト: hanfan1803/dota2_nohats
 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)
コード例 #8
0
ファイル: swf_abc.py プロジェクト: hanfan1803/dota2_nohats
 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)))
コード例 #9
0
ファイル: swf.py プロジェクト: hanfan1803/dota2_nohats
 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
コード例 #10
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]
コード例 #11
0
ファイル: vsif.py プロジェクト: hanfan1803/dota2_nohats
    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"]))))
コード例 #12
0
ファイル: swf_abc.py プロジェクト: hanfan1803/dota2_nohats
 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)))
コード例 #13
0
ファイル: swf_abc.py プロジェクト: hanfan1803/dota2_nohats
 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"])))
コード例 #14
0
ファイル: swf_abc.py プロジェクト: hanfan1803/dota2_nohats
 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)))
コード例 #15
0
ファイル: swf_abc.py プロジェクト: hanfan1803/dota2_nohats
 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
コード例 #16
0
ファイル: vsif.py プロジェクト: hanfan1803/dota2_nohats
    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"))
コード例 #17
0
ファイル: swf.py プロジェクト: hanfan1803/dota2_nohats
 def fields(self):
     self.F("flags", Format("I"))
     self.F("name", String())
     self.F("abcdata", ABCFile())
コード例 #18
0
ファイル: vsif.py プロジェクト: hanfan1803/dota2_nohats
 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"))
コード例 #19
0
ファイル: vsif.py プロジェクト: hanfan1803/dota2_nohats
    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))
コード例 #20
0
ファイル: vsif.py プロジェクト: hanfan1803/dota2_nohats
 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"))
コード例 #21
0
ファイル: vsif.py プロジェクト: hanfan1803/dota2_nohats
 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))
コード例 #22
0
ファイル: mdl.py プロジェクト: victorvde/dota2_nohats
 def __init__(self, field, fmt):
     self.field = field
     Format.__init__(self, fmt)
コード例 #23
0
ファイル: mdl.py プロジェクト: victorvde/dota2_nohats
 def pack_data(self, s, data):
     if data != 0:
         data -= self.field.data
     Format.pack_data(self, s, data)
コード例 #24
0
ファイル: vsif.py プロジェクト: hanfan1803/dota2_nohats
 def fields(self):
     self.F("t", Format("f"))
     self.F("v", ScaledField(Format("B"), 255.))
コード例 #25
0
ファイル: vsif.py プロジェクト: hanfan1803/dota2_nohats
 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"))))
コード例 #26
0
    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"))
コード例 #27
0
 def __init__(self, fmt):
     Format.__init__(self, fmt)
コード例 #28
0
ファイル: swf.py プロジェクト: hanfan1803/dota2_nohats
 def fields(self):
     self.F("sprite_id", Format("H"))
     self.F("frame_count", Format("H"))
     self.F("tags", TagArray())
コード例 #29
0
ファイル: mdl.py プロジェクト: changyuefeng/dota2_nohats
 def pack(self, s):
     this = s.tell()
     self.data = s
     Format.pack(self, s)
コード例 #30
0
ファイル: mdl.py プロジェクト: victorvde/dota2_nohats
 def pack(self, s):
     self.data = -s.tell()
     Format.pack(self, s)
コード例 #31
0
 def unpack_data(self, s):
     this = s.tell()
     data = Format.unpack_data(self, s)
     assert data == -this
     return data
コード例 #32
0
ファイル: swf.py プロジェクト: hanfan1803/dota2_nohats
 def fields(self):
     self.F("frame_size", Rect())
     self.F("frame_rate", Format("H"))
     self.F("frame_count", Format("H"))
     self.F("tags", TagArray())
コード例 #33
0
ファイル: swf.py プロジェクト: hanfan1803/dota2_nohats
 def fields(self):
     self.F("magic", Magic(b"CFX\x0a"))
     self.F("content", ZlibField(Format("I"), SWFContent()))
コード例 #34
0
ファイル: vsif.py プロジェクト: hanfan1803/dota2_nohats
 def fields(self, strings, paramfield):
     self.F("name", Index(strings, Format("I")))
     self.F("param", paramfield)
コード例 #35
0
ファイル: mdl.py プロジェクト: victorvde/dota2_nohats
 def unpack_data(self, s):
     data = Format.unpack_data(self, s)
     if data != 0:
         data += self.field.data
     return data