Difference between revisions of "Replay file"

From Worms Knowledge Base

Jump to: navigation, search
(User Input)
(User Input)
Line 39: Line 39:
  
 
==== Generalities ====
 
==== Generalities ====
After the padding mentioned above, the game starts with a ''Frame 0 checksum''. Versions 3.7.0.0 and newer seem to create additional ''Unknown player data'' shortly after this checksum. In some of the versions before 3.6.30.0, a control spacer was used, so, before advancing into the next turn, the game engine would wait until all pending actions were stabilized (Mines triggered, flames falling, animals running, ...). Each turn is divided in frames, at a rate of 50 frames per second. Those frames are seperated by a 02 byte. A frame can be empty, or contain the '''actions''' taken at that very moment. Each 25 frames, the word 0C 1E is inserted. Its purpose is yet unknown, and it is sometimes followed by a byte ranging from 03 to 07, for unknown reasons too. Each time a weapon is used, a checksum gets inserted into the following frame.
+
After the padding mentioned above, the game starts with a ''Frame 0 checksum''. Versions 3.7.0.0 and newer seem to create additional ''Unknown player data'' shortly after this checksum. Versions 3.6.19.15-3.6.29.0 didn't record the passage of time between turns (see [[Readme]]): a control spacer was used, so, before advancing into the next turn, the game engine would wait until all pending actions were stabilized (Mines triggered, flames falling, animals running, ...). Each turn is divided in frames, at a rate of 50 frames per second. Those frames are seperated by a 02 byte. A frame can be empty, or contain the '''actions''' taken at that very moment. Each 25 frames, the word 0C 1E is inserted. Its purpose is yet unknown, and it is sometimes followed by a byte ranging from 03 to 07, for unknown reasons too. Each time a weapon is used, a checksum gets inserted into the following frame.
  
 
==== Actions ====
 
==== Actions ====
Line 52: Line 52:
 
| 00
 
| 00
 
|  
 
|  
| '''Control spacer'''. Only valid in some versions before 3.6.30.0, to wait until the next turn.
+
| '''Control spacer'''. Only valid in 3.6.19.15-3.6.29.0, to wait until the next turn.
 
|
 
|
 
|-
 
|-

Revision as of 10:22, 28 February 2014

(Up to File formats)

Replay (.WAgame) files were introduced to Worms Armageddon with Deadcode's 3.6.19.7 beta update, which was released on 9 February, 2004. The files represent self-contained recordings of games, which can be played on any computer with the corresponding software updates installed.

Recordings of all games played (including offline, mission and training games) are saved automatically to the User\Games folder. File names consist of a date/time stamp, the game type, and the participating players.

The files contain all the information needed to play the replay flawlessly. This includes the game version which was emulated during the game, the map and the scheme, the participating teams (including the custom flags and graves), and the random seed used for random in-game events (such as random initial placement of worms and objects).

File format

A typical replay file consists of a 4-byte header, a map chunk, a settings chunk, and the message (user input) stream.

The file header consists of two signature bytes ("WA"), after which follows a word with the file version. W:A 3.6.26.5 saves replays in the version 12 format (0x000C).

After the header is the map chunk. The map chunk represents a DWORD which represents the chunk's contents' length (chunk length-4, or map length+4), followed by the chunk data. The first DWORD of the chunk's data specifies the map type - it can be 1 for Monochrome map (.bit), 2 for Seed-generated monochrome map, or 3 for Colour map. The map data follows, its length being the chunk's length - 4.

Following the map data is the settings (initialization) chunk. Its structure:

  • 3 usually null bytes
  • the replay file version (see header), a 2nd time (WORD)
  • the replay date/time in time_t format
  • a null byte
  • game engine version to emulate (0x30 represents 3.6.26.5; 0x4C represents 3.6.28) (DWORD)
  • game type (normal=1, mission=2, training=3) (byte)
  • scheme type (usually 0xFF, positive value for intrinsic schemes) (byte)
  • the scheme - see Game scheme file (length is determined by the scheme file format version)
  • initial logic (random) seed (DWORD)
  • blood amount (byte)
  • rope knocking (byte)
  • the game ID (Pascal string)
  • local machine ID (byte)

This is followed by the data about connected machines, and teams.

User Input

Generalities

After the padding mentioned above, the game starts with a Frame 0 checksum. Versions 3.7.0.0 and newer seem to create additional Unknown player data shortly after this checksum. Versions 3.6.19.15-3.6.29.0 didn't record the passage of time between turns (see Readme): a control spacer was used, so, before advancing into the next turn, the game engine would wait until all pending actions were stabilized (Mines triggered, flames falling, animals running, ...). Each turn is divided in frames, at a rate of 50 frames per second. Those frames are seperated by a 02 byte. A frame can be empty, or contain the actions taken at that very moment. Each 25 frames, the word 0C 1E is inserted. Its purpose is yet unknown, and it is sometimes followed by a byte ranging from 03 to 07, for unknown reasons too. Each time a weapon is used, a checksum gets inserted into the following frame.

Actions

Actions are usually constituted by 2 Bytes, the first one coding for the action, and the second one coding for the active team (01-06). However, it is not possible to change the "Active team" byte to move another worm while it's not his turn. For example, the action 1E corresponds to the left arrow ; the action 21 to the down arrow. If the active worm is in the third team, the frame will look like "02 1E 03 21 03" (New frame, pressing left and pressing down). Some actions are more complex, and require therefore additional arguments. Those are typically inserted before or after the "Active team" byte. Here is a list of actions codes, along with their arguments when applicable.

Code Arguments Action Example
00 Control spacer. Only valid in 3.6.19.15-3.6.29.0, to wait until the next turn.
02 Frame end. 02
06 pp Round Finish acknowledgement. pp is the player number minus one. Usually happens in the end of the game. 02 06 01 : Round Finish was acknowledged by Player 2
08 xx xx xx xx zz zz zz zz Checksum. xx is the current frame number and zz is the checksum. 02 08 xx xx xx xx zz zz zz zz
09 zz zz zz zz Frame 0 checksum. 00 09 xx xx xx xx
0C xx zz zz zz zz Unknown. Seems to be ignored by the game. xx is usually 1E or 1F, and zz is a dword usually consisting of the 02 bytes, with the first one having a difference possibility. 02 0C 1E 02 02 02 02
0D xx zz Unknown. Seems to be ignored by the game. Takes two unknown arguments.
0F xx yy FF [...] 00 Discussion (in chatbox). [...] is the text string, xx and yy represent sender and receiver of the text. More details about this have still to be added. 00 0F 01 01 FF [...] 00
11 tt XX XX YY YY Cursor movement. tt is the team number; the XX and YY word values represent the position of the mouse cursor. 02 11 01 8B 06 01 FF : Team 1 has placed the mouse at X = 1675 (0x068B) and Y = -255 (0xFF01)
12 tt zz Orienting a girder. tt is the team number; zz represents the new orientation of the girder. (01-0F) 02 12 01 0B 01 : Team 1 oriented the girder to a long topright inclined girder.
13 tt zz Shifting strike aimer. tt is the team number; zz represents the new orientation of the Aimer. (01 to the right ; FF to the left) 02 13 01 01 : Team 1 oriented the strike aimer to the right (Pressing Left key).
16 xx User ended the game. xx is the reason (01 = User quit; 02 = User draw; anything else = User quit with Alt+F4) 02 16 00 : Player ended the game by using Alt+F4.
17 Cut the parachute of a falling crate. This is usually performed instantly.
1A tt Thought bubble : Equivalent to keypress T. tt is the team number. 02 1A 01 : Team 2 displayed a Thought Bubble over controlled worm.
1B xx Unknown. Seems to be ignored by the game. Takes 1 unknown argument.
1E tt Left arrow (In all its in-game usages). tt is the team number. 02 1E 02 21 02 : Team 2 had Down-Left pressed in that frame.
1F tt Right arrow. tt is the team number.
20 tt Up arrow (In all its in-game usages). tt is the team number.
21 tt Down arrow. tt is the team number.
24 tt Releasing (unmounting) of the ninja rope; Forward Jump ; Backward jump if used twice (Not in the same frame). tt is the team number. 02 24 04 02 02 02 02 24 04 02 02 : Team 4 pressed Enter twice, with a 3 frames interval, to backjump
25 tt Up jump, Backflip if used twice (Not in the same frame). tt is the team number. 02 25 04 02 02 02 02 24 04 02 02 : Team 4 pressed Backspace-Enter, with a 3 frames interval, to backjump
26 tt Usage (launching) of a weapon, from the ground or from any utility (rope, parachute, ...) allowing weapon drops. It can appear several times for weapons having multiple shots (shotgun, rope, ...), but not in the same frame. It triggers a checksum except in the case of a ninja rope being re-fired from the air. tt is the team number. 02 26 01 02 08 tt yy 00 00 zz zz zz zz 02 20 01 02 20 01 02 20 01 02 20 01 02 20 01 02 24 01 02 26 01 : Team 1 fires the ninja rope, causing a checksum, then shortens it during 5 frames, then releases it and fires it again. The second firing won't generate any checksum.
27 tt Releasing of a power-managed weapon (bazooka, grenade). 02 26 02 02 02 02 02 02 02 02 27 02 : Team 2 presses space to fire a bazooka, and releases space 7 frames later. tt is the team number. (Note the possible confusion between frame separator 02 and "Active team" 02.)
2B tt Team forced out due to a possible message injection. tt is the number of the team; a value out of range like 0 will apparently just produce a "coward" sound without doing anything. 02 2B 01 : Team 1 got forced out due to a possible message injection
2C tt Using self-managed weapon (sheep, skunk, ...) after having launched it. tt is the team number. 02 2C 01 02 02 02 2C 01 : Team 1 has its skunk start to fart, then makes it explode 3 frames later.
2D tt Fly sheep to the left. tt is the team number.
2E tt Fly sheep to the right. tt is the team number. 02 2E 01 02 2E 01 02 02 2D 01 02 2D 01 : Team 1 Turns the flying sheep to the right during 2 frames, waits one frame, then turns to the left during 2 frames
2F ww ff Setting Fuse (grenades and related weapons). ww represents team and worm (as detailed in action 32) and ff is the fuse (00-04). 02 33 21 06 01 02 2F 21 04 : First worm of the second team (21) selects a grenade (06) and sets its fuse to 5s (04)
30 ww hh Setting herd size (cows and related weapons). ww represents team and worm (as detailed in action 32) and hh is the size of the herd (01-06). 02 33 21 34 01 02 30 21 02 : First worm of the second team (21) selects a Mad Cow (34) and sets its Herd size to 2 cows (02)
31 ww bb Setting bounce height (grenades and related weapons). ww represents team and worm (as detailed in action 32) and bb is the Bounce height (00 for MIN and 01 for MAX bounce). 02 33 21 06 01 02 2F 21 00 02 31 21 01 : First worm of the second team (21) selects a Grenade (06), sets its fuse to 1s (00), and it's bounce height to MAX (01)
32 ww 01 zz xx xx xx xx 26 nn Mouse click: ww represents team number and worm number, zz represents the action involved by the click, xx are the coordinates, and nn the "Active team" number (Note the 26 nn of weapon usage). 02 32 23 01 01 xx xx xx xx 26 02 : Team 2 (nn = 02) places (zz=01 : initial placement) the 3rd worm of the 2nd team (ww = 23) at the position xx xx xx xx. This generates a Checksum (due to the 26 nn being there too)
33 ww zz 01 Weapon selection. ww represents team number and worm number (the same way ww from action 32 does) and zz is the weapon code 02 33 14 0B 01 : Active team (Note: The syntax doesn't mention team number) selects a Shotgun (zz=0B) for the 4th worm of team 1
3A Sudden Death. It is actually triggered before the start of the next team's turn.
43 xx Unknown. Seems to be ignored by the game. Takes 1 unknown argument.
62 tt Pressing Shift. tt is the team number.
6B xx zz zz zz zz Unknown. Seems to be ignored by the game. Probably similar to the 0C.
6C Spurious Extra Frame (will probably cause a desynchronisation). Inserts an extra frame; also looks like it doesn't need to be terminated with 02.
6D pp zz Player disconnection. pp is the player's number minus one, zz is the reason from 01 to 05. 02 6D 00 01 : Player 1 is disconnecting due to a network drop
70-73 pp yy zz [...] Unknown player data. pp is probably the player's number minus one, yy is the size of the data (in [...]), and zz is apparently always 06. If the size exceeds FF, then the second digit of 70 may contain the high-order digit (e.g. 71), however it's uncertain how it behaves beyond 73 since 74 is occupied.
74 pp zz zz zz A Skipped Packet possibility. pp is the player's number minus one, and zz is the index jump value (apparently a 24-bit integer, which is awesome).

Tables

Related to action 0F : Game chat. xx and yy represent sender and receiver (Not sure about that anymore)

xx yy Result
00 00 Player 1 talking
01 01 Player 2 talking
Lex, Help Me !

Related to action 32 : Mouse click. zz determines the action for which the click is for.

zz Purpose
01 Initial worm placement , Strike aiming
0B Girder placement

Related to action 33 : Weapon selection. zz determines weapon selected. Those weapons indices are in the same order than visible in right-click menu, starting from Bazooka and with utilities being sent at the end. Note that Super sheep and aqua sheep are 2 different weapons (F5 line has 6 columns, even if only 5 of them are visible)

zz Weapon
01 Bazooka
02 Homing missile
03 Mortar
04 Homing pigeon
05 Sheep launcher
06 Grenade
07 Cluster bomb
08 Banana bomb
09 Battle axe
0A Earthquake
0B Shotgun
0C Handgun
0D Uzi
0E Minigun
0F Long bow
10 Fire punch
11 Dragon punch
12 Kamikaze
13 Suicide bomber
14 Prod
15 Dynamite
16 Mine
17 Sheep
18 Super sheep
19 Aqua sheep
1A Allmighty Mole
1B Air strike
1C Napalm strike
1D Mail strike
1E Mine strike
1F Allmighty Mole strike
20 Blowtorch
21 Drill
22 Girder
23 Baseball bat
24 Girder kit
25 Ninja rope
26 Bungee
27 Parachute
28 Teleport
29 Scale of justice
2A Super banana bomb
2B Holy hand grenade
2C Flamethrower
2D Salvation army
2E Martin Brown Bomb
2F Petrol bomb
30 Skunk
31 Ming vase
32 Sheep strike
33 Mike's carpet bomb
34 Mad cow
35 Old lady
36 Concrete donkey
37 Indian nuclear test
38 Armageddon
39 Skip go
3A Surrender
3B Worm select
3C Freeze
3D Patsy's magic bullet
3E Jetpack
3F Low gravity
40 Fast walk
41 Laser sight
42 Invisibility

Security

The format incorporates periodic checksums, embedded into specific actions. This allows to detect modifications to the replay, causing warning messages during playback.

The tool-assisted versions of W:A save replays in an encrypted format, which is playable only with the tool-assisted version. Only Deadcode can decrypt them, thus making them playable with normal versions of W:A.

Export Log

A log file can be extracted from a replay file to give a text representation of what happens in the replay. The log file includes:

  • The date and time that the game was played, GMT
  • The game version with which the game was played
  • Mission number and name, if applicable
  • A list of the players involved, the colours they played as, the names of the teams they used, and any CPU teams involved (and their skill levels)
  • A chronologically-ordered list of things that happened in the game, including:
    • Comments made by players in the chat window
    • Turn starts
    • Weapon shots (with some details e.g. herd number; fuse time; bounce; jetpack fuel used etc.)
    • Health deductions (not including poison)
    • Turn endings (including time used and retreat time used)
    • End of game
  • Total time used by each team, split into turn time and retreat time
  • Mission result, if applicable
  • Round number
  • Round time
  • Total game time
  • Total worms killed
  • Total health lost
  • Name of the team which won the game
  • Name of the "worm of the round"
  • Name of the worm that dealt the most damage with one shot
  • Match awards

Extracting maps

The Extract Map command will extract the map in the appropriate file format (.png for colour maps, and .bit/.lev for monochrome maps and auto-generated terrain maps). If you need to extract a colour map in a common format for any map type, you can use the Export Log command (WA.exe /getlog Replay.WAgame), and extract the map pixels from the Land Data file.

Personal tools