Community Project: Fill in the Unknowns

Discuss Halo 2 modding, progress on figuring things out, mapfiles...you know the drill. Cheating discussion not allowed.
Post Reply
User avatar
grimdoomer




System Engineer

Posts: 1440
Joined: Mon Oct 09, 2006 4:36 pm

Community Project: Fill in the Unknowns

Post by grimdoomer »

No this is not another plugin thread. This thread is to map out all other map data then plugins. The reason we can't do to much is because there are various areas of the map file that we don't understand completely. There are people who have a better understanding of the map file, but those people are no longer around. So let this be a layout for any one who wants to learn more about the map file. So I'll take all the known info and add any info I found to it. Then any info posted I will add. I hope this gets somewhere, if not then let it be a layout for future apps. For those of you who think you can't contribute, you can. There are various tags who's meta reflects other tags, most of which are not filled in. C code is fine but please do not give us a 3 page method. Keep it sort and simple :wink: When posting an found variable, please give its map section, and offset.

Header

Code: Select all

Header Block Start - Chars(4)
  4 reversed characters defining the Header.

Engine Version - Int32
  Specific integer defining the version of Bungies Map Builder. Halo 2's version is 8.

Map Size - Int32
  Total size of the map file.

Null - Bytes(4)

Index Offset - Int32
  Offset pointing to an table of tag classes.

Index Size - Int32
  Size of the Tag Class Index

Meta Table Start - IndexOffset + IndexSize
  Table of Tag Structures.

Meta Table Size - Int32
  Size of the Tag Structure table

Non Raw Size - Int32
  Size of the Index, Meta Table and BSP Meta.

Null - Bytes(256)

Map Build Date - Chars(32)
  Date the map was compiled.

Map Type - Int32
  Defines the Map Type.

Unknown - Int32?
  Unknown Purpose.

Unknown - Int32?
  Unknown Purpose.

Unknown - Int32?
  Unknown Purpose.

Unknown - Int32?
  Unknown Purpose.

Crazy Size - Int32
  Size of the Crazy Table.

Crazy Offset - Int32
  Table of unused tags. There purpose is unknown.

Unknown - Int32?
  Unknown Purpose.

Primary Script Reference Table Offset - Int32
  Primary table of Script references, spaced 128 bytes apart.

Script Reference Count - Int32
  Number of Script references.

Script Reference Table Size - Int32
  Size of the Script Reference Table.

Script Reference Index Offset - Int32
  Index of pointers to Script References in the Secondary Script Reference Table.

Secondary Script Reference Table Offset - Int32
  Table of Script References separated by a null terminating byte.

Unknown - Int32?
  Unknown Purpose.

Unknown - Int32?
  Unknown Purpose.

Unknown - Int32?
  Unknown Purpose.

Unknown - Int32?
  Unknown Purpose.

Unknown - Int32?
  Unknown Purpose.

Unknown - Int32?
  Unknown Purpose.

Unknown - Int32?
  Unknown Purpose.

Unknown - Int32?
  Unknown Purpose.

Unknown - Int32?
  Unknown Purpose.

Map Name - Chars(36)
  Name of the Map.

Map Scenario - Chars(256)
  Scenario of the map used to identify it.

Unknown - Int32?
  Unknown Purpose.

Tag Count - Int32
  Number of Tags in the map.

File Table Offset - Int32
  Table of Tag folder hierarchy.

File Table Size - Int32
  Size of the File Table.

File Table Index Offset - Int32
  Index of pointers to entry's in the File Table.

Map Checksum - Int32
  Checksum of every byte after the Header XOR'ed together.

Null - Bytes(1320)

Footer Block - Chars(4)
  4 reversed letters defining the map Footer.

Notes:
  The header has a constant size of 2048.

  public enum MapType : int
  {
      Multiplayer = 0,
      Singleplayer = 1,
      Shared = 2,
      MainMenu = 3,
      SingleplayerShared = 4
  }
Index

Code: Select all

Primary Magic Base - Int32
  Base Primary Magic.

Primary Magic - PrimaryMagicBaseAddress - (IndexOffset + 32)
  Used to find Tag Meta Offsets in memory, and to calculate the Tag Start.

Tag List Entry Count - Int32
  Number of Tag Classes. See Tag List Definition.

Object Index Base Address - Int32
  Base address to the Object Index.

Object Index - ObjectIndexBaseAddress - PrimaryMagic
  Points to an Index of Tags.

Scenario Identifier - Int32
  Identifier of the Scenario tag.

Globals Identifier - Int32
  Identifier of the Globals tag.

Unknown - Int32?
  Unknown Purpose.

Tag Count - Int32
  Number of Tags int the map.

Tag Start Block - Chars(4)
  4 reversed letters defining the Tag Start.

Secondary Magic Base Address - Raw Meta Offset of the Globals(matg) Tag.

Secondary Magic - SecondaryMagicBaseAddress - (IndexOffset + IndexSize)
  Used to calculate the Meta offset of tags, and the translation of Reflexives.

Notes:
  The Index has a constant Header Length of 32.

  Index Layout:
    - Header
    - Tag List
    - Object Index

  Tag List:
    This list contains all used tags in the map file, and defines their object hierarchy. 
    This allows the engine to know for example, that all vehicles are a sub class of the 
    unit class, which is a sub class of the object class. I believe the wildcard tags are 
    used as a way of using the primary tag without its parents, though this is just speculation. - Iron Forge

  Object Index:
    The object index is a recursively-constructed collection defining all objects in the map.
    The objects identifier is defined here, which is used to reference the object from all other
    areas of the map file. The identifier is composed of two short values, each are incremented
    equally throughout the index. The meta offset is a secondary magic offset which points to
    the beginning of the objects meta. - Iron Forge
Tags

Code: Select all

  public class Tag
  {
     public string Class; // 4 reversed letters.
     public int RawMetaOffset;
     public int MetaOffset; // RawMetaOffset - SecondaryMagic
     public int MetaSize;
     public int Identifier;
     public string Path;
  }
Raw Offsets

Code: Select all

  Notes:
    Raw offsets in Halo 2 have no magic applied to them. However, they can reference the 
    current map file, or the three shared files. To do this, it reserves the two most significant 
    (highest) bits to define the referencing file. These are defined as: 002 being local file, 012 
    being mainmenu.map, 102 being shared.map, and 112 being single_player_shared.map.

    When referencing a raw offset, one should first determine the file being referenced, remove 
    those two bits from the offset value (and with 0x3FFFFFFF), and then seek to that offset in
    the correct file to find the referenced data. Given the size of the shared files, it is possible that
    the third most significant bit is also reserved for sharing new downloadable content in the future, 
    but this would just be speculation. - Iron Forge
Crazy

Code: Select all

  Notes:
    Although nothing is really know about the crazy table, it is just a table of some random
    tag paths. It can be accessed by the offsets in the header.
Bitmap Raw

Code: Select all

  Notes:
    Bitmaps in Halo 2 are standard DDS images. Each bitmap is allowed 6 levels of detail(LODs) 
    although only the first 3 are used; each having their own set of mip maps. Bitmaps are still 
    swizzled (a method of faster memory copies).

  <struct name="Bitmap Data" offset="68" visible="True" size="116" label="ID">
    <tag name="Tag" offset="0" visible="False" />
    <short name="Width" offset="4" visible="True" />
    <short name="Height" offset="6" visible="True" />
    <short name="Depth" offset="8" visible="True" />
    <short name="Type" offset="10" visible="True" />
    <short name="Format" offset="12" visible="True" />
    <bitmask16 name="Flags" offset="14" visible="True">
      <option name="^2 Dimensions" value="0" />
      <option name="Compressed" value="1" />
      <option name="Palettized" value="2" />
      <option name="Swizzled" value="3" />
      <option name="Linear" value="4" />
      <option name="v16u16" value="5" />
      <option name="HUD Bitmap?" value="7" />
      <option name="Always on?" value="9" />
      <option name="Interlaced?" value="12" />
    </bitmask16>
    <short name="Reg X" offset="16" visible="True" />
    <short name="Reg Y" offset="18" visible="True" />
    <short name="MipMap Count" offset="20" visible="True" />
    <short name="PixelOffset" offset="22" visible="True" />
    <int name="Zero" offset="24" visible="False" />
    <int name="LOD1 Offset" offset="28" visible="True" />
    <int name="LOD2 Offset" offset="32" visible="True" />
    <int name="LOD3 Offset" offset="36" visible="True" />
    <unused offset="40" size="12" />
    <int name="LOD1 Size" offset="52" visible="True" />
    <int name="LOD2 Size" offset="56" visible="True" />
    <int name="LOD3 Size" offset="60" visible="True" />
    <unused offset="64" size="12" />
    <id name="ID" offset="76" visible="True" />
    <unused offset="80" size="8" />
    <bitmask32 name="Flags(CBZ)" offset="88" visible="False" />
    <unused offset="92" size="4" />
    <int name="Unknown(CBZ)" offset="96" visible="False" />
    <int name="Unknown(CBZ)" offset="100" visible="False" />
    <int name="Unknown(CBZ)" offset="104" visible="False" />
    <int name="Unknown(CBZ)" offset="108" visible="False" />
    <unused offset="112" size="4" />
  </struct>
Coconuts (Ugh!)

Code: Select all

  Notes:
    The Coconuts tag has a lot of reflexives that organize sounds. It also has 1 reflexive with model Raw
    details. Kudos to Iron Forge for being the only person to ever map anything in this tag. I have since
    then add some new things as well as clean it up. This tag is based on reflexives with index's into more
    reflexives. The base reflexive is Sound Permutations, this has the index to Sound Names, and Sound Choices.
    Sound Names is just a stringid with a name for that sound, Sound Choices is a list of possible sound files
    to play. Each one indexing a Sound Raw Chunk. There is also a Model Raw reflexive, my guess is since the
    crazy tag is ALWAYS the last tag, the engine can render all models without reading every model tag.
    I also assume there is some sort of tag pointer in that reflexive or vice versa. The Coconuts tag also has a lot
    of loneid's to itself, not sure why but they are important to fix when adding new tags to the map.

  <reflexive name="Unknown" offset="0" visible="false" size="56" label="">
    <float name="Unknown" offset="0" visible="False" />
    <float name="Unknown" offset="4" visible="False" />
    <float name="Unknown" offset="8" visible="False" />
    <float name="Unknown" offset="12" visible="False" />
    <float name="Unknown" offset="16" visible="False" />
    <float name="Unknown" offset="20" visible="False" />
    <short name="Unknown" offset="24" visible="False" />
    <short name="Unknown" offset="26" visible="False" />
    <float name="Pi" offset="28" visible="True" />
    <float name="Pi" offset="32" visible="True" />
    <unused offset="36" size="20" />
  </reflexive>
  <reflexive name="Unknown" offset="8" visible="false" size="20" label="">
    <float name="Unknown" offset="0" visible="False" />
    <float name="Unknown" offset="4" visible="False" />
    <short name="Unknown" offset="8" visible="False" />
    <short name="Unknown" offset="10" visible="False" />
    <float name="One" offset="12" visible="False" />
    <float name="One" offset="16" visible="False" />
  </reflexive>
  <reflexive name="Sound Names" offset="16" visible="true" size="4" label="">
    <stringid name="Name" offset="0" visible="True" />
  </reflexive>
  <reflexive name="Unknown" offset="24" visible="false" size="10" label="">
    <short name="Unknown" offset="0" visible="True" />
    <short name="Unknown" offset="2" visible="True" />
    <short name="Unknown" offset="4" visible="True" />
    <short name="Unknown" offset="6" visible="True" />
    <short name="Unknown" offset="8" visible="True" />
  </reflexive>
  <reflexive name="Sound Permutations" offset="32" visible="true" size="12" label="">
    <short name="Unknown" offset="0" visible="True" />
    <short name="Unknown" offset="2" visible="True" />
    <byte name="Unknown" offset="4" visible="True" />
    <byte name="Chunk" offset="5" visible="True" />
    <short name="Unknown" offset="6" visible="True" />
    <short name="Sound Choices Index" offset="8" visible="True" />
    <short name="chunkCount" offset="10" visible="True" />
  </reflexive>
  <reflexive name="Sound Choices" offset="40" visible="true" size="16" label="">
    <int name="Name Index" offset="0" visible="True" />
    <short name="Unknown" offset="4" visible="False" />
    <short name="Unknown" offset="6" visible="False" />
    <int name="Unknown" offset="8" visible="False" />
    <short name="Sound Chunk Index" offset="12" visible="True" />
    <short name="chunkCount" offset="14" visible="True" />
  </reflexive>
  <reflexive name="Unknown" offset="48" visible="false" size="52" label="">
    <unused offset="0" size="20" />
    <reflexive name="Unknown53" offset="20" visible="false" size="72" label="">
      <float name="One" offset="0" visible="False" />
      <unused offset="4" size="4" />
      <float name="800" offset="8" visible="False" />
      <float name="8000" offset="12" visible="False" />
      <unused offset="16" size="24" />
      <float name="800" offset="40" visible="False" />
      <float name="8000" offset="44" visible="False" />
      <unused offset="48" size="24" />
    </reflexive>
    <unused offset="28" size="24" />
  </reflexive>
  <reflexive name="Zero" offset="56" visible="false" size="1" label="">
    <unused offset="0" size="1" />
  </reflexive>
  <reflexive name="Sound Raw Data" offset="64" visible="true" size="12" label="">
    <int name="Raw Offset" offset="0" visible="True" />
    <int name="Size" offset="4" visible="True" />
    <int name="Effect" offset="8" visible="True" />
  </reflexive>
  <reflexive name="Unknown" offset="72" visible="false" size="28" label="">
    <reflexive name="Unknown" offset="0" visible="false" size="16" label="">
      <short name="Unknown" offset="0" visible="True" />
      <short name="Unknown" offset="2" visible="True" />
      <float name="Unknown" offset="4" visible="True" />
      <float name="Unknown" offset="8" visible="True" />
      <float name="Unknown" offset="12" visible="True" />
    </reflexive>
    <reflexive name="Unknown" offset="8" visible="false" size="4" label="">
      <unused offset="0" size="4" />
    </reflexive>
    <unused offset="16" size="4" />
    <unused offset="20" size="8" />
  </reflexive>
  <reflexive name="Model Raw Data" offset="80" visible="false" size="44" label="">
    <unused offset="0" size="8" />
    <int name="Offset" offset="8" visible="True" />
    <int name="Size" offset="12" visible="True" />
    <int name="Header Size" offset="16" visible="True" />
    <int name="Data Size" offset="20" visible="True" />
    <reflexive name="Resource Blocks" offset="24" visible="true" size="16" label="">
      <short name="Unknown" offset="0" visible="True" />
      <short name="Unknown" offset="2" visible="True" />
      <short name="Unknown" offset="4" visible="True" />
      <short name="Chunk Size" offset="6" visible="True" />
      <int name="Size" offset="8" visible="True" />
      <int name="Offset" offset="12" visible="True" />
    </reflexive>
    <ident name="Ugh!" offset="32" visible="True" />
    <float name="Constant" offset="36" visible="True" />
    <float name="Constant" offset="40" visible="True" />
  </reflexive>
Sound Raw

Code: Select all

  Notes:
    The sound tag is very small 20 bytes. In it it contains indexes to loads of data. Sound Raw
    is based on 3 main compressions ADPMC, OGG? and WMA, and 3 formats Mono 22050kbps,
    Stero 44100kbps, and WMA Specific. It also contains an index into the Sound Permutations
    reflexive in the coconuts tag. From there you can get all the sound chunks. It also contains
    indexes into other unknown reflexives.

    Sounds were probably the most enjoyable piece of Halo 2 to work on. They entwine with 
    an “ugh!” object named “I’ve got a lovely bunch of coconuts”, a song done by the amazing
    comedic group Monty Python. I cannot help but believe this system was done as an easter 
    egg designed just for me as “the curious modder”. To Bungie, I thank you (unless of course 
    this was designed to keep us from removing sounds, in which case I sincerely apologize.) - Iron Forge

  <bitmask16 name="Flags" offset="0" visible="true">
    <option name = "Split into permutations" value="1"/>
    <option name = "3rd Person?" value="10"/>
    <option name = "3rd Person?" value="11"/>
    <option name = "Unknown" value="12"/>
  </bitmask16>
  <short name="Sound Class" offset="2" visible="True" />
  <enum8 name="Format" offset="4" visible="True" >
    <option name = "Mono 22050kbps" value="0"/>
    <option name = "Stero 44100kbps" value="1"/>
    <option name = "WMA Specific" value="2"/>
  </enum8>
  <enum8 name="Compression" offset="4" visible="True" >
    <option name = "none" value="0"/>
    <option name = "xbox adpcm" value="1"/>
    <option name = "ima adpcm?" value="2"/>
    <option name = "ogg?" value="3"/>
    <option name = "WMA" value="4"/>
  </enum8>
  <short name="Index to Sound Properties" offset="6" visible="true" />
  <short name="Index to Sound Permutations" offset="8" visible="True" />
  <byte name="Permutation Chunk Count" offset="10" visible="True" />
  <byte name="Index to Sound Unknown17" offset="11" visible="true" />
  <short name="Index to Something"  offset="6" visible="true" />
  <short name="Index to Combat Dialog Raw"  offset="8" visible="True" />
  <int name="Index to Something" offset="16" visible="true" />
Model Raw

Code: Select all

  Notes: 
  Model Raw is based on 7 blocks, deal with compressed verticies. Currently
  there is only 1 Unknown resource block. 

  Models in Halo 2 use a compressed format based on a bounding box.  This bounding 
  box can be found in the first reflexive of the model meta. Using its constraints for each 
  value relevant to the models, the uncompressed value can be found using the formula
  (((shortValue + 32768) / 65535) * (maxValue – minValue)) + minValue.

  The model raw data block now contains a header, footer, and several resource chunks. 
  The header contains information regarding how many chunks are in each resource block, 
  allowing you to determine which block contains the information needed (for example, if a 
  given block has 0 chunks, then it will not have a corresponding resource block). The important 
  resource blocks are the mesh information block (containing mesh information), the indices 
  block (containing the indices for the triangle strip), the vertices block (containing at minimum
  3 shorts defining the x, y, and z of the vertices), the UV map (containing the compressed 
  UV points.), and the bone map. - Iron Forge

  Raw Layout:
    0) Header
        BlockStart - Chars(4)
        DataSize - Int32
        Unknown - Int32[8] //Has todo with chunk counts for other blocks
        IndiceCount - Int32
        Unknown - Int32[4] //Has todo with chunk counts for other blocks
        UnknownBlockChunkCount - Int32
        Unknown - Int32[10] //Has todo with chunk counts for other blocks
        BoneMapCount - Int32
        Unknown - Int32[2]
   
    1) Mesh Info
        Unknown - Int32
        Loop
          ShaderIndex - Int16
          IndiceStart - Int16
          IndiceCount - Int16
        End Loop
  
    2) Indice Block
        Loop
          Indice - Int16
        End Loop

    3) Unknown Block
        Loop
          Unknown - Int32
          ++28
        End Loop

    4) Verticies
        Loop
          X - Int16
          Y - Int16
          Z - Int16
          BoneIndex - Byte
          BoneIndex - Byte
        End Loop

    5) UV Data
        Loop
          X - Int16
          Y - Int16
        End Loop

    6) Normals
        Loop
          Normal - Int32
        End Loop

    7) Bone Maps
          Loop
            BoneMap - Byte
          End Loop
Decorator Raw

Code: Select all

  Notes:
    Decorator raw one of the only completely mapped raw formats, yet one of the least
    cared about. Decorator raw is very straight forward. All info found in the tags raw
    can be found be found in the meta too. The raw only has one resource block, Verticies.
    
  Raw Layout:
    0) Header
        BlockStart - Chars(4)
        DataSize - Int32
        //Details on Data, have yet to research this

    1) Verticie Block
        Loop
          X - Float
          Y - Float
          Z - Float
          NormalI - Float
          NormalJ - Float
          NormalK - Float
          TangentI - Float
          TangentJ - Float
          TangentK - Float
          BinormalI - Float
          BinormalJ - Float
          BinormalK - Float
          U - Float
          V - Float
        End Loop
Particle Model Raw

Code: Select all

  Notes:
    Particle mode raw is almost exactly the same as decorator raw. All the info
    in the raw can be found in the meta, it has only one resource block verticies.
    The layout is almost the same(it could be the same, I have yet to make a PRMT
    viewer so I don't know), the only difference is that the tangents and binormals
    are switched.

  Raw Layout:
    0) Header
        BlockStart - Chars(4)
        DataSize - Int32
        //Details on Data, have yet to research this

    1) Verticie Block
        Loop
          X - Float
          Y - Float
          Z - Float
          NormalI - Float
          NormalJ - Float
          NormalK - Float
          BinormalI - Float
          BinormalJ - Float
          BinormalK - Float
          TangentI - Float
          TangentJ - Float
          TangentK - Float
          U - Float
          V - Float
        End Loop
Weather Raw

Code: Select all

  Notes:
    Weather raw surprisingly has NEVER been researched in any way, at least not to my knowledge. 
    So I decided to take a looksy yesterday. It seems simple 2 resource blocks, but each one 
    consists of blocks of 4 floats. Which I don't understand, so I'll leave that up to someone smarter
    at models then me. Here is the basic layout for you guys.

  Raw Layout:
    0) Header
        BlockStart - Chars(4)
        DataSize - Int32
        Unknown - Int32

    1) Unknown Block
        Loop
          Unknown - Float
          Unknown - Float
          Unknown - Float
          Unknown - Float
          Null - Int32
        End Loop

    2) Verticie Block?
        ++12
        Loop
          Unknown - Float
          Unknown - Float
          Unknown - Float
          Unknown - Float
          ++16
        End Loop
Animation Raw

Code: Select all

  Notes:
    Almost nothing is know about animation raw, although one team has figured it out
    I doubt they will release anything. I have gather some info based on their findings.

    Firstly, animations use 9 codecs, all of them i believe have different compression 
    methods, and some have no compression at all. Halo 2 Vista's map editor dumps a 
    text file called animation_compression_stats.txt which contains a lot of valuable 
    information regarding animation compression.  - Choking Victim

    The text file also contains a small diagram of individual animations within an animation 
    tag. The below picture is a diagram of the warthog animation. 
    http://zteam.halotrialmods.org/images/1-16-08/anim_compression.jpg 
    This diagram shows the animations size within the raw data, static node information 
    (nodes that don't move throughout an animation), and normal animation information. - Choking Victim

    CODEC #0 _no_compression_codec AVERAGE KEY RATIOS Rot:1.00, Trs:1.00, Scl:1.00 
    CODEC #1 _uncompressed_static_data_codec AVERAGE KEY RATIOS Rot:1.00, Trs:1.00, Scl:1.00 
    CODEC #2 _uncompressed_animated_data_codec AVERAGE KEY RATIOS Rot:1.00, Trs:1.00, Scl:1.00 
    CODEC #3 _8byte_quantized_rotation_only_codec AVERAGE KEY RATIOS Rot:1.00, Trs:1.00, Scl:1.00 
    CODEC #4 byte_keyframe_lightly_quantized AVERAGE KEY RATIOS Rot:0.22, Trs:0.26, Scl:1.00 
    CODEC #5 word_keyframe_lightly_quantized AVERAGE KEY RATIOS Rot:1.00, Trs:1.00, Scl:1.00 
    CODEC #6 reverse_byte_keyframe_lightly_quantized AVERAGE KEY RATIOS Rot:0.27, Trs:0.64, Scl:0.12 
    CODEC #7 reverse_word_keyframe_lightly_quantized AVERAGE KEY RATIOS Rot:0.07, Trs:0.14, Scl:1.00 
    CODEC #8 _blend_screen_codec AVERAGE KEY RATIOS Rot:1.00, Trs:1.00, Scl:1.00

  Raw Layout:
    CompressionMethod - Byte
    RotatedNodesCount - Byte
    MovedNodesCount - Byte
    ScaledNodesCount - Byte
    Unknown - Byte[4]
    AnimationRate - Float
    Unknown - Int32?
    AnimationDataSize - Int32
    Unknown - Int32
    Unknown - Int32
    Unknown - Int32
    Loop RotatedNodesCount
      I - Float
      J - Float
      k - Float
      D - Float
    End Loop
    //Data todo with bone rotations
    Unknown - Int32
    Unknown - Int32
    Unknown - Int32
Collision

Code: Select all

  Notes:
    Collision has no raw data per say, it is all in the meta. It is simple verticies with bounding
    spheres. It is pretty much completed though.

  <struct name="Regions" offset="28" visible="true" size="12" label="">
    <stringid name="Peice" offset="0" visible="True" />
    <struct name="Premutations" offset="4" visible="true" size="20" label="">
      <stringid name="Premutation" offset="0" visible="True" />
      <struct name="BSP" offset="4" visible="true" size="68" label="">
        <undefined name="BSP" offset="0" visible="True" />
        <struct name="3D Nodes" offset="4" visible="true" size="8" label="">
          <short name="Plane" offset="0" visible="False" />
          <short name="First Child" offset="2" visible="False" />
          <byte name="Unknown" offset="4" visible="False" />
          <short name="Second Child" offset="5" visible="False" />
          <byte name="Unknown" offset="7" visible="False" />
        </struct>
        <struct name="Planes" offset="12" visible="true" size="16" label="">
          <undefined name="i" offset="0" visible="True" />
          <undefined name="I" offset="4" visible="True" />
          <undefined name="k" offset="8" visible="True" />
          <undefined name="d" offset="12" visible="True" />
        </struct>
        <struct name="Leaves" offset="20" visible="true" size="4" label="">
          <byte name="Flags" offset="0" visible="True" />
          <byte name="2D Ref" offset="1" visible="True" />
          <short name="Refrence count" offset="2" visible="True" />
        </struct>
        <struct name="2D Refrences" offset="28" visible="true" size="4" label="">
          <short name="Plane" offset="0" visible="True" />
          <short name="Node" offset="2" visible="True" />
        </struct>
        <struct name="Planes" offset="36" visible="true" size="16" label="">
          <undefined name="Plane i" offset="0" visible="True" />
          <undefined name="Plane j" offset="4" visible="True" />
          <undefined name="Plane k" offset="8" visible="True" />
          <short name="Left Child" offset="12" visible="True" />
          <short name="Right Child" offset="14" visible="True" />
        </struct>
        <struct name="Surfaces" offset="44" visible="true" size="8" label="">
          <short name="Plane" offset="0" visible="True" />
          <short name="First Edge" offset="2" visible="True" />
          <byte name="Flags" offset="4" visible="True" />
          <byte name="Breakable Surface" offset="5" visible="True" />
          <short name="Material" offset="6" visible="True" />
        </struct>
        <struct name="Edge Buffer" offset="52" visible="true" size="12" label="">
          <short name="Start Vertex" offset="0" visible="True" />
          <short name="End Vertex" offset="2" visible="True" />
          <short name="Forward Edge" offset="4" visible="True" />
          <short name="Reverse Edge" offset="6" visible="True" />
          <short name="Left Surface" offset="8" visible="True" />
          <short name="Right Surface" offset="10" visible="True" />
        </struct>
        <struct name="Vertices" offset="60" visible="true" size="16" label="">
          <undefined name="x" offset="0" visible="True" />
          <undefined name="y" offset="4" visible="True" />
          <undefined name="z" offset="8" visible="True" />
          <int name="First Edge" offset="12" visible="True" />
        </struct>
      </struct>
      <struct name="Unknown" offset="12" visible="false" size="112" label="">
        <undefined name="Unknown" offset="0" visible="False" />
        <undefined name="Unknown" offset="4" visible="False" />
        <unused offset="8" size="4" />
        <undefined name="Unknown" offset="12" visible="False" />
        <undefined name="Unknown" offset="16" visible="False" />
        <undefined name="Unknown" offset="20" visible="False" />
        <undefined name="Unknown" offset="24" visible="False" />
        <unused offset="28" size="4" />
        <undefined name="Unknown" offset="32" visible="False" />
        <undefined name="Unknown" offset="36" visible="False" />
        <undefined name="Unknown" offset="40" visible="False" />
        <unused offset="44" size="4" />
        <id name="Unknown" offset="48" visible="False" />
        <unused offset="52" size="12" />
        <undefined name="Unknown" offset="64" visible="False" />
        <undefined name="Unknown" offset="68" visible="False" />
        <unused offset="72" size="4" />
        <undefined name="Unknown" offset="76" visible="False" />
        <undefined name="Unknown" offset="80" visible="False" />
        <undefined name="Unknown" offset="84" visible="False" />
        <unused offset="88" size="4" />
        <undefined name="Unknown" offset="92" visible="False" />
        <undefined name="Unknown" offset="96" visible="False" />
        <struct name="Unknown" offset="100" visible="false" size="1" label="">
          <byte name="Unknown" offset="0" visible="False" />
        </struct>
        <unused offset="108" size="4" />
      </struct>
    </struct>
  </struct>
Physics Model

Code: Select all

  Notes:
    Thanks to one of the best modders Neodos, who has recently retired, we can have custom
    physics models. Although I do not know much, I do remember some of what he told me. Physics
    Models are based on bounding boxes around sections of the model. At a second glance these 
    could be rendered very easily. The important reflexive that allows for collision in-game is
    Physics Boxes. I believe JacksonCougar could offer more info.

  <struct name="Physics Boxes" offset="96" visible="True" size="144" label="Physics ID">
    <stringid name="Physics Box Name" offset="0" visible="True" />
    <float name="Unknown" offset="4" visible="True" />
    <float name="Unknown" offset="8" visible="True" />
    <float name="Friction" offset="12" visible="True" />
    <float name="Bounce Factor" offset="16" visible="True" />
    <float name="Volume" offset="20" visible="True" />
    <float name="Mass" offset="24" visible="True" />
    <float name="Bitmask?" offset="28" visible="True" />
    <float name="Bitmask?" offset="32" visible="True" />
    <float name="Bitmask?" offset="36" visible="True" />
    <float name="Bitmask?" offset="40" visible="True" />
    <float name="Unused" offset="44" visible="False" />
    <float name="X scale" offset="48" visible="True" />
    <float name="Y scale" offset="52" visible="True" />
    <float name="Z scale" offset="56" visible="True" />
    <float name="Unknown scale?" offset="60" visible="True" />
    <float name="Bitmask?" offset="64" visible="True" />
    <float name="Bitmask?" offset="68" visible="True" />
    <float name="Unused" offset="72" visible="False" />
    <float name="Bitmask?" offset="76" visible="True" />
    <float name="Yaw  1" offset="80" visible="True" />
    <float name="Pitch 1" offset="84" visible="True" />
    <float name="Roll   1" offset="88" visible="True" />
    <float name="Unused" offset="92" visible="False" />
    <float name="Yaw  2" offset="96" visible="True" />
    <float name="Pitch 2" offset="100" visible="True" />
    <float name="Roll   2" offset="104" visible="True" />
    <float name="Unused" offset="108" visible="False" />
    <float name="Yaw  3" offset="112" visible="True" />
    <float name="Pitch 3" offset="116" visible="True" />
    <float name="Roll   3" offset="120" visible="True" />
    <float name="Unused" offset="124" visible="False" />
    <float name="X position" offset="128" visible="True" />
    <float name="Y position" offset="132" visible="True" />
    <float name="Z position" offset="136" visible="True" />
    <float name="Unknown" offset="140" visible="False" />
  </struct>
Wow thats a lot of info :wink: Any ways, I'll get to BSP and Lightmap info later. I need some time to think. Please feel free to jump in and post anything to help out. I can also provide raw data samples if needed. I'm on AIM almost 24/7 which can be a bad thing, but any way, I'm there if you need info or w/e feel free to IM me.
Image
AI Zones in MP | Ambiance | Gravemind Beta v1.1
Aumaan Anubis wrote:Grimdoomer. The first person ever to mod Halo 2 Vista.
User avatar
grimdoomer




System Engineer

Posts: 1440
Joined: Mon Oct 09, 2006 4:36 pm

Post by grimdoomer »

Wow not even one reply, what a shame.
Image
AI Zones in MP | Ambiance | Gravemind Beta v1.1
Aumaan Anubis wrote:Grimdoomer. The first person ever to mod Halo 2 Vista.
User avatar
neodos
Readers Club




Artisan Miner

Posts: 1394
Joined: Thu Aug 12, 2004 11:57 am

Post by neodos »

This is halomods there's no modders there's only people talking about how much they know and can do, also this is great research but pretty much for programmers, there's only you and Jackson that are actually working on modding apps.
OwnZ joO




Articulatist 500

Posts: 980
Joined: Thu Nov 10, 2005 4:24 pm

Post by OwnZ joO »

I'm working on a program too...
User avatar
Eaton




Enthraller

Posts: 1639
Joined: Thu Jun 14, 2007 4:16 pm
Location: USA

Post by Eaton »

I'm working on something as well. :wink:
Image
Image
Image
User avatar
xXFeRcHoXx





Posts: 155
Joined: Thu Nov 22, 2007 3:11 pm
Location: Michoacan Joined: 06 Sep 2003 Posts: 1337

Post by xXFeRcHoXx »

i like your App, Eaton, i remember when your app was an alpha... already has plugins or somewhat?

EDIT: nice UI 8)
User avatar
Eaton




Enthraller

Posts: 1639
Joined: Thu Jun 14, 2007 4:16 pm
Location: USA

Post by Eaton »

xXFeRcHoXx wrote:i like your App, Eaton, i remember when your app was an alpha... already has plugins or somewhat?

EDIT: nice UI 8)
I'm trying to learn to parse XML so I can load data from plugins into the Reference Viewer. Should be done soon. Spent a lot of time and money on the UI. And that is what makes it unique. :)
Image
Shock120





Posts: 318
Joined: Wed Apr 25, 2007 10:55 am

Post by Shock120 »

neodos wrote:This is halomods there's no modders there's only people talking about how much they know and can do, also this is great research but pretty much for programmers, there's only you and Jackson that are actually working on modding apps.
OwnZ joO wrote:I'm working on a program too...
Eaton wrote:I'm working on something as well. :wink:
:shock:
Shock120 on XLink & XBC
Post Reply