Difference between revisions of "Replays (GTA SA)"

From GTAMods Wiki
Jump to navigation Jump to search
m (Block 8: End scene)
 
(16 intermediate revisions by 4 users not shown)
Line 1: Line 1:
==Introduction==
+
{{Research}}
GTA SA replays are the sequence of the scenes and actions recorded and stored in the <code>replay.rep</code> file. This file is located in the GTA San Andreas User Files directory.
+
{{TocRight}}
 +
 
 +
'''Replays''' are the sequence of the scenes and actions recorded and stored in the <code>replay.rep</code> file. This file is located in the [[GTA San Andreas]] User Files directory.
  
 
==Format Details==
 
==Format Details==
Each .rep file consists of header and variable amount of 'scenes' (or 'frames'). Scene is a copy of important game information at given moment of time (actors, vehicles positions, weather, clothes, etc). Following one after another, the scenes create an illusion of a movie when played.
+
Each .rep file consists of a header string and variable amount of 'scenes' (or 'frames'). A scene is a copy of important game information at given moment of time (actors, vehicles positions, weather, clothes, etc). Following one after another, the scenes create an illusion of a movie when played. The most of scenes contains a same set of blocks and ends with [[#Block 8: End of scene| Block 8]].
  
The .rep file itself consist of up to 8 parts, size of each one is 100,000 bytes, depending on the replay length. The maximum size of a replay file is 800,000 bytes. If the replay length is that it does not match 100,000 bytes boundary being less, the rest of the block is filled with useless data (commonly the previous replay data).
+
The .rep file itself consist of a header string which is simply the text '''GtaSA29''' and up to 8 parts, size of each one is 100,000 bytes, depending on the replay length. So, the maximum size of a replay file is 800,008 bytes (including 8 bytes of the header string). If the replay length is that it does not match 100,000 bytes boundary being less, the rest of the file is filled with useless data (commonly the previous replay data).
  
 
===Data Blocks===
 
===Data Blocks===
  
Each block consists of a byte denoting its type and some data as described below.
+
Each block consists of a byte denoting its type and some data as described below. A number in a block name is the data type stored in the first byte of the block. Reading this byte, the game detects what block follows.
  
 
====Block 0: End of file====
 
====Block 0: End of file====
This block denotes the end of replay data. It consists only of a data type byte (0x00).
+
This block denotes the end of replay data. It consists only of a data type. After this block the game stops reading the replay file.
  
 
  OFFSET  TYPE      DESCRIPTION
 
  OFFSET  TYPE      DESCRIPTION
  0x00    byte      type
+
  0x00    byte      data type (0x00)
  0x01             (end)
+
  0x01   (end)
  
====Block 1: Vehicle1====
+
====Block 1: Vehicle====
 
size 52 bytes
 
size 52 bytes
  
====Block 2: Vehicle2====
+
====Block 2: Bike====
size 56 bytes
+
Special bike information, first 52 bytes are from [[Replays_(GTA_SA)#Block_1: Vehicle|vehicle block]].
  
====Block 3: Player data====
+
OFFSET  TYPE      DESCRIPTION
size 8 bytes
+
0x00    BLOCK    [[Replays_(GTA_SA)#Block_1: Vehicle|vehicle]] (type= 0x2)
 +
0x34    byte      animLean
 +
0x35    byte      steerAngle
 +
0x36    byte[2]  (align)
 +
0x38    (end)
  
====Block 4: Ped====
+
====Block 3: Ped Header====
 +
Common information about a ped to be created. If the said ped is the player, a clothes block will
 +
follow after.
 +
 
 +
OFFSET  TYPE      DESCRIPTION
 +
0x00    byte      data type (0x03)
 +
0x01    byte      index (handle?)
 +
0x02    WORD      modelID
 +
0x04    byte      [[ped type]]
 +
0x05    byte[3]  (align)
 +
0x08    (end)
 +
 
 +
====Block 4: Ped Update====
 +
Update information of a ped already existed.
 
size 52 bytes
 
size 52 bytes
  
 
====Block 5: Camera====
 
====Block 5: Camera====
size 88 bytes
+
This block contains information about game camera. Also called 'general'
 +
 
 +
OFFSET  TYPE      DESCRIPTION
 +
0x00    byte      data type (0x05)
 +
0x01    byte      isUsingRemoteVehicle
 +
0x02    byte[2]  (align)
 +
0x04    CMatrix  matrix
 +
0x4C    CVector  firstFocus
 +
0x58    (end)
  
 
====Block 6: Day time====
 
====Block 6: Day time====
size 4 bytes
+
This block contains information about current day time during a scene.
 +
 +
OFFSET  TYPE      DESCRIPTION
 +
0x00    byte      data type (0x06)
 +
0x01    byte      currentHour
 +
0x02    byte      currentMinute
 +
0x03    byte      (align)
 +
0x04    (end)
  
 
====Block 7: Weather====
 
====Block 7: Weather====
size 8 bytes
+
 
 +
OFFSET  TYPE      DESCRIPTION
 +
0x00    byte      data type (0x07)
 +
0x01    byte      oldWeather
 +
0x02    byte      newWeather
 +
0x03    byte      (align)
 +
0x04    float    interpValue
 +
0x08    (end)
  
 
====Block 8: End of scene====
 
====Block 8: End of scene====
size 4 bytes
+
This block denotes the end of the current scene (frame). It consists only of a data type.
 +
 
 +
OFFSET  TYPE      DESCRIPTION
 +
0x00    byte      data type (0x08)
 +
0x01    (end)
  
 
====Block 9: Scene timing====
 
====Block 9: Scene timing====
size 8 bytes
+
This block contains value of the global game timer. The replay play length could be found by using this  block.
 +
 
 +
OFFSET  TYPE      DESCRIPTION
 +
0x00    byte      data type (0x09)
 +
0x01    byte[3]  (align)
 +
0x04    DWORD    timer
 +
0x08              (end)
 +
 
 +
====Block 10: Bullet Traces====
 +
 
 +
OFFSET  TYPE      DESCRIPTION
 +
0x00    byte      type (0xA)
 +
0x01    byte[2]  (align)
 +
0x03    byte      index
 +
0x04    CVector  start
 +
0x10    CVector  end
 +
0x1C    (end)
  
====Block 10: Unknown====
+
====Block 11: Particles====
size 28 bytes
+
Unused, size 20 bytes.
  
====Block 11: Unknown====
+
====Block 12: Misc====
size 20 bytes
 
  
====Block 12: Unknown====
+
OFFSET  TYPE      DESCRIPTION
size 16 bytes
+
0x00    byte      type (0xC)
 +
0x01    byte[3]  (align)
 +
0x04    DWORD    camShakeStart
 +
0x08    float    camShakeForce
 +
0x0C    byte      currArea
 +
0x0D    byte      cameraFX (bit 1: video, bit 2: lift)
 +
0x0E    byte[2]  (align)
 +
0x10    (end)
  
====Block 13: Unknown====
+
====Block 13: Deleted Vehicle====
size 4 bytes; same as Block 8?
+
Used for reporting a vehicle needs to be removed from the world.
  
====Block 14: Unknown====
+
OFFSET  TYPE      DESCRIPTION
size 4 bytes; same as Block 8?
+
0x00    byte      type (0xD)
 +
0x01    byte      (align)
 +
0x02    WORD      handle
 +
0x04    (end)
  
====Block 15: Unknown vehicle====
+
====Block 14: Deleted Ped====
size 56 bytes; same as Block 2?
+
Used for reporting a ped needs to be removed from the ped.
  
====Block 16: Unknown vehicle====
+
OFFSET  TYPE      DESCRIPTION
size 56 bytes; same as Block 2?
+
0x00    byte      type (0xE)
 +
0x01    byte      (align)
 +
0x02    WORD      handle
 +
0x04    (end)
  
====Block 17: Unknown vehicle====
+
====Block 15: BMX====
size 60 bytes
+
Special BMX information, first 52 bytes are from [[Replays_(GTA_SA)#Block_1: Vehicle|vehicle block]]. Exactly the same with the [[Replays_(GTA_SA)#Block_2 Bike|bike block]].
  
====Block 18: Unknown====
+
OFFSET  TYPE      DESCRIPTION
size 76 bytes
+
0x00    BLOCK    [[Replays_(GTA_SA)#Block_1: Vehicle|vehicle]] (type= 0xF)
 +
0x34    byte      animLean
 +
0x35    byte      steerAngle
 +
0x36    byte[2]  (align)
 +
0x38    (end)
 +
 
 +
====Block 16: Heli====
 +
Special helicopter information, first 52 bytes are from [[Replays_(GTA_SA)#Block_1: Vehicle|vehicle block]]
 +
 
 +
OFFSET  TYPE      DESCRIPTION
 +
0x00    BLOCK    [[Replays_(GTA_SA)#Block_1: Vehicle|vehicle]] (type= 0x10)
 +
0x34    float    rotorSpeed
 +
0x38    (end)
 +
 
 +
 
 +
====Block 17: Plane====
 +
Special plane information, first 52 bytes are from [[Replays_(GTA_SA)#Block_1: Vehicle|vehicle block]]
 +
 
 +
OFFSET  TYPE      DESCRIPTION
 +
0x00    BLOCK    [[Replays_(GTA_SA)#Block_1: Vehicle|vehicle]] (type= 0x11)
 +
0x34    float    propSpeed
 +
0x38    float    field_0x9c8
 +
0x3C    (end)
 +
 
 +
====Block 18: Train====
 +
Special train information, first 52 bytes are from [[Replays_(GTA_SA)#Block_1: Vehicle|vehicle block]]
 +
 
 +
OFFSET  TYPE      DESCRIPTION
 +
0x00    BLOCK    [[Replays_(GTA_SA)#Block_1: Vehicle|vehicle]] (type= 0x12)
 +
0x34    float    speed
 +
0x38    float    currentRailDistance
 +
0x3C    float    length
 +
0x40    DWORD    prevCarriageHandle
 +
0x44    DWORD    nextCarriageHandle
 +
0x48    byte      trackId
 +
0x49    byte[3]  (align)
 +
0x4C    (end)
 +
  
 
====Block 19: Clothes====
 
====Block 19: Clothes====
size 120 bytes
+
This block contains information on the current clothes of the player. The block structure is identical to [[GTA_SA_Saves#Block_2:_Players_.26_Objects|the one in the Player structure]] in a save file.
 +
 
 +
OFFSET  TYPE      DESCRIPTION
 +
0x00    byte      type (0x13)
 +
0x01    byte[3]  (align)
 +
0x04    DWORD[10] modelCRCs
 +
0x2C    DWORD[18] textureCRCs
 +
0x74    WORD      Fat
 +
0x76    WORD      Muscle;
 +
0x78    (end)
  
 
==Tools==
 
==Tools==
There is a template for [http://en.wikipedia.org/wiki/010_Editor 010 Editor], made by [[User:Seemann|Seemann]]. It allows to edit different replay data in hex editor.
+
* http://sannybuilder.com/dev/Replay.rar - a template for [http://www.sweetscape.com/010editor/ 010 Editor], made by {{U|Seemann}}. It allows to edit different replay data.
http://sannybuilder.com/dev/Replay.rar
+
 
 +
{{SA-navi}}
  
[[Category:File_Formats]] [[Category:GTA SA]]
+
[[Category:File_Formats]]

Latest revision as of 22:42, 20 December 2022

Replays are the sequence of the scenes and actions recorded and stored in the replay.rep file. This file is located in the GTA San Andreas User Files directory.

Format Details

Each .rep file consists of a header string and variable amount of 'scenes' (or 'frames'). A scene is a copy of important game information at given moment of time (actors, vehicles positions, weather, clothes, etc). Following one after another, the scenes create an illusion of a movie when played. The most of scenes contains a same set of blocks and ends with Block 8.

The .rep file itself consist of a header string which is simply the text GtaSA29 and up to 8 parts, size of each one is 100,000 bytes, depending on the replay length. So, the maximum size of a replay file is 800,008 bytes (including 8 bytes of the header string). If the replay length is that it does not match 100,000 bytes boundary being less, the rest of the file is filled with useless data (commonly the previous replay data).

Data Blocks

Each block consists of a byte denoting its type and some data as described below. A number in a block name is the data type stored in the first byte of the block. Reading this byte, the game detects what block follows.

Block 0: End of file

This block denotes the end of replay data. It consists only of a data type. After this block the game stops reading the replay file.

OFFSET  TYPE      DESCRIPTION
0x00    byte      data type (0x00)
0x01    (end)

Block 1: Vehicle

size 52 bytes

Block 2: Bike

Special bike information, first 52 bytes are from vehicle block.

OFFSET  TYPE      DESCRIPTION
0x00    BLOCK     vehicle (type= 0x2)
0x34    byte      animLean
0x35    byte      steerAngle
0x36    byte[2]   (align)
0x38    (end)

Block 3: Ped Header

Common information about a ped to be created. If the said ped is the player, a clothes block will follow after.

OFFSET  TYPE      DESCRIPTION
0x00    byte      data type (0x03)
0x01    byte      index (handle?)
0x02    WORD      modelID
0x04    byte      ped type
0x05    byte[3]   (align)
0x08    (end)

Block 4: Ped Update

Update information of a ped already existed. size 52 bytes

Block 5: Camera

This block contains information about game camera. Also called 'general'

OFFSET  TYPE      DESCRIPTION
0x00    byte      data type (0x05)
0x01    byte      isUsingRemoteVehicle
0x02    byte[2]   (align)
0x04    CMatrix   matrix
0x4C    CVector   firstFocus
0x58    (end)

Block 6: Day time

This block contains information about current day time during a scene.

OFFSET  TYPE      DESCRIPTION
0x00    byte      data type (0x06)
0x01    byte      currentHour
0x02    byte      currentMinute
0x03    byte      (align)
0x04    (end)

Block 7: Weather

OFFSET  TYPE      DESCRIPTION
0x00    byte      data type (0x07)
0x01    byte      oldWeather
0x02    byte      newWeather
0x03    byte      (align)
0x04    float     interpValue
0x08    (end)

Block 8: End of scene

This block denotes the end of the current scene (frame). It consists only of a data type.

OFFSET  TYPE      DESCRIPTION
0x00    byte      data type (0x08)
0x01    (end)

Block 9: Scene timing

This block contains value of the global game timer. The replay play length could be found by using this block.

OFFSET  TYPE      DESCRIPTION
0x00    byte      data type (0x09)
0x01    byte[3]   (align)
0x04    DWORD     timer
0x08              (end)

Block 10: Bullet Traces

OFFSET  TYPE      DESCRIPTION
0x00    byte      type (0xA)
0x01    byte[2]   (align)
0x03    byte      index
0x04    CVector   start
0x10    CVector   end
0x1C    (end)

Block 11: Particles

Unused, size 20 bytes.

Block 12: Misc

OFFSET  TYPE      DESCRIPTION
0x00    byte      type (0xC)
0x01    byte[3]   (align)
0x04    DWORD     camShakeStart
0x08    float     camShakeForce
0x0C    byte      currArea
0x0D    byte      cameraFX (bit 1: video, bit 2: lift)
0x0E    byte[2]   (align)
0x10    (end)

Block 13: Deleted Vehicle

Used for reporting a vehicle needs to be removed from the world.

OFFSET  TYPE      DESCRIPTION
0x00    byte      type (0xD)
0x01    byte      (align)
0x02    WORD      handle
0x04    (end)

Block 14: Deleted Ped

Used for reporting a ped needs to be removed from the ped.

OFFSET  TYPE      DESCRIPTION
0x00    byte      type (0xE)
0x01    byte      (align)
0x02    WORD      handle
0x04    (end)

Block 15: BMX

Special BMX information, first 52 bytes are from vehicle block. Exactly the same with the bike block.

OFFSET  TYPE      DESCRIPTION
0x00    BLOCK     vehicle (type= 0xF)
0x34    byte      animLean
0x35    byte      steerAngle
0x36    byte[2]   (align)
0x38    (end)

Block 16: Heli

Special helicopter information, first 52 bytes are from vehicle block

OFFSET  TYPE      DESCRIPTION
0x00    BLOCK     vehicle (type= 0x10)
0x34    float     rotorSpeed
0x38    (end)


Block 17: Plane

Special plane information, first 52 bytes are from vehicle block

OFFSET  TYPE      DESCRIPTION
0x00    BLOCK     vehicle (type= 0x11)
0x34    float     propSpeed
0x38    float     field_0x9c8
0x3C    (end)

Block 18: Train

Special train information, first 52 bytes are from vehicle block

OFFSET  TYPE      DESCRIPTION
0x00    BLOCK     vehicle (type= 0x12)
0x34    float     speed
0x38    float     currentRailDistance
0x3C    float     length
0x40    DWORD     prevCarriageHandle
0x44    DWORD     nextCarriageHandle
0x48    byte      trackId
0x49    byte[3]   (align)
0x4C    (end)

Block 19: Clothes

This block contains information on the current clothes of the player. The block structure is identical to the one in the Player structure in a save file.

OFFSET  TYPE      DESCRIPTION
0x00    byte      type (0x13)
0x01    byte[3]   (align)
0x04    DWORD[10] modelCRCs
0x2C    DWORD[18] textureCRCs
0x74    WORD      Fat
0x76    WORD      Muscle;
0x78    (end)

Tools