Sonic Heroes/Texture Animation Editing

From Sonic Retro

SCHG: Sonic Heroes
Main Article
Mechanic Editing

DOL Editing
EXE Editing
Music Pointers
Object Parameter Data
Relocatable Editing (PC)
File Offsets

Model Editing
Collision Format
Model Format
Level Editing

Camera Editing
Event Editing
ID list
Indirect Editing
Light Editing
Level List
Object Editing
Object Porting
Spline Editing
Texture Animation Editing
Visibility Editing

Particle Editing
Particle Editing
Sound Editing
Music List

Sound Editing

SCHG How-Tos

Custom Object Material Effect Tutorial
Level Editing Tutorial

The .txc format is used to define animated textures within stages. Within the .txd, animated textures have the form name.1; name.2; ... name.N where N is the amount of frames.


   struct {
       u32 frameCount; // total frames of animation
       u8 zero[516]; // god knows why this is here
       char firstFrameTexture[32]; // name of first frame in .txd (e.g. s3tk1.1)
       char animatedName[32]; // name of animated texture as a whole (e.g. s3tk1)
       struct {
           u16 frameOffset; // frame index
           u16 textureID; // texture for this frame
       } frames[...]; // repeated until 0xffffffff
   } animatedTextures[...]; // repeated until 0xffffffff

Each of the structs is repeated until the uint32 value 0xffffffff.


Each frame consists of two values, 'frameOffset' and 'textureID'. Texture ID refers to the number at the end of the texture's name within the .txd.

Frame Offset is the offset of the current frame within the animation. Note that it may seem that the first frame is index 1; but it most certainly isn't, some later stages use frameOffset 0.

Frame Count is the total amount of frames within the animation, and NOT the amount of frame structs below. Not every frame of the animation is stored in the file, missing ones are presumably 'interpolated' by using the previous frame. For example, if frame 1 is s3tk1.1 and frame 4 is s3tk1.2; then frames 2 and 3 are also s3tk1.1.

Some animations may have a final frame with an invalid frameOffset (and textureID). No clue what this means.

Objects such as fire from the haunted levels have the textures loaded from the list in the executable and passed through the texture rastering renderstate located at 0x4F9A28.


Heroes Power Plant includes a Texture Pattern Editor, which allows you to edit the texture animations and preview them in real time.