FCEUX Movie File format
designed by: Zeromus
FCEUX uses a new movie file format - .fm2.
This differs from the previous FCE Ultra movie format (.fcm) in the following ways:
Format
FM2 is ASCII plain text. It consists of several key-value pairs followed by an input log section.
The input log section can be identified by its starting with a | (pipe).
The input log section terminates at EOF.
Newlines may be \r\n or \n
Key-value pairs consist of a key identifier, followed by a space separator, followed by the value text.
Value text is always terminated by a newline, which the value text will not include.
The value text is parsed differently depending on the type of the key.
The key-value pairs may be in any order, except that the first key must be version.
Integer keys (also used for booleans, with a 1 or 0) will have a value that is a simple integer not to exceed 32bits
- version (required) - the version of the movie file format; for now it is always 3
- emuVersion (required) - the version of the emulator used to produce the movie
- rerecordCount (optional) - the rerecord count
- palFlag (bool) (optional) - true if the movie uses pal timing
- NewPPU (bool) (optional) - true if the movie uses New PPU
- fourscore (bool) (*note C) - true if a fourscore was used
- FDS (bool) (optional) - true if movie was recorded on a Famicom Disk System (FDS) game
- port0, port1 (*note C) - indicates the types of input devices. Supported values are:
SI_GAMEPAD = 1,
SI_ZAPPER = 2
- port2 (required) - indicates the type of the FCExp port device which was attached. Supported values are:
SIFC_NONE = 0
Header
String keys have values that consist of the remainder of the key-value pair line. As a consequence, string values cannot contain newlines.
- romFilename (required) - the name of the file used to record the movie
- comment (optional) - simply a memo.
Example:
- subtitle (optional) - a message that will be displayed on screen when movie is played back (unless Subtitles are turned off, see Movie options).
Example:
At frame 1000 the words "Level Two" will be displayed on the screen
- guid (required) a unique identifier for a movie, generated when the movie is created, which is used when loading a savestate to make sure it belongs to the current movie.
GUID keys have a value which is in the standard guide format: 452DE2C3-EF43-2FA9-77AC-0677FC51543B
- romChecksum (required) - the MD5 hash of the ROM which was used to record the movie
- savestate (optional) - a fcs savestate blob, in case a movie was recorded from savestate
Hex string keys (used for binary blobs) will have a value that is like 0x0123456789ABCDEF...
Input log
The input log section consists of lines beginning and ending with a | (pipe).
The fields are as follows, except as noted in note C.
|c|port0|port1|port2|
Field c is a variable length decimal integer which is a bit field corresponding to miscellaneous input states which are valid at the start of the frame. Current values for this are:
The format of port0, port1, port2 depends on which types of devices were attached.
SI_GAMEPAD:
SI_ZAPPER:
XXX: %03d, the x position of the mouse
YYY: %03d, the y position of the mouse
B: %1d, 1 if the mouse button is pressed; 0 if not
Q: %1d, an internal value used by the emulator's zapper code (this is most unfortunate..)
Z: %d, a variable-length decimal integer; an internal value used by the emulator's zapper code (this is even more unfortunate..)
SIFC_NONE:
Notes:
A. There is no key-value pair that indicates the length of the movie. This must be read by scanning the input log and counting the number of lines.
B. All movies start from power-on, unless a savestate key-value is present.
If a fourscore is used, then port0 and port1 are irrelevant and ignored.
The input types must all be gamepads, and the input log will be in the following format:
|c|RLDUTSBA|RLDUTSBA|RLDUTSBA|RLDUTSBA|port2|
If a fourscore is not used, then port0 and port1 are required.
D. The emulator uses these framerate constants
- NTSC: 1008307711 /256/65536 = 60.099822938442230224609375
- PAL : 838977920 /256/65536 = 50.00698089599609375
E. The author of this format is curious about what people think of it. Please let him know!
Created with the Personal Edition of HelpNDoc: Full featured Documentation generator