void ServerLBA1ModelClass::LoadAnim(entitiesTableStruct* entitiesData, int animNum) { if(animPtr) free(animPtr); unsigned char* localAnim; // changed unsigned m_currentSpeedX = 0; m_currentSpeedY = 0; m_currentSpeedZ= 0; currentKeyFrame=0; animsize = loadResource(m_animPath.c_str(),animNum, &localAnim); lastCurrentX =0; lastCurrentY =0; lastCurrentZ =0; currentX =0; currentY =0; currentZ =0; cumutime = 0; setAnimAtKeyFrame(0,(unsigned char*)localAnim,Elements,true); animPtr=(unsigned char*)localAnim; }
int InitAnim(char newAnim, short int arg_4, unsigned char arg_8, short int actorNum) { actor *lactor; int animIndex; lactor = &actors[actorNum]; if (lactor->costumeIndex == -1) return (0); if (lactor->staticFlagsBF.isSpriteActor) // si c'est un sprite return (0); if (newAnim == lactor->anim && lactor->previousAnimIndex != -1) // le costume est deja loade return (1); if (arg_8 == 255 && lactor->field_78 != 2) arg_8 = lactor->anim; animIndex = getAnimIndexForBody(newAnim, actorNum); if (animIndex == -1) animIndex = getAnimIndexForBody(0, actorNum); if (arg_4 != 4 && lactor->field_78 == 2) { lactor->field_2 = newAnim; return (0); } if (arg_4 == 3) { arg_4 = 2; arg_8 = lactor->anim; if (arg_8 == 15 || arg_8 == 7 || arg_8 == 8 || arg_8 == 9) { arg_8 = 0; } } if (arg_4 == 4) arg_4 = 2; if (lactor->previousAnimIndex == -1) { // if no previous animation setAnimAtKeyFrame(0, HQR_Get(HQR_Anims, animIndex), bodyPtrTab[lactor->costumeIndex], &lactor->_animTimerData); // set animation directly to first keyFrame } else { // interpolation between animations bufAni2 += StockInterAnim((char *) bufAni2, (char *) bodyPtrTab[lactor->costumeIndex], &lactor->_animTimerData); if (bufAni1 + 4488 > bufAni2) bufAni2 = bufAni1; } lactor->previousAnimIndex = animIndex; lactor->anim = newAnim; lactor->field_2 = arg_8; lactor->animExtraData = loadTwinsenCostumesVar1; lactor->field_78 = arg_4; lactor->animPosition = 0; lactor->dynamicFlagsBF.bUnk0002 = 0; lactor->dynamicFlagsBF.animEnded = 0; lactor->dynamicFlagsBF.bUnk0008 = 1; if (lactor->animExtraData) { GereAnimAction(lactor, actorNum); } lactor->lastRotationSpeed = 0; lactor->lastX = 0; lactor->lastY = 0; lactor->lastZ = 0; return (1); }