Browse Source

LoadMissileGFX bin exact (#682)

* LoadMissileGFX bin exact
pull/44/head
qndel 7 years ago committed by Anders Jenbo
parent
commit
2e42493a7b
  1. 64
      Source/missiles.cpp

64
Source/missiles.cpp

@ -1473,53 +1473,29 @@ void __fastcall SetMissDir(int mi, int dir)
SetMissAnim(mi, missile[mi]._miAnimType);
}
// TODO: replace `int mi` parameter with `missile_graphic_id mi`
// to enable the compiler to optimize int to char properly
// check for example the calls in `InitMonsterGFX`
void __fastcall LoadMissileGFX(BYTE mi)
{
MisFileData *v1; // esi
unsigned char *v2; // eax
signed int v3; // ecx
int *v4; // edx
int v5; // edi
unsigned char v6; // cl
int v7; // eax
_DWORD *v8; // edi
int v9; // ebx
char arglist[256]; // [esp+8h] [ebp-100h]
v1 = &misfiledata[(unsigned char)mi];
if (v1->mFlags & MFLAG_ALLOW_SPECIAL) {
sprintf(arglist, "Missiles\\%s.CL2", v1->mName);
v2 = LoadFileInMem(arglist, 0);
v3 = 0;
if (v1->mAnimFAmt) {
v4 = (int *)v1->mAnimData;
do {
v5 = (int)&v2[*(_DWORD *)&v2[4 * v3++]];
*v4 = v5;
++v4;
} while (v3 < v1->mAnimFAmt);
}
char pszName[256];
int i;
BYTE *file;
MisFileData *mfd;
mfd = &misfiledata[mi];
if (mfd->mFlags & MFLAG_ALLOW_SPECIAL) {
sprintf(pszName, "Missiles\\%s.CEL", mfd->mName);
file = LoadFileInMem(pszName, 0);
for (i = 0; i < mfd->mAnimFAmt; i++)
mfd->mAnimData[i] = &file[((int *)file)[i]];
} else if (mfd->mAnimFAmt == 1) {
sprintf(pszName, "Missiles\\%s.CEL", mfd->mName);
if (!mfd->mAnimData[0])
mfd->mAnimData[0] = LoadFileInMem(pszName, 0);
} else {
v6 = v1->mAnimFAmt;
if (v6 == 1) {
sprintf(arglist, "Missiles\\%s.CL2", v1->mName);
if (!v1->mAnimData[0])
v1->mAnimData[0] = LoadFileInMem(arglist, 0);
} else {
v7 = 0;
if (v6) {
v8 = (unsigned int *)v1->mAnimData;
do {
v9 = v7 + 1;
sprintf(arglist, "Missiles\\%s%i.CL2", v1->mName, v7 + 1);
if (!*v8)
*v8 = (unsigned int)LoadFileInMem(arglist, 0);
v7 = v9;
++v8;
} while (v9 < v1->mAnimFAmt);
for (i = 0; i < mfd->mAnimFAmt; i++) {
sprintf(pszName, "Missiles\\%s%i.CEL", mfd->mName, i + 1);
if (!mfd->mAnimData[i]) {
file = LoadFileInMem(pszName, 0);
mfd->mAnimData[i] = file;
}
}
}

Loading…
Cancel
Save