Difference between revisions of "Automata Subfiles"

From SC4D Encyclopaedia
Jump to navigation Jump to search
(→‎Vehicle Automata Subfile (0x896e714a): add path data and another float)
m (fix versions, zots and appearance flags)
 
(7 intermediate revisions by the same user not shown)
Line 5: Line 5:
 
List of records of the form:
 
List of records of the form:
 
<pre>
 
<pre>
DWORD       Record Size
+
DWORD           Record Size
DWORD       CRC
+
DWORD           CRC
DWORD       Memory address
+
DWORD           Memory address
WORD×3      Version (always 2, 2, 8)
+
WORD×4          Version (always 2, 2, 8, 4)
BYTE        Zot (always 0x04)
+
DWORD          Appearance flags (See Appendix 1.4)
DWORD       Unknown (always 0)
+
DWORD           Record type identifier (always 0xc7cc75f1)
BYTE        Appearance flag (e.g. 0x10, 0x11, 0x14 or 0x15)
+
ARBIT          Record substructure (See Appendix 1.1)
DWORD      Record type identifier (always 0xc7cc75f1)
+
</pre>
BYTE×4     (Min Tract X, Min Tract Z, Max Tract X, Max Tract Z) coordinate
+
 
WORD×2     Tract size (X, Z)
+
==Appendix 1.1 - Record substructure 0xc7cc75f1==
DWORD       Count of properties
+
 
 +
<pre>
 +
BYTE×4         (Min Tract X, Min Tract Z, Max Tract X, Max Tract Z) coordinate
 +
WORD×2         Tract size (X, Z)
 +
DWORD           Count of properties
 
     SGPROP      SaveGame Properties, repeated Count times (e.g. Occupant Group property 0xAA1DD396)
 
     SGPROP      SaveGame Properties, repeated Count times (e.g. Occupant Group property 0xAA1DD396)
DWORD×3     (Group=0x096E6739, Type=0x6534284A, Instance)-ID of Exemplar
+
DWORD×3         (Group=0x096E6739, Type=0x6534284A, Instance)-ID of Exemplar
FLOAT32×3   (x, y, z)-coordinate A
+
FLOAT32×3       (x, y, z)-coordinate A
FLOAT32×3   (x, y, z)-coordinate B or (-1, -2, -3)
+
FLOAT32×3       (x, y, z)-coordinate B or (-1, -2, -3)
FLOAT32×3   Direction (a unit vector)
+
FLOAT32×3       Direction (a unit vector)
FLOAT32     Unknown scalar (approximately satisfies: coordinate A + direction * scalar / 2 = coordinate C)
+
FLOAT32         Unknown scalar (approximately satisfies: coordinate A + direction * scalar / 2 = coordinate C)
FLOAT32     Speed in km/s (in range 80..110 km/h defined in Automata Controller)
+
FLOAT32         Speed in km/s (in range 80..110 km/h defined in Automata Controller)
DWORD       Unknown bitset
+
DWORD           Unknown bitset
DWORD       Unknown (always 0)
+
DWORD           Unknown (always 0)
DWORD       Address
+
DWORD           Address
 
     DWORD      Subfile (Automata Attractor subfile) when Address is not 0
 
     DWORD      Subfile (Automata Attractor subfile) when Address is not 0
FLOAT32×5   Unknown (the last three are 0.0 if the attractor is absent, so might be related parameters)
+
FLOAT32×5       Unknown (the last three are 0.0 if the attractor is absent, so might be related parameters)
DWORD       Address
+
DWORD           Address
 
     DWORD      Subfile (e.g. Trailer Vehicle, Ambulance, Bus, Patrol Car) when Address is not 0
 
     DWORD      Subfile (e.g. Trailer Vehicle, Ambulance, Bus, Patrol Car) when Address is not 0
DWORD       Count of blocks to follow
+
DWORD           Count of blocks to follow
 
     DWORD      Unknown (seen 0, 7, 13)
 
     DWORD      Unknown (seen 0, 7, 13)
 
     WORD        Unknown (always 0x03)
 
     WORD        Unknown (always 0x03)
 
     DWORD      Address
 
     DWORD      Address
         DWORD       Subfile (Automata Generator or Attractor subfile) when Address is not 0
+
         DWORD   Subfile (Automata Generator or Attractor subfile) when Address is not 0
 
     DWORD      Index of block starting at 0, 1,...
 
     DWORD      Index of block starting at 0, 1,...
 
     FLOAT32    Unknown (-1.0 or large numerical values)
 
     FLOAT32    Unknown (-1.0 or large numerical values)
Line 40: Line 44:
 
     BYTES×5    Unknown (always 0)
 
     BYTES×5    Unknown (always 0)
 
     DWORD      Unknown bitset
 
     DWORD      Unknown bitset
DWORD       Count of auxiliary models
+
DWORD           Count of auxiliary models
 
     DWORD×3    TGI of auxiliary S3D-model (e.g. head lights, rear lights)
 
     DWORD×3    TGI of auxiliary S3D-model (e.g. head lights, rear lights)
DWORD×3     TGI of S3D-model
+
DWORD×3         TGI of S3D-model
DWORD       Instance ID
+
DWORD           Instance ID
DWORD       Count of manager addresses
+
DWORD           Count of manager addresses
 
     DWORD      Address
 
     DWORD      Address
 
     DWORD      Subfile (e.g. City Situation Manager or Automata Controller Manager)
 
     DWORD      Subfile (e.g. City Situation Manager or Automata Controller Manager)
Line 53: Line 57:
 
DWORD          Occupant Group
 
DWORD          Occupant Group
 
DWORD          Address
 
DWORD          Address
     DWORD           Subfile (e.g. Trailer Vehicle, Ambulance, Bus, Patrol Car) when Address is not 0
+
     DWORD       Subfile (e.g. Trailer Vehicle, Ambulance, Bus, Patrol Car) when Address is not 0
DWORD          Unknown (seen 1, 3, 7)
+
DWORD          Travel type (See Appendix 1.2)
 
BYTE            Unknown (in range 0...47 -- maybe vehicle lifespan?)
 
BYTE            Unknown (in range 0...47 -- maybe vehicle lifespan?)
 
DWORD          Address of network tile
 
DWORD          Address of network tile
     DWORD           Subfile (e.g. Network Subfile 1, Prebuilt Network Subfile, Bridge Subfile) when Address is not 0
+
     DWORD       Subfile (e.g. Network Subfile 1, Prebuilt Network Subfile, Bridge Subfile) when Address is not 0
 
BYTE            Exit side of path (0,1,2,3 = W,N,E,S)
 
BYTE            Exit side of path (0,1,2,3 = W,N,E,S)
 
BYTE            Entry side of path (0,1,2,3 = W,N,E,S)
 
BYTE            Entry side of path (0,1,2,3 = W,N,E,S)
 
BYTE            Path class number
 
BYTE            Path class number
BYTE            Unknown (presumably Path Transport Type, i.e. 0x01 for vehicles)
+
BYTE            Path transport type (See Appendix 1.3)
DWORD          Unknown (seen 0...40 -- smaller values are much more frequent)
+
DWORD          Index number of the Path Coordinate Point the vehicle is headed to next
DWORD          Count of blocks to follow
+
DWORD          Count of tiles (presumably tiles to stop at -- seen nonzero for Occupant Group Moving Van)
     BYTE×3          Unknown (seen for Occupant Group Moving Van)
+
    BYTE        Tile number X
DWORD×2        Unknown (always 0)
+
    BYTE        Tile number Y
 +
    BYTE        Unknown (seen only 0x01)
 +
DWORD          Count of tiles (consecutive from furthest to closest -- seen nonzero for trains)
 +
    BYTE        Exit side of path (0,1,2,3 = W,N,E,S)
 +
     BYTE        Entry side of path (0,1,2,3 = W,N,E,S)
 +
    BYTE        Path class number
 +
    BYTE        Path Transport Type (See Appendix 1.3)
 +
    DWORD      Tile number X
 +
    DWORD      Tile number Y
 +
DWORD          Unknown (always 0)
 
FLOAT32×3      (x, y, z)-coordinate C or (-1, -2, -3)
 
FLOAT32×3      (x, y, z)-coordinate C or (-1, -2, -3)
 
FLOAT32×3      (-1, -2, -3)
 
FLOAT32×3      (-1, -2, -3)
Line 72: Line 85:
  
 
For the format of the properties, see [[Network Subfiles#Appendix 2.1 - Structure of SGPROP (SaveGame Properties)|SaveGame Properties]].
 
For the format of the properties, see [[Network Subfiles#Appendix 2.1 - Structure of SGPROP (SaveGame Properties)|SaveGame Properties]].
 +
 +
==Appendix 1.2 - Travel Types==
 +
<pre>
 +
0 - None
 +
1 - Commute
 +
2 - Bus
 +
3 - Freight Truck
 +
4 - Commute Train
 +
5 - Freight Train
 +
6 - Subway
 +
7 - Occupant Trip
 +
8 - Crime
 +
9 - El Train
 +
10 - Monorail
 +
</pre>
 +
 +
==Appendix 1.3 - Path Transport Types==
 +
See [[SC4Path Format#Transport Type Values|Transport Type Values]].
 +
 +
==Appendix 1.4 - Appearance Flags==
 +
<pre>
 +
0x01000000 - Unknown
 +
0x04000000 - Unknown
 +
0x10000000 - Unknown
 +
</pre>
 +
(Seen 0x10000000, 0x11000000, 0x14000000, 0x15000000 for automata in game.)
 +
 +
=Mass Transit Train Subfile (0x4c22ae53)=
 +
This file contains automata for Elevated Rail and Monorail.
 +
==Structure==
 +
List of records of the form:
 +
<pre>
 +
DWORD          Record Size
 +
DWORD          CRC
 +
DWORD          Memory address
 +
WORD×7          Version (always 1, 2, 2, 2, 2, 8, 4)
 +
DWORD          Appearance flags (See Appendix 1.4)
 +
DWORD          Record type identifier (always 0xc7cc75f1)
 +
ARBIT          Record substructure (See Appendix 1.1)
 +
DWORD          Count of train cars
 +
    DWORD      Address
 +
    DWORD      Subfile (e.g. Train Car subfile)
 +
DWORD          Unknown (seen 3...8)
 +
FLOAT32        (x, y, z)-coordinate (can be far away from other coordinates)
 +
DWORD          Address of 2nd network tile
 +
    DWORD      Subfile (e.g. Prebuilt Network subfile) when Address is not 0
 +
BYTE            Exit side of path (0,1,2,3 = W,N,E,S)
 +
BYTE            Entry side of path (0,1,2,3 = W,N,E,S)
 +
BYTE            Path class number
 +
BYTE            Path transport type (See Appendix 1.3)
 +
</pre>
  
 
{{Navbox/SUBFILE}}
 
{{Navbox/SUBFILE}}
 
[[Category:Savegame/Subfiles]]
 
[[Category:Savegame/Subfiles]]

Latest revision as of 01:14, 19 February 2023

This page pertains to the format of the Automata Subfiles within the Savegame files.

Vehicle Automata Subfile (0x896e714a)

Structure

List of records of the form:

DWORD           Record Size
DWORD           CRC
DWORD           Memory address
WORD×4          Version (always 2, 2, 8, 4)
DWORD           Appearance flags (See Appendix 1.4)
DWORD           Record type identifier (always 0xc7cc75f1)
ARBIT           Record substructure (See Appendix 1.1)

Appendix 1.1 - Record substructure 0xc7cc75f1

BYTE×4          (Min Tract X, Min Tract Z, Max Tract X, Max Tract Z) coordinate
WORD×2          Tract size (X, Z)
DWORD           Count of properties
    SGPROP      SaveGame Properties, repeated Count times (e.g. Occupant Group property 0xAA1DD396)
DWORD×3         (Group=0x096E6739, Type=0x6534284A, Instance)-ID of Exemplar
FLOAT32×3       (x, y, z)-coordinate A
FLOAT32×3       (x, y, z)-coordinate B or (-1, -2, -3)
FLOAT32×3       Direction (a unit vector)
FLOAT32         Unknown scalar (approximately satisfies: coordinate A + direction * scalar / 2 = coordinate C)
FLOAT32         Speed in km/s (in range 80..110 km/h defined in Automata Controller)
DWORD           Unknown bitset
DWORD           Unknown (always 0)
DWORD           Address
    DWORD       Subfile (Automata Attractor subfile) when Address is not 0
FLOAT32×5       Unknown (the last three are 0.0 if the attractor is absent, so might be related parameters)
DWORD           Address
    DWORD       Subfile (e.g. Trailer Vehicle, Ambulance, Bus, Patrol Car) when Address is not 0
DWORD           Count of blocks to follow
    DWORD       Unknown (seen 0, 7, 13)
    WORD        Unknown (always 0x03)
    DWORD       Address
        DWORD   Subfile (Automata Generator or Attractor subfile) when Address is not 0
    DWORD       Index of block starting at 0, 1,...
    FLOAT32     Unknown (-1.0 or large numerical values)
    DWORD       Unknown (0 or 1)
    BYTES×5     Unknown (always 0)
    DWORD       Unknown bitset
DWORD           Count of auxiliary models
    DWORD×3     TGI of auxiliary S3D-model (e.g. head lights, rear lights)
DWORD×3         TGI of S3D-model
DWORD           Instance ID
DWORD           Count of manager addresses
    DWORD       Address
    DWORD       Subfile (e.g. City Situation Manager or Automata Controller Manager)
FLOAT32         Speed in km/s (can differ from other speeds)
FLOAT32         Speed in km/s (can differ from other speeds)
FLOAT32×6       Unknown (often 0 or 1, but numerical values are possible)
BYTE            Unknown (seen 0, 25, 50, 254)
DWORD           Occupant Group
DWORD           Address
    DWORD       Subfile (e.g. Trailer Vehicle, Ambulance, Bus, Patrol Car) when Address is not 0
DWORD           Travel type (See Appendix 1.2)
BYTE            Unknown (in range 0...47 -- maybe vehicle lifespan?)
DWORD           Address of network tile
    DWORD       Subfile (e.g. Network Subfile 1, Prebuilt Network Subfile, Bridge Subfile) when Address is not 0
BYTE            Exit side of path (0,1,2,3 = W,N,E,S)
BYTE            Entry side of path (0,1,2,3 = W,N,E,S)
BYTE            Path class number
BYTE            Path transport type (See Appendix 1.3)
DWORD           Index number of the Path Coordinate Point the vehicle is headed to next
DWORD           Count of tiles (presumably tiles to stop at -- seen nonzero for Occupant Group Moving Van)
    BYTE        Tile number X
    BYTE        Tile number Y
    BYTE        Unknown (seen only 0x01)
DWORD           Count of tiles (consecutive from furthest to closest -- seen nonzero for trains)
    BYTE        Exit side of path (0,1,2,3 = W,N,E,S)
    BYTE        Entry side of path (0,1,2,3 = W,N,E,S)
    BYTE        Path class number
    BYTE        Path Transport Type (See Appendix 1.3)
    DWORD       Tile number X
    DWORD       Tile number Y
DWORD           Unknown (always 0)
FLOAT32×3       (x, y, z)-coordinate C or (-1, -2, -3)
FLOAT32×3       (-1, -2, -3)
FLOAT32         Unknown (often 0.0)

For the format of the properties, see SaveGame Properties.

Appendix 1.2 - Travel Types

0 - None
1 - Commute
2 - Bus
3 - Freight Truck
4 - Commute Train
5 - Freight Train
6 - Subway
7 - Occupant Trip
8 - Crime
9 - El Train
10 - Monorail

Appendix 1.3 - Path Transport Types

See Transport Type Values.

Appendix 1.4 - Appearance Flags

0x01000000 - Unknown
0x04000000 - Unknown
0x10000000 - Unknown

(Seen 0x10000000, 0x11000000, 0x14000000, 0x15000000 for automata in game.)

Mass Transit Train Subfile (0x4c22ae53)

This file contains automata for Elevated Rail and Monorail.

Structure

List of records of the form:

DWORD           Record Size
DWORD           CRC
DWORD           Memory address
WORD×7          Version (always 1, 2, 2, 2, 2, 8, 4)
DWORD           Appearance flags (See Appendix 1.4)
DWORD           Record type identifier (always 0xc7cc75f1)
ARBIT           Record substructure (See Appendix 1.1)
DWORD           Count of train cars
    DWORD       Address
    DWORD       Subfile (e.g. Train Car subfile)
DWORD           Unknown (seen 3...8)
FLOAT32         (x, y, z)-coordinate (can be far away from other coordinates)
DWORD           Address of 2nd network tile
    DWORD       Subfile (e.g. Prebuilt Network subfile) when Address is not 0
BYTE            Exit side of path (0,1,2,3 = W,N,E,S)
BYTE            Entry side of path (0,1,2,3 = W,N,E,S)
BYTE            Path class number
BYTE            Path transport type (See Appendix 1.3)