From fc6e99ca9d785d65a7ccefb40ab128b8e41e515d Mon Sep 17 00:00:00 2001 From: MontyTRC89 Date: Mon, 17 Sep 2018 21:13:44 +0200 Subject: [PATCH] Added raptor, tiger, cobra, eagle, crow --- Build/PCTomb5.idb | Bin 16422552 -> 16422552 bytes TR5Main/Objects/animals.cpp | 134 ++++++++++- TR5Main/Objects/objects.h | 2 + TR5Main/Objects/scuba.cpp | 282 ++++++++++++++++++++++++ TR5Main/Objects/{traps.cpp => trap.cpp} | 10 +- TR5Main/Specific/setup.cpp | 109 ++++----- TR5Main/TR5Main.vcxproj | 1 + TR5Main/TR5Main.vcxproj.filters | 3 + 8 files changed, 465 insertions(+), 76 deletions(-) create mode 100644 TR5Main/Objects/scuba.cpp rename TR5Main/Objects/{traps.cpp => trap.cpp} (95%) diff --git a/Build/PCTomb5.idb b/Build/PCTomb5.idb index 070e79ebb1f79d41f8411c81cbaec02f9b5108ad..0f94e71157469008f4de4e0c828d630a3ff23bf6 100644 GIT binary patch delta 2759 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 == ID_CROW) + { + item->animNumber = Objects[ID_CROW].animIndex + 14; + item->frameNumber = Anims[item->animNumber].frameBase; + item->currentAnimState = item->goalAnimState = 7; + } + else + { + item->animNumber = Objects[ID_EAGLE].animIndex + 5; + item->frameNumber = Anims[item->animNumber].frameBase; + item->currentAnimState = item->goalAnimState = 2; + } +} + +void EagleControl(__int16 itemNum) +{ + if (!CreatureActive(itemNum)) + return; + + ITEM_INFO* item = &Items[itemNum]; + CREATURE_INFO* creature = (CREATURE_INFO *)item->data; + + __int16 angle = 0; + + if (item->hitPoints <= 0) + { + switch (item->currentAnimState) + { + case 4: + if (item->pos.yPos > item->floor) + { + item->pos.yPos = item->floor; + item->gravityStatus = 0; + item->fallspeed = 0; + item->goalAnimState = 5; + } + break; + + case 5: + item->pos.yPos = item->floor; + break; + + default: + if (item->objectNumber == ID_CROW) + item->animNumber = Objects[ID_CROW].animIndex + 1; + else + item->animNumber = Objects[ID_EAGLE].animIndex + 8; + + item->frameNumber = Anims[item->animNumber].frameBase; + item->currentAnimState = 4; + item->gravityStatus = 1; + item->speed = 0; + break; + } + item->pos.xRot = 0; + } + else + { + AI_INFO info; + CreatureAIInfo(item, &info); + + GetCreatureMood(item, &info, VIOLENT); + CreatureMood(item, &info, TIMID); + + angle = CreatureTurn(item, ANGLE(3)); + + switch (item->currentAnimState) + { + case 7: + item->pos.yPos = item->floor; + if (creature->mood != MOOD_TYPE::BORED_MOOD) + item->goalAnimState = 1; + break; + + case 2: + item->pos.yPos = item->floor; + if (creature->mood == MOOD_TYPE::BORED_MOOD) + break; + else + item->goalAnimState = 1; + break; + + case 1: + creature->flags = 0; + + if (item->requiredAnimState) + item->goalAnimState = item->requiredAnimState; + if (creature->mood == MOOD_TYPE::BORED_MOOD) + item->goalAnimState = 2; + else if (info.ahead && info.distance < SQUARE(512)) + item->goalAnimState = 6; + else + item->goalAnimState = 3; + break; + + case 3: + if (creature->mood == BORED_MOOD) + { + item->requiredAnimState = 2; + item->goalAnimState = 1; + } + else if (info.ahead && info.distance < SQUARE(512)) + item->goalAnimState = 6; + break; + + case 6: + if (!creature->flags && item->touchBits) + { + LaraItem->hitPoints -= 20; + LaraItem->hitStatus = true; + + if (item->objectNumber == ID_CROW) + CreatureEffect(item, &crowBite, DoBloodSplat); + else + CreatureEffect(item, &eagleBite, DoBloodSplat); + + creature->flags = 1; + } + break; + } + } + + CreatureAnimation(itemNum, angle, 0); +} diff --git a/TR5Main/Objects/objects.h b/TR5Main/Objects/objects.h index 79d1eb899..daab357a5 100644 --- a/TR5Main/Objects/objects.h +++ b/TR5Main/Objects/objects.h @@ -87,3 +87,5 @@ void __cdecl ShootHarpoon(ITEM_INFO* frogman, __int32 x, __int32 y, __int32 z, _ void __cdecl HarpoonControl(__int16 itemNum); void __cdecl ScubaControl(__int16 itemNumber); +void InitialiseEagle(__int16 itemNum); +void EagleControl(__int16 itemNum); diff --git a/TR5Main/Objects/scuba.cpp b/TR5Main/Objects/scuba.cpp new file mode 100644 index 000000000..280fb95d6 --- /dev/null +++ b/TR5Main/Objects/scuba.cpp @@ -0,0 +1,282 @@ +#include "objects.h" +#include "..\Global\global.h" +#include "..\Game\Box.h" +#include "..\Game\items.h" +#include "..\Game\lot.h" +#include "..\Game\control.h" +#include "..\Game\effects.h" +#include "..\Game\draw.h" +#include "..\Game\sphere.h" +#include "..\Game\effect2.h" +#include "..\Game\people.h" + +BITE_INFO scubaGun = { 17, 164, 44, 18 }; + +__int32 __cdecl GetWaterSurface(__int32 x, __int32 y, __int32 z, __int16 roomNumber) +{ + ROOM_INFO* room = &Rooms[roomNumber]; + FLOOR_INFO* floor = &room->floor[((z - room->z) >> WALL_SHIFT) + ((x - room->x) >> WALL_SHIFT) * room->xSize]; + + if (room->flags & ENV_FLAG_WATER) + { + while (floor->skyRoom != NO_ROOM) + { + room = &Rooms[floor->skyRoom]; + if (!(room->flags & ENV_FLAG_WATER)) + return (floor->ceiling << 8); + floor = &room->floor[((z - room->z) >> WALL_SHIFT) + ((x - room->x) >> WALL_SHIFT) * room->xSize]; + } + return NO_HEIGHT; + } + else + { + // Go down until hit water + while (floor->pitRoom != NO_ROOM) + { + room = &Rooms[floor->pitRoom]; + if (room->flags & ENV_FLAG_WATER) + return (floor->floor << 8); + floor = &room->floor[((z - room->z) >> WALL_SHIFT) + ((x - room->x) >> WALL_SHIFT) * room->xSize]; + } + } + return NO_HEIGHT; +} + +void __cdecl ShootHarpoon(ITEM_INFO* frogman, __int32 x, __int32 y, __int32 z, __int16 speed, __int16 yRot, __int16 roomNumber) +{ + __int16 harpoonItemNum = CreateItem(); + if (harpoonItemNum != NO_ITEM) + { + ITEM_INFO* harpoon = &Items[harpoonItemNum]; + + harpoon->objectNumber = ID_SCUBA_HARPOON; + harpoon->roomNumber = frogman->roomNumber; + + harpoon->pos.xPos = x; + harpoon->pos.yPos = y; + harpoon->pos.zPos = z; + + InitialiseItem(harpoonItemNum); + + harpoon->pos.xRot = 0; + harpoon->pos.yRot = yRot; + harpoon->speed = 150; + + AddActiveItem(harpoonItemNum); + harpoon->status = ITEM_ACTIVE; + + //SoundEffect(247, &dart->pos, 0); + } +} + +void __cdecl HarpoonControl(__int16 itemNum) +{ + ITEM_INFO* item = &Items[itemNum]; + + if (item->touchBits) + { + LaraItem->hitPoints -= 50; + LaraItem->hitStatus = true; + DoBloodSplat(item->pos.xPos, item->pos.yPos, item->pos.zPos, (GetRandomControl() & 3) + 4, LaraItem->pos.yRot, LaraItem->roomNumber); + KillItem(itemNum); + } + else + { + __int32 ox = item->pos.xPos; + __int32 oz = item->pos.zPos; + + __int16 speed = (item->speed * COS(item->pos.xRot)) >> W2V_SHIFT; + item->pos.zPos += (speed * COS(item->pos.yRot)) >> W2V_SHIFT; + item->pos.xPos += (speed * SIN(item->pos.yRot)) >> W2V_SHIFT; + item->pos.yPos += -((item->speed * SIN(item->pos.xRot)) >> W2V_SHIFT); + + __int16 roomNumber = item->roomNumber; + FLOOR_INFO* floor = GetFloor(item->pos.xPos, item->pos.yPos, item->pos.zPos, &roomNumber); + if (item->roomNumber != roomNumber) + ItemNewRoom(itemNum, roomNumber); + item->floor = TrGetHeight(floor, item->pos.xPos, item->pos.yPos, item->pos.zPos); + if (item->pos.yPos >= item->floor) + { + //for (__int32 i = 0; i < 4; i++) + // TriggerDartSmoke(ox, item->pos.yPos, oz, 0, 0, 1); + KillItem(itemNum); + // SoundEffect(258, &item->pos, 0); + } + } +} + +void __cdecl ScubaControl(__int16 itemNumber) +{ + __int32 waterHeight; + + if (!CreatureActive(itemNumber)) + return; + + ITEM_INFO* item = &Items[itemNumber]; + CREATURE_INFO* creature = (CREATURE_INFO *)item->data; + + __int16 angle = 0; + __int16 head = 0; + __int16 neck = 0; + + if (item->hitPoints <= 0) + { + if (item->currentAnimState != 9) + { + item->animNumber = Objects[item->objectNumber].animIndex + 16; + item->frameNumber = Anims[item->animNumber].frameBase; + item->currentAnimState = 9; + } + + CreatureFloat(itemNumber); + return; + } + else + { + AI_INFO info; + CreatureAIInfo(item, &info); + + GetCreatureMood(item, &info, TIMID); + CreatureMood(item, &info, TIMID); + + GAME_VECTOR start; + GAME_VECTOR target; + bool shoot = false; + + if (Lara.waterStatus == false) + { + start.x = item->pos.xPos; + start.y = item->pos.yPos - STEP_SIZE; + start.z = item->pos.zPos; + start.roomNumber = item->roomNumber; + + target.x = LaraItem->pos.xPos; + target.y = LaraItem->pos.yPos - (LARA_HITE - 150); // don't look at her origin, aim higher + target.z = LaraItem->pos.zPos; + + shoot = LOS(&start, &target); + if (shoot) + { + creature->target.x = LaraItem->pos.xPos; + creature->target.y = LaraItem->pos.yPos; + creature->target.z = LaraItem->pos.zPos; + } + + if (info.angle < -ANGLE(45) || info.angle > ANGLE(45)) + shoot = false; + } + else if (info.angle > -ANGLE(45) && info.angle < ANGLE(45)) + { + start.x = item->pos.xPos; + start.y = item->pos.yPos; + start.z = item->pos.zPos; + start.roomNumber = item->roomNumber; + + target.x = LaraItem->pos.xPos; + target.y = LaraItem->pos.yPos; + target.z = LaraItem->pos.zPos; + + shoot = LOS(&start, &target); + } + else + shoot = false; + + angle = CreatureTurn(item, creature->maximumTurn); + + waterHeight = GetWaterSurface(item->pos.xPos, item->pos.yPos, item->pos.zPos, item->roomNumber) + WALL_SIZE / 2; + + switch (item->currentAnimState) + { + case 1: + // Diver underwater + creature->maximumTurn = ANGLE(3); + if (shoot) + neck = -info.angle; + + if (creature->target.y < waterHeight && item->pos.yPos < waterHeight + creature->LOT.fly) + item->goalAnimState = 2; + else if (creature->mood == MOOD_TYPE::ESCAPE_MOOD) + break; + else if (shoot) + item->goalAnimState = 4; + break; + + case 4: + creature->flags = 0; + + if (shoot) + neck = -info.angle; + + if (!shoot || creature->mood == MOOD_TYPE::ESCAPE_MOOD || (creature->target.y < waterHeight && item->pos.yPos < waterHeight + creature->LOT.fly)) + item->goalAnimState = 1; + else + item->goalAnimState = 3; + break; + + case 3: + if (shoot) + neck = -info.angle; + + if (!creature->flags) + { + ShootHarpoon(item, item->pos.xPos, item->pos.yPos, item->pos.zPos, item->speed, item->pos.yRot, item->roomNumber); + creature->flags = 1; + } + break; + + + case 2: + creature->maximumTurn = ANGLE(3); + + if (shoot) + head = info.angle; + + if (creature->target.y > waterHeight) + item->goalAnimState = 1; + else if (creature->mood == MOOD_TYPE::ESCAPE_MOOD) + break; + else if (shoot) + item->goalAnimState = 6; + break; + + case 6: + creature->flags = 0; + + if (shoot) + head = info.angle; + + if (!shoot || creature->mood == MOOD_TYPE::ESCAPE_MOOD || creature->target.y > waterHeight) + item->goalAnimState = 2; + else + item->goalAnimState = 7; + break; + + case 7: + if (shoot) + head = info.angle; + + if (!creature->flags) + { + ShootHarpoon(item, item->pos.xPos, item->pos.yPos, item->pos.zPos, item->speed, item->pos.yRot, item->roomNumber); + creature->flags = 1; + } + break; + + } + } + + CreatureJoint(item, 0, head); + CreatureJoint(item, 1, neck); + CreatureAnimation(itemNumber, angle, 0); + + switch (item->currentAnimState) + { + case 1: + case 4: + case 3: + CreatureUnderwater(item, 512); + break; + default: + item->pos.yPos = waterHeight - 512; + } +} \ No newline at end of file diff --git a/TR5Main/Objects/traps.cpp b/TR5Main/Objects/trap.cpp similarity index 95% rename from TR5Main/Objects/traps.cpp rename to TR5Main/Objects/trap.cpp index 58375df47..1ca5c5191 100644 --- a/TR5Main/Objects/traps.cpp +++ b/TR5Main/Objects/trap.cpp @@ -302,7 +302,7 @@ void __cdecl ControlSpikeWall(__int16 itemNum) { __int32 x = item->pos.xPos + SIN(item->pos.yRot) >> WALL_SHIFT; __int32 z = item->pos.zPos + COS(item->pos.yRot) >> WALL_SHIFT; - + __int16 roomNumber = item->roomNumber; FLOOR_INFO* floor = GetFloor(x, item->pos.yPos, z, &roomNumber); @@ -345,16 +345,16 @@ void __cdecl InitialiseSpinningBlade(__int16 item_number) void __cdecl SpinningBlade(__int16 item_number) { bool spinning = false; - + ITEM_INFO* item = &Items[item_number]; - + if (item->currentAnimState == 2) { if (item->goalAnimState != 1) { __int32 x = item->pos.xPos + (WALL_SIZE * 3 / 2 * SIN(item->pos.yRot) >> W2V_SHIFT); __int32 z = item->pos.zPos + (WALL_SIZE * 3 / 2 * COS(item->pos.yRot) >> W2V_SHIFT); - + __int16 roomNumber = item->roomNumber; FLOOR_INFO* floor = GetFloor(x, item->pos.yPos, z, &roomNumber); __int32 height = TrGetHeight(floor, x, item->pos.yPos, z); @@ -362,7 +362,7 @@ void __cdecl SpinningBlade(__int16 item_number) if (height == NO_HEIGHT) item->goalAnimState = 1; } - + spinning = true; if (item->touchBits) diff --git a/TR5Main/Specific/setup.cpp b/TR5Main/Specific/setup.cpp index 02f30d10b..de9784c8e 100644 --- a/TR5Main/Specific/setup.cpp +++ b/TR5Main/Specific/setup.cpp @@ -72,7 +72,7 @@ void __cdecl NewObjects() obj->saveFlags = true; } - /*obj = &Objects[ID_CHAIN]; + obj = &Objects[ID_CHAIN]; if (obj->loaded) { obj->control = ChainControl; @@ -124,7 +124,7 @@ void __cdecl NewObjects() obj->collision = GenericSphereBoxCollision; obj->saveAnim = true; obj->saveFlags = true; - }*/ + } obj = &Objects[ID_BADDY1]; if (obj->loaded) @@ -264,7 +264,7 @@ void __cdecl NewObjects() Bones[obj->boneIndex + 6 * 4] |= ROT_Y; } - /*obj = &Objects[ID_ROLLING_SPINDLE]; + obj = &Objects[ID_ROLLING_SPINDLE]; if (obj->loaded) { obj->initialise = InitialiseSpinningBlade; @@ -281,7 +281,7 @@ void __cdecl NewObjects() obj->control = SpringBoardControl; obj->saveAnim = true; obj->saveFlags = true; - }*/ + } obj = &Objects[ID_TIGER]; if (obj->loaded) @@ -370,6 +370,40 @@ void __cdecl NewObjects() obj->savePosition = true; } + obj = &Objects[ID_EAGLE]; + if (obj->loaded) + { + obj->initialise = InitialiseEagle; + obj->control = EagleControl; + obj->collision = CreatureCollision; + obj->shadowSize = 128; + obj->hitPoints = 20; + obj->radius = 204; + obj->intelligent = true; + obj->savePosition = true; + obj->saveHitpoints = true; + obj->saveAnim = true; + obj->saveFlags = true; + obj->pivotLength = 0; + } + + obj = &Objects[ID_CROW]; + if (obj->loaded) + { + obj->initialise = InitialiseEagle; + obj->control = EagleControl; + obj->collision = CreatureCollision; + obj->shadowSize = 128; + obj->hitPoints = 15; + obj->radius = 204; + obj->intelligent = true; + obj->savePosition = true; + obj->saveHitpoints = true; + obj->saveAnim = true; + obj->saveFlags = true; + obj->pivotLength = 0; + } + /* obj = &Objects[ID_SPIKEY_WALL]; if (obj->loaded) @@ -401,46 +435,7 @@ void __cdecl NewObjects() Bones[obj->boneIndex + 11 * 4] |= ROT_Y; } - obj = &Objects[ID_FROGMAN]; - if (obj->loaded) - { - obj->control = FrogManControl; - obj->collision = CreatureCollision; - obj->shadowSize = UNIT_SHADOW / 2; - obj->hitPoints = DIVER_hitPoints; - obj->radius = DIVER_RADIUS; - obj->intelligent = true; - obj->waterCreature = true; - obj->savePosition = true; - obj->saveHitpoints = true; - obj->saveAnim = true; - obj->saveFlags = true; - obj->pivotLength = 50; - Bones[obj->boneIndex + 10 * 4] |= ROT_Y; - Bones[obj->boneIndex + 14 * 4] |= ROT_Z; - } - - obj = &Objects[ID_FROGMAN_HARPOON]; - if (obj->loaded) - { - obj->control = HarpoonControl; - obj->collision = ObjectCollision; - obj->savePosition = true; - - printf("nmeshes: %d\n", obj->nmeshes); - printf("meshIndex: %d\n", obj->meshIndex); - printf("boneIndex: %d\n", obj->boneIndex); - printf("frameBase: %d\n", obj->frameBase); - printf("initialise: %d\n", obj->initialise); - printf("control: %d\n", obj->control); - printf("floor: %d\n", obj->floor); - printf("ceiling: %d\n", obj->ceiling); - printf("collision: %d\n", obj->collision); - printf("drawRoutine: %d\n", obj->drawRoutine); - printf("drawRoutineExtra: %d\n", obj->drawRoutineExtra); - printf("objectMip: %d\n", obj->objectMip); - } obj = &Objects[ID_TRIBESMAN_AX]; if (obj->loaded) @@ -458,33 +453,7 @@ void __cdecl NewObjects() Bones[obj->boneIndex + 6 * 4] |= ROT_Y; } - obj = &Objects[ID_EAGLE]; - if (obj->loaded) - { - obj->initialise = InitialiseEagle; - obj->control = EagleControl; - obj->collision = CreatureCollision; - obj->shadowSize = UNIT_SHADOW / 2; - obj->hitPoints = EAGLE_hitPoints; - obj->radius = EAGLE_RADIUS; - obj->intelligent = 1; - obj->savePosition = obj->saveHitpoints = obj->saveAnim = obj->saveFlags = 1; - obj->pivotLength = 0; - } - - obj = &Objects[ID_CROW]; - if (obj->loaded) - { - obj->initialise = InitialiseEagle; - obj->control = EagleControl; - obj->collision = CreatureCollision; - obj->shadowSize = UNIT_SHADOW / 2; - obj->hitPoints = CROW_hitPoints; - obj->radius = CROW_RADIUS; - obj->intelligent = 1; - obj->savePosition = obj->saveHitpoints = obj->saveAnim = obj->saveFlags = 1; - obj->pivotLength = 0; - }*/ +*/ } void __cdecl CustomObjects() diff --git a/TR5Main/TR5Main.vcxproj b/TR5Main/TR5Main.vcxproj index 317d0f9b3..24fab0906 100644 --- a/TR5Main/TR5Main.vcxproj +++ b/TR5Main/TR5Main.vcxproj @@ -323,6 +323,7 @@ xcopy /Y "$(ProjectDir)Scripting\Scripts\*.lua" "$(TargetDir)\Scripts" + diff --git a/TR5Main/TR5Main.vcxproj.filters b/TR5Main/TR5Main.vcxproj.filters index 6f196639e..268c4b335 100644 --- a/TR5Main/TR5Main.vcxproj.filters +++ b/TR5Main/TR5Main.vcxproj.filters @@ -536,6 +536,9 @@ File di origine + + File di origine +