Difference between revisions of "Action8"

From GRFSpecs
Jump to navigationJump to search
m (14 revisions)
(fix tables and stuff lost in conversion)
Line 1: Line 1:
  +
==Introduction==
 
'''''Define GRF ID, Name and Description'''''
 
 
=Action 8=
 
   
 
Define GRF ID, Name and Description
 
Define GRF ID, Name and Description
   
  +
There are many new graphic sets available to TTD players. Of course, we need to make sure that we never get sets mixed up. To make sure this will never happen you can set an ID. Another useful feature of Action 8 is the ability to include useful information into the final .grf file. Here, we explain how Action 8 works.
-=Why does your .grf file need an ID?=-
 
 
There are many new graphic sets available to TTD players.  Of course, we need to make sure that we never get sets mixed up.  To make sure this will never happen you can set an ID.  Another useful feature of Action 8 is the ability to include useful information into the final .grf file. Here, we explain how Action 8 works.
 
   
-=Format=-
+
==Format==
   
 
Like all other pseudo-sprites, Action 8 consists of hexadecimal bits. There is no limitation in the total amount of hexadecimal bits you can use in Action 8. One term does have a limit though. Let's give an example of what an Action 8 line looks like:
 
Like all other pseudo-sprites, Action 8 consists of hexadecimal bits. There is no limitation in the total amount of hexadecimal bits you can use in Action 8. One term does have a limit though. Let's give an example of what an Action 8 line looks like:
   
<pre>-+&lt;sprite-number&gt; * &lt;length&gt; 08 &lt;version&gt; &lt;grf-id&gt; &lt;name&gt; &lt;description&gt;+-</pre>
+
<pre><sprite-number> * <length> 08 <version> <grf-id> <name> <description></pre>
   
 
Here is a short overview of what every term means:
 
Here is a short overview of what every term means:
   
  +
{| |-
||'''Element'''|[[GRFActionsDetailed|'''Size''']]|'''Description'''
 
  +
!'''Element'''!![[GRFActionsDetailed!!'''Size''']]!!'''Description'''
 
  +
|-
&lt;sprite-number&gt;|dec|A sequential sprite number
 
  +
|<sprite-number>||dec||A sequential sprite number
 
  +
|-
&lt;length&gt;|dec|The total number of bytes in the action
 
  +
|<length>||dec||The total number of bytes in the action
 
  +
|-
08|B|Action 08
 
  +
|08||B||Action 08
 
  +
|-
&lt;version&gt;|B|NFO version
 
  +
|<version>||B||NFO version
 
  +
|-
&lt;grf-id&gt;|4*B|A unique ID for your .grf file
 
  +
|<grf-id>||4*B||A unique ID for your .grf file
 
  +
|-
&lt;name&gt;|S|A short text containing the name of this set
 
  +
|<name>||S||A short text containing the name of this set
 
  +
|-
&lt;description&gt;|S|A longer description of this set||
 
  +
|<description>||S||A longer description of this set
  +
|}
   
 
===Sprite-number===
 
===Sprite-number===
Line 38: Line 35:
 
The number of this sprite.
 
The number of this sprite.
   
Action 8 has to be one of the first pseudosprites in the .NFO file. It is however valid to have other actions before it, except those that define &nbsp;new sprites or vehicle (etc.) properties.
+
Action 8 has to be one of the first pseudosprites in the .NFO file. It is however valid to have other actions before it, except those that define new sprites or vehicle (etc.) properties.
  +
|-
 
Actions 6, 7, 9, B, C, D (except [[ActionDSpecialVariables#GRF+Resource+Management|resource management]] sprites), 10 and 14 are valid before an action 8.
+
|Actions 6, 7, 9, B, C, D (except [[ActionDSpecialVariables#GRF+Resource+Management||resource management]] sprites), 10 and 14 are valid before an action 8.
   
 
===Length===
 
===Length===
Line 50: Line 47:
 
This should be the graphics version that your file will support. Valid values are:
 
This should be the graphics version that your file will support. Valid values are:
   
  +
{| |-
||'''Value'''|'''Compatibility'''|'''TTDPatch version'''|'''OpenTTD support'''
 
  +
!'''Value'''!!'''Compatibility'''!!'''TTDPatch version'''!!'''OpenTTD support'''
  +
|-
  +
|07||02..07||2.5 beta 1 or higher|| yes
  +
|-
  +
|06||02..06||2.0.1 alpha 13 or higher|| yes
  +
|-
  +
|05||02..05||2.0r1 Stable TTDPatch + 2.0.1 alphas up to 12|| yes
  +
|-
  +
|04||02..04||2.0 Stable TTDPatch||yes
  +
|-
  +
|01||00..01||1.9.1 alpha 28 or higher||no
  +
|-
  +
|00||00||1.9.1 alphas up to 27||no
  +
|}
   
  +
Entries for 00 and 01 are included only for completeness, and to aid with updating existing graphics. They should not be used with new graphics, because they will be incompatible with current TTDPatch and OpenTTD versions. OpenTTD 1.1.0 and later will disable NewGRFs with non-supported NFO versions.
07|02..07|2.5 beta 1 or higher| yes
 
 
06|02..06|2.0.1 alpha 13 or higher| yes
 
 
05|02..05|2.0r1 Stable TTDPatch + 2.0.1 alphas up to 12| yes
 
 
04|02..04|2.0 Stable TTDPatch|yes
 
 
01|00..01|1.9.1 alpha 28 or higher|no
 
 
00|00|1.9.1 alphas up to 27|no||
 
 
Entries for 00 and 01 are included only for completeness, and to aid with updating existing graphics. &nbsp;They should not be used with new graphics, because they will be incompatible with current TTDPatch and OpenTTD versions. OpenTTD 1.1.0 and later will disable NewGRFs with non-supported NFO versions.
 
   
 
Make sure to set a version number no lower than the minimum version that supports all features which are used by your file.
 
Make sure to set a version number no lower than the minimum version that supports all features which are used by your file.
Line 74: Line 73:
 
===GRF ID===
 
===GRF ID===
   
This is a series of 4 bytes. &nbsp;It's a convention to use the first two bytes for the creator's initials in ASCII code, e.g. &nbsp;54 57 for &quot;TW&quot;. The last two bytes should be numbers, typically the first number identifying which of the author's sets this is, and the second number being a version number.
+
This is a series of 4 bytes. It's a convention to use the first two bytes for the creator's initials in ASCII code, e.g. 54 57 for "TW". The last two bytes should be numbers, typically the first number identifying which of the author's sets this is, and the second number being a version number.
   
 
In principle, you are free what to use for the GRF ID as long as you are sure it is unique, but generally it is best to follow the above guidelines.
 
In principle, you are free what to use for the GRF ID as long as you are sure it is unique, but generally it is best to follow the above guidelines.
   
Note that GRF IDs starting with FF (i.e. the first byte is FF, such as in FF123456) are reserved for internal purposes and should not be used by regular .grf files. A GRF ID of FFFFFFFF is a special case for a .grf file that is always active and cannot be deactivated, used for feature-specific patch graphics such as electrified railways or pre-signals. This kind of file is shown with a blue flag in the GRF Status Window.
+
Note that GRF IDs starting with FF (i.e. the first byte is FF, such as in FF123456) are reserved for internal purposes and should not be used by regular .grf files. A GRF ID of FFFFFFFF is a special case for a .grf file that is always active and cannot be deactivated, used for TTDPatch's feature-specific graphics such as electrified railways or pre-signals.
   
The extra newgrf file, part of OpenTTD base sets, have to have a GRF ID starting with FF &quot;OT&quot;. The fourth letter may not be &quot;W&quot; nor &quot;D&quot; which are reserved for the openttd[w|d].grf file. OpenGFX defines 01 for its extra newgrf.
+
The extra newgrf file, part of OpenTTD base sets, have to have a GRF ID starting with FF "OT". The fourth letter may not be "W" nor "D" which are reserved for the openttd[w||d].grf file. OpenGFX defines 01 for its extra newgrf.
  +
  +
{|
  +
!grfID!!purposes
  +
|-
  +
|00 00 00 00||n/a
  +
|-
  +
|00 00 00 01 .. FE FF FF FF||normal NewGRFs
  +
|-
  +
|FF 00 00 00 .. FF FF FF FE||reserved
  +
|-
  +
|FF "OT" 00 .. FF "OT" FF||extra base grfs:
  +
|-
  +
|FF "OT" 01|| OpenGFX
  +
|-
  +
|FF "OTD"|| TTD base set: openttd.grf
  +
|-
  +
|FF "OTW"|| TTD base set: openttdw.grf (OpenTTD < 1.1.0)
  +
|}
   
 
===Name===
 
===Name===
  +
This short field should contain the name of the set. See [[GRFActionsDetailed#Strings|GRFActionsDetailed]] for instructions to generate the necessary byte codes, and for restrictions on what characters you may use.
 
This short field should contain the name of the set. &nbsp;See [[GRFActionsDetailed#Strings|GRFActionsDetailed]] for instructions to generate the necessary byte codes, and for restrictions on what characters you may use.
 
 
 
The name must be short because it should fit on one line of the [[GRFStatusWindow|GRF Status window]].
 
The name must be short because it should fit on one line of the [[GRFStatusWindow|GRF Status window]].
   
 
===Description===
 
===Description===
  +
This is a longer description of the set. Typically it contains the name of the author and a copyright notice or other attribution. See [[GRFActionsDetailed#Strings|GRFActionsDetailed]] for instructions to generate the necessary byte codes, and for restrictions on what characters you may use.
 
This is a longer description of the set. &nbsp;Typically it contains the name of the author and a copyright notice or other attribution. &nbsp;See [[GRFActionsDetailed#Strings|GRFActionsDetailed]] for instructions to generate the necessary byte codes, and for restrictions on what characters you may use.
 
 
 
The description may be quite long, but should be short enough to fit in the description part of the [[GRFStatusWindow|GRF Status window]], or a part of it may be cut off.
 
The description may be quite long, but should be short enough to fit in the description part of the [[GRFStatusWindow|GRF Status window]], or a part of it may be cut off.
   
-=Example=-
+
==Example==
   
 
Below is an example of what a real Action 8 pseudo-sprite could look like.
 
Below is an example of what a real Action 8 pseudo-sprite could look like.
   
  +
1 * 43 '''08''' 07 "TW" 01 06 "Tutorial Example" 00 "Changes nothing. Author: A kind person" 00
<pre>-+1 * 43 08 05 54 57 01 06 20 54 75 74 6F 72 69 61 6C 20 65 78 61 6D 70 6C 65 00 20 43 6F 70 79 72 69 67 68 74 3A 20 53 79 73 74 65 6D 00+-</pre>
 
   
 
Let's clarify it bit by bit. In order to understand what the bits say you could use a hexadecimal editor.
 
Let's clarify it bit by bit. In order to understand what the bits say you could use a hexadecimal editor.
   
  +
{| |-
||'''Byte'''|'''Meaning'''
 
  +
!'''Byte'''!!'''Meaning'''
 
  +
|-
1|&lt;sprite-number&gt;
 
  +
|1||<sprite-number>
 
  +
|-
43|&lt;length&gt; of the action in bytes; start counting at 08 (&lt;action&gt;)
 
  +
|43||<length> of the action in bytes; start counting at 08 (<action>)
 
  +
|-
08|&lt;action&gt;: sets this pseudo-sprite to function as action 8
 
  +
|08||<action>: sets this pseudo-sprite to function as action 8
 
  +
|-
05|&lt;version&gt;: this .grf file works with TTDPatch 2.0r1 + alpha series
 
  +
|07||<version>: nfo language version 7
 
  +
|-
54 57 01 06|&lt;-grf-id&gt;: ASCII code for TW, then the numbers 1 and 6 to indicate version 6 of TW's first set
 
  +
|54 57 01 06||<-grf-id>: ASCII code for TW, then the numbers 1 and 6 to indicate version 6 of TW's first set
 
  +
|-
20 54 .. 65 00|&lt;name&gt;: Tutorial example
 
  +
|"Tutorial..." 00||<name>: Name of the NewGRF
 
  +
|-
20 43 .. 6D 00|&lt;description&gt;: Copyright: System||
 
  +
|"Changes..." 00||<description>: Description of the NewGRF
  +
|}

Revision as of 04:30, 14 June 2011

Introduction

Define GRF ID, Name and Description

There are many new graphic sets available to TTD players. Of course, we need to make sure that we never get sets mixed up. To make sure this will never happen you can set an ID. Another useful feature of Action 8 is the ability to include useful information into the final .grf file. Here, we explain how Action 8 works.

Format

Like all other pseudo-sprites, Action 8 consists of hexadecimal bits. There is no limitation in the total amount of hexadecimal bits you can use in Action 8. One term does have a limit though. Let's give an example of what an Action 8 line looks like:

<sprite-number> * <length> 08 <version> <grf-id> <name> <description>

Here is a short overview of what every term means:

Element [[GRFActionsDetailed Size]] Description
<sprite-number> dec A sequential sprite number
<length> dec The total number of bytes in the action
08 B Action 08
<version> B NFO version
<grf-id> 4*B A unique ID for your .grf file
<name> S A short text containing the name of this set
<description> S A longer description of this set

Sprite-number

The number of this sprite.

Action 8 has to be one of the first pseudosprites in the .NFO file. It is however valid to have other actions before it, except those that define new sprites or vehicle (etc.) properties. |- |Actions 6, 7, 9, B, C, D (except |resource management sprites), 10 and 14 are valid before an action 8.

Length

The total number of bytes in Action 8.

Version

This should be the graphics version that your file will support. Valid values are:

Value Compatibility TTDPatch version OpenTTD support
07 02..07 2.5 beta 1 or higher yes
06 02..06 2.0.1 alpha 13 or higher yes
05 02..05 2.0r1 Stable TTDPatch + 2.0.1 alphas up to 12 yes
04 02..04 2.0 Stable TTDPatch yes
01 00..01 1.9.1 alpha 28 or higher no
00 00 1.9.1 alphas up to 27 no

Entries for 00 and 01 are included only for completeness, and to aid with updating existing graphics. They should not be used with new graphics, because they will be incompatible with current TTDPatch and OpenTTD versions. OpenTTD 1.1.0 and later will disable NewGRFs with non-supported NFO versions.

Make sure to set a version number no lower than the minimum version that supports all features which are used by your file.

The compatibility column means how low a version number is supported by the given TTDPatch version, e.g. 2.0r1 supports graphics files with any version from 02 to 05, but not for example 01 or 06.

Version 07 introduces a few minor semantic changes to some graphics features, i.e. the file will behave slightly differently depending on whether it's declared as version 06 or 07. These changes are described in more detail in the pages for the features they affect.

GRF ID

This is a series of 4 bytes. It's a convention to use the first two bytes for the creator's initials in ASCII code, e.g. 54 57 for "TW". The last two bytes should be numbers, typically the first number identifying which of the author's sets this is, and the second number being a version number.

In principle, you are free what to use for the GRF ID as long as you are sure it is unique, but generally it is best to follow the above guidelines.

Note that GRF IDs starting with FF (i.e. the first byte is FF, such as in FF123456) are reserved for internal purposes and should not be used by regular .grf files. A GRF ID of FFFFFFFF is a special case for a .grf file that is always active and cannot be deactivated, used for TTDPatch's feature-specific graphics such as electrified railways or pre-signals.

The extra newgrf file, part of OpenTTD base sets, have to have a GRF ID starting with FF "OT". The fourth letter may not be "W" nor "D" which are reserved for the openttd[w||d].grf file. OpenGFX defines 01 for its extra newgrf.

grfID purposes
00 00 00 00 n/a
00 00 00 01 .. FE FF FF FF normal NewGRFs
FF 00 00 00 .. FF FF FF FE reserved
FF "OT" 00 .. FF "OT" FF extra base grfs:
FF "OT" 01 OpenGFX
FF "OTD" TTD base set: openttd.grf
FF "OTW" TTD base set: openttdw.grf (OpenTTD < 1.1.0)

Name

This short field should contain the name of the set. See GRFActionsDetailed for instructions to generate the necessary byte codes, and for restrictions on what characters you may use. The name must be short because it should fit on one line of the GRF Status window.

Description

This is a longer description of the set. Typically it contains the name of the author and a copyright notice or other attribution. See GRFActionsDetailed for instructions to generate the necessary byte codes, and for restrictions on what characters you may use. The description may be quite long, but should be short enough to fit in the description part of the GRF Status window, or a part of it may be cut off.

Example

Below is an example of what a real Action 8 pseudo-sprite could look like.

1 * 43 08 07 "TW" 01 06 "Tutorial Example" 00 "Changes nothing. Author: A kind person" 00

Let's clarify it bit by bit. In order to understand what the bits say you could use a hexadecimal editor.

Byte Meaning
1 <sprite-number>
43 <length> of the action in bytes; start counting at 08 (<action>)
08 <action>: sets this pseudo-sprite to function as action 8
07 <version>: nfo language version 7
54 57 01 06 <-grf-id>: ASCII code for TW, then the numbers 1 and 6 to indicate version 6 of TW's first set
"Tutorial..." 00 <name>: Name of the NewGRF
"Changes..." 00 <description>: Description of the NewGRF