wc3edit.net
https://forum.wc3edit.net/

WC3 Objects File Spec [war3map.w3u, war3map.w3t, etc]
https://forum.wc3edit.net/deprotection-cheating-f64/wc3-objects-file-spec-t37331.html
Page 1 of 1

Author:  owner123 [ April 22nd, 2020, 2:44 am ]
Post subject:  WC3 Objects File Spec [war3map.w3u, war3map.w3t, etc]

I couldn't find an accurate spec for this file so I made my own. This is accurate to the best of my knowledge but I only spend ~20 minutes on it. It might be useful to someone. When I code this, I'll discover any inaccuracies in it.

All Integer fields are Little Endian. All Strings are null-terminated. The null-terminator byte is 0x00.

Structure: War3map.w3u/t/a

versionId [uint32]: Usually 2
numModified [uint32]: Shows how many default objects have been modified
modifiedObject [Structure[numModified]]: Structure defining the modified objects
numObjectsCount [uint32]: Shows how many new objects were created
newObjects [Structure[newObjectsCount]]: Structure defining the new objects

Structure: ModifiedObject

rawcode [byte[4]]: The rawcode of this original modified object
unknown1 [uint32]: Always zero
modifiedFieldsCount [uint32]: Declares how many fields we modified on this object
modifiedField [Structure[modifiedFieldsCount]]: The data of the field


Structure: ModifiedField

fieldcode [byte[4]]: The code for the modified field
fieldType [uint32]: 0 for int, 1 for real, for unsigned real, 3 for string
fieldData [String/uint32/real/ureal]: Declares the data of that field.
rawcode [byte[4]]: The rawcode of this original modified object. Matches the first found rawcodes.


Structure: NewObject


basedOnFieldCode [byte[4]]: The rawcode that this object was based on
customRawCode [byte[4]]: The custom rawcode that was assigned to this object
modifiedFieldsCount [uint32]: Declares how many fields were modified on this object
newObjectField [Structure[modifiedFieldsCount]]: The data of the fields


Structure: NewObjectField

fieldcode [byte[4]]: The code for the modified field
fieldType [uint32]: 0 for int, 1 for real, for unsigned real, 3 for string
fieldData [String/uint32/real/ureal]: Declares the data of that field.
unknown [uint32]: Not always zero. Purpose unknown.

** Note the minor but important difference between NewObjectField structure and ModifiedField structure!

Page 1 of 1 All times are UTC
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/