Talk:M2
Finished for Build 8820 now. Post changes here first! And please pay attention to the style when you add something.. --schlumpf_ 00:53, 23 August 2008 (CEST)
Deleted Blocks
Animation
animated.h void init(AnimationBlock &b, MPQFile &f, int *gs)
original code
uint32 *ptimes = (uint32*)(f.getBuffer() + b.ofsTimes); for (size_t i=0; i<b.nTimes; i++) times.push_back(ptimes[i]); // keyframes assert((D*)(f.getBuffer() + b.ofsKeys)); D *keys = (D*)(f.getBuffer() + b.ofsKeys); switch (type) { case INTERPOLATION_NONE: case INTERPOLATION_LINEAR: for (size_t i=0; i<b.nKeys; i++) data.push_back(Conv::conv(keys[i])); break; case INTERPOLATION_HERMITE: for (size_t i=0; i<b.nKeys; i++) { data.push_back(Conv::conv(keys[i*3])); in.push_back(Conv::conv(keys[i*3+1])); out.push_back(Conv::conv(keys[i*3+2])); } break; }
modified code
AnimationBlockHeader* pHeadTimes = (AnimationBlockHeader*)(f.getBuffer() + b.ofsTimes); uint32 *ptimes = (uint32*)(f.getBuffer() + pHeadTimes->ofsEntrys); for (size_t i=0; i < pHeadTimes->nEntrys; i++) times.push_back(ptimes[i]); // keyframes AnimationBlockHeader* pHeadKeys = (AnimationBlockHeader*)(f.getBuffer() + b.ofsKeys); D *keys = (D*)(f.getBuffer() + pHeadKeys->ofsEntrys); switch (type) { case INTERPOLATION_NONE: case INTERPOLATION_LINEAR: for (size_t i = 0; i < pHeadKeys->nEntrys; i++) data.push_back(Conv::conv(keys[i])); break; case INTERPOLATION_HERMITE: for (size_t i = 0; i < pHeadKeys->nEntrys; i++) { data.push_back(Conv::conv(keys[i*3])); in.push_back(Conv::conv(keys[i*3+1])); out.push_back(Conv::conv(keys[i*3+2])); } break; }
modelheaders.h
struct AnimationBlockHeader { uint32 nEntrys; uint32 ofsEntrys; };
Block D
- nD records of (int16, int16) starting at ofsD
Maybe a lookup table for animations? Since the numbers happen to be in fixed positions. The first short seems to increase with the position for models with all animations (like characters), the second seems to be flags or a modifier? Or something.
Contain indices into the texture animations list, or -1 meaning a static texture.
Texture animations
- This block contains definitions for texture animations, for example, flowing water or lava in some models. The keyframe values are used in the texture transform matrix.
nTexAnims records of 0x54 bytes starting at ofsTexAnims, followed by data referenced in these records.
Offset Type Description 0x00 AnimationBlock (float, float, float) Translation 0x1C AnimationBlock (float, float, float ???) Rotation? 0x38 AnimationBlock (float, float, float) Scaling?
The three subrecords specify texture transforms. Translation seems to work, producing nice flowing lava and waterfalls.