J
james_c
Guest
Does anyone know if it's possible to add a whole new animation into the game (with kimara?). I wanted to give Cid a jump like a dragoon but would need new animations for it.
//obfuscate name?void C_005E2460(int dwCount/*bp08*/, struct t_battle_obfuscateInfo *bp0c, const char *pFName/*bp10*/, char *pObfuscated/*bp14*/) { struct { int dwDotIndex;//bp_ec int dwLen;//bp_e8 int bp_e4; int bp_e0; int dwIndex;//bp_dc int bp_d8; int dwBase;//bp_d4 int i;//bp_d0 int dwFoundInfo;//bp_cc char bp_c8[200]; }lolo; //-- init -- if(bp0c[1].dwStartIndex == 0) C_005E23F6(dwCount, bp0c);//compute dwStartIndex? //-- -- lolo.dwFoundInfo = 0; for(lolo.i = 0; lolo.i < dwCount; lolo.i ++) { if(*(int *)bp0c->pPrefix == *(int *)pFName) {//compare 4 first characters if(bp0c->dwFullName) {//else 005E258C C_00682C91(pFName, lolo.bp_c8);//file:remove file extension if(strcmp(bp0c->pPrefix, lolo.bp_c8) == 0) { lolo.dwFoundInfo = 1; break; } } else { lolo.dwFoundInfo = 1; break; } } bp0c ++; }//end for //-- -- if(lolo.dwFoundInfo) {//else 005E28D0 //-- -- lolo.dwIndex = bp0c->dwStartIndex; if(bp0c->dwCodeLength > 0) {//else 005E2688 lolo.bp_d8 = 0; for(lolo.i = 0; lolo.i < bp0c->dwCodeLength; lolo.i ++) { lolo.bp_e4 = pFName[bp0c->dwFirstChar + bp0c->dwCodeLength - (lolo.i + 1)] - '0'; if(lolo.i == 0) { lolo.bp_d8 = lolo.bp_e4; lolo.bp_e0 = 10; } else { lolo.bp_d8 += lolo.bp_e4 * lolo.bp_e0; lolo.bp_e0 *= 10; } }//end for lolo.dwIndex += lolo.bp_d8; } //-- -- lolo.dwBase = 0; lolo.dwDotIndex = 0; lolo.dwLen = strlen(pFName); if(lolo.dwLen > 0) {//else 005E26F8 for(lolo.dwDotIndex = lolo.dwLen - 1; lolo.dwDotIndex >= 0; lolo.dwDotIndex --) { if(pFName[lolo.dwDotIndex] == '.') break; }//end for } switch(pFName[lolo.dwDotIndex + 1]) { case 'D': lolo.dwBase = 0; break; case 'B': lolo.dwBase = 1; break; case 'T': lolo.dwBase = 2; lolo.dwBase += (pFName[lolo.dwDotIndex + 2] - '0') * 10; lolo.dwBase += pFName[lolo.dwDotIndex + 3] - '0'; break; case 'P': lolo.dwBase = 12; lolo.dwBase += (pFName[lolo.dwDotIndex + 2] - '0') * 10; lolo.dwBase += pFName[lolo.dwDotIndex + 3] - '0'; break; case 'W': lolo.dwBase = 62; lolo.dwBase += (pFName[lolo.dwDotIndex + 2] - '0') * 10; lolo.dwBase += pFName[lolo.dwDotIndex + 3] - '0'; break; case 'A': lolo.dwBase = 78; break; default: sprintf(lolo.bp_c8, /*008FF9D4*/"ERROR: EXTENSION NOT SUPPORTED %s \n", pFName); C_00664E30(lolo.bp_c8);//dx_dbg:kind of puts? }//end switch //-- -- pObfuscated[0] = (lolo.dwIndex / 26) + 'A'; pObfuscated[1] = (lolo.dwIndex % 26) + 'A'; pObfuscated[2] = (lolo.dwBase / 26) + 'A'; pObfuscated[3] = (lolo.dwBase % 26) + 'A'; pObfuscated[4] = 0; }}
struct t_battle_obfuscateInfo {//size 0x18 /*00*/const char *pPrefix; /*04*/int dwStartIndex; /*08*/int dwCodeLength; /*0c*/int dwFirstChar; /*10*/int dwElementCount; /*14*/int dwFullName;};struct t_battle_obfuscateInfo D_008FF2F0[0x17] = { {/*008FF900*/"ENEMY", 0,3,5,0x172,0}, {/*008FF908*/"STAGE", 0,2,5,0x5a,0}, {/*008FF910*/"FROG", 0,0,0,1,0}, {/*008FF918*/"CLOUD", 0,0,0,1,0}, {/*008FF920*/"TIFA", 0,0,0,1,0}, {/*008FF928*/"EARITH", 0,0,0,1,0}, {/*008FF930*/"RED13", 0,0,0,1,0}, {/*008FF938*/"YUFI", 0,0,0,1,0}, {/*008FF940*/"KETCY", 0,0,0,1,0}, {/*008FF948*/"CID1", 0,0,0,1,0}, {/*008FF950*/"SEFIROS", 0,0,0,1,0}, {/*008FF958*/"BARRETT", 0,0,0,1,1}, {/*008FF960*/"BARRETT2",0,0,0,1,1}, {/*008FF96C*/"BARRETT3",0,0,0,1,1}, {/*008FF978*/"BARRETT4",0,0,0,1,0}, {/*008FF984*/"VINSENT", 0,0,0,1,1}, {/*008FF98C*/"VINSENT2",0,0,0,1,1}, {/*008FF998*/"VINSENT3",0,0,0,1,0}, {/*008FF9A4*/"HICLOUD", 0,0,0,1,0}, {/*008FF9AC*/"GALL", 0,0,0,1,0}, {/*008FF9B4*/"DEATHGIG",0,0,0,1,0}, {/*008FF9C0*/"HELLMASK",0,0,0,1,0}, {/*008FF9CC*/"CHAOS", 0,0,0,1,0}};
u32 animationCount;
u32 boneCount;u32 frameCount;u32 dataSize;
u16 frameCount_bis;//save as frameCountu16 size;//= dataSize +7u8 rotValueShift;//can also be understood as "number of 0s"
//format for the first frame:s16 posX,posY,posZ;//since data is a bitstream, there are to be read as BigEndiansMax12 bone0_rotX,bone0_rotY,bone0_rotZ;sMax12 bone1_rotX,bone1_rotY,bone1_rotZ;//...
s7_16 transX,transY,transZ;special bone0_rotX,bone0_rotY,bone0_rotZ;special bone1_rotX,bone1_rotY,bone1_rotZ;//...
//read "special" value from buffer?short C_005E7CE4(unsigned char *bp08, int *pBitIndex/*bp0c*/, int dwRotShift/*bp10*/) { struct { int bp_08; int dwValue;//bp_04 }lolo; if(C_005E7C40(bp08, pBitIndex, 1) == 0)//read value from buffer? return 0; lolo.bp_08 = C_005E7C40(bp08, pBitIndex, 3) & 7;//read value from buffer? switch(lolo.bp_08) { case 0: return 0xffffffff << dwRotShift; case 1: case 2: case 3: case 4: case 5: case 6: lolo.dwValue = C_005E7C40(bp08, pBitIndex, lolo.bp_08);//read value from buffer? if(lolo.dwValue >= 0) lolo.dwValue += BIT(lolo.bp_08 - 1); else lolo.dwValue -= BIT(lolo.bp_08 - 1); return lolo.dwValue << dwRotShift; case 7: lolo.dwValue = C_005E7C40(bp08, pBitIndex, 12 - dwRotShift);//read value from buffer? return lolo.dwValue << dwRotShift; }//end switch return 0;}