Decompiled InitialiseHair() and InitialiseSpecialEffects()

- added macro for getting mesh: MESHES(slot, mesh).
- fixed duplicate array in vars.h.
- fixed lara left hand flare mesh.
This commit is contained in:
TokyoSU 2019-12-04 13:20:21 +01:00
parent 8a6dffe0d2
commit 04e93b1998
13 changed files with 220 additions and 140 deletions

View file

@ -72,10 +72,10 @@ void NewObjects()
obj->saveAnim = true;
obj->saveFlags = true;
Bones[obj->boneIndex + 192] |= ROT_Z;
Bones[obj->boneIndex + 192] |= ROT_Y;
Bones[obj->boneIndex + 208] |= ROT_Z;
Bones[obj->boneIndex + 208] |= ROT_Y;
Bones[obj->boneIndex + 48 * 4] |= ROT_Z;
Bones[obj->boneIndex + 48 * 4] |= ROT_Y;
Bones[obj->boneIndex + 52 * 4] |= ROT_Z;
Bones[obj->boneIndex + 52 * 4] |= ROT_Y;
}
obj = &Objects[ID_BAT];
@ -165,14 +165,14 @@ void NewObjects()
obj->saveAnim = true;
obj->saveFlags = true;
Bones[obj->boneIndex + 112] |= ROT_Y;
Bones[obj->boneIndex + 112] |= ROT_X;
Bones[obj->boneIndex + 352] |= ROT_Y;
Bones[obj->boneIndex + 352] |= ROT_X;
Bones[obj->boneIndex + 28 * 4] |= ROT_Y;
Bones[obj->boneIndex + 28 * 4] |= ROT_X;
Bones[obj->boneIndex + 88 * 4] |= ROT_Y;
Bones[obj->boneIndex + 88 * 4] |= ROT_X;
Meshes[obj->meshIndex + 36] = Meshes[Objects[ID_MESHSWAP1].meshIndex + 32];
Meshes[obj->meshIndex + 60] = Meshes[Objects[ID_MESHSWAP1].meshIndex + 56];
Meshes[obj->meshIndex + 36] = Meshes[Objects[ID_MESHSWAP1].meshIndex + 22];
Meshes[obj->meshIndex + 18 * 2] = Meshes[Objects[ID_MESHSWAP1].meshIndex + 16 * 2];
Meshes[obj->meshIndex + 30 * 2] = Meshes[Objects[ID_MESHSWAP1].meshIndex + 28 * 2];
Meshes[obj->meshIndex + 18 * 2] = Meshes[Objects[ID_MESHSWAP1].meshIndex + 11 * 2];
}
obj = &Objects[ID_BADDY2];
@ -191,10 +191,10 @@ void NewObjects()
obj->saveAnim = true;
obj->saveFlags = true;
Bones[obj->boneIndex + 112] |= ROT_Y;
Bones[obj->boneIndex + 112] |= ROT_X;
Bones[obj->boneIndex + 352] |= ROT_Y;
Bones[obj->boneIndex + 352] |= ROT_X;
Bones[obj->boneIndex + 28 * 4] |= ROT_Y;
Bones[obj->boneIndex + 28 * 4] |= ROT_X;
Bones[obj->boneIndex + 88 * 4] |= ROT_Y;
Bones[obj->boneIndex + 88 * 4] |= ROT_X;
}
obj = &Objects[ID_SAS_CAIRO];
@ -215,8 +215,8 @@ void NewObjects()
Bones[obj->boneIndex] |= ROT_Y;
Bones[obj->boneIndex] |= ROT_X;
Bones[obj->boneIndex + 112] |= ROT_Y;
Bones[obj->boneIndex + 112] |= ROT_X;
Bones[obj->boneIndex + 28 * 4] |= ROT_Y;
Bones[obj->boneIndex + 28 * 4] |= ROT_X;
}
obj = &Objects[ID_MUMMY];
@ -234,9 +234,9 @@ void NewObjects()
obj->saveAnim = true;
obj->saveFlags = true;
Bones[obj->boneIndex + 112] |= ROT_Y;
Bones[obj->boneIndex + 112] |= ROT_X;
Bones[obj->boneIndex + 288] |= ROT_Y;
Bones[obj->boneIndex + 28 * 4] |= ROT_Y;
Bones[obj->boneIndex + 28 * 4] |= ROT_X;
Bones[obj->boneIndex + 72 * 4] |= ROT_Y;
}
obj = &Objects[ID_QUAD];
@ -913,9 +913,9 @@ void NewObjects()
Bones[obj->boneIndex + 20 * 4] |= ROT_X | ROT_Y;
// TODO: check if constants are byte, short or int
Meshes[obj->meshIndex + 124] = Meshes[Objects[ID_MESHSWAP2].meshIndex + 120];
Meshes[obj->meshIndex + 148] = Meshes[Objects[ID_MESHSWAP2].meshIndex + 144];
Meshes[obj->meshIndex + 172] = Meshes[Objects[ID_MESHSWAP2].meshIndex + 168];
Meshes[obj->meshIndex + 60 * 2] = Meshes[Objects[ID_MESHSWAP2].meshIndex + 60 * 2];
Meshes[obj->meshIndex + 72 * 2] = Meshes[Objects[ID_MESHSWAP2].meshIndex + 72 * 2];
Meshes[obj->meshIndex + 84 * 2] = Meshes[Objects[ID_MESHSWAP2].meshIndex + 84 * 2];
}
obj = &Objects[ID_CROCODILE];
@ -2939,6 +2939,67 @@ void TrapObjects()
}
}
void InitialiseHair()
{
int* bone;
FirstHair = 1;
bone = &Bones[Objects[ID_HAIR].boneIndex];
Hairs[0].pos.yRot = 0;
Hairs[0].pos.xRot = -0x4000;
// normal hair
for (int i = 1; i < HAIR_SEGMENTS; i++, bone += 4)
{
Hairs[i].pos.xPos = *(bone + 1);
Hairs[i].pos.yPos = *(bone + 2);
Hairs[i].pos.zPos = *(bone + 3);
Hairs[i].pos.xRot = -0x4000;
Hairs[i].pos.yRot = 0;
Hairs[i].pos.zRot = 0;
//Hairs[i].hvel.x = 0;
//Hairs[i].hvel.y = 0;
//Hairs[i].hvel.z = 0;
}
}
void InitialiseSpecialEffects()
{
int i;
SPARKS* sptr;
memset(&Sparks, 0, MAX_SPARKS * sizeof(SPARKS));
memset(&FireSparks, 0, MAX_SPARKS_FIRE * sizeof(FIRE_SPARKS));
memset(&SmokeSparks, 0, MAX_SPARKS_SMOKE * sizeof(SMOKE_SPARKS));
memset(&GunShells, 0, MAX_GUNSHELL * sizeof(GUNSHELL_STRUCT));
memset(&GunFlashes, 0, (MAX_GUNFLASH * sizeof(GUNFLASH_STRUCT)) - sizeof(int)); // the size is 200 on IDA (without -4 it's 204 ??)
memset(&Debris, 0, MAX_DEBRIS * sizeof(DEBRIS_STRUCT));
memset(&Blood, 0, MAX_SPARKS_BLOOD * sizeof(BLOOD_STRUCT));
memset(&Splashes, 0, MAX_SPLASH * sizeof(SPLASH_STRUCT));
memset(&Ripples, 0, MAX_RIPPLES * sizeof(RIPPLE_STRUCT));
memset(&Bubbles, 0, MAX_BUBBLES * sizeof(BUBBLE_STRUCT));
memset(&Drips, 0, MAX_DRIPS * sizeof(DRIP_STRUCT));
memset(&ShockWaves, 0, MAX_SHOCKWAVE * sizeof(SHOCKWAVE_STRUCT));
sptr = &Sparks[0];
for (i = 0; i < MAX_SPARKS; i++)
{
sptr->on = false;
sptr->dynamic = -1;
sptr++;
}
NextFireSpark = 1;
NextSmokeSpark = 0;
NextGunShell = 0;
NextBubble = 0;
NextDrip = 0;
NextDebris = 0;
NextBlood = 0;
NextItem = NO_ITEM;
}
void PickupObjects()
{
OBJECT_INFO* obj;
@ -3569,14 +3630,14 @@ void InitialiseObjects()
// Reset MIP flag so we can reuse slots
//for (short i = 0; i < ID_NUMBER_OBJECTS; i++)
// Objects[i].objectMip = NULL;
// New objects imported from old TRs
NewObjects();
// User defined objects
CustomObjects();
InitialiseHairs();
InitialiseHair();
InitialiseSpecialEffects();
NumRPickups = 0;