Skip to content

Latest commit

 

History

History
293 lines (237 loc) · 14 KB

README.md

File metadata and controls

293 lines (237 loc) · 14 KB

TKViewer

NexusTK Resource Viewer for EPF and related files.

Quickstart

IntelliJ is recommended for development, but you should be able to build with just Java 8+ and Maven:

Building TKViewer with Maven:

$ mvn clean install
$ (cd tk-viewer; mvn clean package)
  • Output is stored in target/

Run TKViewer with:

java -jar tk-viewer/target/tk-viewer*.jar

Building TKPartPicker with Maven:

$ mvn clean install
$ (cd tk-partpicker; mvn clean package)

Run TKPartPicker with:

java -jar tk-viewer/target/tk-partpicker*.jar

FileReader Classes

File Structures

CMP

  • Note: The tile structures are compressed with zlib in the CMP format - it must be inflated!
short width                            (2 bytes)                         # width of the map (in tiles)
short height                           (2 bytes)                         # height of the map (in tiles)
tile[width * height] tiles             (width * height * 4 bytes)        # list of tile structures (zlib compressed)

typedef struct {
  short abTileId                       (2 bytes)                         # ground tile frame index (Tile/Tbl)
  short passableTile                   (2 bytes)                         # passable tile flag
  short sObjTileId                     (2 bytes)                         # static object index (TileC/SObjTbl)
} tile                                 (6 bytes)

DAT

int file_count                           (4 bytes)                         # file count + 1 (decrement for file count)
file[file_count] files                   ((file_count * file_size) bytes)  # list of file structures
byte[] file_data                                                           # binary data of all files (head-to-tail)

typedef struct {
  int data_location                      (4 bytes)                         # index of 'file_data' for the start of this file
  byte[13] file_name                     (13 bytes)                        # the file name (UTF-8 padded - 13 bytes) 
} file                                   (17 + size bytes)

DNA

int mob_count                            (4 bytes)                         # number of mobs in file
mob[mob_count] mobs                      (mob_count * mob_size bytes)      # list of mob structures

typedef struct {
  int frame_index                        (4 bytes)                         # frame index of mob
  byte chunk_count                       (1 byte)                          # number of chunks in mob
  byte unknown1                          (1 byte)                          # unknown id/flag (1)
  short palette_index                    (2 bytes)                         # palette index of mob
  chunk[chunk_count] chunks              (chunk_count * chunk_size bytes)  # list of chunk structures
} mob                                    (8 + (chunk_count * chunk_size) bytes)

typedef struct {
  short block_count                      (2 bytes)                         # block count of chunk
  block[block_count] blocks              (block_count * block_size bytes)  # list of block structures
} chunk                                  (2 + (block_count * block_size) bytes)

typedef struct {
  short frame_offset                     (2 bytes)                         # offset from frame_index in chunk
  short duration                         (2 bytes)                         # amount of time to play the frame
  short unknownId1                       (2 bytes)                         # normally -1, only has real values
                                                                             in death animations for 2 mobs
  byte transparency                      (1 bytes)                         # transparency
  byte unknownId2                        (1 byte)                          # unknown id/flag (5)
  byte unknownId3                        (1 byte)                          # unknown id/flag (5)
} block                                  (9 bytes)

DSC

byte[15] header                        (15 bytes)                        # PartDescription (literal)
byte[7] null                           (7 bytes)                         # unknown null bytes (1)
byte unknown1                          (1 byte)                          # unknown id/flag (2)
int part_count                         (4 bytes)                         # number of parts
part[part_count] parts                 (part_count * part_size bytes)    # list of part structures

typedef struct {
  int id                               (4 bytes)                         # id of the part
  int palette_id                       (4 bytes)                         # palette index of the part
  int frame_index                      (4 bytes)                         # first frame index of the part
  int frame_count                      (4 bytes)                         # number of sequential frames after frame_index
  byte unknown2                        (1 byte)                          # unknown id/flag (3)
  int unknown3                         (4 bytes)                         # unknown id/flag (4)
  byte unknown4                        (1 byte)                          # unknown id/flag (5)
  int unknown5                         (4 bytes)                         # unknown id/flag (6)
  int unknown6                         (4 bytes)                         # unknown id/flag (7)
  int chunk_count                      (4 bytes)                         # number of chunks
  chunk[chunk_count] chunks            (chunk_count * chunk_size bytes)  # list of chunk structures
} part                                 (34 + (chunk_count * chunk_size) bytes)

typedef struct {
  int id                               (4 bytes)                         # id of the chunk
  int unknown                          (4 bytes)                         # unknown id/flag (1)
  int block_count                      (4 bytes)                         # number of blocks
  block[block_count] blocks            (block_count * block_size bytes)  # list of block structures
} chunk                                (12 + (block_count * block_size) bytes)

typedef struct {
  byte id                              (1 byte)                          # id of the block
  int null                             (4 bytes)                         # unknown id/flag (1)
  int unknown                          (4 bytes)                         # unknown id/flag (2)
} block                                (9 bytes)

EPF

short frame_count                      (2 bytes)                         # number of frames in the EPF
short height                           (2 bytes)                         # height of the EPF (?)
short width                            (2 bytes)                         # width of the EPF (?)
short unknown                          (2 bytes)                         # unknown id/flag (1)
int pixel_data_length                  (4 bytes)                         # length of the pixel data
byte[pixel_data_length] pixel_data     (pixel_data_length bytes)         # list of pixel data bytes
frame[frame_count] frames              (frame_count * frame_size bytes)  # list of frame structures

typedef struct {
  short top                            (2 bytes)                         # top offset of the frame (in pixels)
  short left                           (2 bytes)                         # left offset of the frame (in pixels)
  short bottom                         (2 bytes)                         # bottom offset of the frame (in pixels)
  short right                          (2 bytes)                         # right offset of the frame (in pixels)
  int pixel_data_offset                (4 bytes)                         # index of 'pixel_data' for the start of this frame's pixel data
  int stencil_data_offset              (4 bytes)                         # index of 'pixel_data' for the start of this frame's stencil data
} frame                                (16 bytes)

FRM

int effect_count                      (4 bytes)                         # number of effects in FRM
int[effect_count] palette_index       (effect_count * 4 bytes)          # list of palette indicies for effects

MAP

short width                             (2 bytes)                         # width of the map (in tiles)
short height                            (2 bytes)                         # height of the map (in tiles)
tile[width*height] tiles                (width * height * 4 bytes)        # list of tile structures

typedef struct {
  short ab_tile_id                      (2 bytes)                         # ground tile frame index (Tile/Tbl)
  short sobj_tile_id                    (2 bytes)                         # static object index (TileC/SObjTbl)
} tile                                  (4 bytes)

PAL (Single)

byte[9] header                        (9 bytes) # DLPalette              # DLPalette (literal)
byte[15] unknown                      (15 bytes)                         # unknown bytes (1)
byte animation_color_count            (1 byte)                           # number of animation colors
byte[7] unknown2                      (7 bytes)                          # unknown bytes (2)
short[animation_color_count]          (animation_color_count * 2 bytes)  # list of animation colors (short)
color[256] palette                    (1024 bytes)                       # list of color structures

typedef struct {
  byte red                            (1 byte)                           # red value for color
  byte green                          (1 byte)                           # green value for color
  byte red                            (1 byte)                           # red value for color
  byte alpha                          (1 byte)                           # alpha value for color
} color                               (4 bytes)

PAL (Packed)

int palette_count                                                        # number of palettes in file
PAL[palette_count] palettes                                              # list of PAL structures

typedef struct {
  byte[9] header                      (9 bytes)                           # DLPalette (literal)
  byte[15] unknown                    (15 bytes)                          # unknown bytes (1)
  byte animation_color_count          (1 byte)                            # number of animation colors
  byte[7] unknown2                    (7 bytes)                           # unknown bytes (2)
  short[animation_color_count]        (animation_color_count * 2 bytes)   # list of animation colors (short)
  color[256] palette                  (1024 bytes)                        # list of color structures

  typedef struct {
    byte red                          (1 byte)                            # blue value for color
    byte green                        (1 byte)                            # green value for color
    byte blue                         (1 byte)                            # red value for color
    byte alpha                        (1 byte)                            # alpha value for color
  } color                             (4 bytes)
} PAL

TBL (Effects)

int effect count                    (4 bytes)                           # number of effects in TBL

effect [effect_count] effects                                            # list of effect structures
typedef struct {
  int effect_index                  (4 bytes)                           # effect index
  int frame count                   (4 bytes)                           # number of sequential frames after effect_index
  byte[20] unknown                                                       # unknown bytes (1)
  frame [frame_count] frames                                             # list of frame structures
  typedef struct {
	int frame index             (4 bytes)                            # start frame index for effect
	int frame delay             (4 bytes)                            # delay until next frame (milliseconds)
	int pallete number          (4 bytes)                            # palette index to use when renderer
	byte[4] unknown             (4 bytes)                            # unknown bytes (1)
  }
} effect

TBL (Static Objects)

int object_count                    (4 bytes)                            # number of objects in SObj TBL
short unknown                       (2 bytes)                            # unknown short
object[object_count]                (obj_count * obj_size bytes)         # list of object structures

typedef struct {
  int unknown                       (4 bytes)                            # unknown byte (typically 0xFFFFFFFF)
  byte unknown                      (1 byte)                             # unknown byte (typically 0x00)
  byte movement_directions          (1 byte)                             # movement directions for static object (see list below)
  byte tile_count                   (1 byte)                             # number of tiles in static object
  short[tile_count]                 (tile_count * 2 bytes)               # list of tile indicies for static object
} object

Note: Movement Directions appear to have 6 states:

  • 0x00 (Empty)
  • 0x01 (Bottom)
  • 0x02 (Top)
  • 0x04 (Left)
  • 0x08 (Right)
  • 0x0F (Full)

TBL (Tiles)

int tile_count                       (4 bytes)                           # number of tiles in TBL
tile[tile_count] tiles               (tile_count * 2 bytes)              # list of tile structures

typedef struct {
  short palette_index                (1 byte)                            # palette index for tile (masked) 
} tile                               (2 bytes)

Contributors

Huge thank you to everyone who helps figure out NTK file structures:

  • DDeokk
  • herbert3000
  • rbcastner
  • SapMagic
  • wattostudios
  • mac