ACT

Created

Files are saved in little-endian.

At the bottom of the page you will find an image that provides an overview of the data structure.

The format is as follows (showing the version 0x205, differences between versions are noted in the description):

Label Bytes Type Description
signature 2 char 'AC'
version 2 uint16 0x205, 0x204, 0x203, 0x202, 0x201, 0x200
nActions 2 uint16 The number of Actions in this ACT file.
reserved 10 10*byte Reserved, unused bytes.
<actions> variable Action times * nActions read Action part below.
nEvents 4 uint32 The number of Events (e.g. sounds) this ACT file has. Version 0x201+.
<events> variable Event times * nEvents read Event part below.
intervals 4 * nActions float Interval for each Action. First float corresponds to the first action, second float to the second action, etc. Version 0x202+.

The header of an ACT file is considered to be the bytes 0 to 16 which would be signature, version, nActions and reserved.

Action

Label Bytes Type Description
nFrames 4 uint32 The number of Frames in this Action.
<frames> variable Frame times * nFrames read the Frame part below.

Frame

Label Bytes Type Description
range1 16 4*uint32 Left, top, right, bottom. In that order. Seems to be unused. Commented with "Attack range".
range2 16 4*uint32 Left, top, right, bottom. In that order. Seems to be unused. Commented with "Fit range".
nSprites 4 uint32 The number of Sprites used in this Frame.
<sprites> variable Sprite times * nSprites read Sprite part below.
eventId 4 int32 Id of the Event that this frame fires. Version 0x200+.
nAttachPoints 4 uint32 The number of AttachPoints (attachment points) this Sprite uses. Version 0x203+.
<attachpoints> variable AttachPoint times * nAttachPoints read AttachPoint part below.

Sprite

Label Bytes Type Description
x 4 int32 The x coordinate of the Sprite.
y 4 int32 The y coordinate of the Sprite.
sprNo 4 int32 The sprite number used (this references the sprite inside a SPR file).
flags 4 uint32 Bitflags. So far only first bit is used to indicate whether the Sprite should be mirrored on the y-Axis.
color 4 4*ubyte In the order: red, green, blue, alpha. Each color is one byte. This is the tint of this Sprite.
xScale 4 float The scale factor for the width of the Sprite. Below version 0x204 this is also the scale factor for the height (yScale).
yScale 4 float The scale factor for the height of the Sprite. Version 0x204+.
rotation 4 float The rotation of the Sprite around its center in angle degrees.
sprType 4 int32 The type of the sprite used from SPR. 0 == Palette sprite, 1 == RGBA sprite.
width 4 int32 The width of the Sprite as it is in the SPR file. Version 0x205+.
height 4 int32 The height of the Sprite as it is in the SPR file. Version 0x205+.

AttachPoint

Label Bytes Type Description
unknown 4 4*byte Unknown bytes. When parsing the ACT file 16 bytes will be read from the buffer directly into a class (not struct) that holds the three members x, y and attr. Funny that this actually works.
x 4 int32 Offset x coordinate of this attachment.
y 4 int32 Offset y coordinate of this attachment.
attr 4 int32 Apparently this value is used to compare against another attachment point when stitching together the separate sprites (e.g. body and head). However, only the first attachment point of each sprite is used for the comparison. For that to work it implies that this value is always the same (in this case 0).

Event

Label Bytes Type Description
name 40 40*char The null-terminated string name of the event (e.g. "atk" or some sound file).
ACT file format
Data structure diagram of the ACT file version up to 0x205 — CC0, z0q

From my research years back most of the info comes from "deufeufeu" around 2003. Who shared info about the SPR and ACT file format. His work has been archived by Gratia Huang on his website: http://mist.in/gratia/ro/spr/deufeufeu_files/ (Archive). Later on I've been fortunate to have been gotten a hold of the source code of a chinese game called DHXJ (东方仙境). Special thanks to the ASB community for that. This game is based on the pre-renewal RO client but without knowing what kind of modifications have been made the info it provides should be looked at critically.