Difference between revisions of "Item Definition"
(BAM!) |
m |
||
(56 intermediate revisions by 8 users not shown) | |||
Line 1: | Line 1: | ||
− | |||
{{IdeSection | {{IdeSection | ||
| noheader = 1 | | noheader = 1 | ||
}} | }} | ||
− | '''Item definition''' files, usually | + | '''Item definition''' files, usually identified by the file extension <code>.ide</code>, are used to declare many different aspects for the map system or to specify special behaviour rules for one of the aspects. |
− | == | + | == Format == |
− | The | + | The files are plain text, so they can be opened with text editors such as Notepad. They resemble [[wikipedia:Comma-separated_values|CSV files]], but with some extra features. |
− | === | + | === Comments === |
+ | Comments are prefixed with the <code>#</code> symbol. Anything after that symbol is ignored, which means that comments can appear on their own lines as well as at the end of other lines: | ||
+ | <syntaxhighlight lang="perl"> | ||
+ | # This comment has its own line. | ||
+ | data1, 183, 2.2 # This comment is at the end of a line. | ||
+ | </syntaxhighlight> | ||
− | + | === Sections === | |
+ | Files are separated into sections with <code>section...end</code> directives: | ||
+ | |||
+ | <syntaxhighlight lang="tcl"> | ||
+ | section_name | ||
+ | # ... | ||
+ | end | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | Sections are global – multiple files can contribute to them | ||
+ | |||
+ | === Data === | ||
+ | Data values can be comma- or space-delimited: commas are replaced with spaces when the game reads a line from the file. | ||
+ | |||
+ | <syntaxhighlight lang="perl"> | ||
+ | # Both are valid: | ||
+ | 123, mystring, 22.4 | ||
+ | 123 mystring 22.4 | ||
+ | </syntaxhighlight> | ||
− | + | Additionally, because the game uses [https://en.cppreference.com/w/cpp/io/c/fscanf#Parameters|<code>sscanf()</code>] to parse these files, any number of spaces is read whenever a single space is encountered in the format string in the game code. As such, values can be aligned into columns: | |
− | + | <syntaxhighlight lang="perl"> | |
+ | # Identifier Some value Another value | ||
+ | 1 a_value 12345 | ||
+ | 2 another 67890 | ||
+ | </syntaxhighlight> | ||
− | + | Rockstar developers used this alignment ability a lot. | |
− | + | === Rules and details === | |
− | + | * The game only reads 256 characters per line. Anything longer will be truncated. | |
− | + | * Section identifiers and the <code>end</code> string are case-sensitive. | |
+ | * The files are ASCII-encoded. The game does not expect non-ASCII characters to appear, so they will likely cause issues. | ||
+ | * Decimal places in floating-point values must use <code>.</code> as the decimal point character. <code>,</code> would be replaced with a space when read. | ||
+ | * Any ASCII [[wikipedia:Control_character|control characters]] – anything less than the space character, <syntaxhighlight lang="c" inline>0x20</syntaxhighlight> – is replaced with a space when the game reads the character. The same is done for commas. | ||
+ | * After reading a line, the game re-reads it to find the first character that is not a space or control character. The final line string starts from this character. This is equivalent to trimming the start of the string. | ||
+ | * In 3D era games, the section identifiers are always 4 characters long. GTA IV largely adheres to this convention, but not always. | ||
− | + | == Sections == | |
− | The following table contains | + | The following table contains all known sections in the item definition. The supported games column lists games that support the sections but it doesn't necessarily means they're functional in the games. |
− | {| | + | {|class="wikitable center-col-1 center-col-2" style="width: 100%;" |
− | ! | + | !style="width: 7em;"|Section |
− | ! | + | !style="width: 8em;"|Supported games |
!Description | !Description | ||
|- | |- | ||
− | |< | + | |<code>[[OBJS|objs]]</code>||{{Icon|t}} {{Icon|4}}||Defines simple objects. They can be placed into the world through the <code>[[INST|inst]]</code> section of the [[IPL|item placement files]]. |
+ | |- | ||
+ | |<code>[[TOBJ|tobj]]</code>||{{Icon|t}} {{Icon|4}}||Defines time objects. The section functions similarly to <code>objs</code> but has two additional parameters defining the in-game time range the object can get rendered. These objects can be placed into the world through the <code>inst</code> section of the item placement files. | ||
|- | |- | ||
− | |< | + | |<code>[[HIER|hier]]</code>||{{Icon|t}} {{Icon|4}}||Defines clump objects for use in cutscenes. |
|- | |- | ||
− | |< | + | |<code>[[CARS (IDE Section)|cars]]</code>||{{Icon|t}} {{Icon|4}}||Defines vehicle objects. |
|- | |- | ||
− | |< | + | |<code>[[PEDS|peds]]</code>||{{Icon|t}} {{Icon|4}}||Defines pedestrian objects (random [[wikipedia:Non-player character|NPC's]]). |
|- | |- | ||
− | |< | + | |<code>[[PATH (IDE Section)|path]]</code>||{{Icon|3}} {{Icon|VC|16||Vice City (unstable)}} {{Icon|SA}}||Adds path nodes to defined objects. This section is unstable in Vice City. |
|- | |- | ||
− | |< | + | |<code>[[2DFX|2dfx]]</code>||{{Icon|t}} {{Icon|4}}||Adds particle effects and simple ped behaviors to defined objects. |
|- | |- | ||
− | |< | + | |<code>[[WEAP|weap]]</code>||{{Icon|VC}} {{Icon|SA}} {{Icon|4}}||Defines weapon objects. |
|- | |- | ||
− | |< | + | |<code>[[ANIM|anim]]</code>||{{Icon|SA}} {{Icon|4}}||Defines animated objects. The section functions similarly to <code>objs</code> but has one additional parameter indicating an [[IFP]] or [[WAD]] animation file to assign an animation to the object. These objects can be placed into the world through the <code>inst</code> section of the item placement files. |
|- | |- | ||
− | |< | + | |<code>[[TXDP|txdp]]</code>||{{Icon|SA}} {{Icon|4}}||Used to virtually extend [[TXD|texture dictionaries]]. |
|- | |- | ||
− | |< | + | |<code>[[TANM|tanm]]</code>||{{Icon|4}}||Used to combine <code>tobj</code> and <code>anim</code> sections.<br>Those objects get placed inside the <code>inst</code> section of the ''WPL''. |
|- | |- | ||
− | |< | + | |<code>[[TREE|tree]]</code>||{{Icon|4|16||GTA IV (not functional)}}||This section is not functional. |
|- | |- | ||
− | |< | + | |<code>[[VNOD|vnod]]</code>||{{Icon|4}}||– |
|- | |- | ||
− | |< | + | |<code>[[LINK|link]]</code>||{{Icon|4}}||– |
|- | |- | ||
− | |< | + | |<code>[[MLO|mlo]]</code>||{{Icon|4}}||Used to create [[interior]]s. This section does also contain information about portals (previous <code>[[ENEX|enex]]</code> connections) and dimensions of the interior which influences certain aspects, like the weather, for example. All objects are placed relative to an offset placed using <code>[[MLO+|mlo+]]</code> inside the [[IPL]] or [[WPL]] file. |
+ | |- | ||
+ | |<code>[[AMAT|amat]]</code>||{{Icon|4}}||This is Audio Materials. Possible Used to make a sound effect at the model. Usually used for dynamic objects. | ||
+ | |- | ||
+ | |<code>[[LODM|lodm]]</code>||{{Icon|4|16||GTA IV (not functional)}}||This section is not functional. | ||
+ | |- | ||
+ | |<code>[[AGRPS|agrps]]</code>||{{Icon|4}}||– | ||
+ | |- | ||
+ | |<code>[[HAND|hand]]</code>||VC Xbox/Mobile||– | ||
|} | |} | ||
== IDE Flags == | == IDE Flags == | ||
− | Flags are used to specify the behaviour of objects. They are signed 32-bit integer values where each bit | + | Flags are used in order to specify the behaviour of objects. They are interpreted as signed 32-bit integer values where each bit describes a [[wikipedia:Boolean_algebra_(logic)|boolean]] value of a different aspect. |
− | {|{{ | + | === {{Icon|3}} GTA III === |
− | ! | + | {| class="wikitable" |
− | + | ! Bits !! Dec !! Hex !! Name !! Description !! Examples | |
− | + | |- | |
− | !Description | + | | 0 || 1 || 0x1 || - || Cull model if player doesn't look at it? Read, but ignored. || Fences |
+ | |- | ||
+ | | 1 || 2{{ref|1}} || 0x2 || DO_NOT_FADE || Do not fade the object when it is being loaded into or out of view. || Some lampposts | ||
+ | |- | ||
+ | | 2 || 4{{ref|1}} || 0x4 || DRAW_LAST || Model is transparent. Render this object after all opaque objects, allowing transparencies of other objects to be visible through this object. || Trees | ||
+ | |- | ||
+ | | 3 || 8 || 0x8 || ADDITIVE || Render with additive blending. Previous flag must be enabled too. || | ||
+ | |- | ||
+ | | 4 || 16{{ref|1}} || 0x10 || IS_SUBWAY || Model is a tunnel, i.e. set the object as invisible unless the player enters [[Cullzone.dat|cull zone flag 128]]. This flag works only with static models. || Tunnels, some dynamic objects | ||
+ | |- | ||
+ | | 5 || 32 || 0x20 || IGNORE_LIGHTING || Don't use static lighting, we want dynamic if it's possible. || Some lampposts and trafficlights | ||
+ | |- | ||
+ | | 6 || 64{{ref|1}} || 0x40 || NO_ZBUFFER_WRITE || Model is a shadow. Disable writing to z-buffer when rendering it, allowing transparencies of other objects, shadows, and lights to be visible through this object. Not implemented in the PS2 version. || Shadow | ||
+ | |} | ||
+ | |||
+ | === {{Icon|VC}} GTA Vice City === | ||
+ | |||
+ | {| class="wikitable" | ||
+ | ! Bits !! Dec !! Hex !! Name !! Description !! Examples | ||
+ | |- | ||
+ | | 0 || 1 || 0x1 || IS_ROAD || Identifies objects to draw "wet reflections" on them. || Roads | ||
+ | |- | ||
+ | | 1 || 2 || 0x2 || DO_NOT_FADE || Do not fade the object when it is being loaded into or out of view. || Some night objects, North Point Mall | ||
+ | |- | ||
+ | | 2 || 4 || 0x4 || DRAW_LAST || Model is transparent. Render this object after all opaque objects, allowing transparencies of other objects to be visible through this object. || Fences, trees | ||
+ | |- | ||
+ | | 3 || 8 || 0x8 || ADDITIVE || Render with additive blending. Previous flag will be enabled automatically. || Night windows | ||
+ | |- | ||
+ | | 4 || 16 || 0x10 || - || Read, but not used. || _dy, _dt objects | ||
+ | |- | ||
+ | | 5 || 32 || 0x20 || IGNORE_LIGHTING || Don't use static lighting, we want dynamic if it's possible. || Interior objects | ||
+ | |- | ||
+ | | 6 || 64 || 0x40 || NO_ZBUFFER_WRITE || Model is a shadow. Disable writing to z-buffer when rendering it, allowing transparencies of other objects, shadows, and lights to be visible through this object. || Tree shadows | ||
+ | |- | ||
+ | | 7 || 128 || 0x80 || DONT_RECEIVE_SHADOWS || Do not draw dynamic shadows on this object. || Small objects, pickups, lamps, trees | ||
+ | |- | ||
+ | | 8 || 256 || 0x100 || IGNORE_DRAW_DISTANCE || Ignore draw distance for this object (sets its "level" (island id) to 0). || LOD models, North Bridge | ||
+ | |- | ||
+ | | 9 || 512 || 0x200 || IS_GLASS_TYPE_1 || Breakable glass type 1: glass object changes its textures when breaking. || Small windows | ||
+ | |- | ||
+ | | 10 || 1024 || 0x400 || IS_GLASS_TYPE_2 || Breakable glass type 2: glass object doesn't change its textures when breaking. || Large windows | ||
+ | |} | ||
+ | |||
+ | ==== Reference table ==== | ||
+ | |||
+ | {| class="wikitable" | ||
+ | ! Bits !! Dec !! Hex !! Name !! Model info flag !! Ref address !! Ref description | ||
+ | |- | ||
+ | | 0 || 1 || 0x1 || IS_ROAD || 0x04 || 0x4CA1D7 || <font face="Consolas"><b>CRenderer::RenderRoads()</b></font> | ||
+ | <source lang="cpp">if (CModelInfo::GetModelInfo(entity->m_nModelIndex)->m_nFlags & IS_ROAD) | ||
+ | entity->Render();</source> | ||
+ | |- | ||
+ | | 1 || 2 || 0x2 || DO_NOT_FADE || 0x20 || 0x4C7E03 || <font face="Consolas"><b>CRenderer::ShouldModelBeStreamed(CEntity *,CVector const&)</b></font> | ||
+ | <source lang="cpp">if (model->m_nFlags & DO_NOT_FADE) { | ||
+ | if (distance >= model->GetLargestLodDistance() + 30.0f) | ||
+ | return true; | ||
+ | } | ||
+ | else if ( distance >= model->GetLargestLodDistance() + 50.0f) | ||
+ | return true;</source> | ||
+ | |- | ||
+ | | 2 || 4 || 0x4 || DRAW_LAST || 0x40 || 0x56F4F3 || <font face="Consolas"><b>CSimpleModelInfo::SetupBigBuilding(int,int)</b></font> | ||
+ | <source lang="cpp">if (model->m_nFlags & DRAW_LAST) { | ||
+ | model->m_nFlags &= ~DRAW_LAST; | ||
+ | dbgprint("%s was draw last\n", model->m_szName); | ||
+ | }</source> | ||
+ | |- | ||
+ | | 3 || 8 || 0x8 || ADDITIVE || 0x80 || 0x582590 || <font face="Consolas"><b>CVisibilityPlugins::RenderFadingAtomic(RpAtomic *,float)</b></font> | ||
+ | <source lang="cpp">if (model->m_nFlags & ADDITIVE) | ||
+ | RwRenderStateSet(rwRENDERSTATEDESTBLEND, rwBLENDONE);</source> | ||
+ | |- | ||
+ | | 4 || 16 || 0x10 || - || 0x100 || - || - | ||
+ | |- | ||
+ | | 5 || 32 || 0x20 || IGNORE_LIGHTING || 0x200 || 0x56F7C4 || <font face="Consolas"><b>CSimpleModelInfo::SetAtomic(int,RpAtomic *)</b></font> | ||
+ | <source lang="cpp">if (model->m_nFlags & IGNORE_LIGHTING) | ||
+ | atomic->geometry->flags &= ~rpGEOMETRYLIGHT;</source> | ||
+ | |- | ||
+ | | 6 || 64 || 0x40 || NO_ZBUFFER_WRITE || 0x400 || 0x581390 || <font face="Consolas"><b>CVisibilityPlugins::RenderFadingEntities(CLinkList<CVisibilityPlugins::AlphaObjectInfo> &)</b></font> | ||
+ | <source lang="cpp">if (model->m_nType == MODEL_INFO_SIMPLE && model->m_nFlags & NO_ZBUFFER_WRITE) | ||
+ | RwRenderStateSet(rwRENDERSTATEZWRITEENABLE, FALSE);</source> | ||
+ | |- | ||
+ | | 7 || 128 || 0x80 || DONT_RECEIVE_SHADOWS || 0x800 || 0x48AF21 || <font face="Consolas"><b>CFileLoader::LoadObjectInstance(char const*)</b></font> | ||
+ | <source lang="cpp">if (model->m_nFlags & DONT_RECEIVE_SHADOWS) | ||
+ | entity->m_nFlags.bDontCastShadowsOn = true;</source> | ||
+ | |- | ||
+ | | 8 || 256 || 0x100 || IGNORE_DRAW_DISTANCE || 0x1000 || 0x487CDE || <font face="Consolas"><b>CEntity::SetupBigBuilding()</b></font> | ||
+ | <source lang="cpp">if (model->m_afLodDistances[0] > 2500.0f || model->m_nFlags & IGNORE_DRAW_DISTANCE) | ||
+ | entity->m_nLevel = 0;</source> | ||
+ | |- | ||
+ | | 9 || 512 || 0x200 || IS_GLASS_TYPE_1 || 0x2000 || 0x488CCD || <font face="Consolas"><b>CEntity::PreRender()</b>, probably in-lined <b>CModelInfo::IsGlassModel(int)</b> @0x488CAA</font> | ||
+ | <source lang="cpp">bool CModelInfo::IsGlassModel(int modelId) { | ||
+ | CBaseModelInfo *model = CModelInfo::GetModelInfo(modelId); | ||
+ | if (model->m_nType == MODEL_INFO_SIMPLE || model->m_nType == MODEL_INFO_TIME) { | ||
+ | CSimpleModelInfo *simpleModel = reinterpret_cast<CSimpleModelInfo *>(model); | ||
+ | return simpleModel->m_nFlags & IS_GLASS_TYPE_1 || simpleModel->m_nFlags & IS_GLASS_TYPE_2; | ||
+ | } | ||
+ | return false; | ||
+ | }</source> | ||
+ | |- | ||
+ | | 10 || 1024 || 0x400 || IS_GLASS_TYPE_2 || 0x4000 || 0x488CE7 || <font face="Consolas"><b>CEntity::PreRender()</b></font> | ||
+ | <source lang="cpp">if (CModelInfo::IsGlassModel(modelId)) { | ||
+ | if (!(CModelInfo::GetModelInfo(modelId)->m_nFlags & IS_GLASS_TYPE_2) ) { | ||
+ | CGlass::AskForObjectToBeRenderedInGlass(entity); | ||
+ | entity->m_nFlags.bIsVisible = false; | ||
+ | } | ||
+ | }</source> | ||
+ | |} | ||
+ | |||
+ | === {{Icon|SA}} GTA San Andreas === | ||
+ | |||
+ | {| class="wikitable" | ||
+ | ! Bits !! Dec !! Hex !! Name !! Description !! Examples | ||
+ | |- | ||
+ | | 0 || 1 || 0x1 || IS_ROAD || This model is a road. || Roads | ||
+ | |- | ||
+ | | 1 || 2 || 0x2 || - || Not read, but present in IDE files. || | ||
|- | |- | ||
− | | | + | | 2 || 4 || 0x4 || DRAW_LAST || Model is transparent. Render this object after all opaque objects, allowing transparencies of other objects to be visible through this object. || Fences, trees |
|- | |- | ||
− | | | + | | 3 || 8 || 0x8 || ADDITIVE || Render with additive blending. Previous flag will be enabled automatically. || Night windows |
|- | |- | ||
− | | | + | | 4 || 16 || 0x10 || - || Not read, not present in IDE files. || - |
|- | |- | ||
− | | | + | | 5 || 32 || 0x20 || || Works only with animated objects ('anim' section in IDE). || Doors |
|- | |- | ||
− | | | + | | 6 || 64 || 0x40 || NO_ZBUFFER_WRITE || Disable writing to z-buffer when rendering this model, allowing transparencies of other objects, shadows, and lights to be visible through this object. || Shadows, lights |
|- | |- | ||
− | | | + | | 7 || 128 || 0x80 || DONT_RECEIVE_SHADOWS || Do not draw shadows on this object. || Small objects, pickups, lamps, trees |
|- | |- | ||
− | | | + | | 8 || 256 || 0x100 || - || Not read, not present in IDE files. || - |
|- | |- | ||
− | | | + | | 9 || 512 || 0x200 || IS_GLASS_TYPE_1 || Breakable glass type 1 (additional parameters defined inside the object.dat file, otherwise there is no effect) || Small windows |
|- | |- | ||
− | | | + | | 10 || 1024 || 0x400 || IS_GLASS_TYPE_2 || Breakable glass type 2: object first cracks on a strong collision, then it breaks (does also require object.dat registration). || Large windows |
|- | |- | ||
− | | | + | | 11 || 2048 || 0x800 || IS_GARAGE_DOOR || Indicates an object as an garage door (for more information see GRGE – requires object.dat registration). || Garage doors |
|- | |- | ||
− | | | + | | 12 || 4096 || 0x1000 || IS_DAMAGABLE || Model with ok/dam states. || Vehicle upgrades, barriers |
|- | |- | ||
− | | | + | | 13 || 8192 || 0x2000 || IS_TREE || Trees and some plants. These objects move on wind. || Trees, some plants |
|- | |- | ||
− | | | + | | 14 || 16384 || 0x4000 || IS_PALM || Palms. These objects move on wind. || Palms |
|- | |- | ||
− | | | + | | 15 || 32768 || 0x8000 || DOES_NOT_COLLIDE_WITH_FLYER || Does not collide with flyer (plane or heli). || Trees, street lights, traffic lights, road signs, telegraph pole |
|- | |- | ||
− | | | + | | 16 || 65536 || 0x10000 || - || Not read, but present in IDE files. || Explosive things |
|- | |- | ||
− | | | + | | 17 || 131072 || 0x20000 || - || Not read, but present in IDE files. || chopcop_ models |
|- | |- | ||
− | | | + | | 18 || 262144 || 0x40000 || - || Not read, but present in IDE files. || pleasure-DL.dff |
|- | |- | ||
− | | | + | | 19 || 524288 || 0x80000 || - || Unused special object type. Read, but not present in IDE files. || - |
|- | |- | ||
− | | | + | | 20 || 1048576 || 0x100000 || IS_TAG || This model is a tag. Object will switch from mesh 2 to mesh 1 after getting sprayed by the player. || Tags |
|- | |- | ||
− | | | + | | 21 || 2097152 || 0x200000 || DISABLE_BACKFACE_CULLING || Disables backface culling – as an result the texture will be drawed on both sides of the model. || Roads, houses, trees, vehicle parts |
|- | |- | ||
− | | | + | | 22 || 4194304 || 0x400000 || IS_BREAKABLE_STATUE || Object with this model can't be used as cover, i.e. peds won't try to cover behind this object. || Statue parts in atrium |
|} | |} | ||
− | + | === {{Icon|4}} GTA IV === | |
+ | {{Incomplete}} | ||
== Difference between GTA III and GTA IV engines == | == Difference between GTA III and GTA IV engines == | ||
− | [[GTA IV]] not only uses different formats to the previous games, it also does not use | + | [[GTA IV]] not only uses different formats to the previous games, it also does not use IDs to identify objects anymore. While [[GTA 3|GTA III]] era games use an ID as an index inside an array of definitions, GTA IV uses the hashes of the model name as a key inside a hash table. For more information about this see [[Map system]]. |
+ | |||
+ | == Tools == | ||
− | + | * [[KEd]] – By {{U|JernejL}} | |
− | * {{GTAG|4817|IDEditor}} | + | * [[MEd]] – By {{U|Tonywob}} |
− | * {{GTAF|402942|IDE-IV in GTA-IV script centre}} | + | * {{GTAG|4817|IDEditor}} – By {{U|Xmen}} |
− | * [http://www.aschratt.com/fileview.php?file=1004 FlagValue Calculator] | + | * {{GTAF|402942|IDE-IV in GTA-IV script centre}} – by {{U|Gforce}} |
+ | * [http://www.aschratt.com/fileview.php?file=1004 FlagValue Calculator] – By {{U|Aschratt}} - Calculates all flagvalues (even those unknown). | ||
+ | |||
+ | == See also == | ||
+ | |||
+ | * [[Item placement]] | ||
+ | * [[Map system]] | ||
+ | * [[Dynamic Object]] | ||
== References == | == References == | ||
− | |||
− | ==External | + | * {{note|1}} {{GTAF|post|102833|1067607073|Screenshots of flags in GTA III}} |
+ | |||
+ | == External links == | ||
+ | |||
* {{GTAF|102833|GTAVC IDE Definitions}} - topic by {{U|ODIE}} covering specific details of IDE files in GTA VC | * {{GTAF|102833|GTAVC IDE Definitions}} - topic by {{U|ODIE}} covering specific details of IDE files in GTA VC | ||
* {{GTAF|118193|GTA3/VC Map File Documentation and Troubleshooting}} - topic by {{U|Opius}} covering general features of IDE files in GTA3 and GTA VC | * {{GTAF|118193|GTA3/VC Map File Documentation and Troubleshooting}} - topic by {{U|Opius}} covering general features of IDE files in GTA3 and GTA VC | ||
− | |||
* [http://gta-worldmods.t-n-network.de/forum/thread.php?threadid=3382 ID Flagvalue Decoding Project] - project to decode all missing flag values | * [http://gta-worldmods.t-n-network.de/forum/thread.php?threadid=3382 ID Flagvalue Decoding Project] - project to decode all missing flag values | ||
− | {{N| | + | {{N|V|IV|VCS|LCS|SA|VC|III}} |
− | [[Category:Map Formats | + | [[Category:Map Formats]] |
Latest revision as of 23:12, 12 January 2021
IDE Sections:
|
Item definition files, usually identified by the file extension .ide
, are used to declare many different aspects for the map system or to specify special behaviour rules for one of the aspects.
Contents
Format
The files are plain text, so they can be opened with text editors such as Notepad. They resemble CSV files, but with some extra features.
Comments
Comments are prefixed with the #
symbol. Anything after that symbol is ignored, which means that comments can appear on their own lines as well as at the end of other lines:
# This comment has its own line.
data1, 183, 2.2 # This comment is at the end of a line.
Sections
Files are separated into sections with section...end
directives:
section_name
# ...
end
Sections are global – multiple files can contribute to them
Data
Data values can be comma- or space-delimited: commas are replaced with spaces when the game reads a line from the file.
# Both are valid:
123, mystring, 22.4
123 mystring 22.4
Additionally, because the game uses sscanf()
to parse these files, any number of spaces is read whenever a single space is encountered in the format string in the game code. As such, values can be aligned into columns:
# Identifier Some value Another value
1 a_value 12345
2 another 67890
Rockstar developers used this alignment ability a lot.
Rules and details
- The game only reads 256 characters per line. Anything longer will be truncated.
- Section identifiers and the
end
string are case-sensitive. - The files are ASCII-encoded. The game does not expect non-ASCII characters to appear, so they will likely cause issues.
- Decimal places in floating-point values must use
.
as the decimal point character.,
would be replaced with a space when read. - Any ASCII control characters – anything less than the space character,
0x20
– is replaced with a space when the game reads the character. The same is done for commas. - After reading a line, the game re-reads it to find the first character that is not a space or control character. The final line string starts from this character. This is equivalent to trimming the start of the string.
- In 3D era games, the section identifiers are always 4 characters long. GTA IV largely adheres to this convention, but not always.
Sections
The following table contains all known sections in the item definition. The supported games column lists games that support the sections but it doesn't necessarily means they're functional in the games.
Section | Supported games | Description |
---|---|---|
objs |
Defines simple objects. They can be placed into the world through the inst section of the item placement files.
| |
tobj |
Defines time objects. The section functions similarly to objs but has two additional parameters defining the in-game time range the object can get rendered. These objects can be placed into the world through the inst section of the item placement files.
| |
hier |
Defines clump objects for use in cutscenes. | |
cars |
Defines vehicle objects. | |
peds |
Defines pedestrian objects (random NPC's). | |
path |
Adds path nodes to defined objects. This section is unstable in Vice City. | |
2dfx |
Adds particle effects and simple ped behaviors to defined objects. | |
weap |
Defines weapon objects. | |
anim |
Defines animated objects. The section functions similarly to objs but has one additional parameter indicating an IFP or WAD animation file to assign an animation to the object. These objects can be placed into the world through the inst section of the item placement files.
| |
txdp |
Used to virtually extend texture dictionaries. | |
tanm |
Used to combine tobj and anim sections.Those objects get placed inside the inst section of the WPL.
| |
tree |
This section is not functional. | |
vnod |
– | |
link |
– | |
mlo |
Used to create interiors. This section does also contain information about portals (previous enex connections) and dimensions of the interior which influences certain aspects, like the weather, for example. All objects are placed relative to an offset placed using mlo+ inside the IPL or WPL file.
| |
amat |
This is Audio Materials. Possible Used to make a sound effect at the model. Usually used for dynamic objects. | |
lodm |
This section is not functional. | |
agrps |
– | |
hand |
VC Xbox/Mobile | – |
IDE Flags
Flags are used in order to specify the behaviour of objects. They are interpreted as signed 32-bit integer values where each bit describes a boolean value of a different aspect.
GTA III
Bits | Dec | Hex | Name | Description | Examples |
---|---|---|---|---|---|
0 | 1 | 0x1 | - | Cull model if player doesn't look at it? Read, but ignored. | Fences |
1 | 2[1] | 0x2 | DO_NOT_FADE | Do not fade the object when it is being loaded into or out of view. | Some lampposts |
2 | 4[1] | 0x4 | DRAW_LAST | Model is transparent. Render this object after all opaque objects, allowing transparencies of other objects to be visible through this object. | Trees |
3 | 8 | 0x8 | ADDITIVE | Render with additive blending. Previous flag must be enabled too. | |
4 | 16[1] | 0x10 | IS_SUBWAY | Model is a tunnel, i.e. set the object as invisible unless the player enters cull zone flag 128. This flag works only with static models. | Tunnels, some dynamic objects |
5 | 32 | 0x20 | IGNORE_LIGHTING | Don't use static lighting, we want dynamic if it's possible. | Some lampposts and trafficlights |
6 | 64[1] | 0x40 | NO_ZBUFFER_WRITE | Model is a shadow. Disable writing to z-buffer when rendering it, allowing transparencies of other objects, shadows, and lights to be visible through this object. Not implemented in the PS2 version. | Shadow |
GTA Vice City
Bits | Dec | Hex | Name | Description | Examples |
---|---|---|---|---|---|
0 | 1 | 0x1 | IS_ROAD | Identifies objects to draw "wet reflections" on them. | Roads |
1 | 2 | 0x2 | DO_NOT_FADE | Do not fade the object when it is being loaded into or out of view. | Some night objects, North Point Mall |
2 | 4 | 0x4 | DRAW_LAST | Model is transparent. Render this object after all opaque objects, allowing transparencies of other objects to be visible through this object. | Fences, trees |
3 | 8 | 0x8 | ADDITIVE | Render with additive blending. Previous flag will be enabled automatically. | Night windows |
4 | 16 | 0x10 | - | Read, but not used. | _dy, _dt objects |
5 | 32 | 0x20 | IGNORE_LIGHTING | Don't use static lighting, we want dynamic if it's possible. | Interior objects |
6 | 64 | 0x40 | NO_ZBUFFER_WRITE | Model is a shadow. Disable writing to z-buffer when rendering it, allowing transparencies of other objects, shadows, and lights to be visible through this object. | Tree shadows |
7 | 128 | 0x80 | DONT_RECEIVE_SHADOWS | Do not draw dynamic shadows on this object. | Small objects, pickups, lamps, trees |
8 | 256 | 0x100 | IGNORE_DRAW_DISTANCE | Ignore draw distance for this object (sets its "level" (island id) to 0). | LOD models, North Bridge |
9 | 512 | 0x200 | IS_GLASS_TYPE_1 | Breakable glass type 1: glass object changes its textures when breaking. | Small windows |
10 | 1024 | 0x400 | IS_GLASS_TYPE_2 | Breakable glass type 2: glass object doesn't change its textures when breaking. | Large windows |
Reference table
Bits | Dec | Hex | Name | Model info flag | Ref address | Ref description |
---|---|---|---|---|---|---|
0 | 1 | 0x1 | IS_ROAD | 0x04 | 0x4CA1D7 | CRenderer::RenderRoads()
if (CModelInfo::GetModelInfo(entity->m_nModelIndex)->m_nFlags & IS_ROAD)
entity->Render(); |
1 | 2 | 0x2 | DO_NOT_FADE | 0x20 | 0x4C7E03 | CRenderer::ShouldModelBeStreamed(CEntity *,CVector const&)
if (model->m_nFlags & DO_NOT_FADE) {
if (distance >= model->GetLargestLodDistance() + 30.0f)
return true;
}
else if ( distance >= model->GetLargestLodDistance() + 50.0f)
return true; |
2 | 4 | 0x4 | DRAW_LAST | 0x40 | 0x56F4F3 | CSimpleModelInfo::SetupBigBuilding(int,int)
if (model->m_nFlags & DRAW_LAST) {
model->m_nFlags &= ~DRAW_LAST;
dbgprint("%s was draw last\n", model->m_szName);
} |
3 | 8 | 0x8 | ADDITIVE | 0x80 | 0x582590 | CVisibilityPlugins::RenderFadingAtomic(RpAtomic *,float)
if (model->m_nFlags & ADDITIVE)
RwRenderStateSet(rwRENDERSTATEDESTBLEND, rwBLENDONE); |
4 | 16 | 0x10 | - | 0x100 | - | - |
5 | 32 | 0x20 | IGNORE_LIGHTING | 0x200 | 0x56F7C4 | CSimpleModelInfo::SetAtomic(int,RpAtomic *)
if (model->m_nFlags & IGNORE_LIGHTING)
atomic->geometry->flags &= ~rpGEOMETRYLIGHT; |
6 | 64 | 0x40 | NO_ZBUFFER_WRITE | 0x400 | 0x581390 | CVisibilityPlugins::RenderFadingEntities(CLinkList<CVisibilityPlugins::AlphaObjectInfo> &)
if (model->m_nType == MODEL_INFO_SIMPLE && model->m_nFlags & NO_ZBUFFER_WRITE)
RwRenderStateSet(rwRENDERSTATEZWRITEENABLE, FALSE); |
7 | 128 | 0x80 | DONT_RECEIVE_SHADOWS | 0x800 | 0x48AF21 | CFileLoader::LoadObjectInstance(char const*)
if (model->m_nFlags & DONT_RECEIVE_SHADOWS)
entity->m_nFlags.bDontCastShadowsOn = true; |
8 | 256 | 0x100 | IGNORE_DRAW_DISTANCE | 0x1000 | 0x487CDE | CEntity::SetupBigBuilding()
if (model->m_afLodDistances[0] > 2500.0f || model->m_nFlags & IGNORE_DRAW_DISTANCE)
entity->m_nLevel = 0; |
9 | 512 | 0x200 | IS_GLASS_TYPE_1 | 0x2000 | 0x488CCD | CEntity::PreRender(), probably in-lined CModelInfo::IsGlassModel(int) @0x488CAA
bool CModelInfo::IsGlassModel(int modelId) {
CBaseModelInfo *model = CModelInfo::GetModelInfo(modelId);
if (model->m_nType == MODEL_INFO_SIMPLE || model->m_nType == MODEL_INFO_TIME) {
CSimpleModelInfo *simpleModel = reinterpret_cast<CSimpleModelInfo *>(model);
return simpleModel->m_nFlags & IS_GLASS_TYPE_1 || simpleModel->m_nFlags & IS_GLASS_TYPE_2;
}
return false;
} |
10 | 1024 | 0x400 | IS_GLASS_TYPE_2 | 0x4000 | 0x488CE7 | CEntity::PreRender()
if (CModelInfo::IsGlassModel(modelId)) {
if (!(CModelInfo::GetModelInfo(modelId)->m_nFlags & IS_GLASS_TYPE_2) ) {
CGlass::AskForObjectToBeRenderedInGlass(entity);
entity->m_nFlags.bIsVisible = false;
}
} |
GTA San Andreas
Bits | Dec | Hex | Name | Description | Examples |
---|---|---|---|---|---|
0 | 1 | 0x1 | IS_ROAD | This model is a road. | Roads |
1 | 2 | 0x2 | - | Not read, but present in IDE files. | |
2 | 4 | 0x4 | DRAW_LAST | Model is transparent. Render this object after all opaque objects, allowing transparencies of other objects to be visible through this object. | Fences, trees |
3 | 8 | 0x8 | ADDITIVE | Render with additive blending. Previous flag will be enabled automatically. | Night windows |
4 | 16 | 0x10 | - | Not read, not present in IDE files. | - |
5 | 32 | 0x20 | Works only with animated objects ('anim' section in IDE). | Doors | |
6 | 64 | 0x40 | NO_ZBUFFER_WRITE | Disable writing to z-buffer when rendering this model, allowing transparencies of other objects, shadows, and lights to be visible through this object. | Shadows, lights |
7 | 128 | 0x80 | DONT_RECEIVE_SHADOWS | Do not draw shadows on this object. | Small objects, pickups, lamps, trees |
8 | 256 | 0x100 | - | Not read, not present in IDE files. | - |
9 | 512 | 0x200 | IS_GLASS_TYPE_1 | Breakable glass type 1 (additional parameters defined inside the object.dat file, otherwise there is no effect) | Small windows |
10 | 1024 | 0x400 | IS_GLASS_TYPE_2 | Breakable glass type 2: object first cracks on a strong collision, then it breaks (does also require object.dat registration). | Large windows |
11 | 2048 | 0x800 | IS_GARAGE_DOOR | Indicates an object as an garage door (for more information see GRGE – requires object.dat registration). | Garage doors |
12 | 4096 | 0x1000 | IS_DAMAGABLE | Model with ok/dam states. | Vehicle upgrades, barriers |
13 | 8192 | 0x2000 | IS_TREE | Trees and some plants. These objects move on wind. | Trees, some plants |
14 | 16384 | 0x4000 | IS_PALM | Palms. These objects move on wind. | Palms |
15 | 32768 | 0x8000 | DOES_NOT_COLLIDE_WITH_FLYER | Does not collide with flyer (plane or heli). | Trees, street lights, traffic lights, road signs, telegraph pole |
16 | 65536 | 0x10000 | - | Not read, but present in IDE files. | Explosive things |
17 | 131072 | 0x20000 | - | Not read, but present in IDE files. | chopcop_ models |
18 | 262144 | 0x40000 | - | Not read, but present in IDE files. | pleasure-DL.dff |
19 | 524288 | 0x80000 | - | Unused special object type. Read, but not present in IDE files. | - |
20 | 1048576 | 0x100000 | IS_TAG | This model is a tag. Object will switch from mesh 2 to mesh 1 after getting sprayed by the player. | Tags |
21 | 2097152 | 0x200000 | DISABLE_BACKFACE_CULLING | Disables backface culling – as an result the texture will be drawed on both sides of the model. | Roads, houses, trees, vehicle parts |
22 | 4194304 | 0x400000 | IS_BREAKABLE_STATUE | Object with this model can't be used as cover, i.e. peds won't try to cover behind this object. | Statue parts in atrium |
GTA IV
This section is incomplete. You can help by fixing and expanding it.
Difference between GTA III and GTA IV engines
GTA IV not only uses different formats to the previous games, it also does not use IDs to identify objects anymore. While GTA III era games use an ID as an index inside an array of definitions, GTA IV uses the hashes of the model name as a key inside a hash table. For more information about this see Map system.
Tools
- KEd – By JernejL
- MEd – By Tonywob
- GTAGarage: IDEditor – By Xmen
- GTAForums: IDE-IV in GTA-IV script centre – by Gforce
- FlagValue Calculator – By Aschratt - Calculates all flagvalues (even those unknown).
See also
References
- ^ GTAForums: Screenshots of flags in GTA III
External links
- GTAForums: GTAVC IDE Definitions - topic by ODIE covering specific details of IDE files in GTA VC
- GTAForums: GTA3/VC Map File Documentation and Troubleshooting - topic by Opius covering general features of IDE files in GTA3 and GTA VC
- ID Flagvalue Decoding Project - project to decode all missing flag values
Grand Theft Auto V | |
---|---|
File Formats | .awc • .dat • .gfx • .gxt2 • .ide • .meta/.ymt/.xml • .mrf • .patch • .rpf • .ybn/.ybd • .ycd • .ydd • .ydr • .yed • .yfd • .yft • .yld • .ymap • .ymf • .ynd • .ynv • .ypdb • .ysc • .ytd • .ytyp • .yvr |
Documentation | Bink Video • Native functions • Weather types |
Tools | OpenIV • GIMS Evo • CodeWalker |
Multiplayer | GTAForums: GTA Online |
Useful links | Community portal • Discussion forums • GTA V Modding Forum • GTA5-Mods • Native Functions Database (alloc8or) |
Grand Theft Auto IV | |
---|---|
File Formats | .dat • .gxt • .ide • .img • .ipl • .nod • .sco • .rpf • .rrr • .wad • .wbd/.wbn • .wdd • .wdr • .wft • .whm • .wpl • .wtd |
Documentation | Audio • Bink Video • Cryptography • Cutscenes • GXT Text • Image listing • Keycodes • Map Listing • Native functions • Paths • Radar Blips • Radio Stations • Saves • Scenarios • VTable • Weapons |
Tools | ASI Loader • ENBSeries • G-Texture • GIMS IV • Ingame WPL Editor • IV Needle • OpenIV • SparkIV • XLiveLess • WPL Manager • X Mod Installer Alice • C++ Script Hook • .NET Script Hook • Scocl |
Tutorials | Importing Textures with OpenIV • Importing Textures with SparkIV |
Modifications | GTA Connected • Gostown IV • Four Multiplayer • IV Multiplayer • CitizenMP:IV Reloaded |
Useful links | Community portal • Discussion forums • Modding forums • Mods on GTAGarage.com |
Grand Theft Auto: Vice City Stories | |
---|---|
File Formats | .cfg • .dat • .dtz • .gxt • .ide • .img • .ipl • .pss • .scm • .vb • .xtx |
Documentation | Leeds Engine • Radio Stations • Vehicles |
Tools | Sanny Builder |
Useful Links | Community Portal • Discussion Forum • Modding Topic |
Grand Theft Auto: Liberty City Stories | |
---|---|
File Formats | .cfg • .chk • .dat • .dtz • .gxt • .ide • .img • .ipl • .mdl • .pss • .scm • .vb |
Documentation | Leeds Engine • Opcodes • Radio Stations • Saves • Scrollbar • Vehicles |
Tools | Sanny Builder |
Useful Links | Community Portal • Discussion Forum • Modding Topic • Mobile Modding |