Post by DarkPikachu on May 17, 2011 20:17:25 GMT -5
this template requires HexEdit 4.0
template name: "_dat.xml"
copy this into your template directory...
main directory can be found in the Basic Knowledge thread.
<?xml version="1.0"?>
<!DOCTYPE binary_file_format SYSTEM "BinaryFileFormat.dtd">
<binary_file_format name="DAT" type_name="" comment="" expr="" default_byte_order="big" default_read_only="false" default_char_set="ansi">
<define_struct type_name="JOBJ" comment="" expr="">
<struct name="data" type_name="" comment="" expr="">
<data type="int" name="unk" len="4" format="unsigned" display=""/>
<data type="none" name="flags" len="4"/>
<data type="int" name="child_offset" len="4" format="unsigned" display=""/>
<data type="int" name="next_offset" len="4" format="unsigned" display=""/>
<data type="int" name="data_offset" len="4" format="unsigned" display=""/>
<data type="none" name="Rot" len="12"/>
<data type="none" name="Sca" len="12"/>
<data type="none" name="Loc" len="12"/>
<data type="int" name="inverse" len="4" format="unsigned" display=""/>
<data type="int" name="unk2" len="4" format="unsigned" display=""/>
<if test="data.inverse != 0" comment="">
<jump offset="data.inverse + 32" comment="" origin="start">
<data type="none" name="data.inverse_matrix" len="48"/>
</jump>
<else/><data type="none" name="data.inverse_matrix" len="48"/>
</if>
</struct>
<if test="data.data_offset != 0" comment="">
<jump offset="data.data_offset + 32" comment="" origin="start">
<use_struct name="DOBJ" expr="" type_name="DOBJ" comment=""/>
</jump>
</if>
<if test="data.child_offset != 0" comment="">
<jump offset="data.child_offset + 32" comment="" origin="start">
<use_struct name="JOBJ" expr="" type_name="JOBJ" comment=""/>
</jump>
</if>
<if test="data.next_offset != 0" comment="">
<jump offset="data.next_offset + 32" comment="" origin="start">
<use_struct name="next_JOBJ" expr="" type_name="JOBJ" comment=""/>
</jump>
</if>
</define_struct>
<define_struct type_name="DOBJ" comment="" expr="">
<struct name="data" type_name="" comment="" expr="">
<data type="int" name="unk" len="4" format="unsigned" display=""/>
<data type="int" name="data_offset" len="4" format="unsigned" display=""/>
<data type="int" name="material_offset" len="4" format="unsigned" display=""/>
<data type="int" name="polygon_offset" len="4" format="unsigned" display=""/>
</struct>
<if test="data.data_offset != 0" comment="">
<jump offset="data.data_offset +32" comment="" origin="start">
<use_struct name="DOBJ" expr="" type_name="DOBJ" comment=""/>
</jump>
</if>
<if test="data.material_offset != 0" comment="">
<jump offset="data.material_offset + 32" comment="" origin="start">
<use_struct name="MOBJ" expr="" type_name="MOBJ" comment=""/>
</jump>
</if>
<if test="data.polygon_offset != 0" comment="">
<jump offset="data.polygon_offset + 32" comment="" origin="start">
<use_struct name="POBJ" expr="" type_name="POBJ" comment=""/>
</jump>
</if>
</define_struct>
<define_struct type_name="MOBJ" comment="" expr="">
<struct name="data" type_name="" comment="" expr="">
<data type="int" name="unk" format="unsigned" len="4" display=""/>
<data type="int" name="flags" format="unsigned" len="4" display=""/>
<data type="int" name="texture_offset" format="unsigned" len="4" display=""/>
<data type="int" name="colors_offset" format="unsigned" len="4" display=""/>
<data type="int" name="unk2" format="unsigned" len="4" display=""/>
<data type="int" name="unk3" format="unsigned" len="4" display=""/>
</struct>
<if test="data.texture_offset != 0" comment="">
<jump offset="data.texture_offset + 32" comment="" origin="start">
<use_struct name="TOBJ" expr="" type_name="TOBJ" comment=""/>
</jump>
</if>
<if test="data.colors_offset != 0" comment="">
<jump offset="data.colors_offset + 32" comment="" origin="start">
<data type="none" name="tmp" len="4"/>
</jump>
</if>
</define_struct>
<define_struct type_name="POBJ" comment="" expr="">
<data type="int" name="unk1" len="4" format="unsigned" display=""/>
<data type="int" name="next_offset" len="4" format="unsigned" display=""/>
<data type="int" name="attr_offset" len="4" format="unsigned" display=""/>
<data type="none" name="flags" len="2"/>
<data type="int" name="DL_size" len="2" format="unsigned" display=""/>
<data type="int" name="DL_offset" len="4" format="unsigned" display=""/>
<data type="int" name="weights_offset" len="4" format="unsigned" display=""/>
<if test="attr_offset != 0" comment="">
<jump offset="attr_offset+32" comment="" origin="start">
<for name="attr" count="" stop_test="attr.facepoint_index == 255" type_name="" comment="">
<struct name="attr" type_name="" comment="" expr="index: {this.facepoint_index} - type: {this.index_type}">
<data type="int" name="facepoint_index" len="4" format="unsigned" display=""/>
<data type="int" name="index_type" len="4" format="unsigned" display=""/>
<data type="int" name="comp_cnt" len="4" format="unsigned" display=""/>
<data type="int" name="data_type" len="4" format="unsigned" display=""/>
<data type="int" name="multiplier" format="unsigned" len="1" display=""/>
<data type="int" name="unk1" len="1" format="unsigned" display=""/>
<data type="int" name="entry_stride" len="2" format="unsigned" display=""/>
<data type="int" name="data_offset" len="4" format="unsigned" display=""/>
<if test="index_type > 1 && facepoint_index != 255" comment="">
<jump offset="data_offset + 32" comment="" origin="start">
<struct name="data" type_name="" comment="" expr="">
<data type="none" name="tmp" len="entry_stride"/>
</struct>
</jump>
</if>
</struct>
</for>
</jump>
</if>
<if test="DL_offset != 0" comment="">
<jump offset="DL_offset + 32" comment="" origin="start">
<struct name="Display_List" type_name="" comment="" expr="">
<data type="none" name="tmp" len="DL_size * 32"/>
</struct>
</jump>
</if>
<if test="weights_offset != 0" comment="">
<jump offset="weights_offset + 32" comment="" origin="start">
<struct name="weights" type_name="" comment="" expr="">
<data type="none" name="tmp" len="2"/>
</struct>
</jump>
</if>
<if test="next_offset != 0" comment="">
<jump offset="next_offset + 32" comment="" origin="start">
<use_struct name="POBJ" expr="" type_name="POBJ" comment=""/>
</jump>
</if>
</define_struct>
<define_struct type_name="TOBJ" comment="" expr="">
<struct name="data" type_name="" comment="" expr="">
<data type="int" name="unk" format="unsigned" len="4" display=""/>
<data type="int" name="image_offset" format="unsigned" len="4" display=""/>
<data type="int" name="pallet_offset" format="unsigned" len="4" display=""/>
<data type="int" name="unk2" format="unsigned" len="4" display=""/>
<data type="int" name="unk_offset" format="unsigned" len="4" display=""/>
</struct>
<if test="data.image_offset != 0" comment="">
<jump offset="data.image_offset + 32" comment="" origin="start">
<data type="none" name="image" len="4"/>
</jump>
</if>
<if test="data.pallet_offset != 0" comment="">
<jump offset="data.pallet_offset + 32" comment="" origin="start">
<data type="none" name="pallet" len="4"/>
</jump>
</if>
<if test="data.unk_offset != 0" comment="">
<jump offset="data.unk_offset + 32" comment="" origin="start">
<data type="none" name="unk"/>
</jump>
</if>
</define_struct>
<define_struct type_name="OBJ" comment="" expr="">
<if test="str == "PlyPikachu5K_Share_joint"" comment="">
<use_struct name="JOBJ" expr="" type_name="JOBJ" comment=""/>
</if>
</define_struct>
<struct name="hdr" type_name="" comment="" expr="">
<data type="int" name="file_size" format="unsigned" len="4" display="" domain="this > 0"/>
<data type="int" name="reloc_tbl" format="unsigned" len="4" display=""/>
<data type="int" name="num_offsets" format="signed" len="4" display=""/>
<data type="int" name="num_nodes" format="signed" len="4" display=""/>
<data type="int" name="unk1" format="unsigned" len="4" display=""/>
<data type="int" name="unk2" format="unsigned" len="4" display=""/>
<data type="int" name="pad1" format="unsigned" len="4" display="hex"/>
<data type="int" name="pad2" format="unsigned" len="4" display="hex"/>
</struct>
<jump offset="hdr.reloc_tbl + 32" comment="" origin="start">
<for name="reloc_tbl" count="hdr.num_offsets || hdr.num_offsets - 1" stop_test="hdr.num_offsets != 0" type_name="" comment="">
<struct name="" type_name="" comment="" expr="">
<data type="int" name="ofst_tbl" format="signed" len="4" display=""/>
<jump offset="ofst_tbl+32" comment="" origin="start">
<data type="none" name="point" len="2"/>
</jump>
</struct>
</for>
</jump>
<jump offset="hdr.reloc_tbl + 32 + (hdr.num_offsets*4)" comment="" origin="start">
<for name="node" count="hdr.num_nodes || hdr.num_nodes - 1" stop_test="hdr.num_nodes == 0" type_name="" comment="">
<struct name="" type_name="" comment="" expr="{this.str_name.str}">
<data type="int" name="offset" format="unsigned" len="4" display=""/>
<data type="int" name="name" format="unsigned" len="4" display=""/>
<jump offset="hdr.reloc_tbl + 32 + (hdr.num_offsets*4) + (hdr.num_nodes*8) + name" comment="" origin="start">
<struct name="str_name" type_name="" comment="" expr="">
<data type="string" name="str" format="ascii" display=""/>
</struct>
</jump>
<eval expr="str = str_name.str" display_error="false" display_result="false" comment=""/>
<eval expr="pos = strchr(str, '_')" display_error="false" display_result="false" comment=""/>
<eval expr="ii = 0" display_error="false" display_result="false" comment=""/>
<for name="split" count="" stop_test="pos < 0" type_name="" comment="">
<eval expr="sub[ii]=left(str, pos), str=mid(str, pos+1), pos=strchr(str, '_'), ii=ii+1" display_error="false" display_result="false" comment=""/>
</for>
<eval expr="sub[ii]=str" display_error="false" display_result="false" comment=""/>
<eval expr="ii = 0" display_error="false" display_result="false" comment=""/>
<if test="sub[2] == "joint"" comment="">
<jump offset="offset+32" comment="" origin="start">
<use_struct name="JOBJ" expr="" type_name="JOBJ" comment=""/>
</jump>
</if>
</struct>
</for>
</jump>
<data type="none" name="none"/>
</binary_file_format>
template name: "_dat.xml"
copy this into your template directory...
main directory can be found in the Basic Knowledge thread.