Skip to content

Instantly share code, notes, and snippets.

@drdaxxy
Last active May 6, 2018 03:23
Show Gist options
  • Save drdaxxy/b86c69f94aef2f7af700551204b3f8d6 to your computer and use it in GitHub Desktop.
Save drdaxxy/b86c69f94aef2f7af700551204b3f8d6 to your computer and use it in GitHub Desktop.
struct {
// Unknown file header fields have no effect on the animation
uint unk0;
uint unk1;
uint unk2;
uint unk3;
uint unk4;
uint unk5;
uint unk6;
uint unk7;
uint unk8;
float duration;
uint BoneCount;
uint BonesOffset;
} SDBSubHeader;
typedef struct {
float time;
float param;
} Thing;
struct Thing things[(SDBSubHeader.BonesOffset - sizeof(SDBSubHeader)) / sizeof(Thing)];
// All "Things" below are pairs of floats - time, param
// All "Offsets" below are for *after* the file header
// (so to get offset into file, subtract file header size)
struct {
ushort id;
ushort unk0; // always 0 or 0x8000
// if I set this to 0x8000 on the body rotation bone,
// animation stops playing but glasses exist
char unk1[2]; // always 0
ushort Thing0Count;
ushort TranslateXCount;
ushort TranslateYCount;
ushort TranslateZCount;
ushort RotateZCount;
ushort RotateYCount;
ushort RotateXCount;
ushort ScaleXCount;
ushort ScaleYCount;
ushort ScaleZCount;
char unk2[46]; // Bone[111]: 18 and 22 used, 18 is for eyes (0 = no eyelid movement, >0 = eyelid movement)
ushort Thing7Count; // Thing7 in Bone[111] in c002_010 is for eyes - parameter is percentage [0-100] ?
ushort Thing8Count;
char unk3[28];
int Thing0sOffset;
int TranslateXsOffset;
int TranslateYsOffset;
int TranslateZsOffset;
int RotateZsOffset;
int RotateYsOffset;
int RotateXsOffset;
int ScaleXsOffset;
int ScaleYsOffset;
int ScaleZsOffset;
char unk4[24];
int Thing7sOffset;
int Thing8sOffset;
char unk5[56];
} Bone[SDBSubHeader.BoneCount] <optimize=false>;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment