mirror of
https://github.com/TombEngine/TombEngine.git
synced 2025-05-11 21:16:55 +03:00
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:
parent
8a6dffe0d2
commit
04e93b1998
13 changed files with 220 additions and 140 deletions
|
@ -7,13 +7,13 @@
|
||||||
PISTOL_DEF PistolsTable[4] =
|
PISTOL_DEF PistolsTable[4] =
|
||||||
{
|
{
|
||||||
{ ID_LARA, 0, 0, 0, 0 },
|
{ ID_LARA, 0, 0, 0, 0 },
|
||||||
{ ID_PISTOLS_ANIM, 4, 5, 0xD, 0x18 },
|
{ ID_PISTOLS_ANIM, 4, 5, 13, 24 },
|
||||||
{ ID_REVOLVER_ANIM , 7, 8, 0xF, 0x1D },
|
{ ID_REVOLVER_ANIM , 7, 8, 15, 29 },
|
||||||
{ ID_UZI_ANIM, 4, 5, 0xD, 0x18 }
|
{ ID_UZI_ANIM, 4, 5, 13, 24 }
|
||||||
};
|
};
|
||||||
|
|
||||||
int UziLeft;
|
bool UziLeft;
|
||||||
int UziRight;
|
bool UziRight;
|
||||||
|
|
||||||
void AnimatePistols(int weaponType)
|
void AnimatePistols(int weaponType)
|
||||||
{
|
{
|
||||||
|
@ -302,7 +302,7 @@ void PistolHandler(int weaponType)
|
||||||
|
|
||||||
void undraw_pistol_mesh_right(int weaponType)
|
void undraw_pistol_mesh_right(int weaponType)
|
||||||
{
|
{
|
||||||
Lara.meshPtrs[HAND_R] = Meshes[Objects[ID_LARA].meshIndex + HAND_R * 2];
|
LARA_MESHES(ID_LARA, HAND_R);
|
||||||
|
|
||||||
switch (weaponType)
|
switch (weaponType)
|
||||||
{
|
{
|
||||||
|
@ -323,7 +323,7 @@ void undraw_pistol_mesh_left(int weaponType)
|
||||||
{
|
{
|
||||||
if (weaponType != WEAPON_REVOLVER)
|
if (weaponType != WEAPON_REVOLVER)
|
||||||
{
|
{
|
||||||
Lara.meshPtrs[HAND_L] = Meshes[Objects[ID_LARA].meshIndex + HAND_L * 2];
|
LARA_MESHES(ID_LARA, HAND_L);
|
||||||
|
|
||||||
switch (weaponType)
|
switch (weaponType)
|
||||||
{
|
{
|
||||||
|
@ -340,14 +340,12 @@ void undraw_pistol_mesh_left(int weaponType)
|
||||||
void draw_pistol_meshes(int weaponType)
|
void draw_pistol_meshes(int weaponType)
|
||||||
{
|
{
|
||||||
Lara.holster = ID_LARA_HOLSTERS;
|
Lara.holster = ID_LARA_HOLSTERS;
|
||||||
|
|
||||||
Lara.meshPtrs[HAND_R] = Meshes[Objects[WeaponObjectMesh(weaponType)].meshIndex + HAND_R * 2];
|
LARA_MESHES(WeaponObjectMesh(weaponType), HAND_R);
|
||||||
//Lara.meshPtrs[THIGH_R] = Meshes[Objects[ID_LARA].meshIndex + THIGH_R * 2];
|
|
||||||
|
|
||||||
if (weaponType != WEAPON_REVOLVER)
|
if (weaponType != WEAPON_REVOLVER)
|
||||||
{
|
{
|
||||||
Lara.meshPtrs[HAND_L] = Meshes[Objects[WeaponObjectMesh(weaponType)].meshIndex + HAND_L * 2];
|
LARA_MESHES(WeaponObjectMesh(weaponType), HAND_L);
|
||||||
//Lara.meshPtrs[THIGH_L] = Meshes[Objects[ID_LARA].meshIndex + THIGH_L * 2];
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -289,16 +289,11 @@ void AimWeapon(WEAPON_INFO* winfo, LARA_ARM* arm)
|
||||||
void SmashItem(short itemNum)
|
void SmashItem(short itemNum)
|
||||||
{
|
{
|
||||||
ITEM_INFO* item = &Items[itemNum];
|
ITEM_INFO* item = &Items[itemNum];
|
||||||
short objectNumber = item->objectNumber;
|
if (item->objectNumber >= ID_SMASH_OBJECT1 && item->objectNumber <= ID_SMASH_OBJECT8)
|
||||||
if (objectNumber >= ID_SMASH_OBJECT1 && objectNumber <= ID_SMASH_OBJECT8)
|
{
|
||||||
SmashObject(itemNum);
|
SmashObject(itemNum);
|
||||||
|
}
|
||||||
/*ITEM_INFO* item = &Items[itemNum];
|
/*else if (item->objectNumber == ID_BELL_SWITCH)
|
||||||
short objectNumber = item->objectNumber;
|
|
||||||
printf("SmashItem\n");
|
|
||||||
if (objectNumber >= ID_SMASH_OBJECT1 && objectNumber <= ID_SMASH_OBJECT8)
|
|
||||||
SmashObject(itemNum);
|
|
||||||
else if (objectNumber == ID_BELL_SWITCH)
|
|
||||||
{
|
{
|
||||||
if (item->status != ITEM_ACTIVE)
|
if (item->status != ITEM_ACTIVE)
|
||||||
{
|
{
|
||||||
|
@ -310,8 +305,6 @@ void SmashItem(short itemNum)
|
||||||
|
|
||||||
void LaraGun()
|
void LaraGun()
|
||||||
{
|
{
|
||||||
int meshIndex;
|
|
||||||
|
|
||||||
if (Lara.leftArm.flash_gun > 0)
|
if (Lara.leftArm.flash_gun > 0)
|
||||||
--Lara.leftArm.flash_gun;
|
--Lara.leftArm.flash_gun;
|
||||||
if (Lara.rightArm.flash_gun > 0)
|
if (Lara.rightArm.flash_gun > 0)
|
||||||
|
@ -323,11 +316,8 @@ void LaraGun()
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
int gunStatus = Lara.gunStatus;
|
|
||||||
|
|
||||||
if (LaraItem->hitPoints <= 0)
|
if (LaraItem->hitPoints <= 0)
|
||||||
{
|
{
|
||||||
gunStatus = LG_NO_ARMS;
|
|
||||||
Lara.gunStatus = LG_NO_ARMS;
|
Lara.gunStatus = LG_NO_ARMS;
|
||||||
}
|
}
|
||||||
else if (!Lara.gunStatus)
|
else if (!Lara.gunStatus)
|
||||||
|
@ -447,7 +437,7 @@ void LaraGun()
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LG_UNDRAW_GUNS:
|
case LG_UNDRAW_GUNS:
|
||||||
Lara.meshPtrs[HEAD] = Meshes[Objects[ID_LARA].meshIndex + 14 * 2];
|
LARA_MESHES(ID_LARA, HEAD);
|
||||||
|
|
||||||
switch (Lara.gunType)
|
switch (Lara.gunType)
|
||||||
{
|
{
|
||||||
|
@ -477,20 +467,18 @@ void LaraGun()
|
||||||
|
|
||||||
case LG_READY:
|
case LG_READY:
|
||||||
if (!(TrInput & IN_ACTION))
|
if (!(TrInput & IN_ACTION))
|
||||||
meshIndex = Objects[ID_LARA].meshIndex;
|
LARA_MESHES(ID_LARA, HEAD);
|
||||||
else
|
else
|
||||||
meshIndex = Objects[ID_LARA_SCREAM].meshIndex;
|
LARA_MESHES(ID_LARA_SCREAM, HEAD);
|
||||||
Lara.meshPtrs[HEAD] = Meshes[meshIndex + HEAD * 2];
|
|
||||||
|
|
||||||
if (Camera.type != CAMERA_TYPE::CINEMATIC_CAMERA && Camera.type != CAMERA_TYPE::LOOK_CAMERA &&
|
if (Camera.type != CAMERA_TYPE::CINEMATIC_CAMERA && Camera.type != CAMERA_TYPE::LOOK_CAMERA && Camera.type != CAMERA_TYPE::HEAVY_CAMERA)
|
||||||
Camera.type != CAMERA_TYPE::HEAVY_CAMERA)
|
|
||||||
Camera.type = CAMERA_TYPE::COMBAT_CAMERA;
|
Camera.type = CAMERA_TYPE::COMBAT_CAMERA;
|
||||||
|
|
||||||
if (TrInput & IN_ACTION)
|
if (TrInput & IN_ACTION)
|
||||||
{
|
{
|
||||||
if (!GetAmmo(Lara.gunType))
|
if (!*GetAmmo(Lara.gunType))
|
||||||
{
|
{
|
||||||
Lara.requestGunType = Objects[ID_PISTOLS_ITEM].loaded;
|
Lara.requestGunType = (Objects[ID_PISTOLS_ITEM].loaded == true) ? WEAPON_PISTOLS : WEAPON_NONE;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -549,7 +537,7 @@ void LaraGun()
|
||||||
case LG_HANDS_BUSY:
|
case LG_HANDS_BUSY:
|
||||||
if (Lara.gunType == WEAPON_FLARE)
|
if (Lara.gunType == WEAPON_FLARE)
|
||||||
{
|
{
|
||||||
if (Lara.meshPtrs[HAND_L] == Meshes[Objects[ID_FLARE_ANIM].meshIndex + HAND_L * 2])
|
if (CHECK_LARA_MESHES(ID_FLARE_ANIM, HAND_L))
|
||||||
{
|
{
|
||||||
Lara.flareControlLeft = (g_LaraExtra.Vehicle != NO_ITEM || CheckForHoldingState(LaraItem->currentAnimState));
|
Lara.flareControlLeft = (g_LaraExtra.Vehicle != NO_ITEM || CheckForHoldingState(LaraItem->currentAnimState));
|
||||||
DoFlareInHand(Lara.flareAge);
|
DoFlareInHand(Lara.flareAge);
|
||||||
|
@ -623,7 +611,7 @@ int WeaponObjectMesh(int weaponType)
|
||||||
switch (weaponType)
|
switch (weaponType)
|
||||||
{
|
{
|
||||||
case WEAPON_REVOLVER:
|
case WEAPON_REVOLVER:
|
||||||
return ((g_LaraExtra.Weapons[WEAPON_REVOLVER].HasLasersight) != 0 ? ID_LARA_REVOLVER_LASER : ID_REVOLVER_ANIM);
|
return (g_LaraExtra.Weapons[WEAPON_REVOLVER].HasLasersight == true ? ID_LARA_REVOLVER_LASER : ID_REVOLVER_ANIM);
|
||||||
|
|
||||||
case WEAPON_UZI:
|
case WEAPON_UZI:
|
||||||
return ID_UZI_ANIM;
|
return ID_UZI_ANIM;
|
||||||
|
@ -635,7 +623,7 @@ int WeaponObjectMesh(int weaponType)
|
||||||
return ID_HK_ANIM;
|
return ID_HK_ANIM;
|
||||||
|
|
||||||
case WEAPON_CROSSBOW:
|
case WEAPON_CROSSBOW:
|
||||||
return ((g_LaraExtra.Weapons[WEAPON_CROSSBOW].HasLasersight) != 0 ? ID_LARA_CROSSBOW_LASER : ID_CROSSBOW_ANIM);
|
return (g_LaraExtra.Weapons[WEAPON_CROSSBOW].HasLasersight == true ? ID_LARA_CROSSBOW_LASER : ID_CROSSBOW_ANIM);
|
||||||
|
|
||||||
case WEAPON_GRENADE_LAUNCHER:
|
case WEAPON_GRENADE_LAUNCHER:
|
||||||
return ID_GRENADE_ANIM;
|
return ID_GRENADE_ANIM;
|
||||||
|
@ -696,7 +684,7 @@ int FireWeapon(int weaponType, ITEM_INFO* target, ITEM_INFO* src, short* angles)
|
||||||
pos.yPos = 0;
|
pos.yPos = 0;
|
||||||
pos.zPos = 0;
|
pos.zPos = 0;
|
||||||
|
|
||||||
GetLaraJointPosition((PHD_VECTOR*)&pos, 11);
|
GetLaraJointPosition((PHD_VECTOR*)&pos, LJ_RHAND);
|
||||||
short* ammo = GetAmmo(weaponType);
|
short* ammo = GetAmmo(weaponType);
|
||||||
if (!*ammo)
|
if (!*ammo)
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -708,9 +696,9 @@ int FireWeapon(int weaponType, ITEM_INFO* target, ITEM_INFO* src, short* angles)
|
||||||
pos.xPos = src->pos.xPos;
|
pos.xPos = src->pos.xPos;
|
||||||
pos.yPos = src->pos.yPos - weapon->gunHeight;
|
pos.yPos = src->pos.yPos - weapon->gunHeight;
|
||||||
pos.zPos = src->pos.zPos;
|
pos.zPos = src->pos.zPos;
|
||||||
int r = (int)((GetRandomControl() - 16384) * weapon->shotAccuracy) / 65536;
|
int r = (int)((GetRandomControl() - 0x4000) * weapon->shotAccuracy) / 0x10000;
|
||||||
pos.xRot = angles[1] + (short)r;
|
pos.xRot = angles[1] + (short)r;
|
||||||
r = (int)((GetRandomControl() - 16384) * weapon->shotAccuracy) / 65536;
|
r = (int)((GetRandomControl() - 0x4000) * weapon->shotAccuracy) / 0x10000;
|
||||||
pos.yRot = angles[0] + (short)r;
|
pos.yRot = angles[0] + (short)r;
|
||||||
pos.zRot = 0;
|
pos.zRot = 0;
|
||||||
|
|
||||||
|
@ -751,9 +739,9 @@ int FireWeapon(int weaponType, ITEM_INFO* target, ITEM_INFO* src, short* angles)
|
||||||
{
|
{
|
||||||
GAME_VECTOR vDest;
|
GAME_VECTOR vDest;
|
||||||
|
|
||||||
vDest.x = vSrc.x + ((*(MatrixPtr + M20) * weapon->targetDist) >> W2V_SHIFT);
|
vDest.x = vSrc.x + ((MatrixPtr[M20] * weapon->targetDist) >> W2V_SHIFT);
|
||||||
vDest.y = vSrc.y + ((*(MatrixPtr + M21) * weapon->targetDist) >> W2V_SHIFT);
|
vDest.y = vSrc.y + ((MatrixPtr[M21] * weapon->targetDist) >> W2V_SHIFT);
|
||||||
vDest.z = vSrc.z + ((*(MatrixPtr + M22) * weapon->targetDist) >> W2V_SHIFT);
|
vDest.z = vSrc.z + ((MatrixPtr[M22] * weapon->targetDist) >> W2V_SHIFT);
|
||||||
|
|
||||||
GetTargetOnLOS(&vSrc, &vDest, 0, 1);
|
GetTargetOnLOS(&vSrc, &vDest, 0, 1);
|
||||||
|
|
||||||
|
@ -765,16 +753,13 @@ int FireWeapon(int weaponType, ITEM_INFO* target, ITEM_INFO* src, short* angles)
|
||||||
|
|
||||||
GAME_VECTOR vDest;
|
GAME_VECTOR vDest;
|
||||||
|
|
||||||
vDest.x = vSrc.x + ((*(MatrixPtr + M20) * bestDistance) >> W2V_SHIFT);
|
vDest.x = vSrc.x + ((MatrixPtr[M20] * bestDistance) >> W2V_SHIFT);
|
||||||
vDest.y = vSrc.y + ((*(MatrixPtr + M21) * bestDistance) >> W2V_SHIFT);
|
vDest.y = vSrc.y + ((MatrixPtr[M21] * bestDistance) >> W2V_SHIFT);
|
||||||
vDest.z = vSrc.z + ((*(MatrixPtr + M22) * bestDistance) >> W2V_SHIFT);
|
vDest.z = vSrc.z + ((MatrixPtr[M22] * bestDistance) >> W2V_SHIFT);
|
||||||
|
|
||||||
// TODO: enable it when the slot is created !
|
// TODO: enable it when the slot is created !
|
||||||
/*if (target->objectNumber != ID_SHIVA && target->objectNumber != ID_ARMY_WINSTON && target->objectNumber != ID_LONDONBOSS && (target->objectNumber != ID_TRIBEBOSS || TribeBossShieldOn == false)) // Hit TRIBEBOSS's shield if on.
|
/*
|
||||||
{
|
if (target->objectNumber == ID_TRIBEBOSS)
|
||||||
HitTarget(target, &vDest, weapon->damage, 0);
|
|
||||||
}
|
|
||||||
else if (target->objectNumber == ID_TRIBEBOSS)
|
|
||||||
{
|
{
|
||||||
long dx, dy, dz;
|
long dx, dy, dz;
|
||||||
|
|
||||||
|
@ -816,15 +801,17 @@ int FireWeapon(int weaponType, ITEM_INFO* target, ITEM_INFO* src, short* angles)
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void find_target_point(ITEM_INFO* item, GAME_VECTOR* target)
|
void find_target_point(ITEM_INFO* item, GAME_VECTOR* target)
|
||||||
{
|
{
|
||||||
short* bounds = GetBestFrame(item);
|
short* bounds = GetBestFrame(item);
|
||||||
|
|
||||||
int x = (int)((*(bounds + 0) + *(bounds + 1)) / 2);
|
int x = (int)((bounds[0] + bounds[1]) / 2);
|
||||||
int y = (int)(*(bounds + 2) + (*(bounds + 3) - *(bounds + 2)) / 3);
|
int y = (int)(bounds[2] + (bounds[3] - bounds[2]) / 3);
|
||||||
int z = (int)((*(bounds + 4) + *(bounds + 5)) / 2);
|
int z = (int)((bounds[4] + bounds[5]) / 2);
|
||||||
|
|
||||||
int c = COS(item->pos.yRot);
|
int c = COS(item->pos.yRot);
|
||||||
int s = SIN(item->pos.yRot);
|
int s = SIN(item->pos.yRot);
|
||||||
|
@ -871,33 +858,33 @@ void LaraTargetInfo(WEAPON_INFO* weapon)
|
||||||
if (LOS(&pos, &targetPoint))
|
if (LOS(&pos, &targetPoint))
|
||||||
{
|
{
|
||||||
if (angles[0] >= weapon->lockAngles[0]
|
if (angles[0] >= weapon->lockAngles[0]
|
||||||
&& angles[0] <= weapon->lockAngles[1]
|
&& angles[0] <= weapon->lockAngles[1]
|
||||||
&& angles[1] >= weapon->lockAngles[2]
|
&& angles[1] >= weapon->lockAngles[2]
|
||||||
&& angles[1] <= weapon->lockAngles[3])
|
&& angles[1] <= weapon->lockAngles[3])
|
||||||
{
|
{
|
||||||
Lara.rightArm.lock = 1;
|
Lara.rightArm.lock = true;
|
||||||
Lara.leftArm.lock = 1;
|
Lara.leftArm.lock = true;
|
||||||
Lara.targetAngles[0] = angles[0];
|
Lara.targetAngles[0] = angles[0];
|
||||||
Lara.targetAngles[1] = angles[1];
|
Lara.targetAngles[1] = angles[1];
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Lara.leftArm.lock
|
if (Lara.leftArm.lock
|
||||||
&& (angles[0] < weapon->leftAngles[0]
|
&& (angles[0] < weapon->leftAngles[0]
|
||||||
|| angles[0] > weapon->leftAngles[1]
|
|| angles[0] > weapon->leftAngles[1]
|
||||||
|| angles[1] < weapon->leftAngles[2]
|
|| angles[1] < weapon->leftAngles[2]
|
||||||
|| angles[1] > weapon->leftAngles[3]))
|
|| angles[1] > weapon->leftAngles[3]))
|
||||||
{
|
{
|
||||||
Lara.leftArm.lock = 0;
|
Lara.leftArm.lock = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Lara.rightArm.lock
|
if (Lara.rightArm.lock
|
||||||
&& (angles[0] < weapon->rightAngles[0]
|
&& (angles[0] < weapon->rightAngles[0]
|
||||||
|| angles[0] > weapon->rightAngles[1]
|
|| angles[0] > weapon->rightAngles[1]
|
||||||
|| angles[1] < weapon->rightAngles[2]
|
|| angles[1] < weapon->rightAngles[2]
|
||||||
|| angles[1] > weapon->rightAngles[3]))
|
|| angles[1] > weapon->rightAngles[3]))
|
||||||
{
|
{
|
||||||
Lara.rightArm.lock = 0;
|
Lara.rightArm.lock = false;
|
||||||
Lara.targetAngles[0] = angles[0];
|
Lara.targetAngles[0] = angles[0];
|
||||||
Lara.targetAngles[1] = angles[1];
|
Lara.targetAngles[1] = angles[1];
|
||||||
return;
|
return;
|
||||||
|
@ -905,8 +892,8 @@ void LaraTargetInfo(WEAPON_INFO* weapon)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Lara.rightArm.lock = 0;
|
Lara.rightArm.lock = false;
|
||||||
Lara.leftArm.lock = 0;
|
Lara.leftArm.lock = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
Lara.targetAngles[0] = angles[0];
|
Lara.targetAngles[0] = angles[0];
|
||||||
|
|
|
@ -91,11 +91,11 @@ void ready_flare()//4A3E4(<), 4A848(<) (F)
|
||||||
|
|
||||||
void undraw_flare_meshes()
|
void undraw_flare_meshes()
|
||||||
{
|
{
|
||||||
Lara.meshPtrs[LM_LHAND] = Meshes[Objects[ID_LARA].meshIndex + 104];
|
LARA_MESHES(ID_LARA, HAND_L);
|
||||||
}
|
}
|
||||||
void draw_flare_meshes()//4A394(<), 4A7F8(<) (F)
|
void draw_flare_meshes()//4A394(<), 4A7F8(<) (F)
|
||||||
{
|
{
|
||||||
Lara.meshPtrs[LM_LHAND] = Meshes[Objects[ID_FLARE_ANIM].meshIndex + 104];
|
LARA_MESHES(ID_FLARE_ANIM, HAND_L);
|
||||||
}
|
}
|
||||||
|
|
||||||
void undraw_flare()//4A108, 4A56C
|
void undraw_flare()//4A108, 4A56C
|
||||||
|
|
|
@ -561,7 +561,7 @@ void LaraInitialiseMeshes()//4A684, 4AAE8 (F)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < 15; i++)
|
for (int i = 0; i < 15; i++)
|
||||||
{
|
{
|
||||||
Lara.meshPtrs[i] = Meshes[Objects[ID_LARA].meshIndex + 2 * i] = Meshes[Objects[ID_LARA_SKIN].meshIndex + 2 * i];
|
INIT_LARA_MESHES(i, ID_LARA, ID_LARA_SKIN);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*if (gfCurrentLevel >= LVL5_GALLOWS_TREE && gfCurrentLevel <= LVL5_OLD_MILL)
|
/*if (gfCurrentLevel >= LVL5_GALLOWS_TREE && gfCurrentLevel <= LVL5_OLD_MILL)
|
||||||
|
|
|
@ -1,5 +1,8 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#define HAIR_SEGMENTS 7 // only classic lara (young lara have more segments !)
|
||||||
|
#define DOUBLE_HAIR_SEGMENTS 14
|
||||||
|
|
||||||
#define TEXTURE_PAGE (256 * 256)
|
#define TEXTURE_PAGE (256 * 256)
|
||||||
|
|
||||||
#define W2V_SHIFT 14 // Shift scale of View.Frame to World.Frame
|
#define W2V_SHIFT 14 // Shift scale of View.Frame to World.Frame
|
||||||
|
@ -42,6 +45,22 @@
|
||||||
#define MAX_DRAW_STATICS 16384
|
#define MAX_DRAW_STATICS 16384
|
||||||
#define MAX_BONES 32
|
#define MAX_BONES 32
|
||||||
#define MAX_SPRITES 16384
|
#define MAX_SPRITES 16384
|
||||||
|
#define MAX_SPARKS 1024 // 128 normally
|
||||||
|
#define MAX_SPARKS_FIRE 20
|
||||||
|
#define MAX_FIRE_LIST 32 // FIRE_SPARKS list
|
||||||
|
#define MAX_SPARKS_SMOKE 64
|
||||||
|
#define MAX_SPARKS_BLOOD 64
|
||||||
|
#define MAX_GUNSHELL 24
|
||||||
|
#define MAX_GUNFLASH 6
|
||||||
|
#define MAX_DRIPS 32
|
||||||
|
#define MAX_BUBBLES 40
|
||||||
|
#define MAX_DYNAMICS 64
|
||||||
|
#define MAX_SPLASH 4
|
||||||
|
#define MAX_RIPPLES 32
|
||||||
|
#define MAX_CAMERA 18
|
||||||
|
#define MAX_SHOCKWAVE 16
|
||||||
|
#define MAX_EFFECTS 100
|
||||||
|
#define MAX_DEBRIS 256
|
||||||
#define NO_ROOM 0xFF
|
#define NO_ROOM 0xFF
|
||||||
#define NO_HEIGHT (-0x7F00)
|
#define NO_HEIGHT (-0x7F00)
|
||||||
#define NUM_PICKUPS 64
|
#define NUM_PICKUPS 64
|
||||||
|
|
|
@ -11,4 +11,9 @@
|
||||||
|
|
||||||
#define ADD_PTR(p, t, n) p = (t*)((char*)(p) + (ptrdiff_t)(n));
|
#define ADD_PTR(p, t, n) p = (t*)((char*)(p) + (ptrdiff_t)(n));
|
||||||
|
|
||||||
#define ZONE(A) (((A) >> (WALL_SIZE - 2)) - 1)
|
#define ZONE(A) (((A) >> (WALL_SIZE - 2)) - 1)
|
||||||
|
|
||||||
|
#define MESHES(slot, mesh) Meshes[Objects[slot].meshIndex + mesh * 2]
|
||||||
|
#define LARA_MESHES(slot, mesh) Lara.meshPtrs[mesh] = MESHES(slot, mesh)
|
||||||
|
#define CHECK_LARA_MESHES(slot, mesh) Lara.meshPtrs[mesh] == MESHES(slot, mesh)
|
||||||
|
#define INIT_LARA_MESHES(mesh, to, from) Lara.meshPtrs[mesh] = LARA_MESHES(to, mesh) = LARA_MESHES(from, mesh)
|
|
@ -122,6 +122,7 @@ typedef struct item_light_t
|
||||||
typedef struct hair_struct
|
typedef struct hair_struct
|
||||||
{
|
{
|
||||||
PHD_3DPOS pos;
|
PHD_3DPOS pos;
|
||||||
|
//PHD_VECTOR hvel;
|
||||||
byte unknown[24];
|
byte unknown[24];
|
||||||
} HAIR_STRUCT;
|
} HAIR_STRUCT;
|
||||||
|
|
||||||
|
@ -156,10 +157,10 @@ typedef struct ai_info_t
|
||||||
} AI_INFO;
|
} AI_INFO;
|
||||||
|
|
||||||
typedef struct bite_info_t { // Offset into given Mesh
|
typedef struct bite_info_t { // Offset into given Mesh
|
||||||
int x; // where Baddie kicks off Bite Effect
|
int x; // where Baddie kicks off Bite Effect
|
||||||
int y;
|
int y;
|
||||||
int z;
|
int z;
|
||||||
int meshNum;
|
int meshNum;
|
||||||
} BITE_INFO;
|
} BITE_INFO;
|
||||||
|
|
||||||
typedef struct lot_info_t
|
typedef struct lot_info_t
|
||||||
|
|
|
@ -2,6 +2,8 @@
|
||||||
|
|
||||||
#include "..\Game\sound.h"
|
#include "..\Game\sound.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#define Camera VAR_U_(0x00EEF940, CAMERA_INFO)
|
#define Camera VAR_U_(0x00EEF940, CAMERA_INFO)
|
||||||
#define ForcedFixedCamera VAR_U_(0x00EEFA20, GAME_VECTOR)
|
#define ForcedFixedCamera VAR_U_(0x00EEFA20, GAME_VECTOR)
|
||||||
#define UseForcedFixedCamera VAR_U_(0x00EEFA50, char)
|
#define UseForcedFixedCamera VAR_U_(0x00EEFA50, char)
|
||||||
|
@ -53,7 +55,7 @@
|
||||||
#define LaraItem VAR_U_(0x00E5BF08, ITEM_INFO*)
|
#define LaraItem VAR_U_(0x00E5BF08, ITEM_INFO*)
|
||||||
#define Lara VAR_U_(0x00E5BD60, LARA_INFO)
|
#define Lara VAR_U_(0x00E5BD60, LARA_INFO)
|
||||||
#define LaraDrawType VAR_U_(0x00EEEAD0, char)
|
#define LaraDrawType VAR_U_(0x00EEEAD0, char)
|
||||||
#define Hairs ARRAY_(0x00E5C000, HAIR_STRUCT, [14])
|
#define Hairs ARRAY_(0x00E5C000, HAIR_STRUCT, [DOUBLE_HAIR_SEGMENTS])
|
||||||
#define gfNumMips VAR_U_(0x0051CE37, char)
|
#define gfNumMips VAR_U_(0x0051CE37, char)
|
||||||
#define Frames VAR_U_(0x00875174, short*)
|
#define Frames VAR_U_(0x00875174, short*)
|
||||||
#define gfMips ARRAY_(0x00E5C2C0, char, [8])
|
#define gfMips ARRAY_(0x00E5C2C0, char, [8])
|
||||||
|
@ -109,14 +111,10 @@
|
||||||
#define nFrames VAR_U_(0x005082C4, int)
|
#define nFrames VAR_U_(0x005082C4, int)
|
||||||
#define GameStatus VAR_U_(0x00E5C2B0, int)
|
#define GameStatus VAR_U_(0x00E5C2B0, int)
|
||||||
#define GotLaraSpheres VAR_U_(0x00E51F2E, byte)
|
#define GotLaraSpheres VAR_U_(0x00E51F2E, byte)
|
||||||
#define EffectRoutines ARRAY_(0x00507964, EFFECT_ROUTINE, [100])
|
#define EffectRoutines ARRAY_(0x00507964, EFFECT_ROUTINE, [MAX_EFFECTS])
|
||||||
#define DashTimer VAR_U_(0x00E5BF04, short)
|
#define DashTimer VAR_U_(0x00E5BF04, short)
|
||||||
#define LaraCollisionRoutines ARRAY_(0x005089A8, LARA_COLLISION_ROUTINE, [500])
|
#define LaraCollisionRoutines ARRAY_(0x005089A8, LARA_COLLISION_ROUTINE, [500])
|
||||||
#define LaraControlRoutines ARRAY_(0x0050877C, LARA_CONTROL_ROUTINE, [500])
|
#define LaraControlRoutines ARRAY_(0x0050877C, LARA_CONTROL_ROUTINE, [500])
|
||||||
#define ShockWaves ARRAY_(0x00E4C1A0, SHOCKWAVE_STRUCT, [16])
|
|
||||||
#define Bubbles ARRAY_(0x00E4D160, BUBBLE_STRUCT, [40])
|
|
||||||
#define Ripples ARRAY_(0x00E5C600, RIPPLE_STRUCT, [32])
|
|
||||||
#define Blood ARRAY_(0x00E4C9C0, BLOOD_STRUCT, [32])
|
|
||||||
#define CurrentFOV VAR_U_(0x00E4F504, short)
|
#define CurrentFOV VAR_U_(0x00E4F504, short)
|
||||||
#define SpotCam ARRAY_(0x00E4F6C0, SPOTCAM, [64])
|
#define SpotCam ARRAY_(0x00E4F6C0, SPOTCAM, [64])
|
||||||
#define CurrentSplineCamera VAR_U_(0x00E4F500, short)
|
#define CurrentSplineCamera VAR_U_(0x00E4F500, short)
|
||||||
|
@ -147,20 +145,30 @@
|
||||||
#define Unknown_00E6CAE8 VAR_U_(0x00E6CAE8, int)
|
#define Unknown_00E6CAE8 VAR_U_(0x00E6CAE8, int)
|
||||||
#define PhdWindowXmax VAR_U_(0x0055D218, short)
|
#define PhdWindowXmax VAR_U_(0x0055D218, short)
|
||||||
#define PhdWindowYmax VAR_U_(0x0055D240, short)
|
#define PhdWindowYmax VAR_U_(0x0055D240, short)
|
||||||
#define Fires ARRAY_(0x00E4C7A0, FIRE_LIST, [32])
|
#define Fires ARRAY_(0x00E4C7A0, FIRE_LIST, [MAX_FIRE_LIST])
|
||||||
#define Dynamics ARRAY_(0x00E6C3E0, DYNAMIC, [64])
|
#define Dynamics ARRAY_(0x00E6C3E0, DYNAMIC, [MAX_DYNAMICS])
|
||||||
#define NumDynamics VAR_U_(0x00E6D82C, int)
|
#define NumDynamics VAR_U_(0x00E6D82C, int)
|
||||||
#define Sprites VAR_U_(0x008751B4, SPRITE*)
|
#define Sprites VAR_U_(0x008751B4, SPRITE*)
|
||||||
#define FireSparks ARRAY_(0x00E4CE40, FIRE_SPARKS, [20])
|
#define FireSparks ARRAY_(0x00E4CE40, FIRE_SPARKS, [MAX_SPARKS_FIRE])
|
||||||
#define NextFreeFireSpark VAR_U_(0x0050A17C, short)
|
#define NextFreeFireSpark VAR_U_(0x0050A17C, short)
|
||||||
#define SmokeSparks ARRAY_(0x00E4B940, SMOKE_SPARKS, [32])
|
#define SmokeSparks ARRAY_(0x00E4B940, SMOKE_SPARKS, [MAX_SPARKS_SMOKE])
|
||||||
#define Blood ARRAY_(0x00E4C9C0, BLOOD_STRUCT, [32])
|
#define Blood ARRAY_(0x00E4C9C0, BLOOD_STRUCT, [MAX_SPARKS_BLOOD])
|
||||||
#define GunShells ARRAY_(0x00E4BEC0, GUNSHELL_STRUCT, [24])
|
#define GunShells ARRAY_(0x00E4BEC0, GUNSHELL_STRUCT, [MAX_GUNSHELL])
|
||||||
#define Sparks ARRAY_(0x00E5F380, SPARKS, [128])
|
#define GunFlashes ARRAY_(0x00E4D660, GUNFLASH_STRUCT, [MAX_GUNFLASH])
|
||||||
#define Drips ARRAY_(0x00E4D740, DRIP_STRUCT, [32])
|
#define Sparks ARRAY_(0x00E5F380, SPARKS, [MAX_SPARKS])
|
||||||
#define Bubbles ARRAY_(0x00E4D160, BUBBLE_STRUCT, [40])
|
#define Drips ARRAY_(0x00E4D740, DRIP_STRUCT, [MAX_DRIPS])
|
||||||
#define Splashes ARRAY_(0x00E6CA00, SPLASH_STRUCT, [4])
|
#define Bubbles ARRAY_(0x00E4D160, BUBBLE_STRUCT, [MAX_BUBBLES])
|
||||||
#define Ripples ARRAY_(0x00E5C600, RIPPLE_STRUCT, [32])
|
#define Splashes ARRAY_(0x00E6CA00, SPLASH_STRUCT, [MAX_SPLASH])
|
||||||
|
#define Ripples ARRAY_(0x00E5C600, RIPPLE_STRUCT, [MAX_RIPPLES])
|
||||||
|
#define ShockWaves ARRAY_(0x00E4C1A0, SHOCKWAVE_STRUCT, [MAX_SHOCKWAVE])
|
||||||
|
#define NextFireSpark VAR_U_(0x0050A17C, int)
|
||||||
|
#define NextSmokeSpark VAR_U_(0x0051D084, int)
|
||||||
|
#define NextGunShell VAR_U_(0x0051D08C, int)
|
||||||
|
#define NextBubble VAR_U_(0x0051D090, int)
|
||||||
|
#define NextDrip VAR_U_(0x0051D094, int)
|
||||||
|
#define NextDebris VAR_U_(0x0051CA8C, int)
|
||||||
|
#define NextBlood VAR_U_(0x0051D088, int)
|
||||||
|
#define NextItem VAR_U_(0x00EEF044, short)
|
||||||
#define SkyPos1 VAR_U_(0x00E6E4B0, short)
|
#define SkyPos1 VAR_U_(0x00E6E4B0, short)
|
||||||
#define SkyPos2 VAR_U_(0x00E6D73E, short)
|
#define SkyPos2 VAR_U_(0x00E6D73E, short)
|
||||||
#define SkyVelocity1 VAR_U_(0x00E5C276, signed char)
|
#define SkyVelocity1 VAR_U_(0x00E5C276, signed char)
|
||||||
|
@ -213,7 +221,7 @@
|
||||||
#define SmashedMeshCount VAR_U_(0x0051CA5C, short)
|
#define SmashedMeshCount VAR_U_(0x0051CA5C, short)
|
||||||
#define SmashedMesh ARRAY_(0x00EEF8C0, MESH_INFO*, [16])
|
#define SmashedMesh ARRAY_(0x00EEF8C0, MESH_INFO*, [16])
|
||||||
#define SmashedMeshRoom ARRAY_(0x00EEF480, short, [16])
|
#define SmashedMeshRoom ARRAY_(0x00EEF480, short, [16])
|
||||||
#define Debris ARRAY_(0x00E8CAC0, DEBRIS_STRUCT, [256])
|
#define Debris ARRAY_(0x00E8CAC0, DEBRIS_STRUCT, [MAX_DEBRIS])
|
||||||
#define SniperCameraActive VAR_U_(0x0051CA1D, byte)
|
#define SniperCameraActive VAR_U_(0x0051CA1D, byte)
|
||||||
#define BinocularRange VAR_U_(0x0051CA30, int)
|
#define BinocularRange VAR_U_(0x0051CA30, int)
|
||||||
#define BinocularOn VAR_U_(0x0051CA34, int)
|
#define BinocularOn VAR_U_(0x0051CA34, int)
|
||||||
|
@ -262,15 +270,15 @@
|
||||||
#define FirstCamera VAR_U_(0x00E51F24, short)
|
#define FirstCamera VAR_U_(0x00E51F24, short)
|
||||||
#define LastCamera VAR_U_(0x00E4F6AC, short)
|
#define LastCamera VAR_U_(0x00E4F6AC, short)
|
||||||
#define CurrentCameraCnt VAR_U_(0x00E4EAA0, int)
|
#define CurrentCameraCnt VAR_U_(0x00E4EAA0, int)
|
||||||
#define CameraXposition ARRAY_(0x00E4F440, int, [18])
|
#define CameraXposition ARRAY_(0x00E4F440, int, [MAX_CAMERA])
|
||||||
#define CameraYposition ARRAY_(0x00E4F600, int, [18])
|
#define CameraYposition ARRAY_(0x00E4F600, int, [MAX_CAMERA])
|
||||||
#define CameraZposition ARRAY_(0x00E4F540, int, [18])
|
#define CameraZposition ARRAY_(0x00E4F540, int, [MAX_CAMERA])
|
||||||
#define CameraXtarget ARRAY_(0x00E4F3E0, int, [18])
|
#define CameraXtarget ARRAY_(0x00E4F3E0, int, [MAX_CAMERA])
|
||||||
#define CameraYtarget ARRAY_(0x00E51EC0, int, [18])
|
#define CameraYtarget ARRAY_(0x00E51EC0, int, [MAX_CAMERA])
|
||||||
#define CameraZtarget ARRAY_(0x00E4F5A0, int, [18])
|
#define CameraZtarget ARRAY_(0x00E4F5A0, int, [MAX_CAMERA])
|
||||||
#define CameraRoll ARRAY_(0x00E4F4A0, int, [18])
|
#define CameraRoll ARRAY_(0x00E4F4A0, int, [MAX_CAMERA])
|
||||||
#define CameraFOV ARRAY_(0x00E4F380, int, [18])
|
#define CameraFOV ARRAY_(0x00E4F380, int, [MAX_CAMERA])
|
||||||
#define CameraSpeed ARRAY_(0x00E4F660, int, [18])
|
#define CameraSpeed ARRAY_(0x00E4F660, int, [MAX_CAMERA])
|
||||||
#define SpotcamDontDrawLara VAR_U_(0x0051D021, byte)
|
#define SpotcamDontDrawLara VAR_U_(0x0051D021, byte)
|
||||||
#define QuakeCam VAR_U_(0x00E4F520, QUAKE_CAMERA)
|
#define QuakeCam VAR_U_(0x00E4F520, QUAKE_CAMERA)
|
||||||
#define SplineFromCamera VAR_U_(0x00E4F3DC, int)
|
#define SplineFromCamera VAR_U_(0x00E4F3DC, int)
|
||||||
|
@ -278,6 +286,7 @@
|
||||||
#define PoisonFlag VAR_U_(0x00E5BF3E, byte)
|
#define PoisonFlag VAR_U_(0x00E5BF3E, byte)
|
||||||
#define SplashSetup VAR_U_(0x00E6CAC0, SPLASH_SETUP)
|
#define SplashSetup VAR_U_(0x00E6CAC0, SPLASH_SETUP)
|
||||||
#define NullRotations ARRAY_(0x0051CD68, short, [12])
|
#define NullRotations ARRAY_(0x0051CD68, short, [12])
|
||||||
|
#define FirstHair VAR_U_(0x00E5BF60, int)
|
||||||
|
|
||||||
// JeepBaddieCollision
|
// JeepBaddieCollision
|
||||||
#define Unk_0080DE1A VAR_U_(0x0080DE1A, short)
|
#define Unk_0080DE1A VAR_U_(0x0080DE1A, short)
|
||||||
|
|
|
@ -248,7 +248,7 @@ void DragonCollision(short itemNum, ITEM_INFO* laraitem, COLL_INFO* coll)
|
||||||
Lara.gunStatus = LG_HANDS_BUSY;
|
Lara.gunStatus = LG_HANDS_BUSY;
|
||||||
Lara.hitDirection = -1;
|
Lara.hitDirection = -1;
|
||||||
|
|
||||||
Lara.meshPtrs[HAND_R] = Meshes[Objects[ID_LARA_EXTRA_ANIMS].meshIndex + HAND_R];
|
LARA_MESHES(ID_LARA_EXTRA_ANIMS, HAND_R);
|
||||||
|
|
||||||
/* Do cinematic camera */
|
/* Do cinematic camera */
|
||||||
Camera.type = CINEMATIC_CAMERA;
|
Camera.type = CINEMATIC_CAMERA;
|
||||||
|
|
|
@ -955,7 +955,7 @@ void KayakUserInput(ITEM_INFO* kayak, ITEM_INFO* lara, KAYAK_INFO* kinfo)
|
||||||
short* tmp;
|
short* tmp;
|
||||||
tmp = Lara.meshPtrs[HAND_R];
|
tmp = Lara.meshPtrs[HAND_R];
|
||||||
|
|
||||||
Lara.meshPtrs[HAND_R] = Meshes[Objects[ID_KAYAK_LARA_ANIMS].meshIndex + HAND_R];
|
LARA_MESHES(ID_KAYAK_LARA_ANIMS, HAND_R);
|
||||||
Meshes[Objects[ID_KAYAK_LARA_ANIMS].meshIndex + HAND_R] = tmp;
|
Meshes[Objects[ID_KAYAK_LARA_ANIMS].meshIndex + HAND_R] = tmp;
|
||||||
|
|
||||||
lara->meshBits &= ~LARA_LEG_BITS;
|
lara->meshBits &= ~LARA_LEG_BITS;
|
||||||
|
|
|
@ -623,8 +623,8 @@ static void DoUserInput(ITEM_INFO* v, ITEM_INFO* l, CART_INFO* cart)
|
||||||
short* tmp;
|
short* tmp;
|
||||||
|
|
||||||
tmp = Lara.meshPtrs[HAND_R];
|
tmp = Lara.meshPtrs[HAND_R];
|
||||||
|
|
||||||
Lara.meshPtrs[HAND_R] = Meshes[Objects[ID_MINECART_ANIMS].meshIndex + HAND_R];
|
LARA_MESHES(ID_MINECART_ANIMS, HAND_R);
|
||||||
Meshes[Objects[ID_MINECART_ANIMS].meshIndex + HAND_R] = tmp;
|
Meshes[Objects[ID_MINECART_ANIMS].meshIndex + HAND_R] = tmp;
|
||||||
|
|
||||||
cart->Flags &= ~CF_MESH;
|
cart->Flags &= ~CF_MESH;
|
||||||
|
|
|
@ -72,10 +72,10 @@ void NewObjects()
|
||||||
obj->saveAnim = true;
|
obj->saveAnim = true;
|
||||||
obj->saveFlags = true;
|
obj->saveFlags = true;
|
||||||
|
|
||||||
Bones[obj->boneIndex + 192] |= ROT_Z;
|
Bones[obj->boneIndex + 48 * 4] |= ROT_Z;
|
||||||
Bones[obj->boneIndex + 192] |= ROT_Y;
|
Bones[obj->boneIndex + 48 * 4] |= ROT_Y;
|
||||||
Bones[obj->boneIndex + 208] |= ROT_Z;
|
Bones[obj->boneIndex + 52 * 4] |= ROT_Z;
|
||||||
Bones[obj->boneIndex + 208] |= ROT_Y;
|
Bones[obj->boneIndex + 52 * 4] |= ROT_Y;
|
||||||
}
|
}
|
||||||
|
|
||||||
obj = &Objects[ID_BAT];
|
obj = &Objects[ID_BAT];
|
||||||
|
@ -165,14 +165,14 @@ void NewObjects()
|
||||||
obj->saveAnim = true;
|
obj->saveAnim = true;
|
||||||
obj->saveFlags = true;
|
obj->saveFlags = true;
|
||||||
|
|
||||||
Bones[obj->boneIndex + 112] |= ROT_Y;
|
Bones[obj->boneIndex + 28 * 4] |= ROT_Y;
|
||||||
Bones[obj->boneIndex + 112] |= ROT_X;
|
Bones[obj->boneIndex + 28 * 4] |= ROT_X;
|
||||||
Bones[obj->boneIndex + 352] |= ROT_Y;
|
Bones[obj->boneIndex + 88 * 4] |= ROT_Y;
|
||||||
Bones[obj->boneIndex + 352] |= ROT_X;
|
Bones[obj->boneIndex + 88 * 4] |= ROT_X;
|
||||||
|
|
||||||
Meshes[obj->meshIndex + 36] = Meshes[Objects[ID_MESHSWAP1].meshIndex + 32];
|
Meshes[obj->meshIndex + 18 * 2] = Meshes[Objects[ID_MESHSWAP1].meshIndex + 16 * 2];
|
||||||
Meshes[obj->meshIndex + 60] = Meshes[Objects[ID_MESHSWAP1].meshIndex + 56];
|
Meshes[obj->meshIndex + 30 * 2] = Meshes[Objects[ID_MESHSWAP1].meshIndex + 28 * 2];
|
||||||
Meshes[obj->meshIndex + 36] = Meshes[Objects[ID_MESHSWAP1].meshIndex + 22];
|
Meshes[obj->meshIndex + 18 * 2] = Meshes[Objects[ID_MESHSWAP1].meshIndex + 11 * 2];
|
||||||
}
|
}
|
||||||
|
|
||||||
obj = &Objects[ID_BADDY2];
|
obj = &Objects[ID_BADDY2];
|
||||||
|
@ -191,10 +191,10 @@ void NewObjects()
|
||||||
obj->saveAnim = true;
|
obj->saveAnim = true;
|
||||||
obj->saveFlags = true;
|
obj->saveFlags = true;
|
||||||
|
|
||||||
Bones[obj->boneIndex + 112] |= ROT_Y;
|
Bones[obj->boneIndex + 28 * 4] |= ROT_Y;
|
||||||
Bones[obj->boneIndex + 112] |= ROT_X;
|
Bones[obj->boneIndex + 28 * 4] |= ROT_X;
|
||||||
Bones[obj->boneIndex + 352] |= ROT_Y;
|
Bones[obj->boneIndex + 88 * 4] |= ROT_Y;
|
||||||
Bones[obj->boneIndex + 352] |= ROT_X;
|
Bones[obj->boneIndex + 88 * 4] |= ROT_X;
|
||||||
}
|
}
|
||||||
|
|
||||||
obj = &Objects[ID_SAS_CAIRO];
|
obj = &Objects[ID_SAS_CAIRO];
|
||||||
|
@ -215,8 +215,8 @@ void NewObjects()
|
||||||
|
|
||||||
Bones[obj->boneIndex] |= ROT_Y;
|
Bones[obj->boneIndex] |= ROT_Y;
|
||||||
Bones[obj->boneIndex] |= ROT_X;
|
Bones[obj->boneIndex] |= ROT_X;
|
||||||
Bones[obj->boneIndex + 112] |= ROT_Y;
|
Bones[obj->boneIndex + 28 * 4] |= ROT_Y;
|
||||||
Bones[obj->boneIndex + 112] |= ROT_X;
|
Bones[obj->boneIndex + 28 * 4] |= ROT_X;
|
||||||
}
|
}
|
||||||
|
|
||||||
obj = &Objects[ID_MUMMY];
|
obj = &Objects[ID_MUMMY];
|
||||||
|
@ -234,9 +234,9 @@ void NewObjects()
|
||||||
obj->saveAnim = true;
|
obj->saveAnim = true;
|
||||||
obj->saveFlags = true;
|
obj->saveFlags = true;
|
||||||
|
|
||||||
Bones[obj->boneIndex + 112] |= ROT_Y;
|
Bones[obj->boneIndex + 28 * 4] |= ROT_Y;
|
||||||
Bones[obj->boneIndex + 112] |= ROT_X;
|
Bones[obj->boneIndex + 28 * 4] |= ROT_X;
|
||||||
Bones[obj->boneIndex + 288] |= ROT_Y;
|
Bones[obj->boneIndex + 72 * 4] |= ROT_Y;
|
||||||
}
|
}
|
||||||
|
|
||||||
obj = &Objects[ID_QUAD];
|
obj = &Objects[ID_QUAD];
|
||||||
|
@ -913,9 +913,9 @@ void NewObjects()
|
||||||
Bones[obj->boneIndex + 20 * 4] |= ROT_X | ROT_Y;
|
Bones[obj->boneIndex + 20 * 4] |= ROT_X | ROT_Y;
|
||||||
|
|
||||||
// TODO: check if constants are byte, short or int
|
// TODO: check if constants are byte, short or int
|
||||||
Meshes[obj->meshIndex + 124] = Meshes[Objects[ID_MESHSWAP2].meshIndex + 120];
|
Meshes[obj->meshIndex + 60 * 2] = Meshes[Objects[ID_MESHSWAP2].meshIndex + 60 * 2];
|
||||||
Meshes[obj->meshIndex + 148] = Meshes[Objects[ID_MESHSWAP2].meshIndex + 144];
|
Meshes[obj->meshIndex + 72 * 2] = Meshes[Objects[ID_MESHSWAP2].meshIndex + 72 * 2];
|
||||||
Meshes[obj->meshIndex + 172] = Meshes[Objects[ID_MESHSWAP2].meshIndex + 168];
|
Meshes[obj->meshIndex + 84 * 2] = Meshes[Objects[ID_MESHSWAP2].meshIndex + 84 * 2];
|
||||||
}
|
}
|
||||||
|
|
||||||
obj = &Objects[ID_CROCODILE];
|
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()
|
void PickupObjects()
|
||||||
{
|
{
|
||||||
OBJECT_INFO* obj;
|
OBJECT_INFO* obj;
|
||||||
|
@ -3569,14 +3630,14 @@ void InitialiseObjects()
|
||||||
// Reset MIP flag so we can reuse slots
|
// Reset MIP flag so we can reuse slots
|
||||||
//for (short i = 0; i < ID_NUMBER_OBJECTS; i++)
|
//for (short i = 0; i < ID_NUMBER_OBJECTS; i++)
|
||||||
// Objects[i].objectMip = NULL;
|
// Objects[i].objectMip = NULL;
|
||||||
|
|
||||||
// New objects imported from old TRs
|
// New objects imported from old TRs
|
||||||
NewObjects();
|
NewObjects();
|
||||||
|
|
||||||
// User defined objects
|
// User defined objects
|
||||||
CustomObjects();
|
CustomObjects();
|
||||||
|
|
||||||
InitialiseHairs();
|
InitialiseHair();
|
||||||
InitialiseSpecialEffects();
|
InitialiseSpecialEffects();
|
||||||
|
|
||||||
NumRPickups = 0;
|
NumRPickups = 0;
|
||||||
|
|
|
@ -2,11 +2,11 @@
|
||||||
|
|
||||||
#include "..\Global\global.h"
|
#include "..\Global\global.h"
|
||||||
|
|
||||||
void BaddyObjects(); //#define BaddyObjects ((void (__cdecl*)()) 0x004737C0)
|
void BaddyObjects();
|
||||||
void ObjectObjects(); //#define ObjectObjects ((void (__cdecl*)()) 0x00476360)
|
void ObjectObjects();
|
||||||
void TrapObjects(); //#define TrapObjects ((void (__cdecl*)()) 0x00475D40)
|
void TrapObjects();
|
||||||
#define InitialiseHairs ((void (__cdecl*)()) 0x00438BE0)
|
void InitialiseHair();
|
||||||
#define InitialiseSpecialEffects ((void (__cdecl*)()) 0x0043D8B0)
|
void InitialiseSpecialEffects();
|
||||||
|
|
||||||
void CustomObjects();
|
void CustomObjects();
|
||||||
void InitialiseObjects();
|
void InitialiseObjects();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue