|
|
« Reply #45 on: December 06, 2010, 01:40:18 PM » |
|
I fixed the prob... I was using a forth float when there was only three so here's the template (so far): ... copy that and paste it in: C:/Documents and Settings\*user*\Application Data\ECSoftware\HexEdit\_mdl0.xmland open an mdl0 file in HexEdit... now, the template doesn't initiate automatically :/ when you open the mdl0, go to 'view'-'template'-'split window' and be sure to turn the auto sync on as well (looklike 3 red arrows "back, forth, back") that should teach you the relocation table I forget how to get the 'auto sync' button... I think you have to turn on the navigation toolbar :/ and cool just try to keep it as single file... I hate multifiles DX
|
|
« Last Edit: December 06, 2010, 01:41:12 PM by Tcll »
|
Logged
|
|
|
|
|
|
|
« Reply #46 on: December 06, 2010, 03:19:57 PM » |
|
edit: looool found it..=p
|
|
« Last Edit: December 06, 2010, 03:27:36 PM by theshyguy »
|
Logged
|
|
|
|
|
|
|
« Reply #47 on: December 06, 2010, 04:20:08 PM » |
|
heh hey, you wanna turn this into a dev thread (may help boost me in Tk as well as learning more about the MDL0 format) ^yes, I'll try this in Py if I get this, then maybe I can get my converter btw, when I posted this, it was just a few minutes before my bro turned his cpu off and I lost net... so yea, I couldn't have replied to your post after that because I was either in bed, or at school... DX I only get little time to actually use my cpu before losing net (6 hrs) ^I need at least 10-12 for what I do (another reson development is slow)
|
|
|
Logged
|
|
|
|
|
|
|
« Reply #48 on: December 06, 2010, 07:49:52 PM » |
|
just got back from stuff and am going to look at mario mdl0 using your template....it looks like you know alot....all i know are bones(mainly) 0.o.....what should the title of the dev thread be about? bones or fully editing mdl0s?
edit: lol....its confusing...ill wait till tomoro i guess to talk about it..
|
|
« Last Edit: December 06, 2010, 08:17:34 PM by theshyguy »
|
Logged
|
|
|
|
|
|
|
« Reply #49 on: December 07, 2010, 01:26:16 PM » |
|
yea... I know it's confusing... sry bout that I can give you what I have of my notes (which are still growing) note: polygons are not fully understood yet (you'll see why in the notes) and I was just saying to use this page as a dev thread :/ can't hurt much there...
|
|
|
Logged
|
|
|
|
|
|
|
« Reply #50 on: December 07, 2010, 02:13:03 PM » |
|
yeh notes would be nice...atm im making that undo button but i gotta fix this one thing....keeps screwing up lol
|
|
|
Logged
|
|
|
|
|
|
|
« Reply #51 on: December 07, 2010, 02:43:41 PM » |
|
alright ^_^ they're a bit messy though... mdl0 header:
0x00(4): MDL0 Identifier 0x04(4): MDL0 Size 0x08(4): Sections 0x0C(4): Model Nodes Offset
0x10(4): Definitions List 0x14(4): Bones List 0x18(4): Vertices List 0x1C(4): Normals List 0x20(4): Colors List 0x24(4): UV Points List 0x28(4): Materials 1 List 0x2C(4): Materials 2 List 0x30(4): Polygons List 0x34(4): Textures 1 List 0x38(4): Textures 2 List
0x3C(4): Model Name Offset 0x40(4): Header Length 0x44(4): Header Offset
0x48(4): ?? 0x4C(4): ?? 0x50(4): num Vertices 0x54(4): num Faces 0x58(4): ?? 0x5C(4): num Nodes 0x60(4): Version 0x62(2): ?? 0x64(2): ?? 0x68(4): Box Min. X 0x6C(4): Box Min. Y 0x70(4): Box Min. Z 0x74(4): Box Max. X 0x78(4): Box Max. Y 0x7C(4): Box Max. Z 0x80(4): num Nodes (Copy??)
nodes... (num nodes * 4)
relocation table header: (group list)
0x00(4): block length 0x04(4): number of offsets 0x08(4): 'FFFF0000' 0x0C(2): ?? (maybe flags) 0x0E(2): ?? 0x10(4): pad1 0x14(4): pad2
relocation table offset:
0x00(2): model ID 0x02(2): '0000' 0x04(2): ?? 0x06(2): ?? 0x08(4): string offset (- group list) 0x0C(4): data offset (- group list)
Definition data header: id(1) --
Bone data header: id(2)
0x00(4): Header Length (Usually 000000D0) 0x04(4): MDL0 Offset 0x08(4): String Offset (- mdl0 offset) 0x0C(4): Bone Index 0x10(4): Node ID 0x14(4): Flags 0x18(4): Pad 1 0x1C(4): Pad 2 0x20(4): Scale X 0x24(4): Scale Y 0x28(4): Scale Z 0x2C(4): Rotation X 0x30(4): Rotation Y 0x34(4): Rotation Z 0x38(4): Translation X 0x3C(4): Translation Y 0x40(4): Translation Z 0x44(4): Box Min. X 0x48(4): Box Min. Y 0x4C(4): Box Min. Z 0x50(4): Box Max. X 0x54(4): Box Max. Y 0x58(4): Box Max. Z 0x5C(4): Parent Offset 0x60(4): First Child Offset 0x64(4): Next Offset 0x68(4): Previous Offset 0x6C(4): Bone Strings/Properties Offset (part2)
Uint32: 0x70(4): FrameMatrix Set 1 Float 1 0x74(4): FrameMatrix Set 2 Float 1 0x78(4): FrameMatrix Set 3 Float 1 0x7C(4): FrameMatrix Set 4 Float 1 0x80(4): FrameMatrix Set 1 Float 2 0x84(4): FrameMatrix Set 2 Float 2 0x88(4): FrameMatrix Set 3 Float 2 0x8C(4): FrameMatrix Set 4 Float 2 0x90(4): FrameMatrix Set 1 Float 3 0x94(4): FrameMatrix Set 2 Float 3 0x98(4): FrameMatrix Set 3 Float 3 0x9C(4): FrameMatrix Set 4 Float 3 0xA0(4): InverseBindMatrix Set 1 Float 1 0xA4(4): InverseBindMatrix Set 2 Float 1 0xA8(4): InverseBindMatrix Set 3 Float 1 0xAC(4): InverseBindMatrix Set 4 Float 1 0xB0(4): InverseBindMatrix Set 1 Float 2 0xB4(4): InverseBindMatrix Set 2 Float 2 0xB8(4): InverseBindMatrix Set 3 Float 2 0xBC(4): InverseBindMatrix Set 4 Float 2 0xC0(4): InverseBindMatrix Set 1 Float 3 0xC4(4): InverseBindMatrix Set 2 Float 3 0xC8(4): InverseBindMatrix Set 3 Float 3 0xCC(4): InverseBindMatrix Set 4 Float 3
flags: 0x0001 - NoTransform 0x0002 - FixedTranslation 0x0004 - FixedRotation 0x0008 - FixedScale 0x0010 - ?? 0x0100 - ?? 0x0200 - HasGeometry
vertex data header: id(3)
0x00(4): Block size 0x04(4): MDL0 Offset 0x08(4): Data Offset 0x0C(4): String Offset (- mdl0 offset) 0x10(4): Index ID 0x14(4): Bounding Box (1 == true) 0x18(4): Data type (4 == float) 0x1C(1): Modifier (always 0 for floats) 0x1D(1): Entry size 0x1E(2): Number of entries 0x20(4): Box Min. X 0x24(4): Box Min. Y 0x28(4): Box Min. Z 0x2C(4): Box Max. X 0x30(4): Box Max. Y 0x34(4): Box Max. Z 0x38(4): pad1 0x3C(4): pad2 0x40(?): Vertex data (usu 32bit)
Colors: id(5)
in image... (will edit)
polygon data header: id(9)
0x00(4): Size 0x04(4): MDL0 offset 0x08(4): Mesh weight/transform [NodeID] (-1) 0x0C(4): Vertex descriptor 1 (See Bits0) 0x10(4): Vertex descriptor 2 (See Bits1) 0x14(4): Number of uvs, colors, and normals per vertex (See Bits2) 0x18(4): Vertex descriptor position, normal, color source layout 0x1C(4): Vertex descriptor uv source layout 0x20(4): Offset to shader intructions 0x24(4): Size of data block 0x28(4): Size of data block (copy??) 0x2C(4): Offset to data block 0x30(4): Vetrex descriptor source layput 0x34(4): Unknown (Always 0x00000000) 0x38(4): String offset 0x3C(4): Index 0x40(4): Number of vertices 0x44(4): Number of faces
0x48(2): Position input 0x4A(2): Normal input 0x4C(2): Color0 input 0x4E(2): Color1 input 0x50(2): Coord0 input 0x52(2): Coord1 input 0x54(2): Coord2 input 0x56(2): Coord3 input 0x58(2): Coord4 input 0x5A(2): Coord5 input 0x5C(2): Coord6 input 0x5E(2): Coord7 input 0x60(4): Weights offset
Weight List 0x00(4): Number of weights 0x##(2): Weight index
Primitive Types 0x20 - Position matrix 0x28 - Normal matrix 0x30 - Texture matrix 0x38 - Light matrix
0x80 - Quads 0x90 - Triangles 0x98 - Tristrip 0xA0 - Trian 0xA8 - Lines 0xB0 - Linestrip 0xB8 - Points
_______ | \ | Bits0 \ |_________\___________________________________ | | | 0000 0000 0000 000A ABBC CDDE FGHI JKLM | |_____________________________________________| | | | A = Color1 | | B = Color0 | | C = Normals | | D = Posiions | | E = Texture transform0 | | F = Texture transform1 | | G = Texture transform2 | | H = Texture transform3 | | I = Texture transform4 | | J = Texture transform5 | | K = Texture transform6 | | L = Texture transform7 | | M = Position transform | |_____________________________________________|
_______ | \ | Bits1 \ |_________\___________________________________ | | | 0000 0000 0000 0000 AABB CCDD EEFF GGHH | |_____________________________________________| | | | A = Coord7 | | B = Coord6 | | C = Coord5 | | D = Coord4 | | E = Coord3 | | F = Coord2 | | G = Coord1 | | H = Coord0 | |_____________________________________________|
_______ | \ | Bits2 \ |_________\___________________________________ | | | 0000 0000 0000 0000 0000 0000 AAAA BBCC | |_____________________________________________| | | | A = UV | | B = Normals | | C = Colors | |_____________________________________________|
* 0 = none, 1 = normal, 2 = nbt
------------------------------------------------------
other useful data: these notes are kind of out of date.
All data is big endian.
BRES header: u32 magic = 'bres' u32 unknown u32 filesize u32 unknown u32 other_magic = 'root' u32 root directory length
BRES root directory @0x18: u32 unknown u32 ndirents 16 bytes unknown = ff ff 00 00 00 01 00 00 ndirents * struct { u16 unknown[2] u16 unknown[2] u32 offset to dirname from start of directory dirname is a null terminated string u32 offset to data for entry from start of dir }
MDL0 header: u32 magic = 'MDL0' u32 filesize u32 (one less than offset index count?) u32 unknown u32 offsets to data block index blocks[]
data block index block { (0x260) u32 index block length u32 entry count (10 @ 0x264) u32 unknown[2] u32 zero[2]
0x278 - 0x378: array { u16 model_id -- maps position blocks to normal blocks? u16 zero u16 unknown u16 unknown uint32 unknown (like 0x001a2f34): model id? when added to start offset of this data block -- consistent between positions and normals... uint32 offset to vertex position data block from start of this data block } [10] }
another data block index at 0x118, unknown0 = 0x0148, count=13
NodeMix block { stream: u8 nexttype { 00: done 02: mapping data, u16 -> u16 03: weighting data } nexttype == 02: { u16 unknown1 u16 unknown2 } nexttype == 03: { u16 (some id?) u8 number of weights struct { u16 transform_id float weight }[] weight_set } }
vertex position data block { 0x40 byte header { uint32_t length of this block int32_t offset to beginning of file (always negative) ... uint32_t at 0x10: index # of block (starts at 0, should be no gaps)
uint32_t at 0x14: { 0x01 = positions, has bounding box + zero pad 0x00 = normals, no bounding box data + zero pad } ... uint16_t at 0x1c: bytes per vertex (0x04 * #components) { 0x08 = UVs 0x0c = vertex and normal data } uint16_t at 0x1e = number of vertices to follow
0x20 { float[6] (bounding box?) uint32_t[2] zero } (not present for normals) } component data follows: #vertices * #components float32 }
vertex array header: { 0x140 bytes long, almost completely unknown u8 @ 0x0e { 0x14 or 0x54 for u8 datas 0x5e for u16 datas } u16 @ 0x1e (vertex count for a position data block) is: 0x80 for a 4 or 7 byte vertex struct layout 0xc0 for an 8 byte vertex struct layout u16 @ 0x94 = byte length of 3rd component in the struct only if @0x1e != 0xc0 and @0x0e != 0x14 } vertex array data: { u8 list type to follow { 0x00 == stop processing 0xB8 == points 0xA8 == lines 0xB0 == line strip 0x90 == triangles 0x98 == triangle strip 0xA0 == triangle fan 0x80 == quads } u16 = #verts to follow if (@0x1e in header == 0xc0) { u8 position idx u8 unknown1 u16 unknown2 u8[4] more unknowns } else { component lengths defined in header (@0x0e, @0x94): position idx (uv or normal idx) (uv or normal idx) } }
texture block: { u32 entry count entry (8 bytes) { u32 unknown u32 rel_offset to rel_offset to texture name (useless...) } }
and here's the image for the colors:
|
|
« Last Edit: October 05, 2022, 08:38:03 PM by DarkPikachu »
|
Logged
|
|
|
|
|
|
|
« Reply #52 on: December 07, 2010, 05:39:27 PM » |
|
almost done making the undo button(technically i am) but i just need to make it so it records if you use the move up/down buttons...but im taking a break atm sooo ima look at this for a while^
the redo button is basically the same as undo so yeh it won't take as long for the redo
|
|
|
Logged
|
|
|
|
|
|
|
« Reply #53 on: December 07, 2010, 05:44:10 PM » |
|
template UD: everything from bones to uv's works now mat1 still needs to be finished :/ oh and everything displays names now <?xml version="1.0"?> <!DOCTYPE binary_file_format SYSTEM "BinaryFileFormat.dtd"> <binary_file_format name="MDL0" type_name="" comment="" expr="" default_byte_order="big" default_read_only="false" default_char_set="ansi"> <define_struct type_name="offset_name" comment="" expr=""> <data type="int" name="str_len" format="unsigned" len="1" display=""/> <data type="string" name="name" format="ascii" len="str_len" display=""/> </define_struct> <define_struct type_name="bounds" comment="" expr=""> <data type="int" name="min_X" format="unsigned" len="4" display=""/> <data type="int" name="min_Y" format="unsigned" len="4" display=""/> <data type="int" name="min_Z" format="unsigned" len="4" display=""/> <data type="int" name="max_X" format="unsigned" len="4" display=""/> <data type="int" name="max_Y" format="unsigned" len="4" display=""/> <data type="int" name="max_Z" format="unsigned" len="4" display=""/> <data type="none" name="pad" len="8"/> </define_struct> <define_struct type_name="relocation_group" comment="" expr=""> <data type="int" name="block_len" format="unsigned" len="4" display=""/> <data type="int" name="num_offsets" format="unsigned" len="4" display=""/> <data type="int" name="tag" format="unsigned" len="4" display="hex"/> <data type="int" name="unk1" format="unsigned" len="2" display="hex"/> <data type="int" name="unk2" format="unsigned" len="2" display="hex"/> <data type="int" name="pad" format="unsigned" len="8" display="hex"/> </define_struct> <define_struct type_name="relocation_offset" comment="" expr=""> <data type="int" name="ID" format="unsigned" len="2" display=""/> <data type="int" name="unk1" format="unsigned" len="2" display="hex"/> <data type="int" name="unk2" format="unsigned" len="2" display="hex"/> <data type="int" name="unk3" format="unsigned" len="2" display="hex"/> <data type="int" name="string_offset" format="unsigned" len="4" display=""/> <data type="int" name="data_offset" format="unsigned" len="4" display=""/> </define_struct> <define_struct type_name="Definitions" comment="" expr=""> <struct name="definition_header" type_name="" comment="" expr=""> <data type="none" name="tmp" len="4"/> </struct> </define_struct> <define_struct type_name="Bones" comment="" expr=""> <struct name="bone_header" type_name="" comment="" expr=""> <data type="int" name="header_len" len="4" format="unsigned" display=""/> <data type="int" name="MDL0_offset" len="4" format="signed" display=""/> <data type="int" name="string_offset" len="4" format="unsigned" display=""/> <data type="int" name="bone_index" len="4" format="unsigned" display=""/> <data type="int" name="node_ID" len="4" format="unsigned" display=""/> <data type="int" name="flags" len="4" format="unsigned" display=""/> <data type="int" name="pad" len="8" format="unsigned" display=""/> <struct name="loc_rot_sca" type_name="" comment="" expr=""> <data type="int" name="sca_X" format="unsigned" len="4" display=""/> <data type="int" name="sca_Y" len="4" format="unsigned" display=""/> <data type="int" name="sca_Z" len="4" format="unsigned" display=""/> <data type="int" name="rot_X" len="4" format="unsigned" display=""/> <data type="int" name="rot_Y" len="4" format="unsigned" display=""/> <data type="int" name="rot_Z" len="4" format="unsigned" display=""/> <data type="int" name="loc_X" len="4" format="unsigned" display=""/> <data type="int" name="loc_Y" len="4" format="unsigned" display=""/> <data type="int" name="loc_Z" len="4" format="unsigned" display=""/> </struct> <struct name="bound" type_name="" comment="" expr=""> <data type="int" name="min_X" len="4" format="unsigned" display=""/> <data type="int" name="min_Y" len="4" format="unsigned" display=""/> <data type="int" name="min_Z" len="4" format="unsigned" display=""/> <data type="int" name="max_X" len="4" format="unsigned" display=""/> <data type="int" name="max_Y" len="4" format="unsigned" display=""/> <data type="int" name="max_Z" len="4" format="unsigned" display=""/> </struct> <data type="int" name="parent" len="4" format="signed" display=""/> <data type="int" name="child" len="4" format="unsigned" display=""/> <data type="int" name="next" len="4" format="unsigned" display=""/> <data type="int" name="prev" len="4" format="unsigned" display=""/> <data type="int" name="part2" len="4" format="unsigned" display=""/> </struct> <struct name="frame_matrix" type_name="" comment="" expr=""> <data type="int" name="s_1_1" format="signed" len="4" display=""/> <data type="int" name="s_2_1" format="signed" len="4" display=""/> <data type="int" name="s_3_1" format="signed" len="4" display=""/> <data type="int" name="s_4_1" format="signed" len="4" display=""/> <data type="int" name="s_1_2" format="signed" len="4" display=""/> <data type="int" name="s_2_2" format="signed" len="4" display=""/> <data type="int" name="s_3_2" format="signed" len="4" display=""/> <data type="int" name="s_4_2" format="signed" len="4" display=""/> <data type="int" name="s_1_3" format="signed" len="4" display=""/> <data type="int" name="s_2_3" format="signed" len="4" display=""/> <data type="int" name="s_3_3" format="signed" len="4" display=""/> <data type="int" name="s_4_3" format="signed" len="4" display=""/> </struct> <struct name="inverse_matrix" type_name="" comment="" expr=""> <data type="int" name="s_1_1" format="signed" len="4" display=""/> <data type="int" name="s_2_1" format="signed" len="4" display=""/> <data type="int" name="s_3_1" format="signed" len="4" display=""/> <data type="int" name="s_4_1" format="signed" len="4" display=""/> <data type="int" name="s_1_2" format="signed" len="4" display=""/> <data type="int" name="s_2_2" format="signed" len="4" display=""/> <data type="int" name="s_3_2" format="signed" len="4" display=""/> <data type="int" name="s_4_2" format="signed" len="4" display=""/> <data type="int" name="s_1_3" format="signed" len="4" display=""/> <data type="int" name="s_2_3" format="signed" len="4" display=""/> <data type="int" name="s_3_3" format="signed" len="4" display=""/> <data type="int" name="s_4_3" format="signed" len="4" display=""/> </struct> </define_struct> <define_struct type_name="Vertices" comment="" expr=""> <struct name="vertice_header" type_name="" comment="" expr=""> <data type="int" name="block_size" len="4" format="unsigned" display=""/> <data type="int" name="MDL0_offset" len="4" format="signed" display=""/> <data type="int" name="data_offset" len="4" format="unsigned" display=""/> <data type="int" name="string_offset" len="4" format="unsigned" display=""/> <data type="int" name="ID" len="4" format="unsigned" display=""/> <data type="int" name="isXYZ" len="4" format="unsigned" display=""/> <data type="int" name="type" len="4" format="unsigned" display=""/> <data type="int" name="modifier" len="1" format="unsigned" display=""/> <data type="int" name="entry_stride" len="1" format="unsigned" display=""/> <data type="int" name="num_vertices" len="2" format="unsigned" display=""/> <if test="isXYZ == 1" comment=""> <use_struct name="bounds" expr="" type_name="bounds" comment=""/> </if> </struct> <data type="string" name="vertices" len="vertice_header.entry_stride * vertice_header.num_vertices" format="default" display="vert structures" comment="I could've put a 'FOR' here, but it'd take too long when loading the file"/> <data type="none" name="pad" len="vertice_header.block_size - (vertice_header.entry_stride*vertice_header.num_vertices) - 64"/> </define_struct> <define_struct type_name="Normals" comment="" expr=""> <struct name="normal_header" type_name="" comment="" expr=""> <data type="int" name="block_size" len="4" format="unsigned" display=""/> <data type="int" name="MDL0_offset" len="4" format="signed" display=""/> <data type="int" name="data_offset" len="4" format="unsigned" display=""/> <data type="int" name="string_offset" len="4" format="unsigned" display=""/> <data type="int" name="ID" len="4" format="unsigned" display=""/> <data type="int" name="isXYZ" len="4" format="unsigned" display=""/> <data type="int" name="type" len="4" format="unsigned" display=""/> <data type="int" name="modifier" len="1" format="unsigned" display=""/> <data type="int" name="entry_stride" len="1" format="unsigned" display=""/> <data type="int" name="num_normals" len="2" format="unsigned" display=""/> <if test="isXYZ == 1" comment=""> <use_struct name="bounds" expr="" type_name="bounds" comment=""/> </if> </struct> <data type="string" name="normals" format="default" display="normal structures" len="normal_header.entry_stride*normal_header.num_normals" comment="I could've put a 'FOR' here, but it'd take too long when loading the file"/> <data type="none" name="pad" len="normal_header.block_size - (normal_header.entry_stride*normal_header.num_normals) - 32"/> </define_struct> <define_struct type_name="Colors" comment="" expr=""> <struct name="color_header" type_name="" comment="" expr=""> <data type="int" name="block_size" len="4" format="signed" display=""/> <data type="int" name="MDL0_offset" len="4" format="signed" display=""/> <data type="int" name="data_offset" len="4" format="signed" display=""/> <data type="int" name="string_offset" len="4" format="signed" display=""/> <data type="int" name="ID" len="4" format="signed" display=""/> <data type="int" name="isRGBA" len="4" format="signed" display=""/> <data type="int" name="type" len="4" format="signed" display=""/> <data type="int" name="entry_stride" len="1" format="signed" display=""/> <data type="int" name="modifier" len="1" format="signed" display=""/> <data type="int" name="num_colors" len="2" format="signed" display=""/> </struct> <for name="color" count="color_header.num_colors || color_header.num_colors - 1" stop_test="color_header.num_colors == 0" type_name="" comment=""> <data type="none" name="color" len="color_header.entry_stride"/> </for> <data type="none" name="pad" len="color_header.block_size - (color_header.num_colors*color_header.entry_stride) - 32"/> </define_struct> <define_struct type_name="UV_Points" comment="" expr=""> <struct name="UV_header" type_name="" comment="" expr=""> <data type="int" name="block_size" len="4" format="unsigned" display=""/> <data type="int" name="MDL0_offset" len="4" format="signed" display=""/> <data type="int" name="data_offset" len="4" format="unsigned" display=""/> <data type="int" name="string_offset" len="4" format="unsigned" display=""/> <data type="int" name="ID" len="4" format="unsigned" display=""/> <data type="int" name="isXY" len="4" format="unsigned" display=""/> <data type="int" name="type" len="4" format="unsigned" display=""/> <data type="int" name="modifier" len="1" format="unsigned" display=""/> <data type="int" name="entry_stride" len="1" format="unsigned" display=""/> <data type="int" name="num_UVs" len="2" format="unsigned" display=""/> <if test="isXY == 1" comment=""> <struct name="bounds" expr="" type_name="" comment=""> <data type="int" name="min_X" format="unsigned" len="4" display=""/> <data type="int" name="min_Y" format="unsigned" len="4" display=""/> <data type="int" name="max_X" format="unsigned" len="4" display=""/> <data type="int" name="max_Y" format="unsigned" len="4" display=""/> <data type="none" name="pad" len="16"/></struct> </if> </struct> <data type="string" name="UVs" len="UV_header.entry_stride * UV_header.num_UVs" format="default" display="uv structures" comment="I could've put a 'FOR' here, but it'd take too long when loading the file"/> <data type="none" name="pad" len="UV_header.block_size - (UV_header.entry_stride*UV_header.num_UVs) - 64"/> </define_struct> <define_struct type_name="Materials1" comment="" expr=""> <struct name="header" type_name="" comment="" expr=""> <data type="int" name="block_size" len="4" format="unsigned" display=""/> <data type="int" name="MDL0_offset" len="4" format="signed" display=""/> <data type="int" name="string_offset" len="4" format="unsigned" display=""/> <data type="int" name="ID" len="4" format="unsigned" display=""/> <data type="int" name="unk1" len="4" format="unsigned" display=""/> <data type="int" name="textures" len="1" format="unsigned" display=""/> <data type="int" name="num_layers" len="1" format="unsigned" display=""/> <data type="int" name="Flag3" len="1" format="unsigned" display=""/> <data type="int" name="Flag4" len="1" format="unsigned" display=""/> <data type="int" name="type" len="4" format="unsigned" display=""/> <data type="int" name="Flag5" len="1" format="unsigned" display=""/> <data type="int" name="Flag6" len="1" format="unsigned" display=""/> <data type="int" name="Flag7" len="1" format="unsigned" display=""/> <data type="int" name="Flag8" len="1" format="unsigned" display=""/> <data type="int" name="unk3" format="unsigned" len="4" display=""/> <data type="int" name="unk4" format="signed" len="4" display=""/> <data type="int" name="data_offset" format="signed" len="4" display=""/> <data type="int" name="num_textures" format="signed" len="4" display=""/> <data type="int" name="P3_offset" format="signed" len="4" display=""/> <data type="int" name="P4_offset" format="signed" len="4" display=""/> <data type="int" name="P5_offset" format="signed" len="4" display=""/> <data type="int" name="unk6" format="signed" len="4" display=""/> </struct> <jump offset="header.P3_offset+(header.MDL0_offset*-1)" comment="" origin="start"> <struct name="texture_ref" type_name="" comment="" expr=""> <data type="int" name="unk" format="unsigned" len="4" display=""/> </struct> </jump> </define_struct> <define_struct type_name="Materials2" comment="" expr=""> <struct name="header" type_name="" comment="" expr=""> <data type="none" name="tmp" len="4"/> </struct> </define_struct> <define_struct type_name="Polygons" comment="" expr=""> <struct name="header" type_name="" comment="" expr=""> <data type="none" name="tmp" len="4"/> </struct> </define_struct> <define_struct type_name="Textures1" comment="" expr=""> <struct name="header" type_name="" comment="" expr=""> <data type="none" name="tmp" len="4"/> </struct> </define_struct> <define_struct type_name="Textures2" comment="" expr=""> <struct name="header" type_name="" comment="" expr=""> <data type="none" name="tmp" len="4"/> </struct> </define_struct> <struct name="header" type_name="" comment="" expr=""> <data type="string" name="magic" len="4" format="ascii" display=""/> <data type="int" name="filesize" format="unsigned" len="4" display=""/> <data type="int" name="sections" format="unsigned" len="4" display=""/> <data type="int" name="nodes" format="signed" len="4" display=""/> <struct name="lists" type_name="" comment="" expr=""> <data type="int" name="Definitions" format="unsigned" len="4" display=""/> <data type="int" name="Bones" format="unsigned" len="4" display=""/> <data type="int" name="Vertices" format="unsigned" len="4" display=""/> <data type="int" name="Normals" format="unsigned" len="4" display=""/> <data type="int" name="Colors" format="unsigned" len="4" display=""/> <data type="int" name="UV_Points" format="unsigned" len="4" display=""/> <data type="int" name="Materials1" format="unsigned" len="4" display=""/> <data type="int" name="Materials2" format="unsigned" len="4" display=""/> <data type="int" name="Polygons" format="unsigned" len="4" display=""/> <data type="int" name="Textures1" format="unsigned" len="4" display=""/> <data type="int" name="Textures2" format="unsigned" len="4" display=""/> </struct> <data type="int" name="name_offset" format="unsigned" len="4" display=""/> <data type="int" name="header_len" format="unsigned" len="4" display=""/> <data type="int" name="header_offset" 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="num_verticies" format="unsigned" len="4" display=""/> <data type="int" name="num_faces" format="unsigned" len="4" display=""/> <data type="int" name="unk3" format="unsigned" len="4" display=""/> <data type="int" name="num_nodes" format="unsigned" len="4" display=""/> <data type="int" name="version" format="unsigned" len="4" display=""/> <data type="int" name="unk4" format="unsigned" len="2" display=""/> <data type="int" name="unk5" format="unsigned" len="2" display=""/> <struct name="bounds" type_name="" comment="" expr=""> <data type="int" name="min_X" format="unsigned" len="4" display=""/> <data type="int" name="min_Y" format="unsigned" len="4" display=""/> <data type="int" name="min_Z" format="unsigned" len="4" display=""/> <data type="int" name="max_X" format="unsigned" len="4" display=""/> <data type="int" name="max_Y" format="unsigned" len="4" display=""/> <data type="int" name="max_Z" format="unsigned" len="4" display=""/> </struct> </struct> <jump offset="header.nodes * -1" comment="" origin="start"> <struct name="nodes" type_name="" comment="" expr=""> <data type="int" name="num_nodes" format="signed" len="4" display=""/> <for name="node" count="num_nodes || num_nodes - 1" stop_test="num_nodes == 0" type_name="" comment=""> <data type="int" name="node" format="signed" len="4" display=""/> </for> </struct> </jump> <if test="header.sections >= 0 && header.lists.Definitions != 0" comment=""> <jump offset="header.lists.Definitions" comment="" origin="start"> <struct name="Definitions" type_name="" comment="" expr=""> <use_struct name="relocation_group" expr="" type_name="relocation_group" comment=""/> <for name="data" count="relocation_group.num_offsets || relocation_group.num_offsets - 1" stop_test="relocation_group.num_offsets == 0" type_name="" comment=""> <struct name="data" type_name="" comment="" expr="{this.offset_name.name}"> <use_struct name="relocation_offset" expr="" type_name="relocation_offset" comment=""/> <jump offset="relocation_offset.data_offset + header.lists.Definitions" comment="" origin="start"> <use_struct name="Definitions" expr="" type_name="Definitions" comment=""/> </jump> <jump offset="relocation_offset.string_offset + header.lists.Definitions - 1" comment="" origin="start"> <use_struct name="offset_name" expr="" type_name="offset_name" comment=""/> </jump> </struct> </for> </struct> </jump> </if> <if test="header.sections >= 1 && header.lists.Bones != 0" comment=""> <jump offset="header.lists.Bones" comment="" origin="start"> <struct name="Bones" type_name="" comment="" expr=""> <use_struct name="relocation_group" expr="" type_name="relocation_group" comment=""/> <for name="data" count="relocation_group.num_offsets || relocation_group.num_offsets - 1" stop_test="relocation_group.num_offsets == 0" type_name="" comment=""> <struct name="data" type_name="" comment="" expr="{this.offset_name.name}"> <use_struct name="relocation_offset" expr="" type_name="relocation_offset" comment=""/> <jump offset="relocation_offset.data_offset + header.lists.Bones" comment="" origin="start"> <use_struct name="Bone_data" expr="" type_name="Bones" comment=""/> </jump> <jump offset="relocation_offset.string_offset + header.lists.Bones - 1" comment="" origin="start"> <use_struct name="offset_name" expr="" type_name="offset_name" comment=""/> </jump> </struct> </for> </struct> </jump> </if> <if test="header.sections >= 2 && header.lists.Vertices != 0" comment=""> <jump offset="header.lists.Vertices" comment="" origin="start"> <struct name="Vertices" type_name="" comment="" expr=""> <use_struct name="relocation_group" expr="" type_name="relocation_group" comment=""/> <for name="data" count="relocation_group.num_offsets || relocation_group.num_offsets - 1" stop_test="relocation_group.num_offsets == 0" type_name="" comment=""> <struct name="data" type_name="" comment="" expr="{this.offset_name.name}"> <use_struct name="relocation_offset" expr="" type_name="relocation_offset" comment=""/> <jump offset="relocation_offset.data_offset + header.lists.Vertices" comment="" origin="start"> <use_struct name="Vertices" expr="" type_name="Vertices" comment=""/> </jump> <jump offset="relocation_offset.string_offset + header.lists.Vertices - 1" comment="" origin="start"> <use_struct name="offset_name" expr="" type_name="offset_name" comment=""/> </jump> </struct> </for> </struct> </jump> </if> <if test="header.sections >= 3 && header.lists.Normals != 0" comment=""> <jump offset="header.lists.Normals" comment="" origin="start"> <struct name="Normals" type_name="" comment="" expr=""> <use_struct name="relocation_group" expr="" type_name="relocation_group" comment=""/> <for name="data" count="relocation_group.num_offsets || relocation_group.num_offsets - 1" stop_test="relocation_group.num_offsets == 0" type_name="" comment=""> <struct name="data" type_name="" comment="" expr="{this.offset_name.name}"> <use_struct name="relocation_offset" expr="" type_name="relocation_offset" comment=""/> <jump offset="relocation_offset.data_offset + header.lists.Normals" comment="" origin="start"> <use_struct name="Normals" expr="" type_name="Normals" comment=""/> </jump> <jump offset="relocation_offset.string_offset + header.lists.Normals - 1" comment="" origin="start"> <use_struct name="offset_name" expr="" type_name="offset_name" comment=""/> </jump> </struct> </for> </struct> </jump> </if> <if test="header.sections >= 4 && header.lists.Colors != 0" comment=""> <jump offset="header.lists.Colors" comment="" origin="start"> <struct name="Colors" type_name="" comment="" expr=""> <use_struct name="relocation_group" expr="" type_name="relocation_group" comment=""/> <for name="data" count="relocation_group.num_offsets || relocation_group.num_offsets - 1" stop_test="relocation_group.num_offsets == 0" type_name="" comment=""> <struct name="data" type_name="" comment="" expr="{this.offset_name.name}"> <use_struct name="relocation_offset" expr="" type_name="relocation_offset" comment=""/> <jump offset="relocation_offset.data_offset + header.lists.Colors" comment="" origin="start"> <use_struct name="Colors" expr="" type_name="Colors" comment=""/> </jump> <jump offset="relocation_offset.string_offset + header.lists.Colors - 1" comment="" origin="start"> <use_struct name="offset_name" expr="" type_name="offset_name" comment=""/> </jump> </struct> </for> </struct> </jump> </if> <if test="header.sections >= 5 && header.lists.UV_Points != 0" comment=""> <jump offset="header.lists.UV_Points" comment="" origin="start"> <struct name="UV_Points" type_name="" comment="" expr=""> <use_struct name="relocation_group" expr="" type_name="relocation_group" comment=""/> <for name="data" count="relocation_group.num_offsets || relocation_group.num_offsets - 1" stop_test="relocation_group.num_offsets == 0" type_name="" comment=""> <struct name="data" type_name="" comment="" expr="{this.offset_name.name}"> <use_struct name="relocation_offset" expr="" type_name="relocation_offset" comment=""/> <jump offset="relocation_offset.data_offset + header.lists.UV_Points" comment="" origin="start"> <use_struct name="UV_Points" expr="" type_name="UV_Points" comment=""/> </jump> <jump offset="relocation_offset.string_offset + header.lists.UV_Points - 1" comment="" origin="start"> <use_struct name="offset_name" expr="" type_name="offset_name" comment=""/> </jump> </struct> </for> </struct> </jump> </if> <if test="header.sections >= 6 && header.lists.Materials1 != 0" comment=""> <jump offset="header.lists.Materials1" comment="" origin="start"> <struct name="Materials1" type_name="" comment="" expr=""> <use_struct name="relocation_group" expr="" type_name="relocation_group" comment=""/> <for name="data" count="relocation_group.num_offsets || relocation_group.num_offsets - 1" stop_test="relocation_group.num_offsets == 0" type_name="" comment=""> <struct name="data" type_name="" comment="" expr="{this.offset_name.name}"> <use_struct name="relocation_offset" expr="" type_name="relocation_offset" comment=""/> <jump offset="relocation_offset.data_offset + header.lists.Materials1" comment="" origin="start"> <use_struct name="Materials1" expr="" type_name="Materials1" comment=""/> </jump> <jump offset="relocation_offset.string_offset + header.lists.Materials1 - 1" comment="" origin="start"> <use_struct name="offset_name" expr="" type_name="offset_name" comment=""/> </jump> </struct> </for> </struct> </jump> </if> <if test="header.sections >= 7 && header.lists.Materials2 != 0" comment=""> <jump offset="header.lists.Materials2" comment="" origin="start"> <struct name="Materials2" type_name="" comment="" expr=""> <use_struct name="relocation_group" expr="" type_name="relocation_group" comment=""/> <for name="data" count="relocation_group.num_offsets || relocation_group.num_offsets - 1" stop_test="relocation_group.num_offsets == 0" type_name="" comment=""> <struct name="data" type_name="" comment="" expr="{this.offset_name.name}"> <use_struct name="relocation_offset" expr="" type_name="relocation_offset" comment=""/> <jump offset="relocation_offset.data_offset + header.lists.Materials2" comment="" origin="start"> <use_struct name="Materials2" expr="" type_name="Materials2" comment=""/> </jump> <jump offset="relocation_offset.string_offset + header.lists.Materials2 - 1" comment="" origin="start"> <use_struct name="offset_name" expr="" type_name="offset_name" comment=""/> </jump> </struct> </for> </struct> </jump> </if> <if test="header.sections >= 8 && header.lists.Polygons != 0" comment=""> <jump offset="header.lists.Polygons" comment="" origin="start"> <struct name="Polygons" type_name="" comment="" expr=""> <use_struct name="relocation_group" expr="" type_name="relocation_group" comment=""/> <for name="data" count="relocation_group.num_offsets || relocation_group.num_offsets - 1" stop_test="relocation_group.num_offsets == 0" type_name="" comment=""> <struct name="data" type_name="" comment="" expr="{this.offset_name.name}"> <use_struct name="relocation_offset" expr="" type_name="relocation_offset" comment=""/> <jump offset="relocation_offset.data_offset + header.lists.Polygons" comment="" origin="start"> <use_struct name="Polygons" expr="" type_name="Polygons" comment=""/> </jump> <jump offset="relocation_offset.string_offset + header.lists.Polygons - 1" comment="" origin="start"> <use_struct name="offset_name" expr="" type_name="offset_name" comment=""/> </jump> </struct> </for> </struct> </jump> </if> <if test="header.sections >= 9 && header.lists.Textures1 != 0" comment=""> <jump offset="header.lists.Textures1" comment="" origin="start"> <struct name="Textures1" type_name="" comment="" expr=""> <use_struct name="relocation_group" expr="" type_name="relocation_group" comment=""/> <for name="data" count="relocation_group.num_offsets || relocation_group.num_offsets - 1" stop_test="relocation_group.num_offsets == 0" type_name="" comment=""> <struct name="data" type_name="" comment="" expr="{this.offset_name.name}"> <use_struct name="relocation_offset" expr="" type_name="relocation_offset" comment=""/> <jump offset="relocation_offset.data_offset + header.lists.Textures1" comment="" origin="start"> <use_struct name="Textures1" expr="" type_name="Textures1" comment=""/> </jump> <jump offset="relocation_offset.string_offset + header.lists.Textures1 - 1" comment="" origin="start"> <use_struct name="offset_name" expr="" type_name="offset_name" comment=""/> </jump> </struct> </for> </struct> </jump> </if> <if test="header.sections >= 10 && header.lists.Textures2 != 0" comment=""> <jump offset="header.lists.Textures2" comment="" origin="start"> <struct name="Textures2" type_name="" comment="" expr=""> <use_struct name="relocation_group" expr="" type_name="relocation_group" comment=""/> <for name="data" count="relocation_group.num_offsets || relocation_group.num_offsets - 1" stop_test="relocation_group.num_offsets == 0" type_name="" comment=""> <struct name="data" type_name="" comment="" expr="{this.offset_name.name}"> <use_struct name="relocation_offset" expr="" type_name="relocation_offset" comment=""/> <jump offset="relocation_offset.data_offset + header.lists.Textures2" comment="" origin="start"> <use_struct name="Textures2" expr="" type_name="Textures2" comment=""/> </jump> <jump offset="relocation_offset.string_offset + header.lists.Textures2 - 1" comment="" origin="start"> <use_struct name="offset_name" expr="" type_name="offset_name" comment=""/> </jump> </struct> </for> </struct> </jump> </if> <data type="none" name="none"/> </binary_file_format>
replace your existing _mdl0.xml with this^ enjoy
|
|
|
Logged
|
|
|
|
|
|
|
« Reply #54 on: December 07, 2010, 05:46:13 PM » |
|
lol..you definitely know more than me about mdl0s....
edit: ill look at the mdl0 stuff in prob an hour...gonna take a break lol
|
|
« Last Edit: December 07, 2010, 05:49:56 PM by theshyguy »
|
Logged
|
|
|
|
|
|
|
« Reply #55 on: December 07, 2010, 06:54:51 PM » |
|
lol..you definitely know more than me about mdl0s....
edit: ill look at the mdl0 stuff in prob an hour...gonna take a break lol
heh... try being a game developer I know how models work... the thing I'm trying to figure out is the MDL0 shaders... heh... if I can figure those out, I could actually give Pikachu fur and make him look real just look at this image:
|
|
« Last Edit: December 07, 2010, 06:56:55 PM by Tcll »
|
Logged
|
|
|
|
|
|
|
« Reply #56 on: December 07, 2010, 07:28:03 PM » |
|
niiicce...soo if you do add fur like that to pikachu wouldn't that mean rewriting the mdl0?...which means if I want to help I gotta figure out how they're set up...
game developer huh? Have you used anything yet to create one? Ex I tried xna(indie games) and it was pretty fun...i wanted to make a shyguy fighting game...but that'd be copyright =p.
|
|
|
Logged
|
|
|
|
|
|
|
« Reply #57 on: December 07, 2010, 07:47:09 PM » |
|
niiicce...soo if you do add fur like that to pikachu wouldn't that mean rewriting the mdl0?...which means if I want to help I gotta figure out how they're set up...
well, there really wouldn't be too much to re-wire once the format is figured out :/ my main goal right now is getting Pichu in brawl (from melee) game developer huh? Have you used anything yet to create one? Ex I tried xna(indie games) and it was pretty fun...
I use blender... although I havn't really came out with any games... but at least I know what to do, so that's a start... (I'm only 19, I'll get better, well... faster as I get older) i wanted to make a shyguy fighting game...but that'd be copyright =p.
who cares... if that's true then my video would be copywrite title: "Pikachu vs Dark Pikachu" or my main vid (WIP) "Super Smash Bros. Revenge of the Forgotton" info: the vid includes the brawl chars, the 5 missing melee chars, and bomberman (BM was in brawl)
|
|
|
Logged
|
|
|
|
|
|
|
« Reply #58 on: December 07, 2010, 07:51:58 PM » |
|
lol i don't think they care much about vids no offense....but with xna you can sell your games on xbox 360 live market place ->indie games lol that why i wouldnt be able...id probably get sued =p
edit: you got some errors in your newest code
|
|
« Last Edit: December 07, 2010, 08:00:50 PM by theshyguy »
|
Logged
|
|
|
|
|
|
|
« Reply #59 on: December 07, 2010, 08:02:11 PM » |
|
lol i don't think they care much about vids no offense....but with xna you can sell your games on xbox 360 live market place ->indie games lol that why i wouldnt be able...id probably get sued =p
I see... I'm not sure how yet, but you can compile your blender games into a single exe file :/ (instead of having the blender player with a bunch of dll files and at least a single .blend file) heh, I know how to edit the exe to change the directory of the loaded .blend file I learned how when I was trying to build my 3D-MUGEN game engine... it was supposed to be the exact same thing as MUGEN, but with a few extra features (excluding 3D)
|
|
|
Logged
|
|
|
|
|
|