.werkkzeug 3 datafile format description
introduction
This is .k file format description. Some fields are still unknown. If you are any additional info or questions, feel free to write to me.
This format description is very incomplete and it will be updated soon.
/*
* .werkkzeug 3 datafile format.
* (c) 2010-2011, Sauron.
*
* Updated: August 30, 2011.
*/
// .werkkzeug 3 project (.k)
struct wz3project {
// Magic number ('nova')
uint32 magic;
// Version of format (always 0x01)
uint32 version;
// Start tag, always '<<<<'
uint32 startTag;
// Format identificator (for .k always 0x01000100)
uint32 formatId;
// Format subversion, always 0x0e
uint32 unknown2;
// Length (from nrevents to meta inclusive), measured in dwords
uint32 length;
// Number of timeline events
uint32 nrevents;
// Number of pages
uint32 nrpages;
// Number of operators
uint32 nrops;
// Unknown
uint32[5] _unknown0;
// Page descriptors
struct wz3page[nrpages] pages;
// Operators
struct wz3operator[nrops] operators;
// Timeline events
struct wz3event[nrevents] events;
// Number of splines
uint32 nrsplines;
// Splines
struct wz3spline[nrsplines] splines;
// Unknown DEADBEEF
uint32 _unknown1;
// BLOBS
uint08[?] blobs;
align 4;
// Unknown DEADBEEF
uint32 _unknown2;
// Demo metadata
struct wz3meta meta;
// End tag, always '>>>>'
uint32 endTag;
// Unknown 32 bytes (scenes)
uint32[8] unknown@end;
}
// .werkkzeug 3 page descriptor
struct wz3page {
// Number of operators situated on this page
uint32 nroperators;
// Position of horizontal scroll bar (in px)
uint32 x_position;
// Position of vertical scroll bar (in px)
uint32 y_position;
// Unknown
uint32 unknown1;
// Unknown (counter???)
uint32 unknown2;
// Spare flag 01
uint32 spareFlag01;
// Spare flag 02
uint32 spareFlag02;
// Indentation in the page tree
uint16 indent;
// ' ' - leaf, '-' - expanded, '+' - collapsed
uint16 collapseState;
// Length of page name
uint32 nameLength;
// Page name
char[nameLength] name;
align 4;
// Length of owner name
uint32 userLength;
// Owner name
char[userLength] user;
align 4;
// Unknown
uint32 unknown5;
}
// .werkkzeug3 operator descriptor
struct wz3operator {
// OpClass (it is kike CID in WZ1)
uint32 type;
// Unknown
uint32 unknown0;
// X position
uint32 xpos;
// Y position
uint32 ypos;
// Width of the block
uint32 width;
// Number of page
uint32 page;
// Number of dword parameters
uint8 ndwords;
// Number of links and some unknown flag
uint8 nlinks;
// Number of string parameters
uint8 nstrings;
// Unknown
uint8 unknown1;
// ?? a.p.
uint32 unknown2;
// Bypass flag
uint32 bypass;
// Still unknown
uint32 unknown4;
// Number of animation blocks
uint32 nranims;
// Hidden flag
uint32 hidden;
// Size of BLOB connected to this operator
uint32 blobSize;
// Length of operator name
uint32 nameLength;
// Operator name
char[nameLength] name;
align 4;
// Links
struct {
uint32 linkLength;
char[linkLength] link;
align 4;
} [nlinks] links;
// Dword and float32 parameters
uint8[ndwords*4] para;
// String parameters
struct {
uint32 stringLength;
char[linkLength] string;
align 4;
} [nlinks] strings;
// Animation blocks
struct wz3animblock[nranims] anims;
}
// .werkkzeug 3 animation operator
struct wz3animblock {
// Position
uint32 xpos;
uint32 ypos;
// Width
uint32 width;
// Mode (see comment #2)
uint32 mode;
// Variable index (when storing and loading variables)
uint32 variable;
// Length of parameters, measured in dwords
uint32 dwords;
// Still unknown (or reserved)
uint32 _unknown0;
uint32 _unknown1;
// Parameters
uint32[dwords] para;
}
// .werkkzeug 3 timeline event
struct wz3event {
//
uint32 _unknown0;
// Start time
uint32 start;
// End time
uint32 end;
//
uint32 select;
//
float32 velocity;
//
float32 modulation;
//
uint32 row;
//
uint32 _unknown1;
//
uint32 mark;
//
uint32 color;
//
uint32 enabled;
//
uint32 _unknown2;
//
uint32 nameLength;
//
char[nameLength] name;
align 4;
//
float32[3] scale;
float32[3] rotate;
float32[3] translate;
//
uint32 splineNameLength;
char[splineNameLength] splineName;
align 4;
//
float32[2] timeInterval;
//
uint32 preserveTime;
}
// Kinds of splines
enum SPLINE_KIND {
ANY=0;
SCALE=1;
ROTATE=2;
TRANSLATE=3;
COLOR=4;
}
// Types of interpolation
enum SPLINE_INTERPOLATION {
// normal spline
CUBIC=0;
//
LINEAR=1;
// rectangular
STEP=2;
}
// .werkkzeug 3 spline
struct wz3spline {
// Kind of spline
SPLINE_KIND kind;
// Number of channels
uint32 nrchannels;
// Type of interpolation
SPLINE_INTERPOLATION interpolation;
//
uint32
// Length of spline name
uint32 nameLength;
// Spline name
char[nameLength] name;
align 4;
...
}
// Types of production
enum PROD_TYPE {
DEMO=0;
INTRO=1;
KKRIEGER=2;
}
// .werkkzeug 3 demo metadata
struct wz3meta {
// Unknown
uint8[12] _unknown0;
// Farbrausch number
uint32 projectID;
// Border size
uint32 border;
// X screen resolution
uint32 screenX;
// Y screen resolution
uint32 screenY;
// Beats per minute
float32 bpm;
// Start sample of soundtrack
uint32 startSample;
// ?
uint32 _unknown9;
// Global gamma correction
float32 globalGamma;
// Type of production
PROD_TYPE prod_type;
// Buzz(0) / Correct(1) flag
uint32 bpmState;
// ?
uint32 _unknown12;
uint32 _unknown13;
uint32 _unknown14;
uint32 _unknown15;
uint32 _unknown16;
uint32 _unknown17;
// Length of demo title
uint32 appNameLength;
// Demo title
char[appNameLength] appName;
align 4;
// Length of soundtrack filename
uint32 soundtrackLength;
// Soundtrack filename
char[soundtrackLength] soundtrackName;
align 4;
// Length of samples filename
uint32 samplesLength;
// samples filename
char[samplesLength] samplesName;
align 4;
}