.werkkzeug 1 file format
.introduction
.werkkzeug 1.201 has two file formats: .k1 (datafile) and .kk1 (exported datafile).
The first one contains project information, and it is the main format of the .werkkzeug1. The second one is «exported» format, it cannot be imported back to .werkkzeug and created to use with player kkino. It is much more complicated and contains smartass data types, so I at this time cannot explain it here.
If you try to open werkkzeug1.exe with WinHEX or other hex editor, you can find .werkkzeug's "operator scheme". This file describes parameter of every operator class in .werkkzeug. If you need parser for this scheme, please contact me. By the way, .werkkzeug 3 main executable does not contain this information in textual format.
There were seven versions of .k1 format. This page describes 7th version.
.k1 file format description
File format described in the special form, it is not C language.
/* * .werkkzeug 1.201 file format * (c) 2010, Sauron * * Comments: * * 1. It is recommended to malloc() 256 bytes for wzblock->para. * * 2. Structure of wzblock->para described in configuration file, * contained in werkkzeug1.exe. The format is easy to understand. * * 3. It is recommended to malloc() 4*4=16 bytes for wzblock->links. * * 4. BLOB (binary large object) contains music (V2M, XM, OGG), text in comment, * XSI mesh in XSI operator. It is used because wzblock->para is limited to * 256 bytes. * * 5. .werkkzeug saves wzblock->para from first bytes to last non-zero byte. * The same idea is used to save anims and links. */ const { // Operator has a name WZ_HAS_NAME=1; // Operator has a BLOB (binary large object) WZ_HAS_BLOB=2; }; // .werkkzeug 1.201 project struct wzproject { // Magic number 'MODK' (K Document Object Model) uint32 magic; // Version of format (7) uint32 version; // Number of operators (on all pages) uint32 nblocks; // Number of pages uint32 npages; // Unknown uint32[4] unknown0; // Unknown uint32[4] unknown1; // Operators struct block[nblocks] blocks; // Pages struct page[npages] page; }; // Operator structure struct block { // X position on the page uint8 xpos; // Y position on the page uint8 ypos; // Number of page uint8 page; // Width of block uint8 width; // Number of links uint8 nlinks; // Number of "anim" structures uint8 nanims; // Length of wzblock->para in dwords uint8 dwords; // Flags uint8 flags; // Operator class ID (see configuraton) uint32 cid; if (flags & WZ_HAS_NAME) { // Operator name char[32] name; }; // Links uint32 links[nlinks]; // "Anim" structs struct anim[nanims] anims; // Parameters of the operator (see configuraton) uint8[dwords*4] para; if (flags & WZ_HAS_BLOB) { // Size of BLOB uint32 blobsize; // Binary data uint8[blobsize] blob; // Align to begin of the next dword align 4; }; }; // Descriptor of animated parameters struct anim { // Animation is enabled if this != 0 unsigned long animated; if (animated != 0) { // Anim channel uint32 channel; // Mask (if type of parameter is structured) uint32 mask; uint32 components; // Amplify uint32 amplify; // Inital values uint32[4] para; }; }; // Page descriptor struct page { // Page name (null-terminated, but limited to 32 bytes) char[32] name; };
parameter types
There are 19 parameter types in .werkkzeug 1.
# | Symbolic name | Description | Storage size | |
---|---|---|---|---|
in .k1 | in .kk1 | |||
1 | PT_INT | Unsigned integer 32 | 4 | 4 |
2 | PT_POWER | This is x in 2x. | 4 | ? |
3 | PT_FLOAT | Float (32 bits) | 4 | 4 |
4 | PT_CYCLE | Enumerated parameter, stored as uint32. | 4 | ? |
5 | PT_BOOL | Boolean value (true/false). | ? | ? |
6 | PT_STRING | Null-terminated single-line string. | MAX | ? |
7 | PT_FXY | Float32 vector {x,y} | 8 | ? |
8 | PT_FXYZ | Float32 vector {x,y,z} | 12 | ? |
9 | PT_FXYXY | Float32 vector {x1,y1,x2,y2} | 16 | |
10 | PT_RGB | RGB color. | 4 | 3 |
11 | PT_RGBA | RGB color with opacity. | 4 | 4 |
12 | PT_LINK | It is link to other operator. It stored not in wzblock->para, but in wzblock->links. | — | ? |
13 | PT_IXY | Vector of uint32 {x,y} | 8 | ? |
14 | PT_IXYZ | Vector of uint32 {x,y,z} | 12 | ? |
15 | PT_IXYXY | Vector of uint32 {x1,y1,x2,y2} | 16 | ? |
16 | PT_FILE | Filename for the file stored in BLOB. Usually filename does not packs to the .kk1 file | MAX | — |
17 | PT_TEXT | Null-terminated multi-line string. | MAX | ? |
18 | PT_LABEL | It is not really parameter, it is only subheader in the parameter window. | — | — |
19 | PT_BLOBTEXT | This parameter is stored in BLOB, not in wzblock->para. | — | ? |
NT — null-terminated string.
MAX — to determine storage size see the Max field in operator scheme.
disclaimer
No reverse engineering (disassembling or decompilation) of executable files had took part while preparing this documentation. Author is not responsible for using this documentation.