diff --git a/TR5Main/Objects/TR5/tr5_guard.cpp b/TR5Main/Objects/TR5/tr5_guard.cpp index e47b33f5d..41a5ed3c5 100644 --- a/TR5Main/Objects/TR5/tr5_guard.cpp +++ b/TR5Main/Objects/TR5/tr5_guard.cpp @@ -6,11 +6,9 @@ #include "../../Game/people.h" #include "../../Game/tomb4fx.h" #include "../../Game/draw.h" - BITE_INFO SwatGun = { 80, 200, 13, 0 }; BITE_INFO SniperGun = { 0, 480, 110, 13 }; BITE_INFO ArmedBaddy2Gun = { -50, 220, 60, 13 }; - #define STATE_GUARD_STOP 1 #define STATE_GUARD_TURN180 2 #define STATE_GUARD_FIRE_SINGLE 3 @@ -36,11 +34,9 @@ BITE_INFO ArmedBaddy2Gun = { -50, 220, 60, 13 }; #define STATE_GUARD_START_USE_COMPUTER 37 #define STATE_GUARD_USE_COMPUTER 38 #define STATE_GUARD_SURREND 39 - #define ANIMATION_GUARD_DEATH1 11 #define ANIMATION_GUARD_DEATH2 16 #define ANIMATION_GUARD_START_JUMP 41 - #define STATE_MAFIA2_STOP 1 #define STATE_MAFIA2_TURN180_UNDRAW_GUNS 2 #define STATE_MAFIA2_FIRE 3 @@ -55,26 +51,22 @@ BITE_INFO ArmedBaddy2Gun = { -50, 220, 60, 13 }; #define STATE_MAFIA2_LANDING 29 #define STATE_MAFIA2_TURN180 32 #define STATE_MAFIA2_UNDRAW_GUNS 37 - #define STATE_SNIPER_STOP 1 #define STATE_SNIPER_UNHIDE 2 #define STATE_SNIPER_AIM 3 #define STATE_SNIPER_FIRE 4 #define STATE_SNIPER_HIDE 5 #define STATE_SNIPER_DEATH 6 - void InitialiseGuard(short itemNum) { ITEM_INFO* item, *item2; short anim; short roomItemNumber; - item = &Items[itemNum]; ClearItem(itemNum); anim = Objects[ID_SWAT].animIndex; if (!Objects[ID_SWAT].loaded) anim = Objects[ID_GUARD1].animIndex; - switch (item->triggerFlags) { case 0: @@ -122,7 +114,6 @@ void InitialiseGuard(short itemNum) case 5: FLOOR_INFO *floor; short roomNumber; - item->animNumber = anim + 26; item->goalAnimState = STATE_GUARD_ROPE_DOWN; roomNumber = item->roomNumber; @@ -153,11 +144,9 @@ void InitialiseGuard(short itemNum) break; } } - void InitialiseSniper(short itemNum) { ITEM_INFO* item; - item = &Items[itemNum]; ClearItem(itemNum); item->animNumber = Objects[item->objectNumber].animIndex; @@ -168,11 +157,9 @@ void InitialiseSniper(short itemNum) item->pos.xPos += SIN(item->pos.yRot); item->pos.zPos += COS(item->pos.yRot); } - void InitialiseGuardLaser(short itemNum) { ITEM_INFO* item; - item = &Items[itemNum]; ClearItem(itemNum); item->animNumber = Objects[item->objectNumber].animIndex + 6; @@ -180,53 +167,40 @@ void InitialiseGuardLaser(short itemNum) item->goalAnimState = STATE_GUARD_STOP; item->currentAnimState = STATE_GUARD_STOP; } - void GuardControl(short itemNum) { if (!CreatureActive(itemNum)) return; - int animIndex = 0; if (Objects[ID_SWAT].loaded) animIndex= Objects[ID_SWAT].animIndex; else animIndex = Objects[ID_GUARD1].animIndex; - ITEM_INFO* item = &Items[itemNum]; CREATURE_INFO* creature = (CREATURE_INFO*)item->data; - short angle = 0; short joint2 = 0; short joint1 = 0; short joint0 = 0; - int x = item->pos.xPos; int z = item->pos.zPos; - int dx = 870 * SIN(item->pos.yRot) >> W2V_SHIFT; int dz = 870 * COS(item->pos.yRot) >> W2V_SHIFT; - x += dx; z += dz; - short roomNumber = item->roomNumber; FLOOR_INFO* floor = GetFloor(x, item->pos.yPos, z, &roomNumber); int height1 = GetFloorHeight(floor, x, item->pos.yPos, z); - x += dx; z += dz; - roomNumber = item->roomNumber; floor = GetFloor(x, item->pos.yPos, z, &roomNumber); int height2 = GetFloorHeight(floor, x, item->pos.yPos, z); - x += dx; z += dz; - roomNumber = item->roomNumber; floor = GetFloor(x, item->pos.yPos, z, &roomNumber); int height3 = GetFloorHeight(floor, x, item->pos.yPos, z); - bool canJump1block; if (item->boxNumber == LaraItem->boxNumber || item->pos.yPos >= height1 - 384 @@ -235,7 +209,6 @@ void GuardControl(short itemNum) canJump1block = false; else canJump1block = true; - bool canJump2blocks; if (item->boxNumber == LaraItem->boxNumber || item->pos.yPos >= height1 - 384 @@ -245,7 +218,6 @@ void GuardControl(short itemNum) canJump2blocks = false; else canJump2blocks = true; - if (item->firedWeapon) { PHD_VECTOR pos; @@ -256,17 +228,13 @@ void GuardControl(short itemNum) TriggerDynamicLight(pos.x, pos.y, pos.z, 2 * item->firedWeapon + 10, 192, 128, 32); item->firedWeapon--; } - if (item->aiBits) GetAITarget(creature); else creature->enemy = LaraItem; - AI_INFO info; AI_INFO laraInfo; - CreatureAIInfo(item, &info); - if (creature->enemy == LaraItem) { laraInfo.angle = info.angle; @@ -276,7 +244,6 @@ void GuardControl(short itemNum) { int dx = LaraItem->pos.xPos - item->pos.xPos; int dz = LaraItem->pos.zPos - item->pos.zPos; - laraInfo.angle = ATAN(dz, dx) - item->pos.yRot; laraInfo.distance = SQUARE(dx) + SQUARE(dz); } @@ -303,7 +270,6 @@ void GuardControl(short itemNum) else { GetCreatureMood(item, &info, creature->enemy != LaraItem); - if (item->objectNumber == ID_SCIENTIST) { if (item->hitPoints >= Objects[ID_SCIENTIST].hitPoints) @@ -316,7 +282,6 @@ void GuardControl(short itemNum) creature->mood = ESCAPE_MOOD; } } - if (Rooms[item->roomNumber].flags & ENV_FLAG_NO_LENSFLARE) // CHECK { if (item->objectNumber == ID_SWAT_PLUS) @@ -341,13 +306,10 @@ void GuardControl(short itemNum) } } } - CreatureMood(item, &info, creature->enemy != LaraItem); - ITEM_INFO * enemy = creature->enemy; angle = CreatureTurn(item, creature->maximumTurn); creature->enemy = LaraItem; - if (laraInfo.distance < 0x400000 && LaraItem->speed > 20 || item->hitStatus || TargetVisible(item, &laraInfo)) @@ -358,38 +320,28 @@ void GuardControl(short itemNum) AlertAllGuards(itemNum); } } - creature->enemy = enemy; - GAME_VECTOR src; src.x = item->pos.xPos; src.y = item->pos.yPos - 384; src.z = item->pos.zPos; src.roomNumber = item->roomNumber; - short* frame = GetBestFrame(LaraItem); - GAME_VECTOR dest; dest.x = LaraItem->pos.xPos; dest.y = LaraItem->pos.yPos + ((frame[3] + 3 * frame[2]) >> 2); dest.z = LaraItem->pos.zPos; - bool los = !LOS(&src, &dest) && item->triggerFlags != 10; - creature->maximumTurn = 0; - ITEM_INFO* currentItem; short currentItemNumber; - PHD_VECTOR pos1, pos2; - switch (item->currentAnimState) { case STATE_GUARD_STOP: creature->LOT.isJumping = false; joint2 = laraInfo.angle; creature->flags = 0; - if (info.ahead) { if (!(item->aiBits & FOLLOW)) @@ -398,7 +350,6 @@ void GuardControl(short itemNum) joint1 = info.xAngle; } } - if (item->objectNumber == ID_SCIENTIST && item == Lara.target) { item->goalAnimState = STATE_GUARD_SURREND; @@ -413,7 +364,6 @@ void GuardControl(short itemNum) joint2 = 0; else joint2 = AIGuard(creature); - if (item->aiBits & PATROL1) { item->triggerFlags--; @@ -472,11 +422,9 @@ void GuardControl(short itemNum) { item->goalAnimState = STATE_GUARD_STOP; } - if (item->triggerFlags == 11) item->triggerFlags = 0; break; - case STATE_GUARD_TURN180: creature->flags = 0; if (info.angle >= 0) @@ -486,7 +434,6 @@ void GuardControl(short itemNum) if (item->frameNumber == Anims[item->animNumber].frameEnd) item->pos.yRot += -ANGLE(180); break; - case STATE_GUARD_FIRE_SINGLE: case STATE_GUARD_FIRE_FAST: joint0 = laraInfo.angle >> 1; @@ -504,7 +451,6 @@ void GuardControl(short itemNum) { item->pos.yRot += info.angle; } - if (item->currentAnimState == STATE_GUARD_FIRE_FAST) { if (creature->flags) @@ -514,7 +460,6 @@ void GuardControl(short itemNum) creature->flags = 0; } } - if (!creature->flags) { creature->flags = 1; @@ -523,11 +468,9 @@ void GuardControl(short itemNum) ShotLara(item, &info, &SwatGun, joint0, 30); else ShotLara(item, &info, &SwatGun, joint0, 10); - TriggerEnergyArc((PHD_VECTOR*)& item->pos, (PHD_VECTOR*)& LaraItem->pos, 0, 0, 128, 256, 150); } break; - case STATE_GUARD_AIM: creature->flags = 0; joint0 = laraInfo.angle >> 1; @@ -545,7 +488,6 @@ void GuardControl(short itemNum) { item->pos.yRot += info.angle; } - if (!Targetable(item, &info)) item->goalAnimState = STATE_GUARD_STOP; else if (item->objectNumber == ID_GUARD1 || item->objectNumber == ID_GUARD2) @@ -553,7 +495,6 @@ void GuardControl(short itemNum) else item->goalAnimState = STATE_GUARD_FIRE_FAST; break; - case STATE_GUARD_WALK: creature->LOT.isJumping = false; creature->maximumTurn = ANGLE(5); @@ -599,7 +540,6 @@ void GuardControl(short itemNum) item->goalAnimState = STATE_GUARD_AIM; } break; - case STATE_GUARD_RUN: creature->LOT.isJumping = false; creature->maximumTurn = ANGLE(10); @@ -633,10 +573,8 @@ void GuardControl(short itemNum) creature->maximumTurn = 0; } break; - case STATE_GUARD_ROPE_DOWN: joint2 = laraInfo.angle; - if (item->pos.yPos <= item->floor - 2048 || item->triggerFlags != 5) { if (item->pos.yPos >= item->floor - 512) @@ -663,13 +601,11 @@ void GuardControl(short itemNum) item->pos.yRot += info.angle; } break; - case STATE_GUARD_SITTING: joint2 = AIGuard(creature); if (creature->alerted) item->goalAnimState = STATE_GUARD_STAND_UP; break; - case STATE_GUARD_STAND_UP: case 18: if (item->frameNumber == Anims[item->animNumber].frameBase) @@ -680,20 +616,16 @@ void GuardControl(short itemNum) TestTriggers(TriggerIndex, 1, 0); break; } - if (item->frameNumber == Anims[item->animNumber].frameBase + 44) { item->swapMeshFlags = 0; short currentItemNumber = Rooms[item->roomNumber].itemNumber; if (currentItemNumber == NO_ITEM) break; - ITEM_INFO * currentItem; - while (true) { currentItem = &Items[currentItemNumber]; - if (currentItem->objectNumber >= ID_ANIMATING1 && currentItem->objectNumber <= ID_ANIMATING15 && currentItem->roomNumber == item->roomNumber) @@ -705,10 +637,8 @@ void GuardControl(short itemNum) if (currentItemNumber == -1) break; } - if (currentItemNumber == NO_ITEM) break; - currentItem->meshBits = -3; } else if (item->frameNumber == Anims[item->animNumber].frameEnd) @@ -716,7 +646,6 @@ void GuardControl(short itemNum) item->pos.yRot -= ANGLE(90); } break; - case 17: joint2 = 0; if (!item->hitStatus && LaraItem->speed < 40 && !Lara.hasFired) @@ -724,13 +653,11 @@ void GuardControl(short itemNum) if (creature->alerted) item->goalAnimState = 18; break; - case STATE_GUARD_WAITING_ON_WALL: joint2 = AIGuard(creature); if (creature->alerted) item->goalAnimState = STATE_GUARD_STOP; break; - case STATE_GUARD_HUNTING: case STATE_GUARD_HUNTING_IDLE: if (item->currentAnimState == STATE_GUARD_HUNTING_IDLE) @@ -738,13 +665,11 @@ void GuardControl(short itemNum) if (item->triggerFlags != 8 || !los || item->hitStatus) item->goalAnimState = STATE_GUARD_HUNTING; } - creature->LOT.isJumping = false; creature->maximumTurn = ANGLE(5); if (canJump1block || canJump2blocks || info.distance < 0x100000 || !los || item->hitStatus) item->goalAnimState = STATE_GUARD_STOP; break; - case STATE_GUARD_INSERT_CODE: if (item->frameNumber == Anims[item->animNumber].frameBase + 39) { @@ -754,7 +679,6 @@ void GuardControl(short itemNum) TestTriggers(TriggerIndex, 1, 0); } break; - case STATE_GUARD_START_USE_COMPUTER: currentItem = NULL; for (currentItemNumber = Rooms[item->roomNumber].itemNumber; currentItemNumber != NO_ITEM; currentItemNumber = currentItem->nextItem) @@ -763,7 +687,6 @@ void GuardControl(short itemNum) if (item->objectNumber == ID_PUZZLE_HOLE8) break; } - if (item->frameNumber == Anims[item->animNumber].frameBase) { currentItem->meshBits = 0x1FFF; @@ -806,7 +729,6 @@ void GuardControl(short itemNum) } } break; - case STATE_GUARD_USE_COMPUTER: if ((item->objectNumber != ID_SCIENTIST || item != Lara.target) && (GetRandomControl() & 0x7F || item->triggerFlags >= 10 || item->triggerFlags == 9)) @@ -829,7 +751,6 @@ void GuardControl(short itemNum) item->goalAnimState = STATE_GUARD_STOP; } break; - case STATE_GUARD_SURREND: if (item != Lara.target && !(GetRandomControl() & 0x3F)) { @@ -837,7 +758,6 @@ void GuardControl(short itemNum) item->requiredAnimState = STATE_GUARD_USE_COMPUTER; item->goalAnimState = STATE_GUARD_STOP; } - if (item->frameNumber == Anims[item->animNumber].frameBase + 39) { roomNumber = item->roomNumber; @@ -846,17 +766,13 @@ void GuardControl(short itemNum) TestTriggers(TriggerIndex, 1, 0); } break; - default: break; - } } - CreatureJoint(item, 0, joint0); CreatureJoint(item, 1, joint1); CreatureJoint(item, 2, joint2); - if (creature->reachedGoal && creature->enemy) { ITEM_INFO* enemy = creature->enemy; @@ -902,7 +818,6 @@ void GuardControl(short itemNum) item->requiredAnimState = 37; } } - if ((item->currentAnimState >= 20 || item->currentAnimState == 6 || item->currentAnimState == 8) @@ -920,35 +835,30 @@ void GuardControl(short itemNum) item->currentAnimState = 23; item->frameNumber = Anims[item->animNumber].frameBase; break; - case 1: creature->maximumTurn = 0; item->animNumber = animIndex + 39; item->currentAnimState = 24; item->frameNumber = Anims[item->animNumber].frameBase; break; - case 2: creature->maximumTurn = 0; item->animNumber = animIndex + 40; item->currentAnimState = 25; item->frameNumber = Anims[item->animNumber].frameBase; break; - case 6: creature->maximumTurn = 0; item->animNumber = animIndex + 35; item->currentAnimState = 20; item->frameNumber = Anims[item->animNumber].frameBase; break; - case 7: creature->maximumTurn = 0; item->animNumber = animIndex + 36; item->currentAnimState = 21; item->frameNumber = Anims[item->animNumber].frameBase; break; - case 8: creature->maximumTurn = 0; item->animNumber = animIndex + 37; @@ -958,7 +868,6 @@ void GuardControl(short itemNum) } } } - void SniperControl(short itemNumber) { if (CreatureActive(itemNumber)) @@ -967,24 +876,18 @@ void SniperControl(short itemNumber) short joint0 = 0; short joint2 = 0; short joint1 = 0; - ITEM_INFO* item = &Items[itemNumber]; CREATURE_INFO* creature = (CREATURE_INFO*)item->data; - if (item->firedWeapon) { PHD_VECTOR pos; - pos.x = SniperGun.x; pos.y = SniperGun.y; pos.z = SniperGun.z; - GetJointAbsPosition(item, &pos, SniperGun.meshNum); TriggerDynamicLight(pos.x, pos.y, pos.z, 2 * item->firedWeapon + 10, 192, 128, 32); - item->firedWeapon--; } - if (item->hitPoints > 0) { if (item->aiBits) @@ -995,24 +898,18 @@ void SniperControl(short itemNumber) { creature->enemy = LaraItem; } - AI_INFO info; CreatureAIInfo(item, &info); - GetCreatureMood(item, &info, VIOLENT); CreatureMood(item, &info, VIOLENT); - angle = CreatureTurn(item, creature->maximumTurn); - if (info.ahead) { joint0 = info.angle >> 1; joint2 = info.angle >> 1; joint1 = info.xAngle; } - creature->maximumTurn = 0; - switch (item->currentAnimState) { case STATE_SNIPER_STOP: @@ -1020,11 +917,9 @@ void SniperControl(short itemNumber) if (TargetVisible(item, &info)) item->goalAnimState = STATE_SNIPER_UNHIDE; break; - case STATE_SNIPER_UNHIDE: item->meshBits = -1; break; - case 3: creature->flags = 0; if (!TargetVisible(item, &info) @@ -1038,7 +933,6 @@ void SniperControl(short itemNumber) item->goalAnimState = STATE_SNIPER_FIRE; } break; - case STATE_SNIPER_FIRE: if (!creature->flags) { @@ -1047,7 +941,6 @@ void SniperControl(short itemNumber) item->firedWeapon = 2; } break; - default: break; } @@ -1062,7 +955,6 @@ void SniperControl(short itemNumber) item->frameNumber = Anims[item->animNumber].frameBase; } } - CreatureTilt(item, 0); CreatureJoint(item, 0, joint0); CreatureJoint(item, 1, joint1); @@ -1070,63 +962,47 @@ void SniperControl(short itemNumber) CreatureAnimation(itemNumber, angle, 0); } } - - void InitialiseMafia2(short itemNum) { ITEM_INFO* item = &Items[itemNum]; - ClearItem(itemNum); - item->animNumber = Objects[item->objectNumber].animIndex; item->frameNumber = Anims[item->animNumber].frameBase; item->goalAnimState = STATE_GUARD_STOP; item->currentAnimState = STATE_GUARD_STOP; item->swapMeshFlags = 9216; } - void Mafia2Control(short itemNum) { if (!CreatureActive(itemNum)) return; - ITEM_INFO* item = &Items[itemNum]; CREATURE_INFO* creature = (CREATURE_INFO*)item->data; - short angle = 0; short joint2 = 0; short joint1 = 0; short joint0 = 0; - // Can baddy jump? Check for a distance of 1 and 2 sectors int x = item->pos.xPos; int y = item->pos.yPos; int z = item->pos.zPos; - int dx = 870 * SIN(item->pos.yRot) >> W2V_SHIFT; int dz = 870 * COS(item->pos.yRot) >> W2V_SHIFT; - x += dx; z += dz; - short roomNumber = item->roomNumber; FLOOR_INFO* floor = GetFloor(x, y, z, &roomNumber); int height1 = GetFloorHeight(floor, x, y, z); - x += dx; z += dz; - roomNumber = item->roomNumber; floor = GetFloor(x, y, z, &roomNumber); int height2 = GetFloorHeight(floor, x, y, z); - x += dx; z += dz; - roomNumber = item->roomNumber; floor = GetFloor(x, y, z, &roomNumber); int height3 = GetFloorHeight(floor, x, y, z); - int height = 0; bool canJump1sector = true; if (item->boxNumber == LaraItem->boxNumber @@ -1137,7 +1013,6 @@ void Mafia2Control(short itemNum) height = height2; canJump1sector = false; } - bool canJump2sectors = true; if (item->boxNumber == LaraItem->boxNumber || y >= height1 - 384 @@ -1147,34 +1022,26 @@ void Mafia2Control(short itemNum) { canJump2sectors = false; } - if (item->firedWeapon) { PHD_VECTOR pos; - pos.x = ArmedBaddy2Gun.x; pos.y = ArmedBaddy2Gun.y; pos.z = ArmedBaddy2Gun.z; - GetJointAbsPosition(item, &pos, ArmedBaddy2Gun.meshNum); TriggerDynamicLight(pos.x, pos.y, pos.z, 4 * item->firedWeapon + 8, 24, 16, 4); item->firedWeapon--; } - AI_INFO info; AI_INFO laraInfo; - ZeroMemory(&info, sizeof(AI_INFO)); - if (item->hitPoints > 0) { if (item->aiBits) GetAITarget(creature); else creature->enemy = LaraItem; - CreatureAIInfo(item, &info); - if (creature->enemy == LaraItem) { laraInfo.angle = info.angle; @@ -1184,17 +1051,13 @@ void Mafia2Control(short itemNum) { dx = LaraItem->pos.xPos - item->pos.xPos; dz = LaraItem->pos.zPos - item->pos.zPos; - laraInfo.angle = ATAN(dz, dx) - item->pos.yRot; laraInfo.distance = SQUARE(dx) + SQUARE(dz); } - GetCreatureMood(item, &info, creature->enemy != LaraItem); CreatureMood(item, &info, creature->enemy != LaraItem); - angle = CreatureTurn(item, creature->maximumTurn); creature->enemy = LaraItem; - if (laraInfo.distance < SQUARE(2048) && LaraItem->speed > 20 || item->hitStatus || TargetVisible(item, &laraInfo)) { if (!(item->aiBits & FOLLOW)) @@ -1203,7 +1066,6 @@ void Mafia2Control(short itemNum) AlertAllGuards(itemNum); } } - switch (item->currentAnimState) { case STATE_MAFIA2_STOP: @@ -1211,19 +1073,16 @@ void Mafia2Control(short itemNum) joint2 = laraInfo.angle; creature->flags = 0; creature->maximumTurn = 0; - if (info.ahead && !(item->aiBits & GUARD)) { joint0 = info.angle >> 1; joint1 = info.xAngle; } - if (item->aiBits & GUARD) { joint2 = AIGuard(creature); break; } - if (laraInfo.angle <= 20480 && laraInfo.angle >= -20480) { if (item->swapMeshFlags == 9216) @@ -1237,7 +1096,6 @@ void Mafia2Control(short itemNum) item->goalAnimState = STATE_MAFIA2_TURN180; break; } - if (Targetable(item, &info)) { if (info.distance < SQUARE(1024) || info.zoneNumber != info.enemyZone) @@ -1282,7 +1140,6 @@ void Mafia2Control(short itemNum) } } break; - case STATE_MAFIA2_TURN180_UNDRAW_GUNS: case STATE_MAFIA2_TURN180: creature->maximumTurn = 0; @@ -1290,7 +1147,6 @@ void Mafia2Control(short itemNum) item->pos.yRot -= ANGLE(2); else item->pos.yRot += ANGLE(2); - if (item->frameNumber != Anims[item->animNumber].frameBase + 16 || item->swapMeshFlags != 9216) { @@ -1302,7 +1158,6 @@ void Mafia2Control(short itemNum) item->swapMeshFlags = 128; } break; - case STATE_MAFIA2_FIRE: joint0 = laraInfo.angle >> 1; joint2 = laraInfo.angle >> 1; @@ -1327,7 +1182,6 @@ void Mafia2Control(short itemNum) item->firedWeapon = 2; } break; - case STATE_MAFIA2_AIM: joint0 = laraInfo.angle >> 1; joint2 = laraInfo.angle >> 1; @@ -1359,7 +1213,6 @@ void Mafia2Control(short itemNum) item->goalAnimState = STATE_MAFIA2_STOP; } break; - case STATE_MAFIA2_WALK: creature->LOT.isJumping = false; creature->maximumTurn = ANGLE(5); @@ -1394,7 +1247,6 @@ void Mafia2Control(short itemNum) } } break; - case STATE_MAFIA2_RUN: creature->LOT.isJumping = false; creature->maximumTurn = ANGLE(10); @@ -1419,7 +1271,6 @@ void Mafia2Control(short itemNum) item->goalAnimState = STATE_MAFIA2_WALK; } break; - case STATE_MAFIA2_UNDRAW_GUNS: creature->maximumTurn = 0; if (info.angle >= 0) @@ -1430,7 +1281,6 @@ void Mafia2Control(short itemNum) && item->swapMeshFlags == 9216) item->swapMeshFlags = 128; break; - default: break; } @@ -1454,11 +1304,9 @@ void Mafia2Control(short itemNum) item->frameNumber = Anims[item->animNumber].frameBase; } } - CreatureJoint(item, 0, joint0); CreatureJoint(item, 1, joint1); CreatureJoint(item, 2, joint2); - if (item->currentAnimState >= 20 || item->currentAnimState == 6 || item->currentAnimState == 8) { CreatureAnimation(itemNum, angle, 0); @@ -1507,4 +1355,9 @@ void Mafia2Control(short itemNum) return; } } -} \ No newline at end of file +} + +void ControlGuardLaser(short itemNumber) +{ + +} diff --git a/TR5Main/Renderer/Renderer11Compatibility.cpp b/TR5Main/Renderer/Renderer11Compatibility.cpp index 2fe7af5b4..11b23880e 100644 --- a/TR5Main/Renderer/Renderer11Compatibility.cpp +++ b/TR5Main/Renderer/Renderer11Compatibility.cpp @@ -488,17 +488,17 @@ bool Renderer11::PrepareDataForTheRenderer() // HACK: mesh pointer 0 is the placeholder for Lara's body parts and is right hand with pistols // We need to override the bone index because the engine will take mesh 0 while drawing pistols anim, // and vertices have bone index 0 and not 10 - int boneIndex = (Meshes[obj->meshIndex + j] == Meshes[0] ? LM_RHAND : j); - RendererMesh * mesh = getRendererMeshFromTrMesh(moveable, Meshes[obj->meshIndex + j], - boneIndex, MoveablesIds[i] == ID_LARA_SKIN_JOINTS, + j, MoveablesIds[i] == ID_LARA_SKIN_JOINTS, MoveablesIds[i] == ID_LARA_HAIR); moveable->ObjectMeshes.push_back(mesh); } - if (objNum == ID_IMP_ROCK || objNum == ID_ENERGY_BUBBLES || objNum == ID_BUBBLES) + if (objNum == ID_IMP_ROCK || objNum == ID_ENERGY_BUBBLES || objNum == ID_BUBBLES || objNum == ID_BODY_PART) { + // HACK: these objects must have nmeshes = 0 because engine will use them in a different way while drawing Effects. + // In Core's code this was done in SETUP.C but we must do it here because we need to create renderer's meshes. obj->nmeshes = 0; } else @@ -747,21 +747,6 @@ bool Renderer11::PrepareDataForTheRenderer() } } - // Create missing meshes (effect objects like ID_BODY_PART have nmeshes = 0 and they are "lost" with current procedures) - /*for (int i = 0; i < NumMeshPointers; i++) - { - unsigned int mp = reinterpret_cast(Meshes[i]); - //RendererMesh* mesh = m_meshPointersToMesh[mp]; - if (m_meshPointersToMesh.find(mp) == m_meshPointersToMesh.end()) - { - RendererMesh* mesh = getRendererMeshFromTrMesh(NULL, - Meshes[i], - 0, - false, - false); - } - }*/ - // Create a single vertex buffer and a single index buffer for all statics m_staticsVertexBuffer = VertexBuffer::Create(m_device, staticsVertices.size(), staticsVertices.data()); m_staticsIndexBuffer = IndexBuffer::Create(m_device, staticsIndices.size(), staticsIndices.data()); diff --git a/TR5Main/Renderer/Renderer11Draw.cpp b/TR5Main/Renderer/Renderer11Draw.cpp index 3fee684d7..b1cc6e8e2 100644 --- a/TR5Main/Renderer/Renderer11Draw.cpp +++ b/TR5Main/Renderer/Renderer11Draw.cpp @@ -1481,7 +1481,7 @@ bool Renderer11::drawRats() if (rat->on) { - short* meshPtr = Meshes[Objects[ID_RATS_EMITTER].meshIndex + (((i + Wibble) >> 1) & 0xE)]; + short* meshPtr = Meshes[Objects[ID_RATS_EMITTER].meshIndex + (rand() % 8)]; RendererMesh * mesh = m_meshPointersToMesh[reinterpret_cast(meshPtr)]; Matrix translation = Matrix::CreateTranslation(rat->pos.xPos, rat->pos.yPos, rat->pos.zPos); Matrix rotation = Matrix::CreateFromYawPitchRoll(rat->pos.yRot, rat->pos.xRot, rat->pos.zRot); diff --git a/TR5Main/Specific/setup.cpp b/TR5Main/Specific/setup.cpp index 77d7880f2..3913911be 100644 --- a/TR5Main/Specific/setup.cpp +++ b/TR5Main/Specific/setup.cpp @@ -189,10 +189,6 @@ void NewObjects() Bones[obj->boneIndex + 28 * 4] |= ROT_X; Bones[obj->boneIndex + 88 * 4] |= ROT_Y; Bones[obj->boneIndex + 88 * 4] |= ROT_X; - - /*Meshes[obj->meshIndex + 18] = Meshes[Objects[ID_MESHSWAP_BADDY1].meshIndex + 16]; - Meshes[obj->meshIndex + 30] = Meshes[Objects[ID_MESHSWAP_BADDY1].meshIndex + 28]; - Meshes[obj->meshIndex + 18] = Meshes[Objects[ID_MESHSWAP_BADDY1].meshIndex + 11];*/ } obj = &Objects[ID_BADDY2]; @@ -929,11 +925,6 @@ void NewObjects() Bones[obj->boneIndex + 6 * 4] |= ROT_X | ROT_Y; Bones[obj->boneIndex + 20 * 4] |= ROT_X | ROT_Y; - - // TODO: check if constants are byte, short or int - Meshes[obj->meshIndex + 60] = Meshes[Objects[ID_MESHSWAP2].meshIndex + 60]; - Meshes[obj->meshIndex + 72] = Meshes[Objects[ID_MESHSWAP2].meshIndex + 72]; - Meshes[obj->meshIndex + 84] = Meshes[Objects[ID_MESHSWAP2].meshIndex + 84]; } obj = &Objects[ID_CROCODILE]; @@ -1046,13 +1037,7 @@ void NewObjects() obj->saveAnim = true; obj->saveFlags = true; } - - // TODO: fix this - obj = &Objects[ID_ENERGY_BUBBLES]; - obj->loaded = true; - obj->control = BubblesControl; - obj->nmeshes = 0; - + obj = &Objects[ID_MP_WITH_GUN]; if (obj->loaded) { @@ -1219,8 +1204,6 @@ void BaddyObjects() Bones[obj->boneIndex + 6 * 4] |= ROT_X; Bones[obj->boneIndex + 13 * 4] |= ROT_Y; Bones[obj->boneIndex + 13 * 4] |= ROT_X; - //Meshes[obj->meshIndex + 10] = Meshes[Objects[ID_MESHSWAP1].meshIndex + 10]; - //Meshes[obj->meshIndex + 13] = Meshes[Objects[ID_MESHSWAP1].meshIndex + 13]; } obj = &Objects[ID_GUARD1]; @@ -1249,8 +1232,6 @@ void BaddyObjects() Bones[obj->boneIndex + 6 * 4] |= ROT_X; Bones[obj->boneIndex + 13 * 4] |= ROT_Y; Bones[obj->boneIndex + 13 * 4] |= ROT_X; - Meshes[obj->meshIndex + 10] = Meshes[Objects[ID_MESHSWAP1].meshIndex + 10]; - Meshes[obj->meshIndex + 13] = Meshes[Objects[ID_MESHSWAP1].meshIndex + 13]; } obj = &Objects[ID_SWAT_PLUS]; @@ -1282,8 +1263,6 @@ void BaddyObjects() Bones[obj->boneIndex + 6 * 4] |= ROT_X; Bones[obj->boneIndex + 13 * 4] |= ROT_Y; Bones[obj->boneIndex + 13 * 4] |= ROT_X; - //Meshes[obj->meshIndex + 10] = Meshes[Objects[ID_MESHSWAP1].meshIndex + 10]; - //Meshes[obj->meshIndex + 13] = Meshes[Objects[ID_MESHSWAP1].meshIndex + 13]; } obj = &Objects[ID_MAFIA]; @@ -1316,8 +1295,6 @@ void BaddyObjects() Bones[obj->boneIndex + 6 * 4] |= ROT_X; Bones[obj->boneIndex + 13 * 4] |= ROT_Y; Bones[obj->boneIndex + 13 * 4] |= ROT_X; - Meshes[obj->meshIndex + 10] = Meshes[Objects[ID_MESHSWAP1].meshIndex + 10]; - Meshes[obj->meshIndex + 13] = Meshes[Objects[ID_MESHSWAP1].meshIndex + 13]; } obj = &Objects[ID_SCIENTIST]; @@ -1347,8 +1324,6 @@ void BaddyObjects() Bones[Objects[69].boneIndex + 6 * 4] |= ROT_X; Bones[Objects[69].boneIndex + 13 * 4] |= ROT_Y; Bones[Objects[69].boneIndex + 13 * 4] |= ROT_X; - //Meshes[Objects[69].meshIndex + 10] = Meshes[Objects[ID_MESHSWAP1].meshIndex + 10]; - //Meshes[Objects[69].meshIndex + 13] = Meshes[Objects[ID_MESHSWAP1].meshIndex + 13]; } obj = &Objects[ID_GUARD2]; @@ -1381,8 +1356,6 @@ void BaddyObjects() Bones[obj->boneIndex + 6 * 4] |= ROT_X; Bones[obj->boneIndex + 13 * 4] |= ROT_Y; Bones[obj->boneIndex + 13 * 4] |= ROT_X; - Meshes[obj->meshIndex + 10] = Meshes[Objects[405].meshIndex + 10]; - Meshes[obj->meshIndex + 13] = Meshes[Objects[405].meshIndex + 13]; } obj = &Objects[ID_GUARD3]; @@ -1415,8 +1388,6 @@ void BaddyObjects() Bones[obj->boneIndex + 6 * 4] |= ROT_X; Bones[obj->boneIndex + 13 * 4] |= ROT_Y; Bones[obj->boneIndex + 13 * 4] |= ROT_X; - Meshes[obj->meshIndex + 10] = Meshes[Objects[405].meshIndex + 10]; - Meshes[obj->meshIndex + 13] = Meshes[Objects[405].meshIndex + 13]; } obj = &Objects[ID_ATTACK_SUB]; @@ -1546,10 +1517,6 @@ void BaddyObjects() Bones[obj->boneIndex + 6 * 4] |= ROT_X; Bones[obj->boneIndex + 13 * 4] |= ROT_Y; Bones[obj->boneIndex + 13 * 4] |= ROT_X; - - /*Meshes[obj->meshIndex + 7] = Meshes[Objects[ID_MESHSWAP_MAFIA2].meshIndex + 7]; - Meshes[obj->meshIndex + 10] = Meshes[Objects[ID_MESHSWAP_MAFIA2].meshIndex + 10]; - Meshes[obj->meshIndex + 13] = Meshes[Objects[ID_MESHSWAP_MAFIA2].meshIndex + 13];*/ } obj = &Objects[ID_PIERRE]; @@ -1676,7 +1643,6 @@ void BaddyObjects() Bones[obj->boneIndex] |= ROT_X; Bones[obj->boneIndex + 4] |= ROT_Y; Bones[obj->boneIndex + 4] |= ROT_X; - Meshes[obj->meshIndex + 10] = Meshes[Objects[ID_MESHSWAP1].meshIndex + 2]; } obj = &Objects[ID_HYDRA]; @@ -1726,8 +1692,6 @@ void BaddyObjects() Bones[obj->meshIndex + 4 * 4] |= ROT_X; Bones[obj->meshIndex + 9 * 4] |= ROT_Z; Bones[obj->meshIndex + 9 * 4] |= ROT_X; - - //Meshes[obj->meshIndex + 10] = Meshes[Objects[ID_MESHSWAP_IMP].meshIndex + 10]; } obj = &Objects[ID_WILLOWISP]; @@ -1881,20 +1845,6 @@ void BaddyObjects() Bones[obj->boneIndex + 6 * 4] |= ROT_X; Bones[obj->boneIndex + 13 * 4] |= ROT_Y; Bones[obj->boneIndex + 13 * 4] |= ROT_X; - - for (int i = (obj->nmeshes - 1); i > 0; i--) - { - Meshes[obj->meshIndex + i] = Meshes[Objects[ID_MESHSWAP1].meshIndex + i]; - } - /* - do - { - (&Meshes[v36 + 1])[obj->meshIndex] = Meshes[v36 + Objects[ID_MESHSWAP1].meshIndex]; - v36 = v45 + 2; - v25 = v42 == 1; - v45 += 2; - --v42; - } while (!v25);*/ } obj = &Objects[ID_ROMAN_GOD]; @@ -1920,21 +1870,6 @@ void BaddyObjects() Bones[obj->boneIndex + 24] |= ROT_X; Bones[obj->boneIndex + 52] |= ROT_Y; Bones[obj->boneIndex + 52] |= ROT_X; - - /*for (int i = (obj->nmeshes - 1); i > 0; i--) - { - Meshes[obj->meshIndex + i] = Meshes[Objects[ID_MESHSWAP_ROMAN_GOD].meshIndex + i]; - } - - do - { - (&meshes[v38 + 1])[Objects[61].mesh_index] = meshes[v38 + Objects[405].mesh_index]; - v38 = v46 + 2; - v25 = v43 == 1; - v46 += 2; - --v43; - } while (!v25); - */ } obj = &Objects[ID_GUARDIAN]; @@ -2618,18 +2553,6 @@ void ObjectObjects() obj->savePosition = true; } - /* - v25 = 0; - do - { - v26 = v25 + Objects[ID_SCUBA_HARPOON].mesh_index; - v27 = v25 + Objects[ID_BURNING_ROOTS].mesh_index; - v25 += 2; - meshes[v27 + 1] = meshes[v26]; - } - while ( v25 < 56 ); - */ - obj = &Objects[ID_XRAY_CONTROLLER]; if (obj->loaded) { @@ -2642,7 +2565,6 @@ void ObjectObjects() // by default loaded, explosion time :D obj = &Objects[ID_BODY_PART]; obj->loaded = true; - obj->nmeshes = 0; obj = &Objects[ID_EARTHQUAKE]; if (obj->loaded) @@ -2706,18 +2628,22 @@ void ObjectObjects() obj->saveFlags = true; } + obj = &Objects[ID_ENERGY_BUBBLES]; + if (obj->loaded) + { + obj->control = BubblesControl; + } + obj = &Objects[ID_BUBBLES]; if (obj->loaded) { obj->control = MissileControl; - obj->nmeshes = 0; } obj = &Objects[ID_IMP_ROCK]; if (obj->loaded) { obj->control = MissileControl; - //obj->nmeshes = 0; } obj = &Objects[ID_WATERFALLMIST];