Difference between revisions of "Item Definition"

From Grand Theft Wiki
Jump to navigation Jump to search
(copied from gtamodding)
(contributions from myself, Aschratt, DK22Pac, MarioSonic2987, Solom, and The Hero)
 
(5 intermediate revisions by 3 users not shown)
Line 1: Line 1:
{{IdeSection
{{IdeSection
| noheader = 1
|noheader = 1
}}
}}
'''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. They are stored in plain text format, so that they can be opened by any text editing program (like [[Wikipedia:Notepad|Notepad]]), but there are also some tools to simplify editing.
 
'''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 behavior rules for one of the aspects. They are stored in plain text format, so that they can be opened by any text editing program (like [[wp:Notepad|Notepad]]), but there are also some tools to simplify editing.


== Overview ==
== Overview ==
The ''item definition'' files are split up into several sections. There is no order on how you arrange the sections. Also you do not need to use all the sections in a file.
The ''item definition'' files are split up into several sections. There is no order on how you arrange the sections and sections do not need to appear in the file.


=== Format and syntax description ===
=== Format and syntax description ===


The basic structure of the different sections is pretty simple. Each section starts with a four-character section identifier indicating how the content of the section gets interpreted by the game. The identifier is followed by the definition entries. Each entry takes one line and every line follows certain rules which are described in the articles handling the sections in detail (see below). However lines can also be empty or commented. If so they get ignored by the games' parser. The end of every section are indicated by the terminating string "end". Both (section identifier and terminating string) are not case sensitive, but by default they are written in lower case.
Line comments are indicated by the character <code>#</code> (number sign) and empty lines are allowed. They can be placed anywhere in the file. The game reads up to a maximum of 256 characters for each line and ignores the rest if the line is longer. Each section starts with a section identifier (usually four characters long, e.g. <code>objs</code>, <code>tobj</code>, etc.) indicating how the content of the section gets interpreted by the game. The identifier is followed by the definition entries. Each entry takes one line and every line follows a specific format which are described in the articles handling the sections in detail (see below). The end of any section is indicated by the terminating string <code>end</code>. Both the section identifier and terminating string are case sensitive. Lines within sections are always formatted in the same way differing only in the number of parameters describing the semantical content of the line. Data are usually separated by the character <code>,</code> (comma) but can be separated by <code> </code>&nbsp;(space). Tabs and spaces anywhere in the beginning of the line, between data, or after the data are omitted by the game and can be used to improve readability for human eyes. The games' parser uses an invariant culture to parse numerical values and strings, which means strings are [[Wikipedia:ASCII|ASCII]] encrypted and the decimal separator is <code>.</code> (period).


Comments are usually indicated by the character <code>#</code> (number sign). It is possible to add comments to the end of a line, but breaking the line format for the current section using comments may cause the game to crash during loading. It is recommended that a comment should be placed on a separate line. Comments can also be placed outside of sections.
==== Example ====
 
{{Pre|
Lines itself are always formatted in the same way differing only in the number of their parameters describing the semantical content of the line. Parameters are usually separated by the character <code>,</code> (comma). [[wp:Whitespace_character|Whitespace characters]] at the beginning or the end of an parameter get trimmed but they are usually used to give the content a more clear structure to make it more easier to read for human. Strings can be encased by the character <code>"</code> (quotation mark), but this is optional and rarely used by default. Also the games' parser uses an invariant culture to parse numerical values and strings. Which means strings are [[Wikipedia:ASCII|ASCII]] encrypted and the decimal separator is <code>.</code> (period).
# line comment
 
objs
==== Section example ====
# default style in objs section
 
200, ind_land101, pjs, 1, 127, 0
objs
# valid style
...
    200 ind_land101 pjs 1 127 0
end
end
 
}}
=== Sections ===


The following table contains basic information about all known sections. For additional information read the articles itself.
== Format ==
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"
{|class="mw-collapsible wikitable center-col-1 center-col-2" style="width: 100%;"
!width="120px"|Identifier
!style="width: 7em;"|Section
!width="100px"|Supported games
!style="width: 8em;"|Supported games
!Description
!Description
|-
|-
|<center>[[OBJS]]</center>||<center>{{Icon|3}} {{Icon|VC}} {{Icon|SA}} {{Icon|4}}</center>||Most important section: defines objects for the map.<br>Those objects get placed inside the [[INST]] section of the [[Item Placement|item placement files]].
|<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 [[Item Placement|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.
|-
|-
|<center>[[TOBJ]]</center>||<center>{{Icon|3}} {{Icon|VC}} {{Icon|SA}} {{Icon|4}}</center>||Basicly does the same as ''OBJS'', but it has two additional parameters defining the ingame time range the object can get rendered.<br>Those objects get placed inside the ''INST'' section of the ''item placement files''.
|<code>[[PEDS|peds]]</code>||{{Icon|t}} {{Icon|4}}||Defines pedestrian objects (random NPC's).
|-
|-
|<center>[[ANIM]]</center>||<center>{{Icon|SA}} {{Icon|4}}</center>||Basicly does the same as ''OBJS'', but it has one additional parameter identicating an [[IFP]] or [[WAD]] animation file to assign an animation to the object.<br>Those objects get placed inside the ''INST'' section of the ''item placement files''.
|<code>[[PATH (IDE Section)|path]]</code>||{{Icon|3}} {{Icon|SA}}||Adds path nodes to defined objects. This section is unstable in Vice City.
|-
|-
|<center>[[PEDS]]</center>||<center>{{Icon|3}} {{Icon|VC}} {{Icon|SA}} {{Icon|4}}</center>||Used to define ''"pedestrians"'' (Random [[wikipedia:Non-player_character|NPC's]]).
|<code>[[2DFX|2dfx]]</code>||{{Icon|3}} {{Icon|VC}} {{Icon|SA}} {{Icon|4}}||Adds particle effects and simple ped behaviors to defined objects.
|-
|-
|<center>[[WEAP]]</center>||<center>{{Icon|VC}} {{Icon|SA}} {{Icon|4}}</center>||Used to define weapons.
|<code>[[WEAP|weap]]</code>||{{Icon|VC}} {{Icon|SA}} {{Icon|4}}||Defines weapon objects.
|-
|-
|<center>[[CARS_(IDE_Section)|CARS]]</center>||<center>{{Icon|3}} {{Icon|VC}} {{Icon|SA}} {{Icon|4}}</center>||Used to define vehicles.
|<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.
|-
|-
|<center>[[HIER]]</center>||<center>{{Icon|3}} {{Icon|VC}} {{Icon|SA}} {{Icon|4}}</center>||Partly unknown. Used to define objects for interactions with [[actor|actors]] for example in cutscenes.
|<code>[[TXDP|txdp]]</code>||{{Icon|SA}} {{Icon|4}}||Used to virtually extend [[Texture Archive|texture dictionaries]].
|-
|-
|<center>[[TXDP]]</center>||<center>{{Icon|SA}} {{Icon|4}}</center>||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.
|-
|-
|<center>[[2DFX]]</center>||<center>{{Icon|3}} {{Icon|VC}}</center>||Used to add particles to objects, defined in one of the sections above (except ''TXDP'').
|<code>[[TREE|tree]]</code>||||This section is read in GTA IV but is not functional.
|-
|-
|<center>[[PATH_(IDE_Section)|PATH]]</center>||<center>{{Icon|3}}</center>||Used to create waypoints for random NPC spawns ([[Paths]]).
|<code>[[VNOD|vnod]]</code>||{{Icon|4}}||
|-
|-
|<center>[[TREE]]</center>||<center>{{Icon|4}}</center>||&ndash;
|<code>[[LINK|link]]</code>||{{Icon|4}}||
|-
|-
|<center>[[TANM]]</center>||<center>{{Icon|4}}</center>||Used to combine ''TOBJ'' and ''ANIM'' sections.<br>Those objects get placed inside the ''INST'' section of the ''item placement files''.
|<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+</code> inside the IPL or WPL file.
|-
|-
|<center>[[MLO]]</center>||<center>{{Icon|4}}</center>||Used to create [[interior]]s. This section does also contain information about the entrace markers (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.
|<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.
|-
|-
|<center>[[AMAT]]</center>||<center>{{Icon|4}}</center>||&ndash;
|<code>[[LODM|lodm]]</code>||||This is read in GTA IV but section is not functional.
|-
|<code>[[AGRPS|agrps]]</code>||{{Icon|4}}||–
|-
|<code>[[HAND|hand]]</code>||VC Xbox/Mobile||–
|}
|}


== IDE Flags ==
== 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 [[wp:Boolean_algebra_(logic)|boolean]] value of a different aspect.


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 [[wp:Boolean_algebra_(logic)|boolean]] value of a different aspect. The following table shows the standard flags used for objects defined in ''OBJS'', ''TOBJ'' and ''ANIM'' section.
=== GTA III ===
{|width="100%" class="wikitable"
{| class="wikitable"
!width="120px"|Flag
! Bits !! Dec !! Hex !! Name !! Description !! Examples
!width="100px"|Supported games
|-
!width="25%"|Binary
| 0 || 1 || 0x1 || - || Cull model if player doesn't look at it? Read, but ignored. || Fences
!Description
|-
| 1 || 2<ref name="III">[http://www.gtaforums.com/index.php?showtopic=102833&view=findpost&p=1067607073 Screenshots of flags in GTA III], by {{U|spaceeinstein}}</ref> || 0x2 || DO_NOT_FADE || Do not fade the object when it is being loaded into or out of view. || Some lampposts
|-
| 2 || 4<ref name="III" /> || 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 name="III" /> || 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 name="III" /> || 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 ===
 
{| class="wikitable"
! Bits !! Dec !! Hex !! Name !! Description !! Examples
|-
|-
|<center>-1</center>||<center>&ndash;</center>||<center><code>1111 1111 1111 1111 1111 1111</code></center>||Enables all flags. <ref>[[wp:Two%27s_complement|Two's complement]]</ref> Never used by default.
| 0 || 1 || 0x1 || IS_ROAD || Identifies objects to draw "wet reflections" on them. || Roads
|-
|-
|<center>1</center>||<center>{{Icon|trilogy}} {{Icon|4}}</center>||<center><code>0000 0000 0000 0000 0000 0001</code></center>||Wet effect (objects appear darker).
| 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
|-
|-
|<center>2</center>||<center>{{Icon|trilogy}} {{Icon|4}}</center>||<center><code>0000 0000 0000 0000 0000 0010</code></center>||Indicates that the object gets rendered at night for objects defined in ''TOBJ''.
| 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. || Fencse, trees
|-
|-
|<center>4</center>||<center>{{Icon|trilogy}} {{Icon|4}}</center>||<center><code>0000 0000 0000 0000 0000 0100</code></center>||Alpha transparency 1
| 3 || 8 || 0x8 || ADDITIVE || Render with additive blending. Previous flag will be enabled automatically. || Night windows
|-
|-
|<center>8</center>||<center>{{Icon|trilogy}} {{Icon|4}}</center>||<center><code>0000 0000 0000 0000 0000 1000</code></center>||Alpha transparency 2
| 4 || 16 || 0x10 || - || Read, but not used. || _dy, _dt objects
|-
|-
|<center>16</center>||<center>{{Icon|trilogy}} {{Icon|4}}</center>||<center><code>0000 0000 0000 0000 0001 0000</code></center>||Opposite to flag '''2'''
| 5 || 32 || 0x20 || IGNORE_LIGHTING || Don't use static lighting, we want dynamic if it's possible. || Interior objects
|-
|-
|<center>32</center>||<center>{{Icon|trilogy}} {{Icon|4}}</center>||<center><code>0000 0000 0000 0000 0010 0000</code></center>||Indicates an object to be used inside an interior.
| 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
|-
|-
|<center>64</center>||<center>{{Icon|trilogy}} {{Icon|4}}</center>||<center><code>0000 0000 0000 0000 0100 0000</code></center>||Disables the [[COLL#Shadow_Mesh|shadow mesh]] to project a shadow.
| 7 || 128 || 0x80 || DONT_RECEIVE_SHADOWS || Do not draw dynamic shadows on this object. || Small objects, pickups, lamps, trees
|-
|-
|<center>128</center>||<center>{{Icon|trilogy}} {{Icon|4}}</center>||<center><code>0000 0000 0000 0000 1000 0000</code></center>||Object surface will not be [[Wikipedia:Hidden_surface_determination|culled]].
| 8 || 256 || 0x100 || IGNORE_DRAW_DISTANCE || Ignore draw distance for this object (sets its "level" (island id) to 0). || LOD models, North Bridge
|-
|-
|<center>256</center>||<center>{{Icon|trilogy}} {{Icon|4}}</center>||<center><code>0000 0000 0000 0001 0000 0000</code></center>||Disables draw distance (Only used for [[LOD]] objects with an ''LOD'' value greater than 299).
| 9 || 512 || 0x200 || IS_GLASS_TYPE_1 || Breakable glass type 1: glass object changes its textures when breaking. || Small windows
|-
|-
|<center>512</center>||<center>{{Icon|trilogy}} {{Icon|4}}</center>||<center><code>0000 0000 0000 0010 0000 0000</code></center>||Object is breakable (like glass &ndash; additional parameters defined inside the [[object.dat]] file, otherwise there is no effect).
| 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
|-
|-
|<center>1024</center>||<center>{{Icon|trilogy}}{{Icon|4}}</center>||<center><code>0000 0000 0000 0100 0000 0000</code></center>||Similar to flag '''512''': object first cracks on a strong collision, then it breaks (does also require ''object.dat'' registration).
| 0 || 1 || 0x01 || IS_ROAD || 0x04 || 0x4CA1D7 || '''<code>CRenderer::RenderRoads()</code>'''
{{Pre|1=
if (CModelInfo::GetModelInfo(entity->m_nModelIndex)->m_nFlags & IS_ROAD)
    entity->Render();
}}
|-
|-
|<center>2048</center>||<center>{{Icon|SA}} {{Icon|4}}</center>||<center><code>0000 0000 0000 1000 0000 0000</code></center>||Indicates an object as an garage door (for more information see [[GRGE#Types_of_doors|GRGE]] &ndash; requires ''object.dat'' registration).
| 1 || 2 || 0x02 || DO_NOT_FADE || 0x20 || 0x4C7E03 || '''<code>CRenderer::ShouldModelBeStreamed(CEntity *,CVector const&)</code>'''
{{Pre|1=
if (model->m_nFlags & DO_NOT_FADE) {
    if (distance >= model->GetLargestLodDistance() + 30.0f)
        return true;
}
else if ( distance >= model->GetLargestLodDistance() + 50.0f)
    return true;
}}
|-
|-
|<center>4096</center>||<center>{{Icon|SA}} {{Icon|4}}</center>||<center><code>0000 0000 0001 0000 0000 0000</code></center>||Indicates an [[RenderWare_binary_stream_file|multiclump]] object (Object switches from clump ''2'' to clump ''1'' after collision &ndash; requires ''object.dat'' registration).
| 2 || 4 || 0x04 || DRAW_LAST || 0x40 || 0x56F4F3 || '''<code>CSimpleModelInfo::SetupBigBuilding(int,int)</code>'''
{{Pre|1=
if (model->m_nFlags & DRAW_LAST) {
    model->m_nFlags &= ~DRAW_LAST;
    dbgprint("%s was draw last\n", model->m_szName);
}
}}
|-
|-
|<center>32768</center>||<center>{{Icon|SA}} {{Icon|4}}</center>||<center><code>0000 0000 1000 0000 0000 0000</code></center>||Uses object brightness from the current weather definition (See [[timecyc.dat]] &ndash; ''PoleShd'').
| 3 || 8 || 0x08 || ADDITIVE || 0x80 || 0x582590 || '''<code>CVisibilityPlugins::RenderFadingAtomic(RpAtomic *,float)</code>'''
{{Pre|1=
if (model->m_nFlags & ADDITIVE)
    RwRenderStateSet(rwRENDERSTATEDESTBLEND, rwBLENDONE);
}}
|-
|-
|<center>65536</center>||<center>{{Icon|SA}} {{Icon|4}}</center>||<center><code>0000 0001 0000 0000 0000 0000</code></center>||Object explodes after getting hit (requires ''object.dat'' registration).
| 4 || 16 || 0x10 || || 0x100 || - || -
|-
|-
|<center>131072</center>||<center>{{Icon|SA}}</center>||<center><code>0000 0010 0000 0000 0000 0000</code></center>||Unknown &ndash; apparently some flag for the [[SCM|Script]].
| 5 || 32 || 0x20 || IGNORE_LIGHTING || 0x200 || 0x56F7C4 || '''<code>CSimpleModelInfo::SetAtomic(int,RpAtomic *)</code>'''
{{Pre|1=
if (model->m_nFlags & IGNORE_LIGHTING)
    atomic->geometry->flags &= ~rpGEOMETRYLIGHT;
}}
|-
|-
|<center>262144</center>||<center>{{Icon|SA}}</center>||<center><code>0000 0100 0000 0000 0000 0000</code></center>||Unknown &ndash; only used 1 time in [[GTA SA|San Andreas]].
| 6 || 64 || 0x40 || NO_ZBUFFER_WRITE || 0x400 || 0x581390 || '''<code>CVisibilityPlugins::RenderFadingEntities(CLinkList<CVisibilityPlugins::AlphaObjectInfo> &)</code>'''
{{Pre|1=
if (model->m_nType == MODEL_INFO_SIMPLE && model->m_nFlags & NO_ZBUFFER_WRITE)
    RwRenderStateSet(rwRENDERSTATEZWRITEENABLE, FALSE);
}}
|-
|-
|<center>1048576</center>||<center>{{Icon|SA}}</center>||<center><code>0000 1000 0000 0000 0000 0000</code></center>||Object will switch from clump ''2'' to clump ''1'' after getting sprayed by the player (graffity flag).
| 7 || 128 || 0x80 || DONT_RECEIVE_SHADOWS || 0x800 || 0x48AF21 || '''<code>CFileLoader::LoadObjectInstance(char const*)</code>'''
{{Pre|1=
if (model->m_nFlags & DONT_RECEIVE_SHADOWS)
    entity->m_nFlags.bDontCastShadowsOn = true;
}}
|-
|-
|<center>2097152</center>||<center>{{Icon|SA}}</center>||<center><code>0001 0000 0000 0000 0000 0000</code></center>||Disables backface culling &ndash; as an result the texture will be drawed on both sides of the model (Always enabled for GTA III and [[GTA VC|Vice City]])
| 8 || 256 || 0x100 || IGNORE_DRAW_DISTANCE || 0x1000 || 0x487CDE || '''<code>CEntity::SetupBigBuilding()</code>'''
{{Pre|1=
if (model->m_afLodDistances[0] > 2500.0f <nowiki>||</nowiki> model->m_nFlags & IGNORE_DRAW_DISTANCE)
    entity->m_nLevel = 0;
}}
|-
|-
|<center>4194304</center>||<center>{{Icon|SA}}</center>||<center><code>0010 0000 0000 0000 0000 0000</code></center>||Unknown &ndash; apparently related into physics.
| 9 || 512 || 0x200 || IS_GLASS_TYPE_1 || 0x2000 || 0x488CCD || '''<code>CEntity::PreRender()</code>''', probably in-lined '''<code>CModelInfo::IsGlassModel(int)</code>''' @0x488CAA
{{Pre|1=
bool CModelInfo::IsGlassModel(int modelId) {
    CBaseModelInfo *model = CModelInfo::GetModelInfo(modelId);
    if (model->m_nType == MODEL_INFO_SIMPLE <nowiki>||</nowiki> model->m_nType == MODEL_INFO_TIME) {
        CSimpleModelInfo *simpleModel = reinterpret_cast<CSimpleModelInfo *>(model);
        return simpleModel->m_nFlags & IS_GLASS_TYPE_1 <nowiki>||</nowiki> simpleModel->m_nFlags & IS_GLASS_TYPE_2;
    }
    return false;
}
}}
|-
|-
|colspan="4" style="text-align: right;" |<span class="plainlinks" style="font-size: 10px;">[http://www.gtamodding.com/index.php?title=Template:Object-Flags&action=edit edit]</span>
| 10 || 1024 || 0x400 || IS_GLASS_TYPE_2 || 0x4000 || 0x488CE7 || '''<code>CEntity::PreRender()</code>'''
{{Pre|1=
if (CModelInfo::IsGlassModel(modelId)) {
    if (!(CModelInfo::GetModelInfo(modelId)->m_nFlags & IS_GLASS_TYPE_2) ) {
        CGlass::AskForObjectToBeRenderedInGlass(entity);
        entity->m_nFlags.bIsVisible = false;
    }
}
}}
|}
|}
For flags defining different aspects of different definitions read the articles about their sections.


== Difference between GTA III and GTA IV engines ==
== Difference between GTA III and GTA IV engines ==
 
[[Grand Theft Auto IV]] not only uses different formats to the previous games, it also does not use IDs to identify objects anymore. While [[Grand Theft Auto 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]].
[[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 ==
== Tools ==
* [[KEd]] &ndash; By JernejL
* [[KEd]] &ndash; By JernejL
* [[MEd]] &ndash; By Tonywob
* [[MEd]] &ndash; By Tonywob
Line 128: Line 215:


== See also ==
== See also ==
 
* [[Item Placement]]
* [[Item placement]]
* [[Map System]]
* [[Map System]]
* [[Dynamic Object]]
* [[Dynamic Object]]
Line 137: Line 223:


== External links ==
== External links ==
* [http://www.gtaforums.com/index.php?showtopic=102833 GTAVC IDE Definitions] - topic by ODIE covering specific details of IDE files in GTA VC
* [http://www.gtaforums.com/index.php?showtopic=102833 GTAVC IDE Definitions] - topic by ODIE covering specific details of IDE files in GTA VC
* [http://www.gtaforums.com/index.php?showtopic=118193 GTA3/VC Map File Documentation and Troubleshooting] - topic by Opius covering general features of IDE files in GTA3 and GTA VC
* [http://www.gtaforums.com/index.php?showtopic=118193 GTA3/VC Map File Documentation and Troubleshooting] - topic by Opius covering general features of IDE files in GTA3 and GTA VC
Line 143: Line 228:


{{fdl}}
{{fdl}}
 
{{3-navi}}
{{modding}}
{{VC-navi}}
[[Category:Map Formats]]
[[Category:Map Formats]]
[[Category:GTA III Modifications]]
[[Category:GTA Vice City]]
[[Category:Modifications]]

Latest revision as of 14:43, 21 July 2018

Item Definition
IDE Sections:
2DFX AMAT ANIM CARS HIER MLO OBJS
PATH PEDS TANM TOBJ TREE TXDP WEAP

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 behavior rules for one of the aspects. They are stored in plain text format, so that they can be opened by any text editing program (like Notepad), but there are also some tools to simplify editing.

Overview

The item definition files are split up into several sections. There is no order on how you arrange the sections and sections do not need to appear in the file.

Format and syntax description

Line comments are indicated by the character # (number sign) and empty lines are allowed. They can be placed anywhere in the file. The game reads up to a maximum of 256 characters for each line and ignores the rest if the line is longer. Each section starts with a section identifier (usually four characters long, e.g. objs, tobj, etc.) indicating how the content of the section gets interpreted by the game. The identifier is followed by the definition entries. Each entry takes one line and every line follows a specific format which are described in the articles handling the sections in detail (see below). The end of any section is indicated by the terminating string end. Both the section identifier and terminating string are case sensitive. Lines within sections are always formatted in the same way differing only in the number of parameters describing the semantical content of the line. Data are usually separated by the character , (comma) but can be separated by  (space). Tabs and spaces anywhere in the beginning of the line, between data, or after the data are omitted by the game and can be used to improve readability for human eyes. The games' parser uses an invariant culture to parse numerical values and strings, which means strings are ASCII encrypted and the decimal separator is . (period).

Example

# line comment
objs
# default style in objs section
200, ind_land101, pjs, 1, 127, 0
# valid style
	    200 ind_land101 pjs 1 127 0
end

Format

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 GTA III GTA Vice City GTA San Andreas GTA IV Defines simple objects. They can be placed into the world through the inst section of the item placement files.
tobj GTA III GTA Vice City GTA San Andreas GTA IV 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 GTA III GTA Vice City GTA San Andreas GTA IV Defines clump objects for use in cutscenes.
cars GTA III GTA Vice City GTA San Andreas GTA IV Defines vehicle objects.
peds GTA III GTA Vice City GTA San Andreas GTA IV Defines pedestrian objects (random NPC's).
path GTA III GTA San Andreas Adds path nodes to defined objects. This section is unstable in Vice City.
2dfx GTA III GTA Vice City GTA San Andreas GTA IV Adds particle effects and simple ped behaviors to defined objects.
weap GTA Vice City GTA San Andreas GTA IV Defines weapon objects.
anim GTA San Andreas GTA IV 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 GTA San Andreas GTA IV Used to virtually extend texture dictionaries.
tanm GTA IV Used to combine tobj and anim sections.
Those objects get placed inside the inst section of the WPL.
tree This section is read in GTA IV but is not functional.
vnod GTA IV
link GTA IV
mlo GTA IV 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 GTA IV This is Audio Materials. Possible Used to make a sound effect at the model. Usually used for dynamic objects.
lodm This is read in GTA IV but section is not functional.
agrps GTA IV
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. Fencse, 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 0x01 IS_ROAD 0x04 0x4CA1D7 CRenderer::RenderRoads()
if (CModelInfo::GetModelInfo(entity->m_nModelIndex)->m_nFlags & IS_ROAD)
    entity->Render();
1 2 0x02 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 0x04 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 0x08 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;
    }
}

Difference between GTA III and GTA IV engines

Grand Theft Auto IV not only uses different formats to the previous games, it also does not use IDs to identify objects anymore. While Grand Theft Auto 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

See also

References

External links

Copyrighted

This page is licensed under the GNU Free Documentation Licence. This page has a separate license to the CC-BY-SA that applies to most of Grand Theft Wiki.

The full text of the GNU FDL v1.2 is here. Click the "History" button to see the full list of authors. See Grand Theft Wiki:Copyright for more detail on our copyright policy.

GNU Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
See Grand Theft Wiki:Copyright for more information.