From e1128c41f87f2ace92f710cacc1c8427f4acae37 Mon Sep 17 00:00:00 2001 From: Stranger1992 <84292688+Stranger1992@users.noreply.github.com> Date: Fri, 19 May 2023 16:56:45 +0100 Subject: [PATCH] Revert "Merge branch 'develop' into sezz_x64" This reverts commit f6957691890a8f6fbbd9ef5d83ad6fbe8e174193, reversing changes made to 54c5e0c70d0f88c92c74dba368f12e1715561437. --- Documentation/Changes.txt | 9 +- TombEngine/Game/Lara/lara.cpp | 4 + TombEngine/Game/Lara/lara_fire.cpp | 33 ++- TombEngine/Game/Lara/lara_flare.cpp | 22 +- TombEngine/Game/Lara/lara_objects.cpp | 137 ++++++++- TombEngine/Game/Lara/lara_objects.h | 2 + TombEngine/Game/Lara/lara_one_gun.cpp | 22 +- TombEngine/Game/Lara/lara_overhang.cpp | 4 +- TombEngine/Game/Lara/lara_struct.h | 20 +- TombEngine/Game/Lara/lara_tests.cpp | 13 + TombEngine/Game/Lara/lara_tests.h | 4 + TombEngine/Game/Lara/lara_two_guns.cpp | 2 +- TombEngine/Game/animation.cpp | 67 ++--- TombEngine/Game/animation.h | 29 +- TombEngine/Game/collision/collide_item.cpp | 8 +- TombEngine/Game/control/control.cpp | 3 - TombEngine/Game/control/trigger.cpp | 8 +- TombEngine/Game/pickup/pickup.cpp | 35 +-- TombEngine/Game/pickup/pickup.h | 2 +- TombEngine/Objects/Effects/flame_emitters.cpp | 4 +- .../Objects/Generic/Object/burning_torch.cpp | 8 +- .../Generic/Object/generic_trapdoor.cpp | 24 +- TombEngine/Objects/Generic/Object/objects.cpp | 28 +- TombEngine/Objects/Generic/Object/rope.cpp | 24 +- .../Generic/Switches/AirlockSwitch.cpp | 2 +- .../Objects/Generic/Switches/cog_switch.cpp | 6 +- .../Generic/Switches/crowbar_switch.cpp | 44 +-- .../Generic/Switches/fullblock_switch.cpp | 4 +- .../Generic/Switches/generic_switch.cpp | 26 +- .../Objects/Generic/Switches/jump_switch.cpp | 4 +- .../Generic/Switches/pulley_switch.cpp | 2 +- .../Objects/Generic/Switches/rail_switch.cpp | 4 +- .../Objects/Generic/Switches/turn_switch.cpp | 60 ++-- TombEngine/Objects/Generic/puzzles_keys.cpp | 13 +- TombEngine/Objects/TR1/Entity/Cowboy.cpp | 2 +- TombEngine/Objects/TR1/Entity/Cowboy.h | 2 +- TombEngine/Objects/TR1/Entity/tr1_wolf.cpp | 2 +- TombEngine/Objects/TR1/tr1_objects.cpp | 2 +- .../Objects/TR2/Entity/tr2_barracuda.cpp | 2 +- TombEngine/Objects/TR2/Entity/tr2_dragon.cpp | 4 +- .../Objects/TR2/Entity/tr2_eagle_or_crow.cpp | 6 +- .../Objects/TR2/Entity/tr2_mercenary.cpp | 2 +- TombEngine/Objects/TR2/Entity/tr2_monk.cpp | 2 +- TombEngine/Objects/TR2/Entity/tr2_skidman.cpp | 2 +- TombEngine/Objects/TR2/Entity/tr2_spider.cpp | 2 +- TombEngine/Objects/TR2/Entity/tr2_yeti.cpp | 10 +- .../Objects/TR2/Trap/tr2_killerstatue.cpp | 2 +- TombEngine/Objects/TR2/Vehicles/speedboat.cpp | 2 +- TombEngine/Objects/TR3/Entity/PunaBoss.cpp | 2 +- TombEngine/Objects/TR3/Entity/Shiva.cpp | 2 +- TombEngine/Objects/TR3/Entity/SophiaLeigh.cpp | 2 +- TombEngine/Objects/TR3/Entity/tr3_monkey.cpp | 4 +- TombEngine/Objects/TR3/Entity/tr3_mp_gun.cpp | 20 +- .../Objects/TR3/Entity/tr3_mp_stick.cpp | 4 +- TombEngine/Objects/TR3/Entity/tr3_tony.cpp | 2 +- .../Objects/TR3/Entity/tr3_tribesman.cpp | 4 +- TombEngine/Objects/TR3/Vehicles/kayak.cpp | 2 +- TombEngine/Objects/TR3/Vehicles/minecart.cpp | 4 +- TombEngine/Objects/TR3/Vehicles/upv.cpp | 2 +- TombEngine/Objects/TR4/Entity/Wraith.cpp | 2 +- TombEngine/Objects/TR4/Entity/tr4_ahmet.cpp | 16 +- TombEngine/Objects/TR4/Entity/tr4_baboon.cpp | 4 +- TombEngine/Objects/TR4/Entity/tr4_baddy.cpp | 46 +-- .../Objects/TR4/Entity/tr4_big_scorpion.cpp | 2 +- .../Objects/TR4/Entity/tr4_crocodile.cpp | 4 +- TombEngine/Objects/TR4/Entity/tr4_demigod.cpp | 12 +- TombEngine/Objects/TR4/Entity/tr4_dog.cpp | 2 +- .../Objects/TR4/Entity/tr4_enemy_jeep.cpp | 4 +- TombEngine/Objects/TR4/Entity/tr4_guide.cpp | 30 +- .../Objects/TR4/Entity/tr4_horseman.cpp | 14 +- .../Objects/TR4/Entity/tr4_jean_yves.cpp | 4 +- .../Objects/TR4/Entity/tr4_knight_templar.cpp | 2 +- TombEngine/Objects/TR4/Entity/tr4_mummy.cpp | 8 +- TombEngine/Objects/TR4/Entity/tr4_mutant.cpp | 8 +- TombEngine/Objects/TR4/Entity/tr4_sas.cpp | 4 +- TombEngine/Objects/TR4/Entity/tr4_setha.cpp | 8 +- .../Objects/TR4/Entity/tr4_skeleton.cpp | 16 +- .../Objects/TR4/Entity/tr4_small_scorpion.cpp | 4 +- TombEngine/Objects/TR4/Entity/tr4_sphinx.cpp | 2 +- TombEngine/Objects/TR4/Entity/tr4_troops.cpp | 10 +- .../Objects/TR4/Entity/tr4_von_croy.cpp | 46 +-- TombEngine/Objects/TR4/Object/WraithTrap.cpp | 3 +- .../TR4/Object/tr4_clockwork_beetle.cpp | 2 +- .../Objects/TR4/Object/tr4_element_puzzle.cpp | 8 +- TombEngine/Objects/TR4/Object/tr4_mapper.cpp | 2 +- TombEngine/Objects/TR4/Object/tr4_obelisk.cpp | 10 +- .../Objects/TR4/Object/tr4_sarcophagus.cpp | 4 +- TombEngine/Objects/TR4/Object/tr4_scales.cpp | 16 +- TombEngine/Objects/TR4/Object/tr4_senet.cpp | 2 +- TombEngine/Objects/TR4/Trap/tr4_birdblade.cpp | 4 +- .../Objects/TR4/Trap/tr4_catwalkblade.cpp | 6 +- TombEngine/Objects/TR4/Trap/tr4_cog.cpp | 2 +- .../Objects/TR4/Trap/tr4_fourblades.cpp | 4 +- TombEngine/Objects/TR4/Trap/tr4_hammer.cpp | 4 +- TombEngine/Objects/TR4/Trap/tr4_mine.cpp | 4 +- .../Objects/TR4/Trap/tr4_moving_blade.cpp | 2 +- .../Objects/TR4/Trap/tr4_plinthblade.cpp | 6 +- TombEngine/Objects/TR4/Trap/tr4_sethblade.cpp | 2 +- TombEngine/Objects/TR4/Trap/tr4_spikeball.cpp | 4 +- TombEngine/Objects/TR4/Trap/tr4_stargate.cpp | 4 +- TombEngine/Objects/TR4/Vehicles/motorbike.cpp | 2 +- TombEngine/Objects/TR5/Entity/HeavyGuard.cpp | 4 +- TombEngine/Objects/TR5/Entity/tr5_chef.cpp | 4 +- TombEngine/Objects/TR5/Entity/tr5_cyborg.cpp | 6 +- .../Objects/TR5/Entity/tr5_doberman.cpp | 4 +- TombEngine/Objects/TR5/Entity/tr5_dog.cpp | 6 +- TombEngine/Objects/TR5/Entity/tr5_ghost.cpp | 2 +- .../Objects/TR5/Entity/tr5_gladiator.cpp | 2 +- TombEngine/Objects/TR5/Entity/tr5_guard.cpp | 62 ++-- TombEngine/Objects/TR5/Entity/tr5_hydra.cpp | 8 +- .../Objects/TR5/Entity/tr5_lagoon_witch.cpp | 4 +- TombEngine/Objects/TR5/Entity/tr5_larson.cpp | 6 +- .../Objects/TR5/Entity/tr5_roman_statue.cpp | 14 +- TombEngine/Objects/TR5/Object/tr5_genslot.cpp | 2 +- .../Objects/TR5/Object/tr5_pushableblock.cpp | 8 +- .../Objects/TR5/Object/tr5_rollingball.cpp | 6 +- .../Objects/TR5/Object/tr5_teleporter.cpp | 5 +- .../TR5/Switch/tr5_crowdove_switch.cpp | 2 +- TombEngine/Objects/TR5/Trap/LaserBarrier.cpp | 188 ------------ TombEngine/Objects/TR5/Trap/LaserBarrier.h | 40 --- .../Objects/TR5/Trap/tr5_ventilator.cpp | 4 +- .../Objects/TR5/Trap/tr5_wreckingball.cpp | 2 +- TombEngine/Objects/TR5/tr5_objects.cpp | 20 +- TombEngine/Objects/game_object_ids.h | 2 +- .../Renderer/ConstantBuffers/SpriteBuffer.h | 1 - TombEngine/Renderer/Renderer11.h | 15 +- TombEngine/Renderer/Renderer11Draw.cpp | 1 - TombEngine/Renderer/Renderer11DrawEffect.cpp | 50 +--- TombEngine/Renderer/Renderer11DrawMenu.cpp | 4 +- TombEngine/Renderer/Renderer11Lara.cpp | 16 +- TombEngine/Renderer/RendererSprites.cpp | 19 +- TombEngine/Renderer/RendererSprites.h | 7 - TombEngine/Resources.aps | Bin 79008 -> 78820 bytes .../TEN/Objects/Moveable/MoveableObject.cpp | 21 +- .../Internal/TEN/Objects/ObjectIDs.h | 2 +- TombEngine/Shaders/AnimatedTextures.hlsli | 18 +- TombEngine/Shaders/Blending.hlsli | 156 ++-------- TombEngine/Shaders/DX11_Sprites.fx | 12 +- TombEngine/Shaders/Math.hlsli | 271 +++++------------- TombEngine/Specific/Input/Input.cpp | 3 - TombEngine/TombEngine.vcxproj | 2 - 141 files changed, 856 insertions(+), 1249 deletions(-) delete mode 100644 TombEngine/Objects/TR5/Trap/LaserBarrier.cpp delete mode 100644 TombEngine/Objects/TR5/Trap/LaserBarrier.h diff --git a/Documentation/Changes.txt b/Documentation/Changes.txt index c0a96b175..b8274309c 100644 --- a/Documentation/Changes.txt +++ b/Documentation/Changes.txt @@ -14,11 +14,6 @@ Version 1.0.9 * Add TR1 cowboy. * Add TR3 wall mounted blade. * Add TR3 claw mutant. -* Add TR5 lasers - - Choose colour for the lasers via tint menu. - - Laser OCB means width of the laser in sectors. - - Negative OCB laser will trigger heavy trigger. - - Positive OCB kills Lara. * Add removable puzzles from puzzle holes and puzzle dones. - Employed by setting the trigger type as "Switch" for either puzzle hole or puzzle done. - Can be mixed with puzzle done and puzzle holes of the same or different type. @@ -33,8 +28,8 @@ Version 1.0.9 * Add "Reset to defaults" entry to controls menu and automatically bind XBOX gamepad profile if connected. Lua API changes: -* Add Vec2 class. -* Add function String::SetTranslated() +* Add class Vec2 +* Add function String::SetTranslated() * Add function Misc::IsStringDisplaying() * Add the following for use in AddCallback and RemoveCallback: - PRESTART, POSTSTART diff --git a/TombEngine/Game/Lara/lara.cpp b/TombEngine/Game/Lara/lara.cpp index 4a7edad13..f26d17979 100644 --- a/TombEngine/Game/Lara/lara.cpp +++ b/TombEngine/Game/Lara/lara.cpp @@ -179,7 +179,11 @@ std::function lara_control_routines[NUM_LARA_STATES + 1] = lara_as_tightrope_fall,//122 lara_as_tightrope_fall,//123 lara_as_null,//124 +#ifdef NEW_TIGHTROPE lara_as_tightrope_dismount,//125 +#else // !NEW_TIGHTROPE + lara_as_null,//125 +#endif lara_as_switch_on,//126 lara_as_null,//127 lara_as_horizontal_bar_swing,//128 diff --git a/TombEngine/Game/Lara/lara_fire.cpp b/TombEngine/Game/Lara/lara_fire.cpp index 018a03702..d14c9a114 100644 --- a/TombEngine/Game/Lara/lara_fire.cpp +++ b/TombEngine/Game/Lara/lara_fire.cpp @@ -34,6 +34,11 @@ using namespace TEN::Entities::Generic; using namespace TEN::Input; using namespace TEN::Math; +constexpr auto TARGET_COUNT_MAX = 8; + +std::array LastTargets = {}; +std::array TargetList = {}; + int FlashGrenadeAftershockTimer = 0; // States in which Lara will hold an active flare out in front. @@ -332,8 +337,8 @@ void InitializeNewWeapon(ItemInfo& laraItem) break; default: - player.RightArm.FrameBase = GetAnimData(laraItem).FramePtr; - player.LeftArm.FrameBase = GetAnimData(laraItem).FramePtr; + player.RightArm.FrameBase = g_Level.Anims[laraItem.Animation.AnimNumber].FramePtr; + player.LeftArm.FrameBase = g_Level.Anims[laraItem.Animation.AnimNumber].FramePtr; break; } } @@ -905,7 +910,7 @@ void FindNewTarget(ItemInfo& laraItem, const WeaponInfo& weaponInfo) orient.x <= weaponInfo.LockOrientConstraint.second.x && orient.y <= weaponInfo.LockOrientConstraint.second.y) { - player.TargetList[targetCount] = &item; + TargetList[targetCount] = &item; ++targetCount; if (distance < closestDistance && @@ -918,14 +923,14 @@ void FindNewTarget(ItemInfo& laraItem, const WeaponInfo& weaponInfo) } } - player.TargetList[targetCount] = nullptr; - if (player.TargetList[0] == nullptr) + TargetList[targetCount] = nullptr; + if (TargetList[0] == nullptr) { player.TargetEntity = nullptr; } else { - for (const auto* targetPtr : player.TargetList) + for (const auto* targetPtr : TargetList) { if (targetPtr == nullptr) player.TargetEntity = nullptr; @@ -939,17 +944,17 @@ void FindNewTarget(ItemInfo& laraItem, const WeaponInfo& weaponInfo) if (player.TargetEntity == nullptr) { player.TargetEntity = closestEntityPtr; - player.LastTargets[0] = nullptr; + LastTargets[0] = nullptr; } else if (IsClicked(In::SwitchTarget)) { player.TargetEntity = nullptr; bool flag = true; - for (const auto& targetPtr : player.TargetList) + for (const auto& targetPtr : TargetList) { bool doLoop = false; - for (const auto* lastTargetPtr : player.LastTargets) + for (const auto* lastTargetPtr : LastTargets) { if (lastTargetPtr == targetPtr) { @@ -971,18 +976,18 @@ void FindNewTarget(ItemInfo& laraItem, const WeaponInfo& weaponInfo) if (flag) { player.TargetEntity = closestEntityPtr; - player.LastTargets[0] = nullptr; + LastTargets[0] = nullptr; } } } } - if (player.TargetEntity != player.LastTargets[0]) + if (player.TargetEntity != LastTargets[0]) { - for (int slot = LaraInfo::TARGET_COUNT_MAX - 1; slot > 0; --slot) - player.LastTargets[slot] = player.LastTargets[slot - 1]; + for (int slot = TARGET_COUNT_MAX - 1; slot > 0; --slot) + LastTargets[slot] = LastTargets[slot - 1]; - player.LastTargets[0] = player.TargetEntity; + LastTargets[0] = player.TargetEntity; } LaraTargetInfo(laraItem, weaponInfo); diff --git a/TombEngine/Game/Lara/lara_flare.cpp b/TombEngine/Game/Lara/lara_flare.cpp index 84315bf16..63a970e71 100644 --- a/TombEngine/Game/Lara/lara_flare.cpp +++ b/TombEngine/Game/Lara/lara_flare.cpp @@ -126,7 +126,7 @@ void UndrawFlare(ItemInfo& laraItem) if (laraItem.Animation.AnimNumber == LA_STAND_IDLE) { laraItem.Animation.AnimNumber = LA_DISCARD_FLARE; - flareFrame = armFrame + GetAnimData(laraItem).frameBase; + flareFrame = armFrame + g_Level.Anims[laraItem.Animation.AnimNumber].frameBase; laraItem.Animation.FrameNumber = flareFrame; player.Flare.Frame = flareFrame; } @@ -135,7 +135,7 @@ void UndrawFlare(ItemInfo& laraItem) { player.Flare.ControlLeft = false; - if (flareFrame >= (GetAnimData(laraItem).frameBase + 31)) // 31 = Last frame. + if (flareFrame >= (g_Level.Anims[laraItem.Animation.AnimNumber].frameBase + 31)) // 31 = Last frame. { player.Control.Weapon.RequestGunType = player.Control.Weapon.LastGunType; player.Control.Weapon.GunType = player.Control.Weapon.LastGunType; @@ -146,8 +146,8 @@ void UndrawFlare(ItemInfo& laraItem) player.TargetEntity = nullptr; player.LeftArm.Locked = player.RightArm.Locked = false; - SetAnimation(laraItem, LA_STAND_IDLE); - player.Flare.Frame = GetAnimData(laraItem).frameBase; + SetAnimation(&laraItem, LA_STAND_IDLE); + player.Flare.Frame = g_Level.Anims[laraItem.Animation.AnimNumber].frameBase; return; } @@ -281,27 +281,27 @@ void DrawFlare(ItemInfo& laraItem) void SetFlareArm(ItemInfo& laraItem, int armFrame) { auto& player = *GetLaraInfo(&laraItem); - int flareAnimNumber = Objects[ID_FLARE_ANIM].animIndex; + int flareAnimNum = Objects[ID_FLARE_ANIM].animIndex; if (armFrame >= 95) { - flareAnimNumber += 4; + flareAnimNum += 4; } else if (armFrame >= 72) { - flareAnimNumber += 3; + flareAnimNum += 3; } else if (armFrame >= 33) { - flareAnimNumber += 2; + flareAnimNum += 2; } else if (armFrame >= 1) { - flareAnimNumber += 1; + flareAnimNum += 1; } - player.LeftArm.AnimNumber = flareAnimNumber; - player.LeftArm.FrameBase = GetAnimData(flareAnimNumber).FramePtr; + player.LeftArm.AnimNumber = flareAnimNum; + player.LeftArm.FrameBase = g_Level.Anims[flareAnimNum].FramePtr; } void CreateFlare(ItemInfo& laraItem, GAME_OBJECT_ID objectID, bool isThrown) diff --git a/TombEngine/Game/Lara/lara_objects.cpp b/TombEngine/Game/Lara/lara_objects.cpp index e1fc79b76..693ecef3d 100644 --- a/TombEngine/Game/Lara/lara_objects.cpp +++ b/TombEngine/Game/Lara/lara_objects.cpp @@ -312,6 +312,7 @@ void lara_as_horizontal_bar_leap(ItemInfo* item, CollisionInfo* coll) // TIGHTROPE // --------- +#ifdef NEW_TIGHTROPE // State: LS_TIGHTROPE_IDLE (119) // Collision: lara_default_col() void lara_as_tightrope_idle(ItemInfo* item, CollisionInfo* coll) @@ -413,6 +414,140 @@ void lara_as_tightrope_fall(ItemInfo* item, CollisionInfo* coll) } } +#else +// State: LS_TIGHTROPE_IDLE (119) +// Collision: lara_default_col() +void lara_as_tightrope_idle(ItemInfo* item, CollisionInfo* coll) +{ + GetTightropeFallOff(item, 127); + + if (TrInput & IN_LOOK) + LookUpDown(item); + + if (item->Animation.ActiveState != LS_TIGHTROPE_UNBALANCE_LEFT) + { + if (lara->Control.TightropeControl.Fall) + { + if (GetRandomControl() & 1) + item->Animation.TargetState = LS_TIGHTROPE_UNBALANCE_RIGHT; + else + item->Animation.TargetState = LS_TIGHTROPE_UNBALANCE_LEFT; + } + else + { + if (TrInput & IN_FORWARD) + item->Animation.TargetState = LS_TIGHTROPE_WALK; + else if (TrInput & (IN_ROLL | IN_BACK)) + { + item->Animation.TargetState = LS_TIGHTROPE_TURN_180; + GetTightropeFallOff(item, 1); + } + } + } +} + +// State: LS_TIGHTROPE_WALK (121) +// Collision: lara_default_col() +void lara_as_tightrope_walk(ItemInfo* item, CollisionInfo* coll) +{ + if (lara->Control.TightropeControl.OnCount) + lara->Control.TightropeControl.OnCount--; + else if (lara->Control.TightropeControl.Off) + { + short roomNumber = item->RoomNumber; + + if (GetFloorHeight(GetFloor(item->Pose.Position.x, item->Pose.Position.y, item->Pose.Position.z, &roomNumber), + item->Pose.Position.x, item->Pose.Position.y, item->Pose.Position.z) == item->Pose.Position.y) + { + item->Animation.TargetState = LS_TIGHTROPE_DISMOUNT; + lara->Control.TightropeControl.Off = 0; + } + } + else + GetTightropeFallOff(item, 127); + + if (item->Animation.ActiveState != LS_TIGHTROPE_UNBALANCE_LEFT) + { + if (TrInput & IN_LOOK) + LookUpDown(item); + + if (((TrInput & (IN_BACK | IN_ROLL) || !(TrInput & IN_FORWARD) || lara->Control.TightropeControl.Fall) && + !lara->Control.TightropeControl.OnCount && + !lara->Control.TightropeControl.Off) && + item->Animation.TargetState != LS_TIGHTROPE_DISMOUNT) + { + item->Animation.TargetState = LS_TIGHTROPE_IDLE; + } + } +} + +// State: TIGHTROPE_UNBALANCE_LEFT (122), TIGHTROPE_UNBALANCE_RIGHT (123) +// Collision: lara_default_col() +void lara_as_tightrope_fall(ItemInfo* item, CollisionInfo* coll) +{ + if (item->Animation.AnimNumber == LA_TIGHTROPE_FALL_LEFT || item->Animation.AnimNumber == LA_TIGHTROPE_FALL_RIGHT) + { + if (TestLastFrame(item, item->Animation.AnimNumber)) + { + auto pos = GetJointPosition(item, LM_RFOOT); + item->Pose.Position.x = pos.x; + item->Pose.Position.y = pos.y + 75; + item->Pose.Position.z = pos.z; + + item->Animation.TargetState = LS_FREEFALL; + item->Animation.ActiveState = LS_FREEFALL; + item->Animation.AnimNumber = LA_FREEFALL; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; + + item->Animation.Velocity.y = 81; + Camera.targetspeed = 16; + } + } + else + { + int undoInput, wrongInput; + int undoAnim, undoFrame; + + if (lara->Control.TightropeControl.OnCount > 0) + lara->Control.TightropeControl.OnCount--; + + if (item->Animation.AnimNumber == LA_TIGHTROPE_UNBALANCE_LEFT) + { + undoInput = IN_RIGHT; + wrongInput = IN_LEFT; + undoAnim = LA_TIGHTROPE_RECOVER_LEFT; + } + else if (item->Animation.AnimNumber == LA_TIGHTROPE_UNBALANCE_RIGHT) + { + undoInput = IN_LEFT; + wrongInput = IN_RIGHT; + undoAnim = LA_TIGHTROPE_RECOVER_RIGHT; + } + else + return; + + undoFrame = g_Level.Anims[item->Animation.AnimNumber].frameEnd + g_Level.Anims[undoAnim].frameBase - item->Animation.FrameNumber; + + if (TrInput & undoInput && lara->Control.TightropeControl.OnCount == 0) + { + item->Animation.ActiveState = LS_TIGHTROPE_RECOVER_BALANCE; + item->Animation.TargetState = LS_TIGHTROPE_IDLE; + item->Animation.AnimNumber = undoAnim; + item->Animation.FrameNumber = undoFrame; + lara->Control.TightropeControl.Fall--; + } + else + { + if (TrInput & wrongInput) + { + if (lara->Control.TightropeControl.OnCount < 10) + lara->Control.TightropeControl.OnCount += (GetRandomControl() & 3) + 2; + } + } + } +} +#endif + // ---- // ROPE // ---- @@ -547,7 +682,7 @@ void lara_col_rope_swing(ItemInfo* item, CollisionInfo* coll) item->Animation.TargetState = LS_ROPE_IDLE; item->Animation.ActiveState = LS_ROPE_IDLE; item->Animation.AnimNumber = LA_JUMP_UP_TO_ROPE_END; - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; } if (TrInput & IN_JUMP) diff --git a/TombEngine/Game/Lara/lara_objects.h b/TombEngine/Game/Lara/lara_objects.h index 1a7be972c..f56595d79 100644 --- a/TombEngine/Game/Lara/lara_objects.h +++ b/TombEngine/Game/Lara/lara_objects.h @@ -55,7 +55,9 @@ void lara_as_horizontal_bar_leap(ItemInfo* item, CollisionInfo* coll); // TIGHTROPE // --------- +#ifdef NEW_TIGHTROPE void lara_as_tightrope_dismount(ItemInfo* item, CollisionInfo* coll); +#endif void lara_as_tightrope_idle(ItemInfo* item, CollisionInfo* coll); void lara_as_tightrope_walk(ItemInfo* item, CollisionInfo* coll); void lara_as_tightrope_fall(ItemInfo* item, CollisionInfo* coll); diff --git a/TombEngine/Game/Lara/lara_one_gun.cpp b/TombEngine/Game/Lara/lara_one_gun.cpp index f90ce2f5f..8d1bb55b3 100644 --- a/TombEngine/Game/Lara/lara_one_gun.cpp +++ b/TombEngine/Game/Lara/lara_one_gun.cpp @@ -475,7 +475,7 @@ void DrawShotgun(ItemInfo& laraItem, LaraWeaponType weaponType) if (weaponItemPtr->Animation.ActiveState != WEAPON_STATE_AIM && weaponItemPtr->Animation.ActiveState != WEAPON_STATE_UNDERWATER_AIM) { - if ((weaponItemPtr->Animation.FrameNumber - GetAnimData(weaponItemPtr).frameBase) == Weapons[(int)weaponType].DrawFrame) + if ((weaponItemPtr->Animation.FrameNumber - g_Level.Anims[weaponItemPtr->Animation.AnimNumber].frameBase) == Weapons[(int)weaponType].DrawFrame) { DrawShotgunMeshes(laraItem, weaponType); } @@ -489,8 +489,8 @@ void DrawShotgun(ItemInfo& laraItem, LaraWeaponType weaponType) ReadyShotgun(laraItem, weaponType); } - player.LeftArm.FrameBase = player.RightArm.FrameBase = GetAnimData(weaponItemPtr).FramePtr; - player.LeftArm.FrameNumber = player.RightArm.FrameNumber = weaponItemPtr->Animation.FrameNumber - GetAnimData(weaponItemPtr).frameBase; + player.LeftArm.FrameBase = player.RightArm.FrameBase = g_Level.Anims[weaponItemPtr->Animation.AnimNumber].FramePtr; + player.LeftArm.FrameNumber = player.RightArm.FrameNumber = weaponItemPtr->Animation.FrameNumber - g_Level.Anims[weaponItemPtr->Animation.AnimNumber].frameBase; player.LeftArm.AnimNumber = player.RightArm.AnimNumber = weaponItemPtr->Animation.AnimNumber; } @@ -517,19 +517,19 @@ void UndrawShotgun(ItemInfo& laraItem, LaraWeaponType weaponType) } else if (item.Animation.ActiveState == WEAPON_STATE_UNDRAW) { - if (item.Animation.FrameNumber - GetAnimData(item).frameBase == 21 || - (weaponType == LaraWeaponType::GrenadeLauncher && item.Animation.FrameNumber - GetAnimData(item).frameBase == 15)) + if ((item.Animation.FrameNumber - g_Level.Anims[item.Animation.AnimNumber].frameBase) == 21 || + (weaponType == LaraWeaponType::GrenadeLauncher && (item.Animation.FrameNumber - g_Level.Anims[item.Animation.AnimNumber].frameBase) == 15)) { UndrawShotgunMeshes(laraItem, weaponType); } } - player.RightArm.FrameBase = - player.LeftArm.FrameBase = GetAnimData(item).FramePtr; - player.RightArm.FrameNumber = - player.LeftArm.FrameNumber = item.Animation.FrameNumber - GetAnimData(item).frameBase; - player.RightArm.AnimNumber = - player.LeftArm.AnimNumber = player.RightArm.AnimNumber; + player.LeftArm.FrameBase = + player.RightArm.FrameBase = g_Level.Anims[item.Animation.AnimNumber].FramePtr; + player.LeftArm.FrameNumber = + player.RightArm.FrameNumber = item.Animation.FrameNumber - g_Level.Anims[item.Animation.AnimNumber].frameBase; + player.LeftArm.AnimNumber = + player.RightArm.AnimNumber = item.Animation.AnimNumber; } void DrawShotgunMeshes(ItemInfo& laraItem, LaraWeaponType weaponType) diff --git a/TombEngine/Game/Lara/lara_overhang.cpp b/TombEngine/Game/Lara/lara_overhang.cpp index e62d84b4e..0a1be8b01 100644 --- a/TombEngine/Game/Lara/lara_overhang.cpp +++ b/TombEngine/Game/Lara/lara_overhang.cpp @@ -699,7 +699,7 @@ void lara_as_sclimbstart(ItemInfo* item, CollisionInfo* coll) int distance = TestLaraWall(item, 0, SECTOR(1.5f), 0) ? SECTOR(1) : CLICK(6.5f); - if (item->Animation.FrameNumber < GetAnimData(item).frameEnd) + if (item->Animation.FrameNumber < g_Level.Anims[item->Animation.AnimNumber].frameEnd) { Camera.targetDistance = distance; Camera.targetElevation = int(SECTOR(3) * frac); @@ -753,7 +753,7 @@ void lara_as_sclimbstop(ItemInfo* item, CollisionInfo* coll) Camera.flags = CF_FOLLOW_CENTER; - if (item->Animation.FrameNumber < GetAnimData(item).frameEnd) + if (item->Animation.FrameNumber < g_Level.Anims[item->Animation.AnimNumber].frameEnd) { Camera.targetAngle = (short)(-ANGLE(90.0f) * frac); diff --git a/TombEngine/Game/Lara/lara_struct.h b/TombEngine/Game/Lara/lara_struct.h index dda0b72c2..306ef53c2 100644 --- a/TombEngine/Game/Lara/lara_struct.h +++ b/TombEngine/Game/Lara/lara_struct.h @@ -1220,12 +1220,19 @@ struct RopeControlData }; // TODO: Give tightrope a property for difficulty? +// TODO: Remove old tightrope functionality. struct TightropeControlData { +#if NEW_TIGHTROPE short TightropeItem = 0; bool CanDismount = false; float Balance = 0.0f; unsigned int TimeOnTightrope = 0; +#else // !NEW_TIGHTROPE + unsigned int OnCount; + byte Off; + byte Fall; +#endif }; struct SubsuitControlData @@ -1300,8 +1307,6 @@ struct PlayerEffectData struct LaraInfo { - static constexpr auto TARGET_COUNT_MAX = 8; - int ItemNumber = 0; // TODO: Remove. No longer necessary since ItemInfo already has it. -- Sezz 2023.04.09 LaraControlData Control = {}; @@ -1314,15 +1319,12 @@ struct LaraInfo TorchData Torch = {}; CarriedWeaponInfo Weapons[(int)LaraWeaponType::NumWeapons] = {}; - EulerAngles ExtraHeadRot = EulerAngles::Zero; - EulerAngles ExtraTorsoRot = EulerAngles::Zero; - EulerAngles TargetArmOrient = EulerAngles::Zero; + EulerAngles ExtraHeadRot = {}; + EulerAngles ExtraTorsoRot = {}; ArmInfo LeftArm = {}; ArmInfo RightArm = {}; - - ItemInfo* TargetEntity = nullptr; // TargetEntityPtr. Should use item number instead? - std::array TargetList = {}; - std::array LastTargets = {}; + EulerAngles TargetArmOrient = EulerAngles::Zero; + ItemInfo* TargetEntity = nullptr; // TargetEntityPtr. Should use item number instead? // TODO: Rewrite and restore spasm effect. Also move to PlayerEffectData? int HitFrame = 0; // Frame index. diff --git a/TombEngine/Game/Lara/lara_tests.cpp b/TombEngine/Game/Lara/lara_tests.cpp index 3b5d5a1d4..11bdb52b4 100644 --- a/TombEngine/Game/Lara/lara_tests.cpp +++ b/TombEngine/Game/Lara/lara_tests.cpp @@ -1099,6 +1099,19 @@ void TestLaraWaterDepth(ItemInfo* item, CollisionInfo* coll) } } +#ifndef NEW_TIGHTROPE +void GetTightropeFallOff(ItemInfo* item, int regularity) +{ + auto* lara = GetLaraInfo(item); + + if (item->HitPoints <= 0 || item->HitStatus) + SetAnimation(item, LA_TIGHTROPE_FALL_LEFT); + + if (!lara->Control.Tightrope.Fall && !(GetRandomControl() & regularity)) + lara->Control.Tightrope.Fall = 2 - ((GetRandomControl() & 0xF) != 0); +} +#endif + bool TestLaraWeaponType(LaraWeaponType refWeaponType, const vector& weaponTypeList) { for (const auto& weaponType : weaponTypeList) diff --git a/TombEngine/Game/Lara/lara_tests.h b/TombEngine/Game/Lara/lara_tests.h index e6f83ba30..192eb69cd 100644 --- a/TombEngine/Game/Lara/lara_tests.h +++ b/TombEngine/Game/Lara/lara_tests.h @@ -42,6 +42,10 @@ bool TestLaraWaterClimbOut(ItemInfo* item, CollisionInfo* coll); bool TestLaraLadderClimbOut(ItemInfo* item, CollisionInfo* coll); void TestLaraWaterDepth(ItemInfo* item, CollisionInfo* coll); +#ifndef NEW_TIGHTROPE +void GetTightropeFallOff(ItemInfo* item, int regularity); +#endif + bool TestLaraWeaponType(LaraWeaponType refWeaponType, const std::vector& weaponTypeList); bool IsStandingWeapon(ItemInfo* item, LaraWeaponType weaponType); bool IsVaultState(int state); diff --git a/TombEngine/Game/Lara/lara_two_guns.cpp b/TombEngine/Game/Lara/lara_two_guns.cpp index 90932744d..5aee8c317 100644 --- a/TombEngine/Game/Lara/lara_two_guns.cpp +++ b/TombEngine/Game/Lara/lara_two_guns.cpp @@ -89,7 +89,7 @@ static void SetArmInfo(const ItemInfo& laraItem, ArmInfo& arm, int frame) } arm.FrameNumber = frame; - arm.FrameBase = GetAnimData(arm.AnimNumber).FramePtr; + arm.FrameBase = g_Level.Anims[arm.AnimNumber].FramePtr; } static void ReadyPistols(ItemInfo& laraItem, LaraWeaponType weaponType) diff --git a/TombEngine/Game/animation.cpp b/TombEngine/Game/animation.cpp index 3b211ec2b..2db126bdb 100644 --- a/TombEngine/Game/animation.cpp +++ b/TombEngine/Game/animation.cpp @@ -406,9 +406,9 @@ void SetAnimation(ItemInfo& item, GAME_OBJECT_ID animObjectID, int animNumber, i if (animIndex < 0 || animIndex >= g_Level.Anims.size()) { TENLog( - "Attempted to set missing animation " + std::to_string(animNumber) + - ((animObjectID == item.ObjectNumber) ? "" : (" from object " + GetObjectName(animObjectID))) + - " for object " + GetObjectName(item.ObjectNumber), + std::string("Attempted to set missing animation ") + std::to_string(animNumber) + + (animObjectID == item.ObjectNumber ? std::string() : std::string(" from object ") + GetObjectName(animObjectID)) + + std::string(" for object ") + GetObjectName(item.ObjectNumber), LogLevel::Warning); return; @@ -442,23 +442,23 @@ void SetAnimation(ItemInfo* item, int animNumber, int frameNumber) SetAnimation(*item, item->ObjectNumber, animNumber, frameNumber); } -const AnimData& GetAnimData(int animIndex) +AnimData& GetAnimData(int animIndex) { return g_Level.Anims[animIndex]; } -const AnimData& GetAnimData(GAME_OBJECT_ID objectID, int animNumber) +AnimData& GetAnimData(GAME_OBJECT_ID objectID, int animNumber) { const auto& object = Objects[objectID]; return GetAnimData(object, animNumber); } -const AnimData& GetAnimData(const ObjectInfo& object, int animNumber) +AnimData& GetAnimData(const ObjectInfo& object, int animNumber) { return g_Level.Anims[object.animIndex + animNumber]; } -const AnimData& GetAnimData(const ItemInfo& item, int animNumber) +AnimData& GetAnimData(const ItemInfo& item, int animNumber) { if (animNumber == NO_ANIM) return GetAnimData(item.Animation.AnimNumber); @@ -467,11 +467,6 @@ const AnimData& GetAnimData(const ItemInfo& item, int animNumber) return GetAnimData(object, animNumber); } -const AnimData& GetAnimData(const ItemInfo* item, int animNumber) -{ - return (GetAnimData(*item, animNumber)); -} - AnimFrameInterpData GetFrameInterpData(const ItemInfo& item) { const auto& anim = GetAnimData(item); @@ -483,8 +478,8 @@ AnimFrameInterpData GetFrameInterpData(const ItemInfo& item) // Calculate keyframe numbers defining interpolated frame and get pointers to them. int frame0 = (int)floor(frameNumberNorm); int frame1 = (int)ceil(frameNumberNorm); - const auto* framePtr0 = &g_Level.Frames[anim.FramePtr + frame0]; - const auto* framePtr1 = &g_Level.Frames[anim.FramePtr + frame1]; + auto* framePtr0 = &g_Level.Frames[anim.FramePtr + frame0]; + auto* framePtr1 = &g_Level.Frames[anim.FramePtr + frame1]; // Calculate interpolation alpha between keyframes. float alpha = (1.0f / anim.Interpolation) * (frameNumber % anim.Interpolation); @@ -493,12 +488,12 @@ AnimFrameInterpData GetFrameInterpData(const ItemInfo& item) return AnimFrameInterpData{ framePtr0, framePtr1, alpha }; } -const AnimFrame& GetAnimFrame(const ItemInfo& item, int animNumber, int frameNumber) +AnimFrame& GetAnimFrame(const ItemInfo& item, int animNumber, int frameNumber) { return *GetFrame(item.ObjectNumber, animNumber, frameNumber); } -const AnimFrame* GetFrame(GAME_OBJECT_ID objectID, int animNumber, int frameNumber) +AnimFrame* GetFrame(GAME_OBJECT_ID objectID, int animNumber, int frameNumber) { const auto& object = Objects[objectID]; @@ -513,25 +508,39 @@ const AnimFrame* GetFrame(GAME_OBJECT_ID objectID, int animNumber, int frameNumb frameNumber = frameCount; // Interpolate and return frame pointer. - const auto* framePtr = &g_Level.Frames[anim.FramePtr]; + auto* framePtr = &g_Level.Frames[anim.FramePtr]; framePtr += frameNumber / anim.Interpolation; return framePtr; } -const AnimFrame* GetFirstFrame(GAME_OBJECT_ID objectID, int animNumber) +AnimFrame* GetFirstFrame(GAME_OBJECT_ID objectID, int animNumber) { return GetFrame(objectID, animNumber, 0); } -const AnimFrame* GetLastFrame(GAME_OBJECT_ID objectID, int animNumber) +AnimFrame* GetLastFrame(GAME_OBJECT_ID objectID, int animNumber) { return GetFrame(objectID, animNumber, INT_MAX); } -const AnimFrame& GetBestFrame(const ItemInfo& item) +AnimFrame& GetBestFrame(const ItemInfo& item) { auto frameData = GetFrameInterpData(item); - return ((frameData.Alpha <= 0.5f) ? *frameData.FramePtr0 : *frameData.FramePtr1); + if (frameData.Alpha <= 0.5f) + return *frameData.FramePtr0; + else + return *frameData.FramePtr1; +} + +int GetFrameNumber(const ItemInfo& item) +{ + const auto& anim = GetAnimData(item); + return (item.Animation.FrameNumber - anim.frameBase); +} + +int GetFrameNumber(ItemInfo* item) +{ + return GetFrameNumber(*item); } int GetAnimNumber(const ItemInfo& item) @@ -546,17 +555,6 @@ int GetAnimIndex(const ItemInfo& item, int animNumber) return (object.animIndex + animNumber); } -int GetFrameNumber(const ItemInfo& item) -{ - const auto& anim = GetAnimData(item); - return (item.Animation.FrameNumber - anim.frameBase); -} - -int GetFrameNumber(ItemInfo* item) -{ - return GetFrameNumber(*item); -} - int GetFrameIndex(ItemInfo* item, int frameNumber) { int animNumber = item->Animation.AnimNumber - Objects[item->Animation.AnimObjectID].animIndex; @@ -577,7 +575,10 @@ int GetFrameCount(int animIndex) return 0; const auto& anim = GetAnimData(animIndex); - return (anim.frameEnd - anim.frameBase); + + int end = anim.frameEnd; + int base = anim.frameBase; + return (end - base); } int GetNextAnimState(ItemInfo* item) diff --git a/TombEngine/Game/animation.h b/TombEngine/Game/animation.h index d8cdf5469..42266a676 100644 --- a/TombEngine/Game/animation.h +++ b/TombEngine/Game/animation.h @@ -75,9 +75,9 @@ struct AnimData struct AnimFrameInterpData { - const AnimFrame* FramePtr0 = nullptr; - const AnimFrame* FramePtr1 = nullptr; - float Alpha = 0.0f; + AnimFrame* FramePtr0 = nullptr; + AnimFrame* FramePtr1 = nullptr; + float Alpha = 0.0f; }; struct BoneMutator @@ -115,18 +115,10 @@ void SetAnimation(ItemInfo& item, int animNumber, int frameNumber = 0); void SetAnimation(ItemInfo* item, int animNumber, int frameNumber = 0); // Deprecated. // Getters -const AnimData& GetAnimData(int animIndex); // Deprecated. -const AnimData& GetAnimData(GAME_OBJECT_ID objectID, int animNumber); -const AnimData& GetAnimData(const ObjectInfo& object, int animNumber); -const AnimData& GetAnimData(const ItemInfo& item, int animNumber = NO_ANIM); -const AnimData& GetAnimData(const ItemInfo* item, int animNumber = NO_ANIM); // Deprecated. - -AnimFrameInterpData GetFrameInterpData(const ItemInfo& item); -const AnimFrame& GetAnimFrame(const ItemInfo& item, int animNumber, int frameNumber); -const AnimFrame* GetFrame(GAME_OBJECT_ID objectID, int animNumber, int frameNumber); -const AnimFrame* GetFirstFrame(GAME_OBJECT_ID objectID, int animNumber); -const AnimFrame* GetLastFrame(GAME_OBJECT_ID objectID, int animNumber); -const AnimFrame& GetBestFrame(const ItemInfo& item); +AnimData& GetAnimData(int animIndex); // Deprecated. +AnimData& GetAnimData(GAME_OBJECT_ID objectID, int animNumber); +AnimData& GetAnimData(const ObjectInfo& object, int animNumber); +AnimData& GetAnimData(const ItemInfo& item, int animNumber = NO_ANIM); int GetAnimNumber(const ItemInfo& item); int GetAnimIndex(const ItemInfo& item, int animNumber); @@ -142,6 +134,13 @@ int GetNextAnimState(ItemInfo* item); int GetNextAnimState(int objectID, int animNumber); bool GetStateDispatch(ItemInfo* item, const AnimData& anim); +AnimFrameInterpData GetFrameInterpData(const ItemInfo& item); +AnimFrame& GetAnimFrame(const ItemInfo& item, int animNumber, int frameNumber); +AnimFrame* GetFrame(GAME_OBJECT_ID objectID, int animNumber, int frameNumber); +AnimFrame* GetFirstFrame(GAME_OBJECT_ID objectID, int animNumber); +AnimFrame* GetLastFrame(GAME_OBJECT_ID objectID, int animNumber); +AnimFrame& GetBestFrame(const ItemInfo& item); + void ClampRotation(Pose& outPose, short angle, short rotation); void DrawAnimatingItem(ItemInfo* item); diff --git a/TombEngine/Game/collision/collide_item.cpp b/TombEngine/Game/collision/collide_item.cpp index e409e7a74..831061b46 100644 --- a/TombEngine/Game/collision/collide_item.cpp +++ b/TombEngine/Game/collision/collide_item.cpp @@ -171,7 +171,7 @@ bool GetCollidedObjects(ItemInfo* collidingItem, int radius, bool onlyVisible, I continue; } - // TODO: This is awful and we need a better system. + /*this is awful*/ if (item->ObjectNumber == ID_UPV && item->HitPoints == 1) { itemNumber = item->NextItem; @@ -182,12 +182,14 @@ bool GetCollidedObjects(ItemInfo* collidingItem, int radius, bool onlyVisible, I itemNumber = item->NextItem; continue; } + /*we need a better system*/ int dx = collidingItem->Pose.Position.x - item->Pose.Position.x; int dy = collidingItem->Pose.Position.y - item->Pose.Position.y; int dz = collidingItem->Pose.Position.z - item->Pose.Position.z; - auto bounds = GetBestFrame(*item).BoundingBox; + // TODO: Don't modify object animation data!!! + auto& bounds = GetBestFrame(*item).BoundingBox; if (dx >= -BLOCK(2) && dx <= BLOCK(2) && dy >= -BLOCK(2) && dy <= BLOCK(2) && @@ -201,7 +203,6 @@ bool GetCollidedObjects(ItemInfo* collidingItem, int radius, bool onlyVisible, I int rx = (dx * cosY) - (dz * sinY); int rz = (dz * cosY) + (dx * sinY); - // TODO: Modify asset to avoid hardcoded bounds change. -- Sezz 2023.04.30 if (item->ObjectNumber == ID_TURN_SWITCH) { bounds.X1 = -CLICK(1); @@ -230,7 +231,6 @@ bool GetCollidedObjects(ItemInfo* collidingItem, int radius, bool onlyVisible, I int rx = (dx * cosY) - (dz * sinY); int rz = (dz * cosY) + (dx * sinY); - // TODO: Modify asset to avoid hardcoded bounds change. -- Sezz 2023.04.30 if (item->ObjectNumber == ID_TURN_SWITCH) { bounds.X1 = -CLICK(1); diff --git a/TombEngine/Game/control/control.cpp b/TombEngine/Game/control/control.cpp index b971c8149..5de1cd08b 100644 --- a/TombEngine/Game/control/control.cpp +++ b/TombEngine/Game/control/control.cpp @@ -47,7 +47,6 @@ #include "Objects/TR5/Emitter/tr5_bats_emitter.h" #include "Objects/TR5/Emitter/tr5_rats_emitter.h" #include "Objects/TR5/Emitter/tr5_spider_emitter.h" -#include "Objects/TR5/Trap/LaserBarrier.h" #include "Scripting/Include/Flow/ScriptInterfaceFlowHandler.h" #include "Scripting/Include/Objects/ScriptInterfaceObjectsHandler.h" #include "Scripting/Include/ScriptInterfaceGame.h" @@ -80,7 +79,6 @@ using namespace TEN::Hud; using namespace TEN::Input; using namespace TEN::Math; using namespace TEN::Renderer; -using namespace TEN::Traps::TR5; int GameTimer = 0; int GlobalCounter = 0; @@ -419,7 +417,6 @@ void CleanUp() ClearFootprints(); ClearDrips(); ClearRipples(); - ClearLaserBarrierEffects(); DisableSmokeParticles(); DisableSparkParticles(); DisableDebris(); diff --git a/TombEngine/Game/control/trigger.cpp b/TombEngine/Game/control/trigger.cpp index aad5e9df5..ae9b6ba72 100644 --- a/TombEngine/Game/control/trigger.cpp +++ b/TombEngine/Game/control/trigger.cpp @@ -182,8 +182,8 @@ int SwitchTrigger(short itemNumber, short timer) // Handle switches. if (item.Status == ITEM_DEACTIVATED) { - if (((item.Animation.ActiveState == SWITCH_OFF && item.ObjectNumber != ID_JUMP_SWITCH) || - (item.Animation.ActiveState == SWITCH_ON && item.ObjectNumber == ID_JUMP_SWITCH)) && + if (((item.Animation.ActiveState == 0 && item.ObjectNumber != ID_JUMP_SWITCH) || + (item.Animation.ActiveState == 1 && item.ObjectNumber == ID_JUMP_SWITCH)) && timer > 0) { item.Timer = timer; @@ -195,7 +195,7 @@ int SwitchTrigger(short itemNumber, short timer) return 1; } - if (item.TriggerFlags >= 0 || item.Animation.ActiveState != SWITCH_OFF) + if (item.TriggerFlags >= 0 || item.Animation.ActiveState != 0) { RemoveActiveItem(itemNumber); @@ -211,7 +211,7 @@ int SwitchTrigger(short itemNumber, short timer) return 1; } } - else if (item.Status != ITEM_NOT_ACTIVE) + else if (item.Status != 0) { if (item.ObjectNumber == ID_AIRLOCK_SWITCH && item.Animation.AnimNumber == GetAnimIndex(item, 2) && diff --git a/TombEngine/Game/pickup/pickup.cpp b/TombEngine/Game/pickup/pickup.cpp index eec59946a..76864fcfa 100644 --- a/TombEngine/Game/pickup/pickup.cpp +++ b/TombEngine/Game/pickup/pickup.cpp @@ -449,7 +449,7 @@ void PickupCollision(short itemNumber, ItemInfo* laraItem, CollisionInfo* coll) } laraItem->Animation.TargetState = LS_UNDERWATER_IDLE; - laraItem->Animation.FrameNumber = GetAnimData(laraItem).frameBase; + laraItem->Animation.FrameNumber = g_Level.Anims[laraItem->Animation.AnimNumber].frameBase; lara->Control.IsMoving = false; lara->Control.HandStatus = HandStatus::Busy; } @@ -507,11 +507,10 @@ void PickupCollision(short itemNumber, ItemInfo* laraItem, CollisionInfo* coll) return; } } - - item->Pose.Orientation.x = 0; - const GameBoundingBox* plinthBounds = nullptr; + bool flag = false; - + GameBoundingBox* plinth = nullptr; + item->Pose.Orientation.x = 0; switch (triggerFlags) { // Pick up from hole in wall. @@ -599,19 +598,19 @@ void PickupCollision(short itemNumber, ItemInfo* laraItem, CollisionInfo* coll) case 4: case 7: case 8: - plinthBounds = FindPlinth(item); + plinth = FindPlinth(item); - if (plinthBounds == nullptr) + if (!plinth) { item->Pose.Orientation = prevOrient; return; } - PlinthPickUpBounds.BoundingBox.X1 = plinthBounds->X1; - PlinthPickUpBounds.BoundingBox.X2 = plinthBounds->X2; + PlinthPickUpBounds.BoundingBox.X1 = plinth->X1; + PlinthPickUpBounds.BoundingBox.X2 = plinth->X2; PlinthPickUpBounds.BoundingBox.Y2 = laraItem->Pose.Position.y - item->Pose.Position.y + 100; - PlinthPickUpBounds.BoundingBox.Z2 = plinthBounds->Z2 + 320; - PlinthPickUpPosition.z = -200 - plinthBounds->Z2; + PlinthPickUpBounds.BoundingBox.Z2 = plinth->Z2 + 320; + PlinthPickUpPosition.z = -200 - plinth->Z2; // HACK: Until we refactor a way plinth collision is detected, this must be here // to prevent false positives with two stacked plinths -- Lwmte, 16.06.22 @@ -776,7 +775,7 @@ void PickupCollision(short itemNumber, ItemInfo* laraItem, CollisionInfo* coll) if (flag) { - laraItem->Animation.FrameNumber = GetAnimData(laraItem).frameBase; + laraItem->Animation.FrameNumber = g_Level.Anims[laraItem->Animation.AnimNumber].frameBase; ResetPlayerFlex(laraItem); lara->Control.IsMoving = false; lara->Control.HandStatus = HandStatus::Busy; @@ -1022,7 +1021,7 @@ void PickupControl(short itemNumber) } } -const GameBoundingBox* FindPlinth(ItemInfo* item) +GameBoundingBox* FindPlinth(ItemInfo* item) { auto* room = &g_Level.Rooms[item->RoomNumber]; @@ -1067,13 +1066,9 @@ const GameBoundingBox* FindPlinth(ItemInfo* item) } if (itemNumber == NO_ITEM) - { return nullptr; - } else - { return &GetBestFrame(g_Level.Items[itemNumber]).BoundingBox; - } } void InitializePickup(short itemNumber) @@ -1212,7 +1207,7 @@ void SearchObjectCollision(short itemNumber, ItemInfo* laraItem, CollisionInfo* { ResetPlayerFlex(laraItem); laraItem->Animation.AnimNumber = SearchAnims[objectNumber]; - laraItem->Animation.FrameNumber = GetAnimData(laraItem).frameBase; + laraItem->Animation.FrameNumber = g_Level.Anims[laraItem->Animation.AnimNumber].frameBase; laraItem->Animation.ActiveState = LS_MISC_CONTROL; lara->Control.IsMoving = false; lara->Control.HandStatus = HandStatus::Busy; @@ -1226,7 +1221,7 @@ void SearchObjectCollision(short itemNumber, ItemInfo* laraItem, CollisionInfo* } item->Animation.AnimNumber = Objects[item->ObjectNumber].animIndex + 1; - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; AnimateItem(item); } else @@ -1251,7 +1246,7 @@ void SearchObjectControl(short itemNumber) if (item->ObjectNumber != ID_SEARCH_OBJECT4 || item->ItemFlags[0] == 1) AnimateItem(item); - int frameNumber = item->Animation.FrameNumber - GetAnimData(item).frameBase; + int frameNumber = item->Animation.FrameNumber - g_Level.Anims[item->Animation.AnimNumber].frameBase; if (item->ObjectNumber == ID_SEARCH_OBJECT1) { if (frameNumber > 0) diff --git a/TombEngine/Game/pickup/pickup.h b/TombEngine/Game/pickup/pickup.h index 99ce4c71c..d21345951 100644 --- a/TombEngine/Game/pickup/pickup.h +++ b/TombEngine/Game/pickup/pickup.h @@ -20,7 +20,7 @@ void PickupCollision(short itemNumber, ItemInfo* laraItem, CollisionInfo* coll); void RegeneratePickups(); void DropPickups(ItemInfo* item); void CollectMultiplePickups(int itemNumber); -const GameBoundingBox* FindPlinth(ItemInfo* item); +GameBoundingBox* FindPlinth(ItemInfo* item); void PickupControl(short itemNumber); diff --git a/TombEngine/Objects/Effects/flame_emitters.cpp b/TombEngine/Objects/Effects/flame_emitters.cpp index 1aa401746..698b36d1a 100644 --- a/TombEngine/Objects/Effects/flame_emitters.cpp +++ b/TombEngine/Objects/Effects/flame_emitters.cpp @@ -576,7 +576,7 @@ namespace TEN::Entities::Effects } laraItem->Animation.ActiveState = LS_MISC_CONTROL; - laraItem->Animation.FrameNumber = GetAnimData(laraItem).frameBase; + laraItem->Animation.FrameNumber = g_Level.Anims[laraItem->Animation.AnimNumber].frameBase; Lara.Flare.ControlLeft = false; Lara.LeftArm.Locked = true; Lara.Context.InteractedItem = itemNumber; @@ -591,7 +591,7 @@ namespace TEN::Entities::Effects { if (laraItem->Animation.AnimNumber >= LA_TORCH_LIGHT_1 && laraItem->Animation.AnimNumber <= LA_TORCH_LIGHT_5) { - if (laraItem->Animation.FrameNumber - GetAnimData(laraItem).frameBase == 40) + if (laraItem->Animation.FrameNumber - g_Level.Anims[laraItem->Animation.AnimNumber].frameBase == 40) { TestTriggers(item, true, item->Flags & IFLAG_ACTIVATION_MASK); diff --git a/TombEngine/Objects/Generic/Object/burning_torch.cpp b/TombEngine/Objects/Generic/Object/burning_torch.cpp index d0180af7b..b7558f9c9 100644 --- a/TombEngine/Objects/Generic/Object/burning_torch.cpp +++ b/TombEngine/Objects/Generic/Object/burning_torch.cpp @@ -170,7 +170,7 @@ namespace TEN::Entities::Generic if (lara->Flare.ControlLeft) lara->Control.HandStatus = HandStatus::WeaponReady; - lara->LeftArm.FrameBase = GetAnimData(lara->LeftArm.AnimNumber).FramePtr; + lara->LeftArm.FrameBase = g_Level.Anims[lara->LeftArm.AnimNumber].FramePtr; if (lara->Torch.IsLit) { @@ -199,7 +199,7 @@ namespace TEN::Entities::Generic lara->LeftArm.AnimNumber = Objects[ID_LARA_TORCH_ANIM].animIndex; lara->LeftArm.Locked = false; lara->LeftArm.FrameNumber = 0; - lara->LeftArm.FrameBase = GetAnimData(lara->LeftArm.AnimNumber).FramePtr; + lara->LeftArm.FrameBase = g_Level.Anims[lara->LeftArm.AnimNumber].FramePtr; laraItem->Model.MeshIndex[LM_LHAND] = Objects[ID_LARA_TORCH_ANIM].meshIndex + LM_LHAND; } @@ -357,7 +357,7 @@ namespace TEN::Entities::Generic } laraItem->Animation.ActiveState = LS_MISC_CONTROL; - laraItem->Animation.FrameNumber = GetAnimData(laraItem).frameBase; + laraItem->Animation.FrameNumber = g_Level.Anims[laraItem->Animation.AnimNumber].frameBase; lara->Flare.ControlLeft = false; lara->LeftArm.Locked = true; lara->Context.InteractedItem = itemNumber; @@ -372,7 +372,7 @@ namespace TEN::Entities::Generic if (laraItem->Animation.AnimNumber >= LA_TORCH_LIGHT_1 && laraItem->Animation.AnimNumber <= LA_TORCH_LIGHT_5) { - if ((laraItem->Animation.FrameNumber - GetAnimData(laraItem).frameBase) == 40) + if ((laraItem->Animation.FrameNumber - g_Level.Anims[laraItem->Animation.AnimNumber].frameBase) == 40) { TestTriggers(torchItem, true, torchItem->Flags & IFLAG_ACTIVATION_MASK); torchItem->Flags |= CODE_BITS; diff --git a/TombEngine/Objects/Generic/Object/generic_trapdoor.cpp b/TombEngine/Objects/Generic/Object/generic_trapdoor.cpp index 73f836321..b056f2c2c 100644 --- a/TombEngine/Objects/Generic/Object/generic_trapdoor.cpp +++ b/TombEngine/Objects/Generic/Object/generic_trapdoor.cpp @@ -56,7 +56,7 @@ void TrapDoorCollision(short itemNumber, ItemInfo* laraItem, CollisionInfo* coll auto* trapDoorItem = &g_Level.Items[itemNumber]; if (trapDoorItem->Animation.ActiveState == 1 && - trapDoorItem->Animation.FrameNumber == GetAnimData(trapDoorItem).frameEnd) + trapDoorItem->Animation.FrameNumber == g_Level.Anims[trapDoorItem->Animation.AnimNumber].frameEnd) { ObjectCollision(itemNumber, laraItem, coll); } @@ -90,7 +90,7 @@ void CeilingTrapDoorCollision(short itemNumber, ItemInfo* laraItem, CollisionInf laraItem->Animation.Velocity.y = 0; laraItem->Animation.IsAirborne = false; laraItem->Animation.AnimNumber = LA_TRAPDOOR_CEILING_OPEN; - laraItem->Animation.FrameNumber = GetAnimData(laraItem).frameBase; + laraItem->Animation.FrameNumber = g_Level.Anims[laraItem->Animation.AnimNumber].frameBase; laraItem->Animation.ActiveState = LS_FREEFALL_BIS; laraInfo->Control.HandStatus = HandStatus::Busy; AddActiveItem(itemNumber); @@ -110,7 +110,7 @@ void CeilingTrapDoorCollision(short itemNumber, ItemInfo* laraItem, CollisionInf } if (trapDoorItem->Animation.ActiveState == 1 && - trapDoorItem->Animation.FrameNumber == GetAnimData(trapDoorItem).frameEnd) + trapDoorItem->Animation.FrameNumber == g_Level.Anims[trapDoorItem->Animation.AnimNumber].frameEnd) { ObjectCollision(itemNumber, laraItem, coll); } @@ -134,7 +134,7 @@ void FloorTrapDoorCollision(short itemNumber, ItemInfo* laraItem, CollisionInfo* { ResetPlayerFlex(laraItem); laraItem->Animation.AnimNumber = LA_TRAPDOOR_FLOOR_OPEN; - laraItem->Animation.FrameNumber = GetAnimData(laraItem).frameBase; + laraItem->Animation.FrameNumber = g_Level.Anims[laraItem->Animation.AnimNumber].frameBase; laraItem->Animation.ActiveState = LS_TRAPDOOR_FLOOR_OPEN; laraInfo->Control.IsMoving = false; laraInfo->Control.HandStatus = HandStatus::Busy; @@ -153,9 +153,7 @@ void FloorTrapDoorCollision(short itemNumber, ItemInfo* laraItem, CollisionInfo* ForcedFixedCamera.RoomNumber = trapDoorItem->RoomNumber; } else - { - laraInfo->Context.InteractedItem = itemNumber; - } + laraInfo->Context.InteractedItem =itemNumber; } } else @@ -164,7 +162,7 @@ void FloorTrapDoorCollision(short itemNumber, ItemInfo* laraItem, CollisionInfo* UseForcedFixedCamera = 0; } - if (trapDoorItem->Animation.ActiveState == 1 && trapDoorItem->Animation.FrameNumber == GetAnimData(trapDoorItem).frameEnd) + if (trapDoorItem->Animation.ActiveState == 1 && trapDoorItem->Animation.FrameNumber == g_Level.Anims[trapDoorItem->Animation.AnimNumber].frameEnd) ObjectCollision(itemNumber, laraItem, coll); } @@ -175,13 +173,9 @@ void TrapDoorControl(short itemNumber) if (TriggerActive(trapDoorItem)) { if (!trapDoorItem->Animation.ActiveState && trapDoorItem->TriggerFlags >= 0) - { trapDoorItem->Animation.TargetState = 1; - } - else if (trapDoorItem->Animation.FrameNumber == GetAnimData(trapDoorItem).frameEnd && CurrentLevel == 14 && trapDoorItem->ObjectNumber == ID_TRAPDOOR1) - { + else if (trapDoorItem->Animation.FrameNumber == g_Level.Anims[trapDoorItem->Animation.AnimNumber].frameEnd && CurrentLevel == 14 && trapDoorItem->ObjectNumber == ID_TRAPDOOR1) trapDoorItem->Status = ITEM_INVISIBLE; - } } else { @@ -194,13 +188,9 @@ void TrapDoorControl(short itemNumber) AnimateItem(trapDoorItem); if (trapDoorItem->Animation.ActiveState == 1 && (trapDoorItem->ItemFlags[2] || JustLoaded)) - { OpenTrapDoor(itemNumber); - } else if (!trapDoorItem->Animation.ActiveState && !trapDoorItem->ItemFlags[2]) - { CloseTrapDoor(itemNumber); - } } void CloseTrapDoor(short itemNumber) diff --git a/TombEngine/Objects/Generic/Object/objects.cpp b/TombEngine/Objects/Generic/Object/objects.cpp index e74396a06..16a4995a2 100644 --- a/TombEngine/Objects/Generic/Object/objects.cpp +++ b/TombEngine/Objects/Generic/Object/objects.cpp @@ -78,6 +78,7 @@ void TightropeCollision(short itemNumber, ItemInfo* laraItem, CollisionInfo* col laraInfo->Control.HandStatus != HandStatus::Free) && (!laraInfo->Control.IsMoving || laraInfo->Context.InteractedItem !=itemNumber)) { +#ifdef NEW_TIGHTROPE if (laraItem->Animation.ActiveState == LS_TIGHTROPE_WALK && laraItem->Animation.TargetState != LS_TIGHTROPE_DISMOUNT && !laraInfo->Control.Tightrope.CanDismount) @@ -88,6 +89,19 @@ void TightropeCollision(short itemNumber, ItemInfo* laraItem, CollisionInfo* col laraInfo->Control.Tightrope.CanDismount = true; } } + +#else // !NEW_TIGHTROPE + if (laraItem->Animation.ActiveState == LS_TIGHTROPE_WALK && + laraItem->Animation.TargetState != LS_TIGHTROPE_DISMOUNT && + !laraInfo->Control.Tightrope.Off) + { + if (item->Pose.Orientation.y == laraItem->Pose.Orientation.y) + { + if (abs(item->Pose.Position.x - laraItem->Pose.Position.x) + abs(item->Pose.Position.z - laraItem->Pose.Position.z) < 640) + laraInfo->tightRopeOff = true; + } + } +#endif } else { @@ -99,18 +113,22 @@ void TightropeCollision(short itemNumber, ItemInfo* laraItem, CollisionInfo* col { laraItem->Animation.ActiveState = LS_TIGHTROPE_ENTER; laraItem->Animation.AnimNumber = LA_TIGHTROPE_START; - laraItem->Animation.FrameNumber = GetAnimData(laraItem).frameBase; + laraItem->Animation.FrameNumber = g_Level.Anims[laraItem->Animation.AnimNumber].frameBase; laraInfo->Control.IsMoving = false; ResetPlayerFlex(laraItem); +#ifdef NEW_TIGHTROPE laraInfo->Control.Tightrope.Balance = 0; laraInfo->Control.Tightrope.CanDismount = false; laraInfo->Control.Tightrope.TightropeItem = itemNumber; laraInfo->Control.Tightrope.TimeOnTightrope = 0; +#else // !NEW_TIGHTROPE + laraInfo->Control.Tightrope.OnCount = 60; + laraInfo->Control.Tightrope.Off = 0; + laraInfo->Control.Tightrope.Fall = 0; +#endif } else - { laraInfo->Context.InteractedItem = itemNumber; - } tightropeItem->Pose.Orientation.y += -ANGLE(180.0f); } @@ -147,7 +165,7 @@ void HorizontalBarCollision(short itemNumber, ItemInfo* laraItem, CollisionInfo* { laraItem->Animation.ActiveState = LS_MISC_CONTROL; laraItem->Animation.AnimNumber = LA_SWINGBAR_GRAB; - laraItem->Animation.FrameNumber = GetAnimData(laraItem).frameBase; + laraItem->Animation.FrameNumber = g_Level.Anims[laraItem->Animation.AnimNumber].frameBase; laraItem->Animation.Velocity.y = false; laraItem->Animation.IsAirborne = false; @@ -244,7 +262,7 @@ void AnimatingControl(short itemNumber) item->Status = ITEM_ACTIVE; AnimateItem(item); - // TODO: ID_SHOOT_SWITCH2 is probably the bell in Trajan Markets, use Lua for that. + // TODO: ID_SHOOT_SWITCH2 probably the bell in Trajan Markets, use LUA for that /*if (item->frameNumber >= g_Level.Anims[item->animNumber].frameEnd) { item->frameNumber = g_Level.Anims[item->animNumber].frameBase; diff --git a/TombEngine/Objects/Generic/Object/rope.cpp b/TombEngine/Objects/Generic/Object/rope.cpp index 29d9b90ee..6718ff3e0 100644 --- a/TombEngine/Objects/Generic/Object/rope.cpp +++ b/TombEngine/Objects/Generic/Object/rope.cpp @@ -189,8 +189,8 @@ namespace TEN::Entities::Generic { laraItem->Animation.AnimNumber = LA_REACH_TO_ROPE_SWING; laraItem->Animation.ActiveState = LS_ROPE_SWING; - laraInfo->Control.Rope.Frame = GetAnimData(*laraItem, LA_ROPE_SWING).frameBase + 32 << 8; - laraInfo->Control.Rope.DFrame = GetAnimData(*laraItem, LA_ROPE_SWING).frameBase + 60 << 8; + laraInfo->Control.Rope.Frame = g_Level.Anims[LA_ROPE_SWING].frameBase + 32 << 8; + laraInfo->Control.Rope.DFrame = g_Level.Anims[LA_ROPE_SWING].frameBase + 60 << 8; } else { @@ -198,7 +198,7 @@ namespace TEN::Entities::Generic laraItem->Animation.ActiveState = LS_ROPE_IDLE; } - laraItem->Animation.FrameNumber = GetAnimData(laraItem).frameBase; + laraItem->Animation.FrameNumber = g_Level.Anims[laraItem->Animation.AnimNumber].frameBase; laraItem->Animation.Velocity.y = 0; laraItem->Animation.IsAirborne = false; @@ -526,7 +526,7 @@ namespace TEN::Entities::Generic Lara.Control.Rope.ArcFront = Lara.Control.Rope.LastX; Lara.Control.Rope.Direction = 0; Lara.Control.Rope.MaxXBackward = 0; - int frame = 15 * Lara.Control.Rope.MaxXForward / 18000 + GetAnimData(*item, LA_ROPE_SWING).frameBase + 47 << 8; + int frame = 15 * Lara.Control.Rope.MaxXForward / 18000 + g_Level.Anims[LA_ROPE_SWING].frameBase + 47 << 8; if (frame > Lara.Control.Rope.DFrame) { @@ -541,7 +541,7 @@ namespace TEN::Entities::Generic else if (Lara.Control.Rope.LastX < 0 && Lara.Control.Rope.Frame == Lara.Control.Rope.DFrame) { RopeSwing = 0; - Lara.Control.Rope.DFrame = 15 * Lara.Control.Rope.MaxXBackward / 18000 + GetAnimData(*item, LA_ROPE_SWING).frameBase + 47 << 8; + Lara.Control.Rope.DFrame = 15 * Lara.Control.Rope.MaxXBackward / 18000 + g_Level.Anims[LA_ROPE_SWING].frameBase + 47 << 8; Lara.Control.Rope.FrameRate = 15 * Lara.Control.Rope.MaxXBackward / 9000 + 1; } else if (Lara.Control.Rope.FrameRate < 512) @@ -558,7 +558,7 @@ namespace TEN::Entities::Generic Lara.Control.Rope.Direction = 1; Lara.Control.Rope.MaxXForward = 0; - int frame = GetAnimData(*item, LA_ROPE_SWING).frameBase - 15 * Lara.Control.Rope.MaxXBackward / 18000 + 17 << 8; + int frame = g_Level.Anims[LA_ROPE_SWING].frameBase - 15 * Lara.Control.Rope.MaxXBackward / 18000 + 17 << 8; if (frame < Lara.Control.Rope.DFrame) { Lara.Control.Rope.DFrame = frame; @@ -572,7 +572,7 @@ namespace TEN::Entities::Generic else if (Lara.Control.Rope.LastX > 0 && Lara.Control.Rope.Frame == Lara.Control.Rope.DFrame) { RopeSwing = 0; - Lara.Control.Rope.DFrame = GetAnimData(*item, LA_ROPE_SWING).frameBase - 15 * Lara.Control.Rope.MaxXForward / 18000 + 17 << 8; + Lara.Control.Rope.DFrame = g_Level.Anims[LA_ROPE_SWING].frameBase - 15 * Lara.Control.Rope.MaxXForward / 18000 + 17 << 8; Lara.Control.Rope.FrameRate = 15 * Lara.Control.Rope.MaxXForward / 9000 + 1; } else if (Lara.Control.Rope.FrameRate < 512) @@ -641,14 +641,14 @@ namespace TEN::Entities::Generic Lara.Control.HandStatus = HandStatus::Free; - if (item->Animation.FrameNumber - GetAnimData(*item, LA_ROPE_SWING).frameBase > 42) + if (item->Animation.FrameNumber - g_Level.Anims[LA_ROPE_SWING].frameBase > 42) item->Animation.AnimNumber = LA_ROPE_SWING_TO_REACH_1; - else if (item->Animation.FrameNumber - GetAnimData(*item, LA_ROPE_SWING).frameBase > 21) + else if (item->Animation.FrameNumber - g_Level.Anims[LA_ROPE_SWING].frameBase > 21) item->Animation.AnimNumber = LA_ROPE_SWING_TO_REACH_2; else item->Animation.AnimNumber = LA_ROPE_SWING_TO_REACH_3; - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; item->Animation.ActiveState = LS_REACH; item->Animation.TargetState = LS_REACH; Lara.Control.Rope.Ptr = -1; @@ -712,10 +712,10 @@ namespace TEN::Entities::Generic } } - if (item->Animation.AnimNumber == LA_ROPE_DOWN && item->Animation.FrameNumber == GetAnimData(item).frameEnd) + if (item->Animation.AnimNumber == LA_ROPE_DOWN && item->Animation.FrameNumber == g_Level.Anims[item->Animation.AnimNumber].frameEnd) { SoundEffect(SFX_TR4_LARA_POLE_SLIDE_LOOP, &LaraItem->Pose); - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; Lara.Control.Rope.Flag = 0; ++Lara.Control.Rope.Segment; Lara.Control.Rope.Offset = 0; diff --git a/TombEngine/Objects/Generic/Switches/AirlockSwitch.cpp b/TombEngine/Objects/Generic/Switches/AirlockSwitch.cpp index 31b642181..655059553 100644 --- a/TombEngine/Objects/Generic/Switches/AirlockSwitch.cpp +++ b/TombEngine/Objects/Generic/Switches/AirlockSwitch.cpp @@ -57,7 +57,7 @@ namespace TEN::Entities::Switches } ResetPlayerFlex(laraItem); - laraItem->Animation.FrameNumber = GetAnimData(laraItem).frameBase; + laraItem->Animation.FrameNumber = g_Level.Anims[laraItem->Animation.AnimNumber].frameBase; player.Control.IsMoving = false; player.Control.HandStatus = HandStatus::Busy; diff --git a/TombEngine/Objects/Generic/Switches/cog_switch.cpp b/TombEngine/Objects/Generic/Switches/cog_switch.cpp index 338b4fb0a..521c59275 100644 --- a/TombEngine/Objects/Generic/Switches/cog_switch.cpp +++ b/TombEngine/Objects/Generic/Switches/cog_switch.cpp @@ -87,7 +87,7 @@ namespace TEN::Entities::Switches laraItem->Animation.AnimNumber = LA_COGWHEEL_GRAB; laraItem->Animation.TargetState = LS_COGWHEEL; laraItem->Animation.ActiveState = LS_COGWHEEL; - laraItem->Animation.FrameNumber = GetAnimData(laraItem).frameBase; + laraItem->Animation.FrameNumber = g_Level.Anims[laraItem->Animation.AnimNumber].frameBase; lara->Control.IsMoving = false; lara->Control.HandStatus = HandStatus::Busy; lara->Context.InteractedItem = targetItemNum; @@ -137,7 +137,7 @@ namespace TEN::Entities::Switches if (LaraItem->Animation.AnimNumber == LA_COGWHEEL_PULL) { - if (LaraItem->Animation.FrameNumber == GetAnimData(LaraItem).frameBase + 10) + if (LaraItem->Animation.FrameNumber == g_Level.Anims[LaraItem->Animation.AnimNumber].frameBase + 10) { if (!switchItem->TriggerFlags) { @@ -149,7 +149,7 @@ namespace TEN::Entities::Switches } else { - if ((switchItem->Animation.FrameNumber == GetAnimData(switchItem).frameEnd) + if ((switchItem->Animation.FrameNumber == g_Level.Anims[switchItem->Animation.AnimNumber].frameEnd) && (LaraItem->Animation.AnimNumber == LA_COGWHEEL_RELEASE)) { switchItem->Animation.ActiveState = SWITCH_OFF; diff --git a/TombEngine/Objects/Generic/Switches/crowbar_switch.cpp b/TombEngine/Objects/Generic/Switches/crowbar_switch.cpp index 8ff901961..c3c6028ef 100644 --- a/TombEngine/Objects/Generic/Switches/crowbar_switch.cpp +++ b/TombEngine/Objects/Generic/Switches/crowbar_switch.cpp @@ -45,33 +45,33 @@ namespace TEN::Entities::Switches ) }; - void CrowbarSwitchCollision(short itemNumber, ItemInfo* laraItem, CollisionInfo* coll) + void CrowbarSwitchCollision(short itemNumber, ItemInfo* laraitem, CollisionInfo* coll) { - auto* laraInfo = GetLaraInfo(laraItem); + auto* laraInfo = GetLaraInfo(laraitem); ItemInfo* switchItem = &g_Level.Items[itemNumber]; int doSwitch = 0; if (((TrInput & IN_ACTION || g_Gui.GetInventoryItemChosen() == ID_CROWBAR_ITEM) && - laraItem->Animation.ActiveState == LS_IDLE && - laraItem->Animation.AnimNumber == LA_STAND_IDLE && + laraitem->Animation.ActiveState == LS_IDLE && + laraitem->Animation.AnimNumber == LA_STAND_IDLE && laraInfo->Control.HandStatus == HandStatus::Free && switchItem->ItemFlags[0] == 0) || (laraInfo->Control.IsMoving && laraInfo->Context.InteractedItem == itemNumber)) { if (switchItem->Animation.ActiveState == SWITCH_ON) { - laraItem->Pose.Orientation.y ^= (short)ANGLE(180.0f); + laraitem->Pose.Orientation.y ^= (short)ANGLE(180.0f); - if (TestLaraPosition(CrowbarBounds2, switchItem, laraItem)) + if (TestLaraPosition(CrowbarBounds2, switchItem, laraitem)) { if (laraInfo->Control.IsMoving || g_Gui.GetInventoryItemChosen() == ID_CROWBAR_ITEM) { - if (MoveLaraPosition(CrowbarPos2, switchItem, laraItem)) + if (MoveLaraPosition(CrowbarPos2, switchItem, laraitem)) { doSwitch = 1; - laraItem->Animation.AnimNumber = LA_CROWBAR_USE_ON_FLOOR; - laraItem->Animation.FrameNumber = GetAnimData(laraItem).frameBase; + laraitem->Animation.AnimNumber = LA_CROWBAR_USE_ON_FLOOR; + laraitem->Animation.FrameNumber = g_Level.Anims[laraitem->Animation.AnimNumber].frameBase; switchItem->Animation.TargetState = SWITCH_OFF; } else @@ -88,19 +88,19 @@ namespace TEN::Entities::Switches laraInfo->Control.HandStatus = HandStatus::Free; } - laraItem->Pose.Orientation.y ^= (short)ANGLE(180.0f); + laraitem->Pose.Orientation.y ^= (short)ANGLE(180.0f); } else { - if (TestLaraPosition(CrowbarBounds, switchItem, laraItem)) + if (TestLaraPosition(CrowbarBounds, switchItem, laraitem)) { if (laraInfo->Control.IsMoving || g_Gui.GetInventoryItemChosen() == ID_CROWBAR_ITEM) { - if (MoveLaraPosition(CrowbarPos, switchItem, laraItem)) + if (MoveLaraPosition(CrowbarPos, switchItem, laraitem)) { doSwitch = 1; - laraItem->Animation.AnimNumber = LA_CROWBAR_USE_ON_FLOOR; - laraItem->Animation.FrameNumber = GetAnimData(laraItem).frameBase; + laraitem->Animation.AnimNumber = LA_CROWBAR_USE_ON_FLOOR; + laraitem->Animation.FrameNumber = g_Level.Anims[laraitem->Animation.AnimNumber].frameBase; switchItem->Animation.TargetState = SWITCH_ON; } else @@ -127,20 +127,20 @@ namespace TEN::Entities::Switches g_Gui.SetEnterInventory(ID_CROWBAR_ITEM); else { - if (OldPickupPos.x != laraItem->Pose.Position.x || OldPickupPos.y != laraItem->Pose.Position.y || OldPickupPos.z != laraItem->Pose.Position.z) + if (OldPickupPos.x != laraitem->Pose.Position.x || OldPickupPos.y != laraitem->Pose.Position.y || OldPickupPos.z != laraitem->Pose.Position.z) { - OldPickupPos.x = laraItem->Pose.Position.x; - OldPickupPos.y = laraItem->Pose.Position.y; - OldPickupPos.z = laraItem->Pose.Position.z; + OldPickupPos.x = laraitem->Pose.Position.x; + OldPickupPos.y = laraitem->Pose.Position.y; + OldPickupPos.z = laraitem->Pose.Position.z; SayNo(); } } } else { - ResetPlayerFlex(laraItem); - laraItem->Animation.TargetState = LS_SWITCH_DOWN; - laraItem->Animation.ActiveState = LS_SWITCH_DOWN; + ResetPlayerFlex(laraitem); + laraitem->Animation.TargetState = LS_SWITCH_DOWN; + laraitem->Animation.ActiveState = LS_SWITCH_DOWN; laraInfo->Control.IsMoving = false; laraInfo->Control.HandStatus = HandStatus::Busy; switchItem->Status = ITEM_ACTIVE; @@ -150,6 +150,6 @@ namespace TEN::Entities::Switches } } else - ObjectCollision(itemNumber, laraItem, coll); + ObjectCollision(itemNumber, laraitem, coll); } } diff --git a/TombEngine/Objects/Generic/Switches/fullblock_switch.cpp b/TombEngine/Objects/Generic/Switches/fullblock_switch.cpp index 89adc9631..f90f297a2 100644 --- a/TombEngine/Objects/Generic/Switches/fullblock_switch.cpp +++ b/TombEngine/Objects/Generic/Switches/fullblock_switch.cpp @@ -44,7 +44,7 @@ namespace TEN::Entities::Switches laraItem->Animation.AnimNumber != LA_STAND_IDLE || laraInfo->Control.HandStatus != HandStatus::Free || switchItem->Status || - switchItem->Flags & ONESHOT || + switchItem->Flags & 0x100 || CurrentSequence >= 3) && (!laraInfo->Control.IsMoving || laraInfo->Context.InteractedItem !=itemNumber)) { @@ -64,7 +64,7 @@ namespace TEN::Entities::Switches } laraItem->Animation.TargetState = LS_IDLE; - laraItem->Animation.FrameNumber = GetAnimData(laraItem).frameBase; + laraItem->Animation.FrameNumber = g_Level.Anims[laraItem->Animation.AnimNumber].frameBase; switchItem->Status = ITEM_ACTIVE; AddActiveItem(itemNumber); diff --git a/TombEngine/Objects/Generic/Switches/generic_switch.cpp b/TombEngine/Objects/Generic/Switches/generic_switch.cpp index 5e496cf13..7a33cb91c 100644 --- a/TombEngine/Objects/Generic/Switches/generic_switch.cpp +++ b/TombEngine/Objects/Generic/Switches/generic_switch.cpp @@ -70,7 +70,7 @@ namespace TEN::Entities::Switches laraItem->Animation.AnimNumber == LA_STAND_IDLE && laraInfo->Control.HandStatus == HandStatus::Free && switchItem->Status == ITEM_NOT_ACTIVE && - !(switchItem->Flags & ONESHOT) && + !(switchItem->Flags & 0x100) && switchItem->TriggerFlags >= 0 || laraInfo->Control.IsMoving && laraInfo->Context.InteractedItem == itemNumber) { @@ -79,62 +79,62 @@ namespace TEN::Entities::Switches if ((switchItem->TriggerFlags == 3 || switchItem->TriggerFlags == 4) && switchItem->Animation.ActiveState == SWITCH_OFF) return; - SwitchBounds.BoundingBox.X1 = bounds.X1 - BLOCK(0.25f); - SwitchBounds.BoundingBox.X2 = bounds.X2 + BLOCK(0.25f); + SwitchBounds.BoundingBox.X1 = bounds.X1 - BLOCK(0.25); + SwitchBounds.BoundingBox.X2 = bounds.X2 + BLOCK(0.25); switch (switchItem->TriggerFlags) { default: SwitchPos.z = bounds.Z1 - 128; - SwitchBounds.BoundingBox.Z1 = bounds.Z1 - BLOCK(0.2f); + SwitchBounds.BoundingBox.Z1 = bounds.Z1 - BLOCK(0.2); SwitchBounds.BoundingBox.Z2 = bounds.Z2; break; case SWT_BIG_LEVER: SwitchPos.z = bounds.Z1 - 64; - SwitchBounds.BoundingBox.Z1 = bounds.Z1 - BLOCK(0.2f); + SwitchBounds.BoundingBox.Z1 = bounds.Z1 - BLOCK(0.2); SwitchBounds.BoundingBox.Z2 = bounds.Z2; break; case SWT_SMALL_LEVER: SwitchPos.z = bounds.Z1 - 112; - SwitchBounds.BoundingBox.Z1 = bounds.Z1 - BLOCK(0.25f); + SwitchBounds.BoundingBox.Z1 = bounds.Z1 - BLOCK(0.25); SwitchBounds.BoundingBox.Z2 = bounds.Z2; break; case SWT_SMALL_BUTTON: SwitchPos.z = bounds.Z1 - 156; - SwitchBounds.BoundingBox.Z1 = bounds.Z1 - BLOCK(0.2f); + SwitchBounds.BoundingBox.Z1 = bounds.Z1 - BLOCK(0.2); SwitchBounds.BoundingBox.Z2 = bounds.Z2; break; case SWT_BIG_BUTTON: SwitchPos.z = bounds.Z1 - 256; - SwitchBounds.BoundingBox.Z1 = bounds.Z1 - BLOCK(0.5f); + SwitchBounds.BoundingBox.Z1 = bounds.Z1 - BLOCK(0.5); SwitchBounds.BoundingBox.Z2 = bounds.Z2; break; case SWT_GIANT_BUTTON: SwitchPos.z = bounds.Z1 - 384; - SwitchBounds.BoundingBox.Z1 = bounds.Z1 - BLOCK(0.5f); + SwitchBounds.BoundingBox.Z1 = bounds.Z1 - BLOCK(0.5); SwitchBounds.BoundingBox.Z2 = bounds.Z2; break; case SWT_VALVE: SwitchPos.z = bounds.Z1 - 112; - SwitchBounds.BoundingBox.Z1 = bounds.Z1 - BLOCK(0.25f); + SwitchBounds.BoundingBox.Z1 = bounds.Z1 - BLOCK(0.25); SwitchBounds.BoundingBox.Z2 = bounds.Z2; break; case SWT_WALL_HOLE: SwitchPos.z = bounds.Z1 - 196; - SwitchBounds.BoundingBox.Z1 = bounds.Z1 - BLOCK(0.2f); + SwitchBounds.BoundingBox.Z1 = bounds.Z1 - BLOCK(0.2); SwitchBounds.BoundingBox.Z2 = bounds.Z2; break; case SWT_CUSTOM: SwitchPos.z = bounds.Z1 - switchItem->ItemFlags[6]; - SwitchBounds.BoundingBox.Z1 = bounds.Z1 - BLOCK(0.5f); + SwitchBounds.BoundingBox.Z1 = bounds.Z1 - BLOCK(0.5); SwitchBounds.BoundingBox.Z2 = bounds.Z2; break; } @@ -206,7 +206,7 @@ namespace TEN::Entities::Switches } ResetPlayerFlex(laraItem); - laraItem->Animation.FrameNumber = GetAnimData(laraItem).frameBase; + laraItem->Animation.FrameNumber = g_Level.Anims[laraItem->Animation.AnimNumber].frameBase; laraInfo->Control.IsMoving = false; laraInfo->Control.HandStatus = HandStatus::Busy; diff --git a/TombEngine/Objects/Generic/Switches/jump_switch.cpp b/TombEngine/Objects/Generic/Switches/jump_switch.cpp index 8c385760c..23eeefcef 100644 --- a/TombEngine/Objects/Generic/Switches/jump_switch.cpp +++ b/TombEngine/Objects/Generic/Switches/jump_switch.cpp @@ -37,7 +37,7 @@ namespace TEN::Entities::Switches (laraItem->Status || laraItem->Animation.IsAirborne) && laraItem->Animation.Velocity.y > 0 && laraInfo->Control.HandStatus == HandStatus::Free && - switchItem->Animation.ActiveState == SWITCH_OFF) + !switchItem->Animation.ActiveState) { if (TestLaraPosition(JumpSwitchBounds, switchItem, laraItem)) { @@ -46,7 +46,7 @@ namespace TEN::Entities::Switches laraItem->Animation.ActiveState = LS_SWITCH_DOWN; laraItem->Animation.AnimNumber = LA_JUMPSWITCH_PULL; laraItem->Animation.Velocity.y = 0; - laraItem->Animation.FrameNumber = GetAnimData(laraItem).frameBase; + laraItem->Animation.FrameNumber = g_Level.Anims[laraItem->Animation.AnimNumber].frameBase; laraItem->Animation.IsAirborne = false; laraInfo->Control.HandStatus = HandStatus::Busy; switchItem->Animation.TargetState = SWITCH_ON; diff --git a/TombEngine/Objects/Generic/Switches/pulley_switch.cpp b/TombEngine/Objects/Generic/Switches/pulley_switch.cpp index 0acab5169..69b73c57f 100644 --- a/TombEngine/Objects/Generic/Switches/pulley_switch.cpp +++ b/TombEngine/Objects/Generic/Switches/pulley_switch.cpp @@ -73,7 +73,7 @@ namespace TEN::Entities::Switches { laraItem->Animation.AnimNumber = LA_PULLEY_GRAB; laraItem->Animation.ActiveState = LS_PULLEY; - laraItem->Animation.FrameNumber = GetAnimData(laraItem).frameBase; + laraItem->Animation.FrameNumber = g_Level.Anims[laraItem->Animation.AnimNumber].frameBase; AddActiveItem(itemNumber); diff --git a/TombEngine/Objects/Generic/Switches/rail_switch.cpp b/TombEngine/Objects/Generic/Switches/rail_switch.cpp index e06afa5ce..5e715009d 100644 --- a/TombEngine/Objects/Generic/Switches/rail_switch.cpp +++ b/TombEngine/Objects/Generic/Switches/rail_switch.cpp @@ -85,7 +85,7 @@ namespace TEN::Entities::Switches { ResetPlayerFlex(laraItem); laraItem->Animation.AnimNumber = LA_LEVER_PUSH; - laraItem->Animation.FrameNumber = GetAnimData(laraItem).frameBase; + laraItem->Animation.FrameNumber = g_Level.Anims[laraItem->Animation.AnimNumber].frameBase; laraItem->Animation.TargetState = LS_LEVERSWITCH_PUSH; laraItem->Animation.ActiveState = LS_LEVERSWITCH_PUSH; lara->Control.IsMoving = false; @@ -108,7 +108,7 @@ namespace TEN::Entities::Switches { ResetPlayerFlex(laraItem); laraItem->Animation.AnimNumber = LA_LEVER_PUSH; - laraItem->Animation.FrameNumber = GetAnimData(laraItem).frameBase; + laraItem->Animation.FrameNumber = g_Level.Anims[laraItem->Animation.AnimNumber].frameBase; laraItem->Animation.TargetState = LS_LEVERSWITCH_PUSH; laraItem->Animation.ActiveState = LS_LEVERSWITCH_PUSH; lara->Control.IsMoving = false; diff --git a/TombEngine/Objects/Generic/Switches/turn_switch.cpp b/TombEngine/Objects/Generic/Switches/turn_switch.cpp index 66be48526..b953e7911 100644 --- a/TombEngine/Objects/Generic/Switches/turn_switch.cpp +++ b/TombEngine/Objects/Generic/Switches/turn_switch.cpp @@ -71,19 +71,18 @@ namespace TEN::Entities::Switches { if (MoveLaraPosition(TurnSwitchPosA, switchItem, laraItem)) { - SetAnimation(*laraItem, LA_TURNSWITCH_GRAB_COUNTER_CLOCKWISE); - SetAnimation(*switchItem, 4); + laraItem->Animation.AnimNumber = LA_TURNSWITCH_GRAB_COUNTER_CLOCKWISE; + laraItem->Animation.FrameNumber = g_Level.Anims[LA_TURNSWITCH_GRAB_COUNTER_CLOCKWISE].frameBase; + switchItem->Animation.AnimNumber = Objects[switchItem->ObjectNumber].animIndex + 4; + switchItem->Animation.FrameNumber = g_Level.Anims[switchItem->Animation.AnimNumber].frameBase; switchItem->ItemFlags[0] = TURN_SWITCH_ANTICLOCKWISE; - - ForcedFixedCamera.x = switchItem->Pose.Position.x - BLOCK(1) * phd_sin(switchItem->Pose.Orientation.y); - ForcedFixedCamera.z = switchItem->Pose.Position.z - BLOCK(1) * phd_cos(switchItem->Pose.Orientation.y); + ForcedFixedCamera.x = switchItem->Pose.Position.x - 1024 * phd_sin(switchItem->Pose.Orientation.y); + ForcedFixedCamera.z = switchItem->Pose.Position.z - 1024 * phd_cos(switchItem->Pose.Orientation.y); doSwitch = -1; } else - { laraInfo->Context.InteractedItem = itemNumber; - } } else { @@ -92,19 +91,15 @@ namespace TEN::Entities::Switches { if (MoveLaraPosition(TurnSwitchPos, switchItem, laraItem)) { - SetAnimation(*laraItem, LA_TURNSWITCH_GRAB_CLOCKWISE); - + laraItem->Animation.AnimNumber = LA_TURNSWITCH_GRAB_CLOCKWISE; + laraItem->Animation.FrameNumber = g_Level.Anims[laraItem->Animation.AnimNumber].frameBase; switchItem->ItemFlags[0] = TURN_SWITCH_CLOCKWISE; - ForcedFixedCamera.x = switchItem->Pose.Position.x + 1024 * phd_sin(switchItem->Pose.Orientation.y); ForcedFixedCamera.z = switchItem->Pose.Position.z + 1024 * phd_cos(switchItem->Pose.Orientation.y); - doSwitch = 1; } else - { laraInfo->Context.InteractedItem = itemNumber; - } } else if (laraInfo->Control.IsMoving && laraInfo->Context.InteractedItem == itemNumber) { @@ -139,7 +134,7 @@ namespace TEN::Entities::Switches if (!TriggerActive(&g_Level.Items[ItemNos[0]])) { g_Level.Items[ItemNos[0]].Animation.AnimNumber = Objects[g_Level.Items[ItemNos[0]].ObjectNumber].animIndex; - g_Level.Items[ItemNos[0]].Animation.FrameNumber = GetAnimData(g_Level.Items[ItemNos[0]].Animation.AnimNumber).frameBase; + g_Level.Items[ItemNos[0]].Animation.FrameNumber = g_Level.Anims[g_Level.Items[ItemNos[0]].Animation.AnimNumber].frameBase; } } } @@ -179,22 +174,22 @@ namespace TEN::Entities::Switches if (TrInput & IN_ACTION) { laraItem->Animation.AnimNumber = LA_TURNSWITCH_PUSH_CLOCKWISE_START; - laraItem->Animation.FrameNumber = GetAnimData(laraItem).frameBase; + laraItem->Animation.FrameNumber = g_Level.Anims[laraItem->Animation.AnimNumber].frameBase; switchItem->Animation.AnimNumber = Objects[switchItem->ObjectNumber].animIndex + 1; - switchItem->Animation.FrameNumber = GetAnimData(switchItem).frameBase; + switchItem->Animation.FrameNumber = g_Level.Anims[switchItem->Animation.AnimNumber].frameBase; } } if (laraItem->Animation.AnimNumber == LA_TURNSWITCH_PUSH_CLOCKWISE_END && - laraItem->Animation.FrameNumber == GetAnimData(laraItem).frameEnd && + laraItem->Animation.FrameNumber == g_Level.Anims[laraItem->Animation.AnimNumber].frameEnd && !switchItem->ItemFlags[1]) switchItem->ItemFlags[1] = 1; - if ((laraItem->Animation.FrameNumber >= GetAnimData(*laraItem, LA_TURNSWITCH_PUSH_CLOCKWISE_START).frameBase && - laraItem->Animation.FrameNumber <= GetAnimData(*laraItem, LA_TURNSWITCH_PUSH_CLOCKWISE_START).frameBase + 43) || - (laraItem->Animation.FrameNumber >= GetAnimData(*laraItem, LA_TURNSWITCH_PUSH_CLOCKWISE_START).frameBase + 58 && - laraItem->Animation.FrameNumber <= GetAnimData(*laraItem, LA_TURNSWITCH_PUSH_CLOCKWISE_START).frameBase + 115)) + if (laraItem->Animation.FrameNumber >= g_Level.Anims[LA_TURNSWITCH_PUSH_CLOCKWISE_START].frameBase && + laraItem->Animation.FrameNumber <= g_Level.Anims[LA_TURNSWITCH_PUSH_CLOCKWISE_START].frameBase + 43 || + laraItem->Animation.FrameNumber >= g_Level.Anims[LA_TURNSWITCH_PUSH_CLOCKWISE_START].frameBase + 58 && + laraItem->Animation.FrameNumber <= g_Level.Anims[LA_TURNSWITCH_PUSH_CLOCKWISE_START].frameBase + 115) { SoundEffect(SFX_TR4_PUSHABLE_SOUND, &switchItem->Pose, SoundEnvironment::Always); } @@ -206,22 +201,21 @@ namespace TEN::Entities::Switches switchItem->Pose.Orientation.y -= ANGLE(90.0f); if (TrInput & IN_ACTION) { - SetAnimation(*laraItem, LA_TURNSWITCH_PUSH_COUNTER_CLOCKWISE_START); - SetAnimation(*switchItem, 5); + laraItem->Animation.AnimNumber = LA_TURNSWITCH_PUSH_COUNTER_CLOCKWISE_START; + laraItem->Animation.FrameNumber = g_Level.Anims[laraItem->Animation.AnimNumber].frameBase; + switchItem->Animation.AnimNumber = Objects[switchItem->ObjectNumber].animIndex + 5; + switchItem->Animation.FrameNumber = g_Level.Anims[switchItem->Animation.AnimNumber].frameBase; } } - if (laraItem->Animation.AnimNumber == LA_TURNSWITCH_PUSH_COUNTER_CLOCKWISE_END && - laraItem->Animation.FrameNumber == GetAnimData(*laraItem, LA_TURNSWITCH_PUSH_COUNTER_CLOCKWISE_END).frameEnd && + if (laraItem->Animation.AnimNumber == LA_TURNSWITCH_PUSH_COUNTER_CLOCKWISE_END && laraItem->Animation.FrameNumber == g_Level.Anims[LA_TURNSWITCH_PUSH_COUNTER_CLOCKWISE_END].frameEnd && !switchItem->ItemFlags[1]) - { switchItem->ItemFlags[1] = 1; - } - if ((laraItem->Animation.FrameNumber >= GetAnimData(*laraItem, LA_TURNSWITCH_PUSH_COUNTER_CLOCKWISE_START).frameBase && - laraItem->Animation.FrameNumber <= GetAnimData(*laraItem, LA_TURNSWITCH_PUSH_COUNTER_CLOCKWISE_START).frameBase + 43) || - (laraItem->Animation.FrameNumber >= GetAnimData(*laraItem, LA_TURNSWITCH_PUSH_COUNTER_CLOCKWISE_START).frameBase + 58 && - laraItem->Animation.FrameNumber <= GetAnimData(*laraItem, LA_TURNSWITCH_PUSH_COUNTER_CLOCKWISE_START).frameBase + 115)) + if (laraItem->Animation.FrameNumber >= g_Level.Anims[LA_TURNSWITCH_PUSH_COUNTER_CLOCKWISE_START].frameBase && + laraItem->Animation.FrameNumber <= g_Level.Anims[LA_TURNSWITCH_PUSH_COUNTER_CLOCKWISE_START].frameBase + 43 || + laraItem->Animation.FrameNumber >= g_Level.Anims[LA_TURNSWITCH_PUSH_COUNTER_CLOCKWISE_START].frameBase + 58 && + laraItem->Animation.FrameNumber <= g_Level.Anims[LA_TURNSWITCH_PUSH_COUNTER_CLOCKWISE_START].frameBase + 115) { SoundEffect(SFX_TR4_PUSHABLE_SOUND, &switchItem->Pose, SoundEnvironment::Always); } @@ -233,9 +227,9 @@ namespace TEN::Entities::Switches { laraItem->Animation.AnimNumber = LA_STAND_IDLE; laraItem->Animation.ActiveState = LS_IDLE; - laraItem->Animation.FrameNumber = GetAnimData(laraItem).frameBase; + laraItem->Animation.FrameNumber = g_Level.Anims[laraItem->Animation.AnimNumber].frameBase; switchItem->Animation.AnimNumber = Objects[switchItem->ObjectNumber].animIndex; - switchItem->Animation.FrameNumber = GetAnimData(switchItem).frameBase; + switchItem->Animation.FrameNumber = g_Level.Anims[switchItem->Animation.AnimNumber].frameBase; switchItem->Status = ITEM_NOT_ACTIVE; RemoveActiveItem(itemNumber); diff --git a/TombEngine/Objects/Generic/puzzles_keys.cpp b/TombEngine/Objects/Generic/puzzles_keys.cpp index 51fa0699d..47c12cb43 100644 --- a/TombEngine/Objects/Generic/puzzles_keys.cpp +++ b/TombEngine/Objects/Generic/puzzles_keys.cpp @@ -65,10 +65,9 @@ void InitializePuzzleHole(short itemNumber) void InitializePuzzleDone(short itemNumber) { auto& receptacleItem = g_Level.Items[itemNumber]; - const auto& anim = GetAnimData(receptacleItem); receptacleItem.Animation.RequiredState = NO_STATE; - receptacleItem.Animation.FrameNumber = anim.frameBase + anim.frameEnd; + receptacleItem.Animation.FrameNumber = g_Level.Anims[receptacleItem.Animation.AnimNumber].frameBase + g_Level.Anims[receptacleItem.Animation.AnimNumber].frameEnd; } void PuzzleHoleCollision(short itemNumber, ItemInfo* laraItem, CollisionInfo* coll) @@ -175,7 +174,7 @@ void PuzzleHoleCollision(short itemNumber, ItemInfo* laraItem, CollisionInfo* co g_Gui.SetInventoryItemChosen(NO_ITEM); ResetPlayerFlex(laraItem); - laraItem->Animation.FrameNumber = GetAnimData(laraItem).frameBase; + laraItem->Animation.FrameNumber = GetAnimData(*laraItem, laraItem->Animation.AnimNumber).frameBase; player.Control.IsMoving = false; player.Control.HandStatus = HandStatus::Busy; player.Context.InteractedItem = itemNumber; @@ -350,9 +349,9 @@ void PuzzleDone(ItemInfo* item, short itemNumber) { item->ObjectNumber += GAME_OBJECT_ID{ ID_PUZZLE_DONE1 - ID_PUZZLE_HOLE1 }; item->Animation.AnimNumber = Objects[item->ObjectNumber].animIndex; - item->Animation.FrameNumber = GetAnimData(item).frameBase; - item->Animation.ActiveState = GetAnimData(item).ActiveState; - item->Animation.TargetState = GetAnimData(item).ActiveState; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; + item->Animation.ActiveState = g_Level.Anims[item->Animation.AnimNumber].ActiveState; + item->Animation.TargetState = g_Level.Anims[item->Animation.AnimNumber].ActiveState; item->Animation.RequiredState = NO_STATE; item->ResetModelToDefault(); @@ -507,7 +506,7 @@ void KeyHoleCollision(short itemNumber, ItemInfo* laraItem, CollisionInfo* coll) } laraItem->Animation.ActiveState = LS_INSERT_KEY; - laraItem->Animation.FrameNumber = GetAnimData(laraItem).frameBase; + laraItem->Animation.FrameNumber = g_Level.Anims[laraItem->Animation.AnimNumber].frameBase; player->Control.IsMoving = false; ResetPlayerFlex(laraItem); player->Control.HandStatus = HandStatus::Busy; diff --git a/TombEngine/Objects/TR1/Entity/Cowboy.cpp b/TombEngine/Objects/TR1/Entity/Cowboy.cpp index 7af04ac2f..8cf2af407 100644 --- a/TombEngine/Objects/TR1/Entity/Cowboy.cpp +++ b/TombEngine/Objects/TR1/Entity/Cowboy.cpp @@ -51,7 +51,7 @@ namespace TEN::Entities::Creatures::TR1 COWBOY_ANIM_IDLE }; - void InitializeCowboy(short itemNumber) + void InitialiseCowboy(short itemNumber) { auto& item = g_Level.Items[itemNumber]; diff --git a/TombEngine/Objects/TR1/Entity/Cowboy.h b/TombEngine/Objects/TR1/Entity/Cowboy.h index 056e7d8e6..1bdc361ea 100644 --- a/TombEngine/Objects/TR1/Entity/Cowboy.h +++ b/TombEngine/Objects/TR1/Entity/Cowboy.h @@ -2,6 +2,6 @@ namespace TEN::Entities::Creatures::TR1 { - void InitializeCowboy(short itemNumber); + void InitialiseCowboy(short itemNumber); void CowboyControl(short itemNumber); } diff --git a/TombEngine/Objects/TR1/Entity/tr1_wolf.cpp b/TombEngine/Objects/TR1/Entity/tr1_wolf.cpp index 1452a99d0..9bd469a1b 100644 --- a/TombEngine/Objects/TR1/Entity/tr1_wolf.cpp +++ b/TombEngine/Objects/TR1/Entity/tr1_wolf.cpp @@ -83,7 +83,7 @@ namespace TEN::Entities::Creatures::TR1 if (item->Animation.ActiveState != WOLF_STATE_DEATH) { item->Animation.AnimNumber = Objects[ID_WOLF].animIndex + WOLF_ANIM_DEATH + (short)(GetRandomControl() / 11000); - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; item->Animation.ActiveState = WOLF_STATE_DEATH; } } diff --git a/TombEngine/Objects/TR1/tr1_objects.cpp b/TombEngine/Objects/TR1/tr1_objects.cpp index 8ed09310f..1a7dfcf14 100644 --- a/TombEngine/Objects/TR1/tr1_objects.cpp +++ b/TombEngine/Objects/TR1/tr1_objects.cpp @@ -170,7 +170,7 @@ static void StartEntity(ObjectInfo* obj) obj = &Objects[ID_COWBOY]; if (obj->loaded) { - obj->Initialize = InitializeCowboy; + obj->Initialize = InitialiseCowboy; obj->control = CowboyControl; obj->collision = CreatureCollision; obj->shadowType = ShadowMode::All; diff --git a/TombEngine/Objects/TR2/Entity/tr2_barracuda.cpp b/TombEngine/Objects/TR2/Entity/tr2_barracuda.cpp index 788471499..39e505ca4 100644 --- a/TombEngine/Objects/TR2/Entity/tr2_barracuda.cpp +++ b/TombEngine/Objects/TR2/Entity/tr2_barracuda.cpp @@ -70,7 +70,7 @@ namespace TEN::Entities::Creatures::TR2 if (item->Animation.ActiveState != BARRACUDA_STATE_DEATH) { item->Animation.AnimNumber = Objects[ID_BARRACUDA].animIndex + BARRACUDA_ANIM_DEATH_START; - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; item->Animation.ActiveState = BARRACUDA_STATE_DEATH; } diff --git a/TombEngine/Objects/TR2/Entity/tr2_dragon.cpp b/TombEngine/Objects/TR2/Entity/tr2_dragon.cpp index 0dcd284ee..fa14fecce 100644 --- a/TombEngine/Objects/TR2/Entity/tr2_dragon.cpp +++ b/TombEngine/Objects/TR2/Entity/tr2_dragon.cpp @@ -180,7 +180,7 @@ namespace TEN::Entities::Creatures::TR2 int angle = laraItem->Pose.Orientation.y - item->Pose.Orientation.y; int anim = item->Animation.AnimNumber - Objects[ID_DRAGON_BACK].animIndex; - int frame = item->Animation.FrameNumber - GetAnimData(item).frameBase; + int frame = item->Animation.FrameNumber - g_Level.Anims[item->Animation.AnimNumber].frameBase; if ((anim == DRAGON_ANIM_DEAD || (anim == DRAGON_ANIM_DEAD + 1 && frame <= DRAGON_ALMOST_LIVE)) && TrInput & IN_ACTION && @@ -438,7 +438,7 @@ namespace TEN::Entities::Creatures::TR2 back->Animation.ActiveState = item->Animation.ActiveState; back->Animation.AnimNumber = Objects[ID_DRAGON_BACK].animIndex + (item->Animation.AnimNumber - Objects[ID_DRAGON_FRONT].animIndex); - back->Animation.FrameNumber = GetAnimData(back).frameBase + (item->Animation.FrameNumber - GetAnimData(item).frameBase); + back->Animation.FrameNumber = g_Level.Anims[back->Animation.AnimNumber].frameBase + (item->Animation.FrameNumber - g_Level.Anims[item->Animation.AnimNumber].frameBase); back->Pose = item->Pose; if (back->RoomNumber != item->RoomNumber) diff --git a/TombEngine/Objects/TR2/Entity/tr2_eagle_or_crow.cpp b/TombEngine/Objects/TR2/Entity/tr2_eagle_or_crow.cpp index 067b718d3..480d363d5 100644 --- a/TombEngine/Objects/TR2/Entity/tr2_eagle_or_crow.cpp +++ b/TombEngine/Objects/TR2/Entity/tr2_eagle_or_crow.cpp @@ -41,13 +41,13 @@ namespace TEN::Entities::Creatures::TR2 if (item->ObjectNumber == ID_CROW) { item->Animation.AnimNumber = Objects[ID_CROW].animIndex + 14; - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; item->Animation.ActiveState = item->Animation.TargetState = 7; } else { item->Animation.AnimNumber = Objects[ID_EAGLE].animIndex + 5; - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; item->Animation.ActiveState = item->Animation.TargetState = 2; } } @@ -88,7 +88,7 @@ namespace TEN::Entities::Creatures::TR2 else item->Animation.AnimNumber = Objects[ID_EAGLE].animIndex + 8; - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; item->Animation.ActiveState = 4; item->Animation.Velocity.z = 0; item->Animation.IsAirborne = true; diff --git a/TombEngine/Objects/TR2/Entity/tr2_mercenary.cpp b/TombEngine/Objects/TR2/Entity/tr2_mercenary.cpp index 061c9e942..4d8a0efaa 100644 --- a/TombEngine/Objects/TR2/Entity/tr2_mercenary.cpp +++ b/TombEngine/Objects/TR2/Entity/tr2_mercenary.cpp @@ -49,7 +49,7 @@ namespace TEN::Entities::Creatures::TR2 if (item->Animation.ActiveState != 13) { item->Animation.AnimNumber = Objects[item->ObjectNumber].animIndex + 14; - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; item->Animation.ActiveState = 13; } } diff --git a/TombEngine/Objects/TR2/Entity/tr2_monk.cpp b/TombEngine/Objects/TR2/Entity/tr2_monk.cpp index ac586f50f..3d627269f 100644 --- a/TombEngine/Objects/TR2/Entity/tr2_monk.cpp +++ b/TombEngine/Objects/TR2/Entity/tr2_monk.cpp @@ -46,7 +46,7 @@ namespace TEN::Entities::Creatures::TR2 if (item->Animation.ActiveState != 9) { item->Animation.AnimNumber = Objects[item->ObjectNumber].animIndex + 20 + (GetRandomControl() / 0x4000); - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; item->Animation.ActiveState = 9; } } diff --git a/TombEngine/Objects/TR2/Entity/tr2_skidman.cpp b/TombEngine/Objects/TR2/Entity/tr2_skidman.cpp index a0e547216..4a9e5035f 100644 --- a/TombEngine/Objects/TR2/Entity/tr2_skidman.cpp +++ b/TombEngine/Objects/TR2/Entity/tr2_skidman.cpp @@ -307,7 +307,7 @@ namespace TEN::Entities::Creatures::TR2 ItemNewRoom(riderItemNumber, skidooItem->RoomNumber); riderItem.Animation.AnimNumber = skidooItem->Animation.AnimNumber + (Objects[ID_SNOWMOBILE_DRIVER].animIndex - Objects[ID_SNOWMOBILE_GUN].animIndex); - riderItem.Animation.FrameNumber = skidooItem->Animation.FrameNumber + (GetAnimData(riderItem).frameBase - GetAnimData(skidooItem).frameBase); + riderItem.Animation.FrameNumber = skidooItem->Animation.FrameNumber + (g_Level.Anims[riderItem.Animation.AnimNumber].frameBase - g_Level.Anims[skidooItem->Animation.AnimNumber].frameBase); } else if (riderItem.Status == ITEM_DEACTIVATED && skidooItem->Animation.Velocity.z == 0 && diff --git a/TombEngine/Objects/TR2/Entity/tr2_spider.cpp b/TombEngine/Objects/TR2/Entity/tr2_spider.cpp index 39552d5ab..0a1dc1412 100644 --- a/TombEngine/Objects/TR2/Entity/tr2_spider.cpp +++ b/TombEngine/Objects/TR2/Entity/tr2_spider.cpp @@ -222,7 +222,7 @@ namespace TEN::Entities::Creatures::TR2 if (item->Animation.ActiveState != 7) { item->Animation.AnimNumber = Objects[item->ObjectNumber].animIndex + 2; - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; item->Animation.ActiveState = 7; } } diff --git a/TombEngine/Objects/TR2/Entity/tr2_yeti.cpp b/TombEngine/Objects/TR2/Entity/tr2_yeti.cpp index 0e236f325..0ad6282a4 100644 --- a/TombEngine/Objects/TR2/Entity/tr2_yeti.cpp +++ b/TombEngine/Objects/TR2/Entity/tr2_yeti.cpp @@ -61,7 +61,7 @@ namespace TEN::Entities::Creatures::TR2 if (item->Animation.ActiveState != 8) { item->Animation.AnimNumber = Objects[item->ObjectNumber].animIndex + 31; - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; item->Animation.ActiveState = 8; } } @@ -290,25 +290,25 @@ namespace TEN::Entities::Creatures::TR2 { case 2: item->Animation.AnimNumber = Objects[item->ObjectNumber].animIndex + 34; - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; item->Animation.ActiveState = 10; break; case 3: item->Animation.AnimNumber = Objects[item->ObjectNumber].animIndex + 33; - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; item->Animation.ActiveState = 11; break; case 4: item->Animation.AnimNumber = Objects[item->ObjectNumber].animIndex + 32; - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; item->Animation.ActiveState = 12; break; case -4: item->Animation.AnimNumber = Objects[item->ObjectNumber].animIndex + 35; - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; item->Animation.ActiveState = 13; break; } diff --git a/TombEngine/Objects/TR2/Trap/tr2_killerstatue.cpp b/TombEngine/Objects/TR2/Trap/tr2_killerstatue.cpp index 89936dd9b..7927b73a8 100644 --- a/TombEngine/Objects/TR2/Trap/tr2_killerstatue.cpp +++ b/TombEngine/Objects/TR2/Trap/tr2_killerstatue.cpp @@ -14,7 +14,7 @@ void InitializeKillerStatue(short itemNumber) auto* item = &g_Level.Items[itemNumber]; item->Animation.AnimNumber = Objects[item->ObjectNumber].animIndex + 3; - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; item->Animation.ActiveState = 1; } diff --git a/TombEngine/Objects/TR2/Vehicles/speedboat.cpp b/TombEngine/Objects/TR2/Vehicles/speedboat.cpp index 8bddf2ba7..9800106b1 100644 --- a/TombEngine/Objects/TR2/Vehicles/speedboat.cpp +++ b/TombEngine/Objects/TR2/Vehicles/speedboat.cpp @@ -210,7 +210,7 @@ namespace TEN::Entities::Vehicles SetAnimation(*laraItem, ID_SPEEDBOAT_LARA_ANIMS, SPEEDBOAT_ANIM_MOUNT_JUMP); break; } - laraItem->Animation.FrameNumber = GetAnimData(laraItem).frameBase; + laraItem->Animation.FrameNumber = g_Level.Anims[laraItem->Animation.AnimNumber].frameBase; if (laraItem->RoomNumber != speedboatItem->RoomNumber) ItemNewRoom(lara->ItemNumber, speedboatItem->RoomNumber); diff --git a/TombEngine/Objects/TR3/Entity/PunaBoss.cpp b/TombEngine/Objects/TR3/Entity/PunaBoss.cpp index e4eca8867..edf16cd82 100644 --- a/TombEngine/Objects/TR3/Entity/PunaBoss.cpp +++ b/TombEngine/Objects/TR3/Entity/PunaBoss.cpp @@ -326,7 +326,7 @@ namespace TEN::Entities::Creatures::TR3 creature.MaxTurn = 0; } - int frameEnd = GetAnimData(object, PUNA_ANIM_DEATH).frameEnd; + int frameEnd = g_Level.Anims[object.animIndex + PUNA_ANIM_DEATH].frameEnd; if (item.Animation.FrameNumber >= frameEnd) { // Avoid having the object stop working. diff --git a/TombEngine/Objects/TR3/Entity/Shiva.cpp b/TombEngine/Objects/TR3/Entity/Shiva.cpp index ffdadd3a7..63ccb27fc 100644 --- a/TombEngine/Objects/TR3/Entity/Shiva.cpp +++ b/TombEngine/Objects/TR3/Entity/Shiva.cpp @@ -290,7 +290,7 @@ namespace TEN::Entities::Creatures::TR3 item->ItemFlags[3] = 1; } - int frameEnd = GetAnimData(object, SHIVA_ANIM_DEATH).frameEnd - 1; + int frameEnd = g_Level.Anims[object.animIndex + SHIVA_ANIM_DEATH].frameEnd - 1; if (item->Animation.FrameNumber >= frameEnd) { // Block frame until mesh is swapped. diff --git a/TombEngine/Objects/TR3/Entity/SophiaLeigh.cpp b/TombEngine/Objects/TR3/Entity/SophiaLeigh.cpp index 778574110..55feee1d9 100644 --- a/TombEngine/Objects/TR3/Entity/SophiaLeigh.cpp +++ b/TombEngine/Objects/TR3/Entity/SophiaLeigh.cpp @@ -721,7 +721,7 @@ namespace TEN::Entities::Creatures::TR3 if (item.Animation.ActiveState != SOPHIALEIGH_STATE_DEATH) SetAnimation(&item, SOPHIALEIGH_ANIM_DEATH); - int frameEnd = GetAnimData(object, SOPHIALEIGH_ANIM_DEATH).frameEnd; + int frameEnd = g_Level.Anims[object.animIndex + SOPHIALEIGH_ANIM_DEATH].frameEnd; if (item.Animation.FrameNumber >= frameEnd) { // Avoid having the object stop working. diff --git a/TombEngine/Objects/TR3/Entity/tr3_monkey.cpp b/TombEngine/Objects/TR3/Entity/tr3_monkey.cpp index a1b19057e..12d9af2fa 100644 --- a/TombEngine/Objects/TR3/Entity/tr3_monkey.cpp +++ b/TombEngine/Objects/TR3/Entity/tr3_monkey.cpp @@ -347,7 +347,7 @@ namespace TEN::Entities::Creatures::TR3 break; else if ((creature->Enemy->ObjectNumber == ID_SMALLMEDI_ITEM || creature->Enemy->ObjectNumber == ID_KEY_ITEM4) && - item->Animation.FrameNumber == (GetAnimData(item).frameBase + 12)) + item->Animation.FrameNumber == (g_Level.Anims[item->Animation.AnimNumber].frameBase + 12)) { if (creature->Enemy->RoomNumber == NO_ROOM || creature->Enemy->Status == ITEM_INVISIBLE || @@ -382,7 +382,7 @@ namespace TEN::Entities::Creatures::TR3 } } else if (creature->Enemy->ObjectNumber == ID_AI_AMBUSH && - item->Animation.FrameNumber == (GetAnimData(item).frameBase + 12)) + item->Animation.FrameNumber == (g_Level.Anims[item->Animation.AnimNumber].frameBase + 12)) { item->AIBits = 0; diff --git a/TombEngine/Objects/TR3/Entity/tr3_mp_gun.cpp b/TombEngine/Objects/TR3/Entity/tr3_mp_gun.cpp index 227f8cf94..970b9f0b2 100644 --- a/TombEngine/Objects/TR3/Entity/tr3_mp_gun.cpp +++ b/TombEngine/Objects/TR3/Entity/tr3_mp_gun.cpp @@ -84,10 +84,10 @@ namespace TEN::Entities::Creatures::TR3 if (item->Animation.ActiveState != 13) { item->Animation.AnimNumber = Objects[ID_MP_WITH_GUN].animIndex + 14; - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; item->Animation.ActiveState = 13; } - else if (Random::TestProbability(0.25f) && item->Animation.FrameNumber == GetAnimData(item).frameBase + 1) + else if (Random::TestProbability(0.25f) && item->Animation.FrameNumber == g_Level.Anims[item->Animation.AnimNumber].frameBase + 1) { CreatureAIInfo(item, &AI); @@ -348,7 +348,7 @@ namespace TEN::Entities::Creatures::TR3 if (item->Animation.AnimNumber == Objects[ID_MP_WITH_GUN].animIndex + 12 || (item->Animation.AnimNumber == Objects[ID_MP_WITH_GUN].animIndex + 1 && - item->Animation.FrameNumber == GetAnimData(item).frameBase + 10)) + item->Animation.FrameNumber == g_Level.Anims[item->Animation.AnimNumber].frameBase + 10)) { if (!ShotLara(item, &AI, MPGunBite, extraTorsoRot.y, 32)) item->Animation.RequiredState = MPGUN_STATE_WAIT; @@ -386,7 +386,7 @@ namespace TEN::Entities::Creatures::TR3 extraTorsoRot.y = AI.angle; } - if (item->Animation.FrameNumber == GetAnimData(item).frameBase) + if (item->Animation.FrameNumber == g_Level.Anims[item->Animation.AnimNumber].frameBase) { if (!ShotLara(item, &AI, MPGunBite, extraTorsoRot.y, 32)) item->Animation.TargetState = MPGUN_STATE_WAIT; @@ -410,8 +410,8 @@ namespace TEN::Entities::Creatures::TR3 extraTorsoRot.y = AI.angle; } - if (item->Animation.FrameNumber == GetAnimData(item).frameBase || - item->Animation.FrameNumber == GetAnimData(item).frameBase + 11) + if (item->Animation.FrameNumber == g_Level.Anims[item->Animation.AnimNumber].frameBase || + item->Animation.FrameNumber == g_Level.Anims[item->Animation.AnimNumber].frameBase + 11) { if (!ShotLara(item, &AI, MPGunBite, extraTorsoRot.y, 32)) item->Animation.TargetState = MPGUN_STATE_WAIT; @@ -435,9 +435,9 @@ namespace TEN::Entities::Creatures::TR3 } if ((item->Animation.AnimNumber == Objects[ID_MP_WITH_GUN].animIndex + 18 && - item->Animation.FrameNumber == GetAnimData(item).frameBase + 17) || + item->Animation.FrameNumber == g_Level.Anims[item->Animation.AnimNumber].frameBase + 17) || (item->Animation.AnimNumber == Objects[ID_MP_WITH_GUN].animIndex + 19 && - item->Animation.FrameNumber == GetAnimData(item).frameBase + 6)) + item->Animation.FrameNumber == g_Level.Anims[item->Animation.AnimNumber].frameBase + 6)) { if (!ShotLara(item, &AI, MPGunBite, extraTorsoRot.y, 32)) item->Animation.RequiredState = MPGUN_STATE_WALK; @@ -467,7 +467,7 @@ namespace TEN::Entities::Creatures::TR3 if (item->Animation.RequiredState == MPGUN_STATE_WALK) item->Animation.TargetState = MPGUN_STATE_WALK; - if (item->Animation.FrameNumber == GetAnimData(item).frameBase + 16) + if (item->Animation.FrameNumber == g_Level.Anims[item->Animation.AnimNumber].frameBase + 16) { if (!ShotLara(item, &AI, MPGunBite, extraTorsoRot.y, 32)) item->Animation.TargetState = MPGUN_STATE_WALK; @@ -523,7 +523,7 @@ namespace TEN::Entities::Creatures::TR3 if (AI.ahead) extraTorsoRot.y = AI.angle; - if (item->Animation.FrameNumber == GetAnimData(item).frameBase) + if (item->Animation.FrameNumber == g_Level.Anims[item->Animation.AnimNumber].frameBase) { if (!ShotLara(item, &AI, MPGunBite, extraTorsoRot.y, 32) || Random::TestProbability(1 / 8.0f)) item->Animation.TargetState = MPGUN_STATE_CROUCHED; diff --git a/TombEngine/Objects/TR3/Entity/tr3_mp_stick.cpp b/TombEngine/Objects/TR3/Entity/tr3_mp_stick.cpp index ddaa5d22b..a42c2c784 100644 --- a/TombEngine/Objects/TR3/Entity/tr3_mp_stick.cpp +++ b/TombEngine/Objects/TR3/Entity/tr3_mp_stick.cpp @@ -449,7 +449,7 @@ namespace TEN::Entities::Creatures::TR3 if (creature->Enemy->IsLara()) { if (creature->Flags != 1 && item->TouchBits.Test(MPStickKickAttackJoints) && - item->Animation.FrameNumber > GetAnimData(item).frameBase + 8) + item->Animation.FrameNumber > g_Level.Anims[item->Animation.AnimNumber].frameBase + 8) { DoDamage(creature->Enemy, 150); CreatureEffect(item, MPStickBite2, DoBloodSplat); @@ -460,7 +460,7 @@ namespace TEN::Entities::Creatures::TR3 else { if (!creature->Flags != 1 && creature->Enemy && - item->Animation.FrameNumber > GetAnimData(item).frameBase + 8) + item->Animation.FrameNumber > g_Level.Anims[item->Animation.AnimNumber].frameBase + 8) { if (Vector3i::Distance(item->Pose.Position, creature->Enemy->Pose.Position) <= SECTOR(0.25f)) { diff --git a/TombEngine/Objects/TR3/Entity/tr3_tony.cpp b/TombEngine/Objects/TR3/Entity/tr3_tony.cpp index d66f12ac5..3aecd2dc2 100644 --- a/TombEngine/Objects/TR3/Entity/tr3_tony.cpp +++ b/TombEngine/Objects/TR3/Entity/tr3_tony.cpp @@ -502,7 +502,7 @@ namespace TEN::Entities::Creatures::TR3 if (item->Animation.ActiveState != TONY_STATE_DEATH) SetAnimation(item, TONY_ANIM_DEATH); - int frameEnd = GetAnimData(*object, TONY_ANIM_DEATH).frameEnd; + int frameEnd = g_Level.Anims[object->animIndex + TONY_ANIM_DEATH].frameEnd; if (item->Animation.FrameNumber >= frameEnd) { // Avoid having the object stop working. diff --git a/TombEngine/Objects/TR3/Entity/tr3_tribesman.cpp b/TombEngine/Objects/TR3/Entity/tr3_tribesman.cpp index c8fcd8f31..17d7fc48e 100644 --- a/TombEngine/Objects/TR3/Entity/tr3_tribesman.cpp +++ b/TombEngine/Objects/TR3/Entity/tr3_tribesman.cpp @@ -319,7 +319,7 @@ namespace TEN::Entities::Creatures::TR3 case TRIBESMAN_STATE_RUN_AXE_ATTACK_HIGH: item->ItemFlags[0] = 1; creature->MaxTurn = ANGLE(4.0f); - creature->Flags = item->Animation.FrameNumber - GetAnimData(item).frameBase; + creature->Flags = item->Animation.FrameNumber - g_Level.Anims[item->Animation.AnimNumber].frameBase; if (creature->Enemy->IsLara()) { @@ -655,7 +655,7 @@ namespace TEN::Entities::Creatures::TR3 item->Pose.Orientation.y += ANGLE(2.0f); } - if (item->Animation.FrameNumber == GetAnimData(item).frameBase + 15) + if (item->Animation.FrameNumber == g_Level.Anims[item->Animation.AnimNumber].frameBase + 15) { item->Animation.TargetState = TRIBESMAN_STATE_CROUCH_IDLE; TribesmanShotDart(item); diff --git a/TombEngine/Objects/TR3/Vehicles/kayak.cpp b/TombEngine/Objects/TR3/Vehicles/kayak.cpp index 6e75e802e..4aeb03f51 100644 --- a/TombEngine/Objects/TR3/Vehicles/kayak.cpp +++ b/TombEngine/Objects/TR3/Vehicles/kayak.cpp @@ -618,7 +618,7 @@ namespace TEN::Entities::Vehicles SetAnimation(*laraItem, ID_KAYAK_LARA_ANIMS, KAYAK_ANIM_IDLE_DEATH); } - int frame = laraItem->Animation.FrameNumber - GetAnimData(laraItem).frameBase; + int frame = laraItem->Animation.FrameNumber - g_Level.Anims[laraItem->Animation.AnimNumber].frameBase; switch (laraItem->Animation.ActiveState) { diff --git a/TombEngine/Objects/TR3/Vehicles/minecart.cpp b/TombEngine/Objects/TR3/Vehicles/minecart.cpp index 3467041fd..cf9a2253d 100644 --- a/TombEngine/Objects/TR3/Vehicles/minecart.cpp +++ b/TombEngine/Objects/TR3/Vehicles/minecart.cpp @@ -310,11 +310,11 @@ namespace TEN::Entities::Vehicles { if (item->ObjectNumber == ID_MINECART_SWITCH) { - if (item->Animation.FrameNumber == GetAnimData(item).frameBase && + if (item->Animation.FrameNumber == g_Level.Anims[item->Animation.AnimNumber].frameBase && (laraItem->Animation.ActiveState == MINECART_STATE_SWIPE && TestAnimNumber(*laraItem, MINECART_ANIM_SWIPE_WRENCH))) { - int frame = laraItem->Animation.FrameNumber - GetAnimData(laraItem).frameBase; + int frame = laraItem->Animation.FrameNumber - g_Level.Anims[laraItem->Animation.AnimNumber].frameBase; if (frame >= 12 && frame <= 22) { SoundEffect(SFX_TR3_VEHICLE_MINECART_WRENCH, &item->Pose, SoundEnvironment::Always); diff --git a/TombEngine/Objects/TR3/Vehicles/upv.cpp b/TombEngine/Objects/TR3/Vehicles/upv.cpp index 5bb754891..b5e3a4bba 100644 --- a/TombEngine/Objects/TR3/Vehicles/upv.cpp +++ b/TombEngine/Objects/TR3/Vehicles/upv.cpp @@ -527,7 +527,7 @@ namespace TEN::Entities::Vehicles TestUPVDismount(UPVItem, laraItem); - int frame = laraItem->Animation.FrameNumber - GetAnimData(laraItem).frameBase; + int frame = laraItem->Animation.FrameNumber - g_Level.Anims[laraItem->Animation.AnimNumber].frameBase; switch (laraItem->Animation.ActiveState) { diff --git a/TombEngine/Objects/TR4/Entity/Wraith.cpp b/TombEngine/Objects/TR4/Entity/Wraith.cpp index d050651b4..5089ed39a 100644 --- a/TombEngine/Objects/TR4/Entity/Wraith.cpp +++ b/TombEngine/Objects/TR4/Entity/Wraith.cpp @@ -503,7 +503,7 @@ namespace TEN::Entities::TR4 SpawnWraithExplosion(item, Vector3(48.0f), 48.0f); if (target->TriggerFlags > 0) - target->Animation.FrameNumber = GetAnimData(target).frameBase; + target->Animation.FrameNumber = g_Level.Anims[target->Animation.AnimNumber].frameBase; target->ItemFlags[6] = 0; DoDamage(target, INT_MAX); diff --git a/TombEngine/Objects/TR4/Entity/tr4_ahmet.cpp b/TombEngine/Objects/TR4/Entity/tr4_ahmet.cpp index f06adc089..9fb5b745a 100644 --- a/TombEngine/Objects/TR4/Entity/tr4_ahmet.cpp +++ b/TombEngine/Objects/TR4/Entity/tr4_ahmet.cpp @@ -137,9 +137,9 @@ namespace TEN::Entities::TR4 if (item->Animation.ActiveState == AHMET_STATE_DEATH) { // Don't clear. - if (item->Animation.FrameNumber == GetAnimData(item).frameEnd) + if (item->Animation.FrameNumber == g_Level.Anims[item->Animation.AnimNumber].frameEnd) { - item->Animation.FrameNumber = (GetAnimData(item).frameEnd - 1); + item->Animation.FrameNumber = (g_Level.Anims[item->Animation.AnimNumber].frameEnd - 1); item->Collidable = false; } } @@ -284,7 +284,7 @@ namespace TEN::Entities::TR4 item->Pose.Orientation.y += AI.angle; if (!(creature->Flags & 1) && - item->Animation.FrameNumber > (GetAnimData(item).frameBase + 7) && + item->Animation.FrameNumber > (g_Level.Anims[item->Animation.AnimNumber].frameBase + 7) && item->TouchBits.Test(AhmetSwipeAttackLeftJoints)) { DoDamage(creature->Enemy, AHMET_SWIPE_ATTACK_DAMAGE); @@ -292,7 +292,7 @@ namespace TEN::Entities::TR4 creature->Flags |= 1; } else if (!(creature->Flags & 2) && - item->Animation.FrameNumber > (GetAnimData(item).frameBase + 32) && + item->Animation.FrameNumber > (g_Level.Anims[item->Animation.AnimNumber].frameBase + 32) && item->TouchBits.Test(AhmetSwipeAttackRightJoints)) { DoDamage(creature->Enemy, AHMET_SWIPE_ATTACK_DAMAGE); @@ -322,7 +322,7 @@ namespace TEN::Entities::TR4 if (!(creature->Flags & 1) && item->Animation.AnimNumber == (Objects[item->ObjectNumber].animIndex + AHMET_ANIM_JUMP_BITE_ATTACK_CONTINUE)) { - if (item->Animation.FrameNumber > (GetAnimData(item).frameBase + 11) && + if (item->Animation.FrameNumber > (g_Level.Anims[item->Animation.AnimNumber].frameBase + 11) && item->TouchBits.Test(AhmetSwipeAttackLeftJoints)) { DoDamage(creature->Enemy, AHMET_BITE_ATTACK_DAMAGE); @@ -352,7 +352,7 @@ namespace TEN::Entities::TR4 else { if (!(creature->Flags & 1) && - item->Animation.FrameNumber > (GetAnimData(item).frameBase + 14) && + item->Animation.FrameNumber > (g_Level.Anims[item->Animation.AnimNumber].frameBase + 14) && item->TouchBits.Test(AhmetSwipeAttackLeftJoints)) { DoDamage(creature->Enemy, AHMET_SWIPE_ATTACK_DAMAGE); @@ -360,7 +360,7 @@ namespace TEN::Entities::TR4 creature->Flags |= 1; } else if (!(creature->Flags & 2) && - item->Animation.FrameNumber > (GetAnimData(item).frameBase + 22) && + item->Animation.FrameNumber > (g_Level.Anims[item->Animation.AnimNumber].frameBase + 22) && item->TouchBits.Test(AhmetSwipeAttackRightJoints)) { DoDamage(creature->Enemy, AHMET_SWIPE_ATTACK_DAMAGE); @@ -384,7 +384,7 @@ namespace TEN::Entities::TR4 auto* item = &g_Level.Items[itemNumber]; if (item->Animation.ActiveState != AHMET_STATE_DEATH || - item->Animation.FrameNumber != GetAnimData(item).frameEnd) + item->Animation.FrameNumber != g_Level.Anims[item->Animation.AnimNumber].frameEnd) { return false; } diff --git a/TombEngine/Objects/TR4/Entity/tr4_baboon.cpp b/TombEngine/Objects/TR4/Entity/tr4_baboon.cpp index 004b8a1c7..a09b542d7 100644 --- a/TombEngine/Objects/TR4/Entity/tr4_baboon.cpp +++ b/TombEngine/Objects/TR4/Entity/tr4_baboon.cpp @@ -263,7 +263,7 @@ namespace TEN::Entities::TR4 { if (item->Animation.ActiveState == BABOON_STATE_WALK) { - if (item->Animation.FrameNumber == GetAnimData(item).frameEnd) + if (item->Animation.FrameNumber == g_Level.Anims[item->Animation.AnimNumber].frameEnd) BaboonRespawnFunction(itemNumber); } else if (item->Animation.ActiveState != BABOON_ACTIVATE_SWITCH) @@ -486,7 +486,7 @@ namespace TEN::Entities::TR4 creature->MaxTurn = 0; item->HitPoints = NOT_TARGETABLE; - if (item->Animation.FrameNumber == GetAnimData(item).frameBase + 212) + if (item->Animation.FrameNumber == g_Level.Anims[item->Animation.AnimNumber].frameBase + 212) { auto pos = Vector3i::Zero; if (item->Pose.Orientation.y == ANGLE(270.0f)) diff --git a/TombEngine/Objects/TR4/Entity/tr4_baddy.cpp b/TombEngine/Objects/TR4/Entity/tr4_baddy.cpp index 2e3f9e3a5..68cb490ed 100644 --- a/TombEngine/Objects/TR4/Entity/tr4_baddy.cpp +++ b/TombEngine/Objects/TR4/Entity/tr4_baddy.cpp @@ -242,7 +242,7 @@ namespace TEN::Entities::TR4 if (!ocb || ocb > 4 && ocb < 7) { item->Animation.AnimNumber = Objects[objectNumber].animIndex + BADDY_ANIM_STAND_IDLE; - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; item->Animation.TargetState = BADDY_STATE_IDLE; item->Animation.ActiveState = BADDY_STATE_IDLE; return; @@ -252,7 +252,7 @@ namespace TEN::Entities::TR4 if (ocb == 1) { item->Animation.AnimNumber = Objects[objectNumber].animIndex + BADDY_ANIM_STAND_TO_JUMP_RIGHT; - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; item->Animation.TargetState = BADDY_STATE_JUMP_RIGHT; item->Animation.ActiveState = BADDY_STATE_JUMP_RIGHT; return; @@ -262,7 +262,7 @@ namespace TEN::Entities::TR4 if (ocb == 2) { item->Animation.AnimNumber = Objects[objectNumber].animIndex + BADDY_ANIM_STAND_TO_ROLL_LEFT; - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; item->Animation.TargetState = BADDY_STATE_ROLL_LEFT; item->Animation.ActiveState = BADDY_STATE_ROLL_LEFT; return; @@ -272,7 +272,7 @@ namespace TEN::Entities::TR4 if (ocb == 3) { item->Animation.AnimNumber = Objects[objectNumber].animIndex + BADDY_ANIM_CROUCH; - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; item->Animation.TargetState = BADDY_STATE_CROUCH; item->Animation.ActiveState = BADDY_STATE_CROUCH; return; @@ -282,7 +282,7 @@ namespace TEN::Entities::TR4 if (ocb == 4) { item->Animation.AnimNumber = Objects[objectNumber].animIndex + BADDY_ANIM_CLIMB_4_STEPS; - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; item->Animation.TargetState = BADDY_STATE_CLIMB_4_STEPS; item->Animation.ActiveState = BADDY_STATE_CLIMB_4_STEPS; item->Pose.Position.x += phd_sin(item->Pose.Orientation.y) * CLICK(4); @@ -294,7 +294,7 @@ namespace TEN::Entities::TR4 if (ocb > 100) { item->Animation.AnimNumber = Objects[objectNumber].animIndex + BADDY_ANIM_CROUCH; - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; item->Animation.TargetState = BADDY_STATE_CROUCH; item->Animation.ActiveState = BADDY_STATE_CROUCH; item->Pose.Position.x += phd_sin(item->Pose.Orientation.y) * CLICK(4); @@ -303,7 +303,7 @@ namespace TEN::Entities::TR4 return; } - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; } void BaddyControl(short itemNumber) @@ -470,14 +470,14 @@ namespace TEN::Entities::TR4 case BADDY_STATE_MONKEY_IDLE: case BADDY_STATE_MONKEY_FORWARD: item->Animation.AnimNumber = Objects[objectNumber].animIndex + BADDY_ANIM_MONKEY_TO_FREEFALL; - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; item->Animation.ActiveState = BADDY_STATE_MONKEY_TO_FREEFALL; item->Animation.Velocity.z = 0; break; default: item->Animation.AnimNumber = Objects[objectNumber].animIndex + BADDY_ANIM_STAND_DEATH; - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; item->Animation.ActiveState = BADDY_STATE_DEATH; currentCreature->LOT.IsJumping = true; @@ -685,7 +685,7 @@ namespace TEN::Entities::TR4 currentCreature->LOT.IsJumping = true; item->Animation.AnimNumber = Objects[objectNumber].animIndex + BADDY_ANIM_STAND_TO_JUMP_FORWARD; - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; item->Animation.ActiveState = BADDY_STATE_JUMP_FORWARD_1_BLOCK; if (!canJump2Sectors) @@ -863,7 +863,7 @@ namespace TEN::Entities::TR4 if (Random::GenerateInt(0, 30) > 20 && objectNumber == ID_BADDY2 && - item->Animation.FrameNumber == GetAnimData(item).frameBase + FRAME_BADDY_RUN_TO_SOMERSAULT && + item->Animation.FrameNumber == g_Level.Anims[item->Animation.AnimNumber].frameBase + FRAME_BADDY_RUN_TO_SOMERSAULT && height3 == height1 && abs(height1 - item->Pose.Position.y) < CLICK(1.5f) && (AI.angle > -ANGLE(22.5f) && AI.angle < ANGLE(22.5f) && AI.distance < pow(SECTOR(3), 2) || height2 >= (height1 + CLICK(2)))) @@ -913,7 +913,7 @@ namespace TEN::Entities::TR4 } if (item->Animation.ActiveState != BADDY_STATE_SWORD_HIT_FRONT || - item->Animation.FrameNumber < GetAnimData(item).frameBase + FRAME_BADDY_SWORD_HIT_NO_DAMAGE_MAX) + item->Animation.FrameNumber < g_Level.Anims[item->Animation.AnimNumber].frameBase + FRAME_BADDY_SWORD_HIT_NO_DAMAGE_MAX) { if (abs(AI.angle) >= ANGLE(7.0f)) { @@ -930,8 +930,8 @@ namespace TEN::Entities::TR4 { if (item->TouchBits.Test(BaddySwordAttackJoints)) { - if (item->Animation.FrameNumber > GetAnimData(item).frameBase + FRAME_BADDY_SWORD_HIT_DAMAGE_MIN && - item->Animation.FrameNumber < GetAnimData(item).frameBase + FRAME_BADDY_SWORD_HIT_DAMAGE_MAX) + if (item->Animation.FrameNumber > g_Level.Anims[item->Animation.AnimNumber].frameBase + FRAME_BADDY_SWORD_HIT_DAMAGE_MIN && + item->Animation.FrameNumber < g_Level.Anims[item->Animation.AnimNumber].frameBase + FRAME_BADDY_SWORD_HIT_DAMAGE_MAX) { DoDamage(creature->Enemy, 120); CreatureEffect2(item, BaddySwordBite, 10, item->Pose.Orientation.y, DoBloodSplat); @@ -940,7 +940,7 @@ namespace TEN::Entities::TR4 } } - if (item->Animation.FrameNumber == GetAnimData(item).frameEnd - 1) + if (item->Animation.FrameNumber == g_Level.Anims[item->Animation.AnimNumber].frameEnd - 1) currentCreature->Flags = 0; break; @@ -1073,7 +1073,7 @@ namespace TEN::Entities::TR4 case BADDY_STATE_CROUCH_PICKUP: ClampRotation(item->Pose, AI.angle, ANGLE(11.0f)); - if (item->Animation.FrameNumber != GetAnimData(item).frameBase + FRAME_BADDY_CROUCH_PICKUP) + if (item->Animation.FrameNumber != g_Level.Anims[item->Animation.AnimNumber].frameBase + FRAME_BADDY_CROUCH_PICKUP) break; if (!currentCreature->Enemy) @@ -1147,8 +1147,8 @@ namespace TEN::Entities::TR4 } ClampRotation(item->Pose, AI.angle, ANGLE(7.0f)); - if (item->Animation.FrameNumber >= GetAnimData(item).frameBase + FRAME_BADDY_FIRE_MAX || - item->Animation.FrameNumber == GetAnimData(item).frameBase + FRAME_BADDY_FIRE_MIN) + if (item->Animation.FrameNumber >= g_Level.Anims[item->Animation.AnimNumber].frameBase + FRAME_BADDY_FIRE_MAX || + item->Animation.FrameNumber == g_Level.Anims[item->Animation.AnimNumber].frameBase + FRAME_BADDY_FIRE_MIN) { break; } @@ -1167,25 +1167,25 @@ namespace TEN::Entities::TR4 break; case BADDY_STATE_HOLSTER_GUN: - if (item->Animation.FrameNumber == GetAnimData(item).frameBase + FRAME_BADDY_HOLSTER_GUN) + if (item->Animation.FrameNumber == g_Level.Anims[item->Animation.AnimNumber].frameBase + FRAME_BADDY_HOLSTER_GUN) item->SetMeshSwapFlags(MESHSWAPFLAGS_BADDY_EMPTY); break; case BADDY_STATE_DRAW_GUN: - if (item->Animation.FrameNumber == GetAnimData(item).frameBase + FRAME_BADDY_DRAW_GUN) + if (item->Animation.FrameNumber == g_Level.Anims[item->Animation.AnimNumber].frameBase + FRAME_BADDY_DRAW_GUN) item->SetMeshSwapFlags(MESHSWAPFLAGS_BADDY_GUN); break; case BADDY_STATE_HOLSTER_SWORD: - if (item->Animation.FrameNumber == GetAnimData(item).frameBase + FRAME_BADDY_HOLSTER_SWORD) + if (item->Animation.FrameNumber == g_Level.Anims[item->Animation.AnimNumber].frameBase + FRAME_BADDY_HOLSTER_SWORD) item->SetMeshSwapFlags(MESHSWAPFLAGS_BADDY_EMPTY); break; case BADDY_STATE_DRAW_SWORD: - if (item->Animation.FrameNumber != GetAnimData(item).frameBase + FRAME_BADDY_DRAW_SWORD) + if (item->Animation.FrameNumber != g_Level.Anims[item->Animation.AnimNumber].frameBase + FRAME_BADDY_DRAW_SWORD) break; if (item->ObjectNumber == ID_BADDY1) @@ -1224,7 +1224,7 @@ namespace TEN::Entities::TR4 break; } - if (item->Animation.FrameNumber != (GetAnimData(item).frameBase + FRAME_BADDY_SOMERSAULT_START_TAKE_OFF)) + if (item->Animation.FrameNumber != (g_Level.Anims[item->Animation.AnimNumber].frameBase + FRAME_BADDY_SOMERSAULT_START_TAKE_OFF)) break; currentCreature->LOT.IsJumping = true; diff --git a/TombEngine/Objects/TR4/Entity/tr4_big_scorpion.cpp b/TombEngine/Objects/TR4/Entity/tr4_big_scorpion.cpp index 01738e4bb..663cc76de 100644 --- a/TombEngine/Objects/TR4/Entity/tr4_big_scorpion.cpp +++ b/TombEngine/Objects/TR4/Entity/tr4_big_scorpion.cpp @@ -262,7 +262,7 @@ namespace TEN::Entities::TR4 case BSCORPION_STATE_KILL_TROOP: creature->MaxTurn = 0; - if (item->Animation.FrameNumber == GetAnimData(item).frameEnd) + if (item->Animation.FrameNumber == g_Level.Anims[item->Animation.AnimNumber].frameEnd) item->TriggerFlags++; if ((creature->Enemy != nullptr && creature->Enemy->HitPoints <= 0) || diff --git a/TombEngine/Objects/TR4/Entity/tr4_crocodile.cpp b/TombEngine/Objects/TR4/Entity/tr4_crocodile.cpp index b44e6cf2f..4da3df8a5 100644 --- a/TombEngine/Objects/TR4/Entity/tr4_crocodile.cpp +++ b/TombEngine/Objects/TR4/Entity/tr4_crocodile.cpp @@ -240,7 +240,7 @@ namespace TEN::Entities::TR4 break; case CROC_STATE_BITE_ATTACK: - if (item->Animation.FrameNumber == GetAnimData(item).frameBase) + if (item->Animation.FrameNumber == g_Level.Anims[item->Animation.AnimNumber].frameBase) item->Animation.RequiredState = NO_STATE; if (AI.bite && @@ -279,7 +279,7 @@ namespace TEN::Entities::TR4 break; case CROC_STATE_WATER_BITE_ATTACK: - if (item->Animation.FrameNumber == GetAnimData(item).frameBase) + if (item->Animation.FrameNumber == g_Level.Anims[item->Animation.AnimNumber].frameBase) item->Animation.RequiredState = NO_STATE; if (AI.bite && item->TouchBits.Test(CrocodileBiteAttackJoints)) diff --git a/TombEngine/Objects/TR4/Entity/tr4_demigod.cpp b/TombEngine/Objects/TR4/Entity/tr4_demigod.cpp index a9c3254d9..1f3f52ee4 100644 --- a/TombEngine/Objects/TR4/Entity/tr4_demigod.cpp +++ b/TombEngine/Objects/TR4/Entity/tr4_demigod.cpp @@ -217,7 +217,7 @@ namespace TEN::Entities::TR4 if (animIndex == DEMIGOD2_ANIM_SINGLE_PROJECTILE_ATTACK) { - if (item->Animation.FrameNumber == GetAnimData(item).frameBase) + if (item->Animation.FrameNumber == g_Level.Anims[item->Animation.AnimNumber].frameBase) { auto origin = GetJointPosition(item, 16, Vector3i(-544, 96, 0)); auto target = GetJointPosition(item, 16, Vector3i(-900, 96, 0)); @@ -232,7 +232,7 @@ namespace TEN::Entities::TR4 } else if (animIndex == DEMIGOD3_ANIM_SINGLE_PROJECTILE_ATTACK) { - if (item->Animation.FrameNumber == GetAnimData(item).frameBase) + if (item->Animation.FrameNumber == g_Level.Anims[item->Animation.AnimNumber].frameBase) { auto pos1 = GetJointPosition(item, 16, Vector3i(-544, 96, 0)); auto pos2 = GetJointPosition(item, 16, Vector3i(-900, 96, 0)); @@ -247,7 +247,7 @@ namespace TEN::Entities::TR4 } else if (animIndex == DEMIGOD3_ANIM_RADIAL_PROJECTILE_ATTACK) { - int frameNumber = item->Animation.FrameNumber - GetAnimData(item).frameBase; + int frameNumber = item->Animation.FrameNumber - g_Level.Anims[item->Animation.AnimNumber].frameBase; if (frameNumber >= 8 && frameNumber <= 64) { @@ -360,13 +360,13 @@ namespace TEN::Entities::TR4 item->Animation.ActiveState == DEMIGOD_STATE_RUN_FORWARD) { item->Animation.AnimNumber = Objects[item->ObjectNumber].animIndex + DEMIGOD_ANIM_RUN_OVER_DEATH; - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; item->Animation.ActiveState = DEMIGOD_STATE_RUN_OVER_DEATH; } else { item->Animation.AnimNumber = Objects[item->ObjectNumber].animIndex + DEMIGOD_ANIM_DEATH; - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; item->Animation.ActiveState = DEMIGOD_STATE_DEATH; } } @@ -694,7 +694,7 @@ namespace TEN::Entities::TR4 break; case DEMIGOD1_STATE_HAMMER_ATTACK: - if ((item->Animation.FrameNumber - GetAnimData(item).frameBase) == DEMIGOD_ANIM_RUN_TO_IDLE) + if ((item->Animation.FrameNumber - g_Level.Anims[item->Animation.AnimNumber].frameBase) == DEMIGOD_ANIM_RUN_TO_IDLE) { auto pos = GetJointPosition(item, 17, Vector3i(80, -8, -40)); diff --git a/TombEngine/Objects/TR4/Entity/tr4_dog.cpp b/TombEngine/Objects/TR4/Entity/tr4_dog.cpp index e41bc524c..26d155bd2 100644 --- a/TombEngine/Objects/TR4/Entity/tr4_dog.cpp +++ b/TombEngine/Objects/TR4/Entity/tr4_dog.cpp @@ -152,7 +152,7 @@ namespace TEN::Entities::TR4 item->AIBits &= ~MODIFY; } - int frame = item->Animation.FrameNumber - GetAnimData(item).frameBase; + int frame = item->Animation.FrameNumber - g_Level.Anims[item->Animation.AnimNumber].frameBase; switch (item->Animation.ActiveState) { diff --git a/TombEngine/Objects/TR4/Entity/tr4_enemy_jeep.cpp b/TombEngine/Objects/TR4/Entity/tr4_enemy_jeep.cpp index 7fe04601c..20717fbd2 100644 --- a/TombEngine/Objects/TR4/Entity/tr4_enemy_jeep.cpp +++ b/TombEngine/Objects/TR4/Entity/tr4_enemy_jeep.cpp @@ -212,7 +212,7 @@ namespace TEN::Entities::TR4 if (height4 > (item->Floor + CLICK(2)) && item->Animation.ActiveState != 5) { item->Animation.AnimNumber = Objects[item->ObjectNumber].animIndex + 8; - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; item->Animation.ActiveState = 5; item->Animation.TargetState = 1; item->ItemFlags[1] = 0; @@ -253,7 +253,7 @@ namespace TEN::Entities::TR4 if (Lara.Location < item->ItemFlags[3] && item->Animation.ActiveState != 2 && item->Animation.TargetState != 2) { item->Animation.AnimNumber = Objects[item->ObjectNumber].animIndex + 1; - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; item->Animation.TargetState = 2; item->Animation.ActiveState = 2; diff --git a/TombEngine/Objects/TR4/Entity/tr4_guide.cpp b/TombEngine/Objects/TR4/Entity/tr4_guide.cpp index 9e61b9c20..a206ec3d2 100644 --- a/TombEngine/Objects/TR4/Entity/tr4_guide.cpp +++ b/TombEngine/Objects/TR4/Entity/tr4_guide.cpp @@ -133,8 +133,8 @@ namespace TEN::Entities::TR4 if (item->Animation.AnimNumber == (object->animIndex + GUIDE_ANIM_LIGHTING_TORCH)) { - if (item->Animation.FrameNumber > GetAnimData(item).frameBase + 32 && - item->Animation.FrameNumber < GetAnimData(item).frameBase + 42) + if (item->Animation.FrameNumber > g_Level.Anims[item->Animation.AnimNumber].frameBase + 32 && + item->Animation.FrameNumber < g_Level.Anims[item->Animation.AnimNumber].frameBase + 42) { TriggerFireFlame( (random & 0x3F) + pos.x - 32, @@ -480,7 +480,7 @@ namespace TEN::Entities::TR4 case GUIDE_STATE_IGNITE_TORCH: pos1 = GetJointPosition(item, GuideBite2); - frameNumber = item->Animation.FrameNumber - GetAnimData(item).frameBase; + frameNumber = item->Animation.FrameNumber - g_Level.Anims[item->Animation.AnimNumber].frameBase; random = GetRandomControl(); if (frameNumber == 32) @@ -588,8 +588,8 @@ namespace TEN::Entities::TR4 { if (enemy) { - if (item->Animation.FrameNumber > GetAnimData(item).frameBase + 15 && - item->Animation.FrameNumber < GetAnimData(item).frameBase + 26) + if (item->Animation.FrameNumber > g_Level.Anims[item->Animation.AnimNumber].frameBase + 15 && + item->Animation.FrameNumber < g_Level.Anims[item->Animation.AnimNumber].frameBase + 26) { float distance = Vector3i::Distance(item->Pose.Position, enemy->Pose.Position); if (distance <= CLICK(2)) @@ -631,7 +631,7 @@ namespace TEN::Entities::TR4 else { if (item->Animation.AnimNumber != (object->animIndex + GUIDE_ANIM_IDLE_CROUCH) && - item->Animation.FrameNumber == (GetAnimData(item).frameEnd - 20)) + item->Animation.FrameNumber == (g_Level.Anims[item->Animation.AnimNumber].frameEnd - 20)) { TestTriggers(item, true); @@ -647,12 +647,12 @@ namespace TEN::Entities::TR4 break; case GUIDE_STATE_PICK_UP_TORCH: - if (item->Animation.FrameNumber == GetAnimData(item).frameBase) + if (item->Animation.FrameNumber == g_Level.Anims[item->Animation.AnimNumber].frameBase) { someFlag = true; item->Pose = enemy->Pose; } - else if (item->Animation.FrameNumber == (GetAnimData(item).frameBase + 35)) + else if (item->Animation.FrameNumber == (g_Level.Anims[item->Animation.AnimNumber].frameBase + 35)) { item->SetMeshSwapFlags(GuideRightHandSwapJoints, true); @@ -692,11 +692,11 @@ namespace TEN::Entities::TR4 break; case GUIDE_STATE_LIGHT_TORCHES: - if (item->Animation.FrameNumber == GetAnimData(item).frameBase) + if (item->Animation.FrameNumber == g_Level.Anims[item->Animation.AnimNumber].frameBase) item->Pose.Position = enemy->Pose.Position; else { - if (item->Animation.FrameNumber == (GetAnimData(item).frameBase + 42)) + if (item->Animation.FrameNumber == (g_Level.Anims[item->Animation.AnimNumber].frameBase + 42)) { TestTriggers(item, true); @@ -707,7 +707,7 @@ namespace TEN::Entities::TR4 creature->Enemy = nullptr; break; } - else if (item->Animation.FrameNumber < (GetAnimData(item).frameBase + 42)) + else if (item->Animation.FrameNumber < (g_Level.Anims[item->Animation.AnimNumber].frameBase + 42)) { if ((enemy->Pose.Orientation.y - item->Pose.Orientation.y) <= ANGLE(2.0f)) { @@ -722,9 +722,9 @@ namespace TEN::Entities::TR4 break; case GUIDE_STATE_READ_INSCRIPTION: - if (item->Animation.FrameNumber >= GetAnimData(item).frameBase + 20) + if (item->Animation.FrameNumber >= g_Level.Anims[item->Animation.AnimNumber].frameBase + 20) { - if (item->Animation.FrameNumber == (GetAnimData(item).frameBase + 20)) + if (item->Animation.FrameNumber == (g_Level.Anims[item->Animation.AnimNumber].frameBase + 20)) { item->Animation.TargetState = GUIDE_STATE_IDLE; @@ -737,14 +737,14 @@ namespace TEN::Entities::TR4 break; } - if (item->Animation.FrameNumber == (GetAnimData(item).frameBase + 70) && + if (item->Animation.FrameNumber == (g_Level.Anims[item->Animation.AnimNumber].frameBase + 70) && flagScaryInscription) { item->Animation.RequiredState = GUIDE_STATE_RUN_FORWARD; item->SetMeshSwapFlags(GuideHeadSwapJoints); SoundEffect(SFX_TR4_GUIDE_SCARE, &item->Pose); } - if (item->Animation.FrameNumber == (GetAnimData(item).frameBase + 185) && + if (item->Animation.FrameNumber == (g_Level.Anims[item->Animation.AnimNumber].frameBase + 185) && flagScaryInscription) { item->ItemFlags[2] &= ~(1 << 4); // Turn off 4th bit for flagScaryInscription. diff --git a/TombEngine/Objects/TR4/Entity/tr4_horseman.cpp b/TombEngine/Objects/TR4/Entity/tr4_horseman.cpp index 5c0944e5b..f3741bbc7 100644 --- a/TombEngine/Objects/TR4/Entity/tr4_horseman.cpp +++ b/TombEngine/Objects/TR4/Entity/tr4_horseman.cpp @@ -273,7 +273,7 @@ namespace TEN::Entities::TR4 { item->Animation.AnimNumber = Objects[ID_HORSEMAN].animIndex + HORSEMAN_ANIM_DEATH; item->Animation.ActiveState = HORSEMAN_STATE_DEATH; - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; if (item->ItemFlags[0]) { @@ -288,7 +288,7 @@ namespace TEN::Entities::TR4 item->AIBits = 0; item->ItemFlags[1] = 0; item->Animation.AnimNumber = Objects[ID_HORSEMAN].animIndex + HORSEMAN_ANIM_FALL_OFF_HORSE_START; - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; item->Animation.ActiveState = HORSEMAN_STATE_FALL_OFF_HORSE; creature->Enemy = nullptr; @@ -522,10 +522,10 @@ namespace TEN::Entities::TR4 case HORSEMAN_STATE_MOUNTED_REAR: creature->MaxTurn = 0; - if (item->Animation.FrameNumber == GetAnimData(item).frameBase) + if (item->Animation.FrameNumber == g_Level.Anims[item->Animation.AnimNumber].frameBase) { horseItem->Animation.AnimNumber = Objects[ID_HORSE].animIndex + HORSE_ANIM_REAR; - horseItem->Animation.FrameNumber = GetAnimData(horseItem).frameBase; + horseItem->Animation.FrameNumber = g_Level.Anims[horseItem->Animation.AnimNumber].frameBase; horseItem->Animation.ActiveState = HORSE_STATE_REAR; } @@ -608,7 +608,7 @@ namespace TEN::Entities::TR4 creature->Enemy = nullptr; item->Animation.AnimNumber = Objects[ID_HORSEMAN].animIndex + HORSEMAN_ANIM_MOUNT_HORSE; - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; item->Animation.ActiveState = HORSEMAN_STATE_MOUNT_HORSE; creature->MaxTurn = 0; @@ -715,10 +715,10 @@ namespace TEN::Entities::TR4 } if (item->Animation.AnimNumber == Objects[ID_HORSEMAN].animIndex + HORSEMAN_ANIM_MOUNTED_SPRINT && - item->Animation.FrameNumber == GetAnimData(item).frameBase) + item->Animation.FrameNumber == g_Level.Anims[item->Animation.AnimNumber].frameBase) { horseItem->Animation.AnimNumber = Objects[ID_HORSE].animIndex + HORSE_ANIM_SPRINT; - horseItem->Animation.FrameNumber = GetAnimData(horseItem).frameBase; + horseItem->Animation.FrameNumber = g_Level.Anims[horseItem->Animation.AnimNumber].frameBase; } if (laraAI.distance > pow(SECTOR(4), 2) || creature->ReachedGoal) diff --git a/TombEngine/Objects/TR4/Entity/tr4_jean_yves.cpp b/TombEngine/Objects/TR4/Entity/tr4_jean_yves.cpp index bd7e01c14..a5b26fb17 100644 --- a/TombEngine/Objects/TR4/Entity/tr4_jean_yves.cpp +++ b/TombEngine/Objects/TR4/Entity/tr4_jean_yves.cpp @@ -39,7 +39,7 @@ namespace TEN::Entities::TR4 item->Animation.TargetState = JEAN_YVES_STATE_HANDS_BEHIND_HEAD; item->Animation.ActiveState = JEAN_YVES_STATE_HANDS_BEHIND_HEAD; item->Animation.AnimNumber = objectInfo->animIndex; - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; } void JeanYvesControl(short itemNumber) @@ -68,7 +68,7 @@ namespace TEN::Entities::TR4 state++; item->Animation.AnimNumber = animNumber; - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; item->Animation.ActiveState = state; item->Animation.TargetState = state; item->TriggerFlags = Lara.HighestLocation; diff --git a/TombEngine/Objects/TR4/Entity/tr4_knight_templar.cpp b/TombEngine/Objects/TR4/Entity/tr4_knight_templar.cpp index 68688389a..b358a32c5 100644 --- a/TombEngine/Objects/TR4/Entity/tr4_knight_templar.cpp +++ b/TombEngine/Objects/TR4/Entity/tr4_knight_templar.cpp @@ -179,7 +179,7 @@ namespace TEN::Entities::TR4 } frameNumber = item->Animation.FrameNumber; - frameBase = GetAnimData(item).frameBase; + frameBase = g_Level.Anims[item->Animation.AnimNumber].frameBase; if (frameNumber > (frameBase + 42) && frameNumber < (frameBase + 51)) { diff --git a/TombEngine/Objects/TR4/Entity/tr4_mummy.cpp b/TombEngine/Objects/TR4/Entity/tr4_mummy.cpp index 464e47ee0..a2949189e 100644 --- a/TombEngine/Objects/TR4/Entity/tr4_mummy.cpp +++ b/TombEngine/Objects/TR4/Entity/tr4_mummy.cpp @@ -141,7 +141,7 @@ namespace TEN::Entities::TR4 item->Animation.AnimNumber = Objects[item->ObjectNumber].animIndex + MUMMY_ANIM_RECOIL; } - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; item->Pose.Orientation.y += AI.angle; } } @@ -200,7 +200,7 @@ namespace TEN::Entities::TR4 { creature->MaxTurn = 0; - if (item->Animation.FrameNumber == GetAnimData(item).frameEnd) + if (item->Animation.FrameNumber == g_Level.Anims[item->Animation.AnimNumber].frameEnd) item->TriggerFlags = 0; } else @@ -282,8 +282,8 @@ namespace TEN::Entities::TR4 { if (item->TouchBits.Test(MummySwipeAttackJoints)) { - if (item->Animation.FrameNumber > GetAnimData(item).frameBase && - item->Animation.FrameNumber < GetAnimData(item).frameEnd) + if (item->Animation.FrameNumber > g_Level.Anims[item->Animation.AnimNumber].frameBase && + item->Animation.FrameNumber < g_Level.Anims[item->Animation.AnimNumber].frameEnd) { DoDamage(creature->Enemy, MUMMY_SWIPE_ATTACK_DAMAGE); diff --git a/TombEngine/Objects/TR4/Entity/tr4_mutant.cpp b/TombEngine/Objects/TR4/Entity/tr4_mutant.cpp index 6e992041f..f35f66966 100644 --- a/TombEngine/Objects/TR4/Entity/tr4_mutant.cpp +++ b/TombEngine/Objects/TR4/Entity/tr4_mutant.cpp @@ -156,7 +156,7 @@ namespace TEN::Entities::TR4 bool ShootFrame(ItemInfo* item) { - int frameNumber = (item->Animation.FrameNumber - GetAnimData(item).frameBase); + int frameNumber = (item->Animation.FrameNumber - g_Level.Anims[item->Animation.AnimNumber].frameBase); if (frameNumber == 45 || /*frameNumber == 50 || frameNumber == 55 ||*/ @@ -258,7 +258,7 @@ namespace TEN::Entities::TR4 auto* item = &g_Level.Items[itemNumber]; item->Animation.AnimNumber = Objects[item->ObjectNumber].animIndex + MUTANT_ANIM_APPEAR; - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; item->Animation.ActiveState = MUTANT_STATE_APPEAR; item->Animation.TargetState = MUTANT_STATE_APPEAR; } @@ -309,7 +309,7 @@ namespace TEN::Entities::TR4 break; case MUTANT_STATE_PROJECTILE_ATTACK: - frameNumber = item->Animation.FrameNumber - GetAnimData(item).frameBase; + frameNumber = item->Animation.FrameNumber - g_Level.Anims[item->Animation.AnimNumber].frameBase; if (frameNumber >= 94 && frameNumber <= 96) { Pose src; @@ -332,7 +332,7 @@ namespace TEN::Entities::TR4 break; case MUTANT_STATE_LOCUST_ATTACK_1: - frameNumber = (item->Animation.FrameNumber - GetAnimData(item).frameBase); + frameNumber = (item->Animation.FrameNumber - g_Level.Anims[item->Animation.AnimNumber].frameBase); if (frameNumber >= 60 && frameNumber <= 120) SpawnLocust(item); diff --git a/TombEngine/Objects/TR4/Entity/tr4_sas.cpp b/TombEngine/Objects/TR4/Entity/tr4_sas.cpp index a724125e4..25d447de5 100644 --- a/TombEngine/Objects/TR4/Entity/tr4_sas.cpp +++ b/TombEngine/Objects/TR4/Entity/tr4_sas.cpp @@ -127,7 +127,7 @@ namespace TEN::Entities::TR4 item.Animation.TargetState = item.Animation.ActiveState = 4; } - item.Animation.FrameNumber = GetAnimData(item).frameBase; + item.Animation.FrameNumber = g_Level.Anims[item.Animation.AnimNumber].frameBase; } void SasControl(short itemNumber) @@ -474,7 +474,7 @@ namespace TEN::Entities::TR4 angle2 = 0; } - if (item.Animation.FrameNumber == (GetAnimData(item).frameBase + 20)) + if (item.Animation.FrameNumber == (g_Level.Anims[item.Animation.AnimNumber].frameBase + 20)) { if (!creature.Enemy->Animation.Velocity.z) { diff --git a/TombEngine/Objects/TR4/Entity/tr4_setha.cpp b/TombEngine/Objects/TR4/Entity/tr4_setha.cpp index c178942ee..7db795150 100644 --- a/TombEngine/Objects/TR4/Entity/tr4_setha.cpp +++ b/TombEngine/Objects/TR4/Entity/tr4_setha.cpp @@ -300,7 +300,7 @@ namespace TEN::Entities::TR4 if (canJump) { if (item->Animation.AnimNumber == (Objects[item->ObjectNumber].animIndex + SETH_ANIM_POUNCE_ATTACK_START) && - item->Animation.FrameNumber == GetAnimData(item).frameBase) + item->Animation.FrameNumber == g_Level.Anims[item->Animation.AnimNumber].frameBase) { creature.MaxTurn = 0; creature.ReachedGoal = true; @@ -340,7 +340,7 @@ namespace TEN::Entities::TR4 case SETH_STATE_HARD_RECOIL: if (item->Animation.AnimNumber == (Objects[item->Animation.AnimNumber].animIndex + SETH_ANIM_HARD_RECOIL_START) && - item->Animation.FrameNumber == GetAnimData(item).frameEnd) + item->Animation.FrameNumber == g_Level.Anims[item->Animation.AnimNumber].frameEnd) { if (Random::TestProbability(SETH_HARD_RECOIL_RECOVER_CHANCE)) item->Animation.RequiredState = SETH_STATE_HARD_RECOIL_RECOVER; @@ -367,8 +367,8 @@ namespace TEN::Entities::TR4 { if (item->TouchBits.TestAny()) { - if (item->Animation.FrameNumber > (GetAnimData(item).frameBase + SETH_ANIM_POUNCE_ATTACK_START) && - item->Animation.FrameNumber < (GetAnimData(item).frameBase + SETH_ANIM_IDLE_TO_HOVER)) + if (item->Animation.FrameNumber > (g_Level.Anims[item->Animation.AnimNumber].frameBase + SETH_ANIM_POUNCE_ATTACK_START) && + item->Animation.FrameNumber < (g_Level.Anims[item->Animation.AnimNumber].frameBase + SETH_ANIM_IDLE_TO_HOVER)) { DoDamage(creature.Enemy, SETH_KILL_ATTACK_DAMAGE); CreatureEffect2(item, SethBite1, 25, -1, DoBloodSplat); diff --git a/TombEngine/Objects/TR4/Entity/tr4_skeleton.cpp b/TombEngine/Objects/TR4/Entity/tr4_skeleton.cpp index 265858122..c50d6bdef 100644 --- a/TombEngine/Objects/TR4/Entity/tr4_skeleton.cpp +++ b/TombEngine/Objects/TR4/Entity/tr4_skeleton.cpp @@ -284,7 +284,7 @@ namespace TEN::Entities::TR4 item->Pose.Orientation.y += AI.angle; } - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; creature->LOT.IsJumping = true; } else @@ -413,7 +413,7 @@ namespace TEN::Entities::TR4 else if (canJump1Block || canJump2Blocks) { item->Animation.AnimNumber = Objects[ID_SKELETON].animIndex + 40; - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; item->Animation.ActiveState = SKELETON_STATE_JUMP_LEFT; creature->MaxTurn = 0; @@ -560,7 +560,7 @@ namespace TEN::Entities::TR4 if (GetCollision(item).Position.Floor > item->Pose.Position.y + BLOCK(1)) { item->Animation.AnimNumber = Objects[ID_SKELETON].animIndex + 44; - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; item->Animation.ActiveState = 23; item->Animation.IsAirborne = true; creature->MaxTurn = 0; @@ -635,7 +635,7 @@ namespace TEN::Entities::TR4 item->Pose.Orientation.y += AI.angle; } - if (item->Animation.FrameNumber > (GetAnimData(item).frameBase + 15)) + if (item->Animation.FrameNumber > (g_Level.Anims[item->Animation.AnimNumber].frameBase + 15)) { auto* room = &g_Level.Rooms[item->RoomNumber]; @@ -705,7 +705,7 @@ namespace TEN::Entities::TR4 if (GetCollision(item).Position.Floor > (item->Pose.Position.y + CLICK(5))) { item->Animation.AnimNumber = Objects[item->ObjectNumber].animIndex + 44; - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; item->Animation.ActiveState = 23; item->Animation.IsAirborne = true; creature->MaxTurn = 0; @@ -736,7 +736,7 @@ namespace TEN::Entities::TR4 case SKELETON_STATE_RECOIL_BACK: if ((item->Animation.ActiveState == SKELETON_STATE_RECOIL_FRONT || item->Animation.ActiveState == SKELETON_STATE_RECOIL_BACK) && - item->Animation.FrameNumber < GetAnimData(item).frameBase + 20) + item->Animation.FrameNumber < g_Level.Anims[item->Animation.AnimNumber].frameBase + 20) { creature->MaxTurn = 0; break; @@ -758,7 +758,7 @@ namespace TEN::Entities::TR4 else { item->Animation.AnimNumber = Objects[item->ObjectNumber].animIndex + 47; - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; item->Animation.ActiveState = 24; item->Animation.IsAirborne = true; creature->MaxTurn = 0; @@ -775,7 +775,7 @@ namespace TEN::Entities::TR4 break; case SKELETON_STATE_SUBTERRANEAN: - if (item->Animation.FrameNumber - GetAnimData(item).frameBase < 32) + if (item->Animation.FrameNumber - g_Level.Anims[item->Animation.AnimNumber].frameBase < 32) TriggerRiseEffect(item); break; diff --git a/TombEngine/Objects/TR4/Entity/tr4_small_scorpion.cpp b/TombEngine/Objects/TR4/Entity/tr4_small_scorpion.cpp index 2223ac832..ed92f58f5 100644 --- a/TombEngine/Objects/TR4/Entity/tr4_small_scorpion.cpp +++ b/TombEngine/Objects/TR4/Entity/tr4_small_scorpion.cpp @@ -159,8 +159,8 @@ namespace TEN::Entities::TR4 { if (item->TouchBits.Test(SmallScorpionAttackJoints)) { - if (item->Animation.FrameNumber > GetAnimData(item).frameBase + 20 && - item->Animation.FrameNumber < GetAnimData(item).frameBase + 32) + if (item->Animation.FrameNumber > g_Level.Anims[item->Animation.AnimNumber].frameBase + 20 && + item->Animation.FrameNumber < g_Level.Anims[item->Animation.AnimNumber].frameBase + 32) { short rotation; CreatureBiteInfo biteInfo; diff --git a/TombEngine/Objects/TR4/Entity/tr4_sphinx.cpp b/TombEngine/Objects/TR4/Entity/tr4_sphinx.cpp index 23be38791..6db80dba5 100644 --- a/TombEngine/Objects/TR4/Entity/tr4_sphinx.cpp +++ b/TombEngine/Objects/TR4/Entity/tr4_sphinx.cpp @@ -220,7 +220,7 @@ namespace TEN::Entities::TR4 break; case SPHINX_STATE_COLLIDE: - if (item->Animation.FrameNumber == GetAnimData(item).frameBase) + if (item->Animation.FrameNumber == g_Level.Anims[item->Animation.AnimNumber].frameBase) { TestTriggers(item, true); diff --git a/TombEngine/Objects/TR4/Entity/tr4_troops.cpp b/TombEngine/Objects/TR4/Entity/tr4_troops.cpp index 5933f4b3e..ab0513b12 100644 --- a/TombEngine/Objects/TR4/Entity/tr4_troops.cpp +++ b/TombEngine/Objects/TR4/Entity/tr4_troops.cpp @@ -64,7 +64,7 @@ namespace TEN::Entities::TR4 item->Animation.AnimNumber = Objects[item->ObjectNumber].animIndex + 12; } - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; } void TroopsControl(short itemNumber) @@ -104,9 +104,9 @@ namespace TEN::Entities::TR4 item->Animation.AnimNumber = Objects[item->ObjectNumber].animIndex + 23; if (item->Animation.ActiveState == TROOP_STATE_ATTACKED_BY_SCORPION) - item->Animation.FrameNumber = GetAnimData(item).frameBase + 37; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase + 37; else - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; item->Animation.ActiveState = TROOP_STATE_KILLED_BY_SCORPION; item->Animation.TargetState = TROOP_STATE_KILLED_BY_SCORPION; @@ -128,7 +128,7 @@ namespace TEN::Entities::TR4 { item->Animation.AnimNumber = Objects[item->ObjectNumber].animIndex + 19; item->Animation.ActiveState = TROOP_STATE_DEATH; - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; } } } @@ -460,7 +460,7 @@ namespace TEN::Entities::TR4 { item->Animation.AnimNumber = Objects[item->ObjectNumber].animIndex + 28; item->Animation.ActiveState = TROOP_STATE_FLASHED; - item->Animation.FrameNumber = GetAnimData(item).frameBase + (GetRandomControl() & 7); + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase + (GetRandomControl() & 7); creature->MaxTurn = 0; } } diff --git a/TombEngine/Objects/TR4/Entity/tr4_von_croy.cpp b/TombEngine/Objects/TR4/Entity/tr4_von_croy.cpp index 1ce10b5dc..f48b11648 100644 --- a/TombEngine/Objects/TR4/Entity/tr4_von_croy.cpp +++ b/TombEngine/Objects/TR4/Entity/tr4_von_croy.cpp @@ -278,7 +278,7 @@ namespace TEN::Entities::TR4 GetFloor(item->Pose.Position.x, item->Pose.Position.y, item->Pose.Position.z, &item->RoomNumber); - if (item->Animation.FrameNumber == GetAnimData(item).frameBase + VON_CROY_ANIM_RUN_FORWARD) + if (item->Animation.FrameNumber == g_Level.Anims[item->Animation.AnimNumber].frameBase + VON_CROY_ANIM_RUN_FORWARD) CreateZone(item); CreatureAIInfo(item, &AI); @@ -405,7 +405,7 @@ namespace TEN::Entities::TR4 else if (canJump1block || canJump2blocks) { item->Animation.AnimNumber = Objects[item->ObjectNumber].animIndex + VON_CROY_ANIM_IDLE_TO_JUMP; - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; item->Animation.ActiveState = VON_CROY_STATE_JUMP; creature->MaxTurn = 0; creature->LOT.IsJumping = true; @@ -621,7 +621,7 @@ namespace TEN::Entities::TR4 break; case VON_CROY_STATE_TOGGLE_KNIFE: - if (item->Animation.FrameNumber == GetAnimData(item).frameBase) + if (item->Animation.FrameNumber == g_Level.Anims[item->Animation.AnimNumber].frameBase) { item->SetMeshSwapFlags(VonCroyKnifeSwapJoints, item->TestMeshSwapFlags(VonCroyKnifeSwapJoints)); } @@ -629,7 +629,7 @@ namespace TEN::Entities::TR4 break; case VON_CROY_STATE_LOOK_BEFORE_JUMP: - if (item->Animation.FrameNumber == GetAnimData(item).frameBase) + if (item->Animation.FrameNumber == g_Level.Anims[item->Animation.AnimNumber].frameBase) { item->Pose = enemy->Pose; @@ -639,7 +639,7 @@ namespace TEN::Entities::TR4 item->Animation.ActiveState = VON_CROY_STATE_JUMP; item->Animation.TargetState = VON_CROY_STATE_JUMP_2_BLOCKS; item->Animation.AnimNumber = Objects[item->ObjectNumber].animIndex + VON_CROY_ANIM_IDLE_TO_JUMP; - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; creature->LOT.IsJumping = true; } @@ -653,7 +653,7 @@ namespace TEN::Entities::TR4 case VON_CROY_STATE_JUMP_2_BLOCKS: if (item->Animation.AnimNumber == Objects[item->ObjectNumber].animIndex + VON_CROY_ANIM_JUMP_2_BLOCKS || - item->Animation.FrameNumber > (GetAnimData(item).frameBase + 5)) + item->Animation.FrameNumber > (g_Level.Anims[item->Animation.AnimNumber].frameBase + 5)) { creature->LOT.IsJumping = true; //if (canJump3blocks) @@ -668,9 +668,9 @@ namespace TEN::Entities::TR4 break; case VON_CROY_STATE_ENABLE_TRAP: - if (item->Animation.FrameNumber == GetAnimData(item).frameBase) + if (item->Animation.FrameNumber == g_Level.Anims[item->Animation.AnimNumber].frameBase) item->Pose = enemy->Pose; - else if (item->Animation.FrameNumber == GetAnimData(item).frameBase + 120) + else if (item->Animation.FrameNumber == g_Level.Anims[item->Animation.AnimNumber].frameBase + 120) { TestTriggers(creature->AITarget, true); @@ -695,8 +695,8 @@ namespace TEN::Entities::TR4 if (!creature->Flags && enemy != nullptr) { - if (item->Animation.FrameNumber > GetAnimData(item).frameBase + 20 && - item->Animation.FrameNumber > GetAnimData(item).frameBase + 45) + if (item->Animation.FrameNumber > g_Level.Anims[item->Animation.AnimNumber].frameBase + 20 && + item->Animation.FrameNumber > g_Level.Anims[item->Animation.AnimNumber].frameBase + 45) { if (abs(item->Pose.Position.x - enemy->Pose.Position.x) < CLICK(2) && abs(item->Pose.Position.y - enemy->Pose.Position.y) < CLICK(2) && @@ -759,12 +759,12 @@ namespace TEN::Entities::TR4 ClampRotation(item->Pose, AI.angle, ANGLE(6.0f)); if ((enemy == nullptr || enemy->Flags != 0) || - item->Animation.FrameNumber <= GetAnimData(item).frameBase + 21) + item->Animation.FrameNumber <= g_Level.Anims[item->Animation.AnimNumber].frameBase + 21) { if (creature->Flags == 0 && enemy != nullptr) { - if (item->Animation.FrameNumber > GetAnimData(item).frameBase + 15 && - item->Animation.FrameNumber < GetAnimData(item).frameBase + 26) + if (item->Animation.FrameNumber > g_Level.Anims[item->Animation.AnimNumber].frameBase + 15 && + item->Animation.FrameNumber < g_Level.Anims[item->Animation.AnimNumber].frameBase + 26) { if (abs(item->Pose.Position.x - enemy->Pose.Position.x) < CLICK(2) && abs(item->Pose.Position.y - enemy->Pose.Position.y) < CLICK(2) && @@ -805,7 +805,7 @@ namespace TEN::Entities::TR4 if (item->Animation.AnimNumber == Objects[item->ObjectNumber].animIndex + VON_CROY_ANIM_START_POINT) { - if (item->Animation.FrameNumber != GetAnimData(item).frameBase) + if (item->Animation.FrameNumber != g_Level.Anims[item->Animation.AnimNumber].frameBase) break; } else @@ -825,7 +825,7 @@ namespace TEN::Entities::TR4 case VON_CROY_STATE_STANDING_JUMP_GRAB: flags = true; if (item->Animation.AnimNumber != Objects[item->ObjectNumber].animIndex + VON_CROY_ANIM_CLIMB_UP_AFTER_JUMP || - item->Animation.FrameNumber != GetAnimData(item).frameBase) + item->Animation.FrameNumber != g_Level.Anims[item->Animation.AnimNumber].frameBase) { flags = false; } @@ -868,55 +868,55 @@ namespace TEN::Entities::TR4 { case 2: item->Animation.AnimNumber = Objects[item->ObjectNumber].animIndex + VON_CROY_ANIM_CLIMB_2_BLOCKS; - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; item->Animation.ActiveState = VON_CROY_STATE_CLIMB_2_BLOCKS; creature->MaxTurn = 0; break; case 3: item->Animation.AnimNumber = Objects[item->ObjectNumber].animIndex + VON_CROY_ANIM_CLIMB_3_BLOCKS; - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; item->Animation.ActiveState = VON_CROY_STATE_CLIMB_3_BLOCKS; creature->MaxTurn = 0; break; case 4: item->Animation.AnimNumber = Objects[item->ObjectNumber].animIndex + VON_CROY_ANIM_CLIMB_4_BLOCKS; - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; item->Animation.ActiveState = VON_CROY_STATE_CLIMB_4_BLOCKS; creature->MaxTurn = 0; break; case 7: item->Animation.AnimNumber = Objects[item->ObjectNumber].animIndex + VON_CROY_ANIM_JUMP_TO_HANG; - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; item->Animation.ActiveState = VON_CROY_STATE_GRAB_LADDER; creature->MaxTurn = 0; break; case -7: item->Animation.AnimNumber = Objects[item->ObjectNumber].animIndex + VON_CROY_ANIM_CLIMB_DOWN_2_SECTORS; - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; item->Animation.ActiveState = VON_CROY_STATE_STEP_DOWN_HIGH; creature->MaxTurn = 0; break; case -4: item->Animation.AnimNumber = Objects[item->ObjectNumber].animIndex + VON_CROY_ANIM_CLIMB_DOWN_1_SECTOR; - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; item->Animation.ActiveState = VON_CROY_STATE_JUMP_DOWN_4_CLICKS; creature->MaxTurn = 0; break; case -3: item->Animation.AnimNumber = Objects[item->ObjectNumber].animIndex + VON_CROY_ANIM_CLIMB_OFF_3_CLICKS; - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; item->Animation.ActiveState = VON_CROY_STATE_JUMP_DOWN_3_CLICKS; creature->MaxTurn = 0; break; case -2: item->Animation.AnimNumber = Objects[item->ObjectNumber].animIndex + VON_CROY_ANIM_CLIMB_OFF_2_CLICKS; - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; item->Animation.ActiveState = VON_CROY_STATE_JUMP_DOWN_2_CLICKS; creature->MaxTurn = 0; break; diff --git a/TombEngine/Objects/TR4/Object/WraithTrap.cpp b/TombEngine/Objects/TR4/Object/WraithTrap.cpp index 0d58d61fa..94df86252 100644 --- a/TombEngine/Objects/TR4/Object/WraithTrap.cpp +++ b/TombEngine/Objects/TR4/Object/WraithTrap.cpp @@ -22,7 +22,8 @@ namespace TEN::Entities::TR4 { auto& item = g_Level.Items[itemNumber]; - SetAnimation(item, 0); + item.Animation.AnimNumber = Objects[item.ObjectNumber].animIndex; + item.Animation.FrameNumber = g_Level.Anims[item.Animation.AnimNumber].frameBase; item.ItemFlags[6] = 0; } diff --git a/TombEngine/Objects/TR4/Object/tr4_clockwork_beetle.cpp b/TombEngine/Objects/TR4/Object/tr4_clockwork_beetle.cpp index d4419b2f8..ea2d9d4b1 100644 --- a/TombEngine/Objects/TR4/Object/tr4_clockwork_beetle.cpp +++ b/TombEngine/Objects/TR4/Object/tr4_clockwork_beetle.cpp @@ -16,7 +16,7 @@ void ClockworkBeetleControl(short itemNumber) if (LaraItem->Animation.AnimNumber == LA_MECHANICAL_BEETLE_USE) { - short fb = GetAnimData(ID_LARA, LA_MECHANICAL_BEETLE_USE).frameBase; + short fb = g_Level.Anims[LA_MECHANICAL_BEETLE_USE].frameBase; if (LaraItem->Animation.FrameNumber < fb + 14) { diff --git a/TombEngine/Objects/TR4/Object/tr4_element_puzzle.cpp b/TombEngine/Objects/TR4/Object/tr4_element_puzzle.cpp index 5c0750b24..4e9935de9 100644 --- a/TombEngine/Objects/TR4/Object/tr4_element_puzzle.cpp +++ b/TombEngine/Objects/TR4/Object/tr4_element_puzzle.cpp @@ -198,10 +198,10 @@ namespace TEN::Entities::TR4 if (laraItem->Animation.AnimNumber == LA_WATERSKIN_POUR_LOW && LaraItem->ItemFlags[2] == flags) { laraItem->Animation.AnimNumber = LA_WATERSKIN_POUR_HIGH; - laraItem->Animation.FrameNumber = GetAnimData(laraItem).frameBase; + laraItem->Animation.FrameNumber = g_Level.Anims[laraItem->Animation.AnimNumber].frameBase; } - if (laraItem->Animation.FrameNumber == GetAnimData(*laraItem, LA_WATERSKIN_POUR_HIGH).frameBase + 74 && + if (laraItem->Animation.FrameNumber == g_Level.Anims[LA_WATERSKIN_POUR_HIGH].frameBase + 74 && LaraItem->ItemFlags[2] == flags) { if (!puzzleItem->TriggerFlags) @@ -245,7 +245,7 @@ namespace TEN::Entities::TR4 laraItem->Animation.IsAirborne) { if (laraItem->Animation.AnimNumber != LA_TORCH_LIGHT_3 || - GetAnimData(*laraItem, LA_TORCH_LIGHT_3).frameBase + 16 || + g_Level.Anims[LA_TORCH_LIGHT_3].frameBase + 16 || puzzleItem->ItemFlags[0] != 2) { ElementPuzzleDoCollision(itemNumber, laraItem, coll); @@ -274,7 +274,7 @@ namespace TEN::Entities::TR4 if (TestLaraPosition(ElementPuzzleBounds, puzzleItem, laraItem)) { laraItem->Animation.AnimNumber = (abs(puzzleItem->Pose.Position.y- laraItem->Pose.Position.y) >> 8) + LA_TORCH_LIGHT_3; - laraItem->Animation.FrameNumber = GetAnimData(puzzleItem).frameBase; + laraItem->Animation.FrameNumber = g_Level.Anims[puzzleItem->Animation.AnimNumber].frameBase; laraItem->Animation.ActiveState = LS_MISC_CONTROL; laraInfo->Flare.ControlLeft = false; laraInfo->LeftArm.Locked = true; diff --git a/TombEngine/Objects/TR4/Object/tr4_mapper.cpp b/TombEngine/Objects/TR4/Object/tr4_mapper.cpp index 9cf32edf6..babbe54e6 100644 --- a/TombEngine/Objects/TR4/Object/tr4_mapper.cpp +++ b/TombEngine/Objects/TR4/Object/tr4_mapper.cpp @@ -25,7 +25,7 @@ namespace TEN::Entities::TR4 if (!TriggerActive(item)) return; - if (item->Animation.FrameNumber - GetAnimData(item).frameBase >= 200) + if (item->Animation.FrameNumber - g_Level.Anims[item->Animation.AnimNumber].frameBase >= 200) { SoundEffect(SFX_TR4_MAPPER_LASER, &item->Pose); diff --git a/TombEngine/Objects/TR4/Object/tr4_obelisk.cpp b/TombEngine/Objects/TR4/Object/tr4_obelisk.cpp index 1cd775576..f0bd88108 100644 --- a/TombEngine/Objects/TR4/Object/tr4_obelisk.cpp +++ b/TombEngine/Objects/TR4/Object/tr4_obelisk.cpp @@ -21,7 +21,7 @@ void InitializeObelisk(short itemNumber) auto* item = &g_Level.Items[itemNumber]; item->Animation.AnimNumber = Objects[item->ObjectNumber].animIndex + 3; - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; AddActiveItem(itemNumber); item->Status = ITEM_ACTIVE; @@ -162,7 +162,7 @@ void ObeliskControl(short itemNumber) if (TrInput & IN_ACTION) { item->Animation.AnimNumber = obj->animIndex + 1; - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; } else flag = true; @@ -175,20 +175,20 @@ void ObeliskControl(short itemNumber) if (!(TrInput & IN_ACTION)) { item->Animation.AnimNumber = obj->animIndex + 3; - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; flag = false; } else { item->Animation.AnimNumber = obj->animIndex + 5; - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; } } if (flag) { item->Animation.AnimNumber = obj->animIndex + 3; - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; } if (item->TriggerFlags == 2) diff --git a/TombEngine/Objects/TR4/Object/tr4_sarcophagus.cpp b/TombEngine/Objects/TR4/Object/tr4_sarcophagus.cpp index 4684c331c..50edb99b8 100644 --- a/TombEngine/Objects/TR4/Object/tr4_sarcophagus.cpp +++ b/TombEngine/Objects/TR4/Object/tr4_sarcophagus.cpp @@ -44,7 +44,7 @@ void SarcophagusCollision(short itemNumber, ItemInfo* laraItem, CollisionInfo* c { laraItem->Animation.AnimNumber = LA_PICKUP_SARCOPHAGUS; laraItem->Animation.ActiveState = LS_MISC_CONTROL; - laraItem->Animation.FrameNumber = GetAnimData(laraItem).frameBase; + laraItem->Animation.FrameNumber = g_Level.Anims[laraItem->Animation.AnimNumber].frameBase; sarcItem->Flags |= IFLAG_ACTIVATION_MASK; AddActiveItem(itemNumber); @@ -67,7 +67,7 @@ void SarcophagusCollision(short itemNumber, ItemInfo* laraItem, CollisionInfo* c } } else if (laraItem->Animation.AnimNumber != LA_PICKUP_SARCOPHAGUS || - laraItem->Animation.FrameNumber != GetAnimData(*laraItem, LA_PICKUP_SARCOPHAGUS).frameBase + 113) + laraItem->Animation.FrameNumber != g_Level.Anims[LA_PICKUP_SARCOPHAGUS].frameBase + 113) { ObjectCollision(itemNumber, laraItem, coll); } diff --git a/TombEngine/Objects/TR4/Object/tr4_scales.cpp b/TombEngine/Objects/TR4/Object/tr4_scales.cpp index e14cbcc0c..45e024fac 100644 --- a/TombEngine/Objects/TR4/Object/tr4_scales.cpp +++ b/TombEngine/Objects/TR4/Object/tr4_scales.cpp @@ -33,7 +33,7 @@ void ScalesControl(short itemNumber) { auto* item = &g_Level.Items[itemNumber]; - if (item->Animation.FrameNumber != GetAnimData(item).frameEnd) + if (item->Animation.FrameNumber != g_Level.Anims[item->Animation.AnimNumber].frameEnd) { AnimateItem(item); return; @@ -131,15 +131,15 @@ void ScalesCollision(short itemNumber, ItemInfo* laraItem, CollisionInfo* coll) if (TestLaraPosition(ScalesBounds, item, laraItem)) { laraItem->Animation.AnimNumber = LA_WATERSKIN_POUR_HIGH; - laraItem->Animation.FrameNumber = GetAnimData(item).frameBase; + laraItem->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; item->Pose.Orientation.y = rotY; } - else if (laraItem->Animation.FrameNumber == GetAnimData(*laraItem, LA_WATERSKIN_POUR_HIGH).frameBase + 51) + else if (laraItem->Animation.FrameNumber == g_Level.Anims[LA_WATERSKIN_POUR_HIGH].frameBase + 51) { SoundEffect(SFX_TR4_POUR_WATER, &laraItem->Pose); item->Pose.Orientation.y = rotY; } - else if (laraItem->Animation.FrameNumber == GetAnimData(*laraItem, LA_WATERSKIN_POUR_HIGH).frameBase + 74) + else if (laraItem->Animation.FrameNumber == g_Level.Anims[LA_WATERSKIN_POUR_HIGH].frameBase + 74) { AddActiveItem(itemNumber); item->Status = ITEM_ACTIVE; @@ -162,10 +162,10 @@ void ScalesCollision(short itemNumber, ItemInfo* laraItem, CollisionInfo* coll) } } - if ((laraItem->Animation.FrameNumber >= GetAnimData(*laraItem, LA_WATERSKIN_POUR_LOW).frameBase + 44 && - laraItem->Animation.FrameNumber <= GetAnimData(*laraItem, LA_WATERSKIN_POUR_LOW).frameBase + 72) || - (laraItem->Animation.FrameNumber >= GetAnimData(*laraItem, LA_WATERSKIN_POUR_HIGH).frameBase + 51 && - laraItem->Animation.FrameNumber <= GetAnimData(*laraItem, LA_WATERSKIN_POUR_HIGH).frameBase + 74)) + if (laraItem->Animation.FrameNumber >= g_Level.Anims[LA_WATERSKIN_POUR_LOW].frameBase + 44 && + laraItem->Animation.FrameNumber <= g_Level.Anims[LA_WATERSKIN_POUR_LOW].frameBase + 72 || + laraItem->Animation.FrameNumber >= g_Level.Anims[LA_WATERSKIN_POUR_HIGH].frameBase + 51 && + laraItem->Animation.FrameNumber <= g_Level.Anims[LA_WATERSKIN_POUR_HIGH].frameBase + 74) { auto pos = GetJointPosition(laraItem, LM_LHAND).ToVector3(); auto velocity = Vector3(0.0f, Random::GenerateFloat(32.0f, 64.0f), 0.0f); diff --git a/TombEngine/Objects/TR4/Object/tr4_senet.cpp b/TombEngine/Objects/TR4/Object/tr4_senet.cpp index ea7011ff9..96bbd1a0d 100644 --- a/TombEngine/Objects/TR4/Object/tr4_senet.cpp +++ b/TombEngine/Objects/TR4/Object/tr4_senet.cpp @@ -443,7 +443,7 @@ void GameSticksCollision(short itemNumber, ItemInfo* laraItem, CollisionInfo* co if (MoveLaraPosition(GameStixPosition, item, laraItem)) { laraItem->Animation.AnimNumber = LA_SENET_ROLL; - laraItem->Animation.FrameNumber = GetAnimData(*laraItem, LA_SENET_ROLL).frameBase; + laraItem->Animation.FrameNumber = g_Level.Anims[LA_SENET_ROLL].frameBase; laraItem->Animation.ActiveState = LS_MISC_CONTROL; Lara.Control.IsMoving = false; Lara.ExtraTorsoRot = { 0, 0, 0 }; diff --git a/TombEngine/Objects/TR4/Trap/tr4_birdblade.cpp b/TombEngine/Objects/TR4/Trap/tr4_birdblade.cpp index cf9626f90..c09f226f1 100644 --- a/TombEngine/Objects/TR4/Trap/tr4_birdblade.cpp +++ b/TombEngine/Objects/TR4/Trap/tr4_birdblade.cpp @@ -15,12 +15,12 @@ namespace TEN::Entities::TR4 if (!TriggerActive(item)) { - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; *((int*)&item->ItemFlags[0]) = 0; } else { - int frameNumber = item->Animation.FrameNumber - GetAnimData(item).frameBase; + int frameNumber = item->Animation.FrameNumber - g_Level.Anims[item->Animation.AnimNumber].frameBase; if (frameNumber <= 14 || frameNumber >= 31) *((int*)&item->ItemFlags[0]) = 0; diff --git a/TombEngine/Objects/TR4/Trap/tr4_catwalkblade.cpp b/TombEngine/Objects/TR4/Trap/tr4_catwalkblade.cpp index 887ccb796..97ae3b85c 100644 --- a/TombEngine/Objects/TR4/Trap/tr4_catwalkblade.cpp +++ b/TombEngine/Objects/TR4/Trap/tr4_catwalkblade.cpp @@ -12,12 +12,12 @@ namespace TEN::Entities::TR4 auto* item = &g_Level.Items[itemNumber]; if (!TriggerActive(item)) - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; else { - int frameNumber = item->Animation.FrameNumber - GetAnimData(item).frameBase; + int frameNumber = item->Animation.FrameNumber - g_Level.Anims[item->Animation.AnimNumber].frameBase; - if (item->Animation.FrameNumber == GetAnimData(item).frameEnd || frameNumber < 38) + if (item->Animation.FrameNumber == g_Level.Anims[item->Animation.AnimNumber].frameEnd || frameNumber < 38) item->ItemFlags[3] = 0; else item->ItemFlags[3] = 100; diff --git a/TombEngine/Objects/TR4/Trap/tr4_cog.cpp b/TombEngine/Objects/TR4/Trap/tr4_cog.cpp index 66b6101a7..ac0904c07 100644 --- a/TombEngine/Objects/TR4/Trap/tr4_cog.cpp +++ b/TombEngine/Objects/TR4/Trap/tr4_cog.cpp @@ -28,7 +28,7 @@ namespace TEN::Entities::TR4 //Shouldnt this be TR4_LIBRARY_COG_LOOP? Changed. Rollback if incorrect. Stranger1992 06/06/22 - if (item->Animation.FrameNumber == GetAnimData(item).frameEnd) + if (item->Animation.FrameNumber == g_Level.Anims[item->Animation.AnimNumber].frameEnd) item->Flags &= 0xC1; } } diff --git a/TombEngine/Objects/TR4/Trap/tr4_fourblades.cpp b/TombEngine/Objects/TR4/Trap/tr4_fourblades.cpp index bae0f4d45..28d8a671e 100644 --- a/TombEngine/Objects/TR4/Trap/tr4_fourblades.cpp +++ b/TombEngine/Objects/TR4/Trap/tr4_fourblades.cpp @@ -13,12 +13,12 @@ namespace TEN::Entities::TR4 if (!TriggerActive(item)) { - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; *((int*)&item->ItemFlags[0]) = 0; } else { - int frameNumber = item->Animation.FrameNumber - GetAnimData(item).frameBase; + int frameNumber = item->Animation.FrameNumber - g_Level.Anims[item->Animation.AnimNumber].frameBase; if (frameNumber <= 5 || frameNumber >= 58 || frameNumber >= 8 && frameNumber <= 54) diff --git a/TombEngine/Objects/TR4/Trap/tr4_hammer.cpp b/TombEngine/Objects/TR4/Trap/tr4_hammer.cpp index 60335e481..06a1e3b54 100644 --- a/TombEngine/Objects/TR4/Trap/tr4_hammer.cpp +++ b/TombEngine/Objects/TR4/Trap/tr4_hammer.cpp @@ -44,7 +44,7 @@ namespace TEN::Entities::TR4 void HammerControl(short itemNumber) { auto* item = &g_Level.Items[itemNumber]; - int frameNumber = item->Animation.FrameNumber - GetAnimData(item).frameBase; + int frameNumber = item->Animation.FrameNumber - g_Level.Anims[item->Animation.AnimNumber].frameBase; item->ItemFlags[3] = HAMMER_HIT_DAMAGE; if (!TriggerActive(item)) @@ -79,7 +79,7 @@ namespace TEN::Entities::TR4 else { item->Animation.AnimNumber = Objects[item->ObjectNumber].animIndex + HAMMER_ANIM_ACTIVATED; - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; item->Animation.ActiveState = HAMMER_STATE_ACTIVE; item->Animation.TargetState = HAMMER_STATE_ACTIVE; item->ItemFlags[2] = HAMMER_OCB4_INTERVAL; diff --git a/TombEngine/Objects/TR4/Trap/tr4_mine.cpp b/TombEngine/Objects/TR4/Trap/tr4_mine.cpp index e68d4ba8c..423a9821e 100644 --- a/TombEngine/Objects/TR4/Trap/tr4_mine.cpp +++ b/TombEngine/Objects/TR4/Trap/tr4_mine.cpp @@ -97,7 +97,7 @@ namespace TEN::Entities::TR4 if (mineItem->TriggerFlags && !mineItem->ItemFlags[3]) { if (laraItem->Animation.AnimNumber != LA_DETONATOR_USE || - laraItem->Animation.FrameNumber < GetAnimData(laraItem).frameBase + 57) + laraItem->Animation.FrameNumber < g_Level.Anims[laraItem->Animation.AnimNumber].frameBase + 57) { if (TestBoundsCollide(mineItem, laraItem, 512)) { @@ -111,7 +111,7 @@ namespace TEN::Entities::TR4 KillItem(itemNumber); laraItem->Animation.AnimNumber = LA_MINE_DEATH; - laraItem->Animation.FrameNumber = GetAnimData(*mineItem).frameBase; + laraItem->Animation.FrameNumber = g_Level.Anims[mineItem->Animation.AnimNumber].frameBase; laraItem->Animation.ActiveState = LS_DEATH; laraItem->Animation.Velocity.z = 0; diff --git a/TombEngine/Objects/TR4/Trap/tr4_moving_blade.cpp b/TombEngine/Objects/TR4/Trap/tr4_moving_blade.cpp index e54965255..495056ee7 100644 --- a/TombEngine/Objects/TR4/Trap/tr4_moving_blade.cpp +++ b/TombEngine/Objects/TR4/Trap/tr4_moving_blade.cpp @@ -21,6 +21,6 @@ namespace TEN::Entities::TR4 AnimateItem(item); } else - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; } } diff --git a/TombEngine/Objects/TR4/Trap/tr4_plinthblade.cpp b/TombEngine/Objects/TR4/Trap/tr4_plinthblade.cpp index e9727ca2b..98030d51e 100644 --- a/TombEngine/Objects/TR4/Trap/tr4_plinthblade.cpp +++ b/TombEngine/Objects/TR4/Trap/tr4_plinthblade.cpp @@ -12,12 +12,12 @@ namespace TEN::Entities::TR4 auto* item = &g_Level.Items[itemNumber]; if (!TriggerActive(item)) - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; else { - int frameNumber = item->Animation.FrameNumber - GetAnimData(item).frameBase; + int frameNumber = item->Animation.FrameNumber - g_Level.Anims[item->Animation.AnimNumber].frameBase; - if (item->Animation.FrameNumber == GetAnimData(item).frameEnd) + if (item->Animation.FrameNumber == g_Level.Anims[item->Animation.AnimNumber].frameEnd) item->ItemFlags[3] = 0; else item->ItemFlags[3] = 200; diff --git a/TombEngine/Objects/TR4/Trap/tr4_sethblade.cpp b/TombEngine/Objects/TR4/Trap/tr4_sethblade.cpp index b690d616d..fc0f049ea 100644 --- a/TombEngine/Objects/TR4/Trap/tr4_sethblade.cpp +++ b/TombEngine/Objects/TR4/Trap/tr4_sethblade.cpp @@ -61,7 +61,7 @@ namespace TEN::Entities::TR4 } else if (item.Animation.ActiveState == SETHBLADE_STATE_ACTIVE) { - int frame = item.Animation.FrameNumber - GetAnimData(item).frameBase; + int frame = item.Animation.FrameNumber - g_Level.Anims[item.Animation.AnimNumber].frameBase; if (frame >= 0 && frame <= 6) { diff --git a/TombEngine/Objects/TR4/Trap/tr4_spikeball.cpp b/TombEngine/Objects/TR4/Trap/tr4_spikeball.cpp index 79d353557..266cf3447 100644 --- a/TombEngine/Objects/TR4/Trap/tr4_spikeball.cpp +++ b/TombEngine/Objects/TR4/Trap/tr4_spikeball.cpp @@ -13,7 +13,7 @@ namespace TEN::Entities::TR4 if (TriggerActive(item)) { - int frameNumber = item->Animation.FrameNumber - GetAnimData(item).frameBase; + int frameNumber = item->Animation.FrameNumber - g_Level.Anims[item->Animation.AnimNumber].frameBase; if ((frameNumber <= 14 || frameNumber >= 24) && (frameNumber < 138 || frameNumber > 140)) @@ -36,7 +36,7 @@ namespace TEN::Entities::TR4 } else { - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; *((int*)&item->ItemFlags[0]) = 0; } } diff --git a/TombEngine/Objects/TR4/Trap/tr4_stargate.cpp b/TombEngine/Objects/TR4/Trap/tr4_stargate.cpp index d7a43f79f..2f3e47985 100644 --- a/TombEngine/Objects/TR4/Trap/tr4_stargate.cpp +++ b/TombEngine/Objects/TR4/Trap/tr4_stargate.cpp @@ -65,8 +65,8 @@ namespace TEN::Entities::Traps if (TestCollision(item, laraItem) && TriggerActive(item) && - item->Animation.FrameNumber > GetAnimData(item).frameBase + 20 && // Hardcoded frame range. - item->Animation.FrameNumber < GetAnimData(item).frameBase + 60) + item->Animation.FrameNumber > g_Level.Anims[item->Animation.AnimNumber].frameBase + 20 && // Hardcoded frame range. + item->Animation.FrameNumber < g_Level.Anims[item->Animation.AnimNumber].frameBase + 60) { // Blades deal damage cumulatively. for (int i = 0; i < StargateHarmJoints.size(); i++) diff --git a/TombEngine/Objects/TR4/Vehicles/motorbike.cpp b/TombEngine/Objects/TR4/Vehicles/motorbike.cpp index dc5e30b3c..08838a596 100644 --- a/TombEngine/Objects/TR4/Vehicles/motorbike.cpp +++ b/TombEngine/Objects/TR4/Vehicles/motorbike.cpp @@ -1096,7 +1096,7 @@ namespace TEN::Entities::Vehicles if (laraItem->Animation.ActiveState == MOTORBIKE_STATE_MOVING_BACK) { int currentFrame = laraItem->Animation.FrameNumber; - int frameBase = GetAnimData(laraItem).frameBase; + int frameBase = g_Level.Anims[laraItem->Animation.AnimNumber].frameBase; if (currentFrame >= frameBase + 24 && currentFrame <= frameBase + 29) diff --git a/TombEngine/Objects/TR5/Entity/HeavyGuard.cpp b/TombEngine/Objects/TR5/Entity/HeavyGuard.cpp index 09fc728fd..78940b045 100644 --- a/TombEngine/Objects/TR5/Entity/HeavyGuard.cpp +++ b/TombEngine/Objects/TR5/Entity/HeavyGuard.cpp @@ -246,7 +246,7 @@ namespace TEN::Entities::Creatures::TR5 case HEAVY_GUARD_STATE_FALL_START: { int frame = item.Animation.FrameNumber; - int frameStart = GetAnimData(item).frameBase; + int frameStart = g_Level.Anims[item.Animation.AnimNumber].frameBase; if (frame == GetFrameIndex(&item, 48) || frame == GetFrameIndex(&item, 15)) { @@ -406,7 +406,7 @@ namespace TEN::Entities::Creatures::TR5 case HEAVY_GUARD_STATE_WALK_RAYGUN_ATTACK_LEFT: headOrient.y = laraAI.angle; - if (item.Animation.FrameNumber == GetAnimData(item).frameBase) + if (item.Animation.FrameNumber == g_Level.Anims[item.Animation.AnimNumber].frameBase) { if (item.Animation.ActiveState == HEAVY_GUARD_STATE_WALK_RAYGUN_ATTACK_LEFT) FireHeavyGuardRaygun(item, false, false); diff --git a/TombEngine/Objects/TR5/Entity/tr5_chef.cpp b/TombEngine/Objects/TR5/Entity/tr5_chef.cpp index c72929358..0bb936ed0 100644 --- a/TombEngine/Objects/TR5/Entity/tr5_chef.cpp +++ b/TombEngine/Objects/TR5/Entity/tr5_chef.cpp @@ -136,7 +136,7 @@ namespace TEN::Entities::Creatures::TR5 item->Pose.Orientation.y -= ANGLE(2.0f); else item->Pose.Orientation.y += ANGLE(2.0f); - if (item->Animation.FrameNumber == GetAnimData(item).frameEnd) + if (item->Animation.FrameNumber == g_Level.Anims[item->Animation.AnimNumber].frameEnd) item->Pose.Orientation.y += -ANGLE(180.0f); break; @@ -158,7 +158,7 @@ namespace TEN::Entities::Creatures::TR5 { if (item->TouchBits & 0x2000) { - if (item->Animation.FrameNumber > GetAnimData(item).frameBase + 10) + if (item->Animation.FrameNumber > g_Level.Anims[item->Animation.AnimNumber].frameBase + 10) { DoDamage(creature->Enemy, 80); CreatureEffect2(item, ChefBite, 20, item->Pose.Orientation.y, DoBloodSplat); diff --git a/TombEngine/Objects/TR5/Entity/tr5_cyborg.cpp b/TombEngine/Objects/TR5/Entity/tr5_cyborg.cpp index 179a63de3..f17aca516 100644 --- a/TombEngine/Objects/TR5/Entity/tr5_cyborg.cpp +++ b/TombEngine/Objects/TR5/Entity/tr5_cyborg.cpp @@ -568,9 +568,9 @@ namespace TEN::Entities::Creatures::TR5 item.Pose.Orientation.y += AI.angle; } - if (item.Animation.FrameNumber > GetAnimData(item).frameBase + 6 && - item.Animation.FrameNumber < GetAnimData(item).frameBase + 16 && - ((byte)item.Animation.FrameNumber - (byte)GetAnimData(item).frameBase) & 1) + if (item.Animation.FrameNumber > g_Level.Anims[item.Animation.AnimNumber].frameBase + 6 && + item.Animation.FrameNumber < g_Level.Anims[item.Animation.AnimNumber].frameBase + 16 && + ((byte)item.Animation.FrameNumber - (byte)g_Level.Anims[item.Animation.AnimNumber].frameBase) & 1) { ShotLara(&item, &AI, CyborgGunBite, joint0, CYBORG_GUN_ATTACK_DAMAGE); creature.MuzzleFlash[0].Bite = CyborgGunBite; diff --git a/TombEngine/Objects/TR5/Entity/tr5_doberman.cpp b/TombEngine/Objects/TR5/Entity/tr5_doberman.cpp index 7b225dfcd..5cd2c025d 100644 --- a/TombEngine/Objects/TR5/Entity/tr5_doberman.cpp +++ b/TombEngine/Objects/TR5/Entity/tr5_doberman.cpp @@ -74,7 +74,7 @@ namespace TEN::Entities::Creatures::TR5 item->Animation.ActiveState = DOBERMAN_STATE_STAND_IDLE; } - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; } void DobermanControl(short itemNumber) @@ -263,7 +263,7 @@ namespace TEN::Entities::Creatures::TR5 else if (item->Animation.ActiveState != DOBERMAN_STATE_DEATH) { item->Animation.AnimNumber = Objects[ID_DOBERMAN].animIndex + DOBERMAN_ANIM_DEATH; - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; item->Animation.ActiveState = DOBERMAN_STATE_DEATH; } diff --git a/TombEngine/Objects/TR5/Entity/tr5_dog.cpp b/TombEngine/Objects/TR5/Entity/tr5_dog.cpp index 584eafff5..e0a7168dc 100644 --- a/TombEngine/Objects/TR5/Entity/tr5_dog.cpp +++ b/TombEngine/Objects/TR5/Entity/tr5_dog.cpp @@ -30,7 +30,7 @@ namespace TEN::Entities::Creatures::TR5 // TODO: item->flags2 ^= (item->flags2 ^ ((item->flags2 & 0xFE) + 2)) & 6; } - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; } void Tr5DogControl(short itemNumber) @@ -54,7 +54,7 @@ namespace TEN::Entities::Creatures::TR5 else if (item->Animation.ActiveState != 11) { item->Animation.AnimNumber = object->animIndex + DogAnims[GetRandomControl() & 3]; - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; item->Animation.ActiveState = 11; } } @@ -101,7 +101,7 @@ namespace TEN::Entities::Creatures::TR5 } short random = GetRandomControl(); - int frame = item->Animation.FrameNumber - GetAnimData(item).frameBase; + int frame = item->Animation.FrameNumber - g_Level.Anims[item->Animation.AnimNumber].frameBase; switch (item->Animation.ActiveState) { diff --git a/TombEngine/Objects/TR5/Entity/tr5_ghost.cpp b/TombEngine/Objects/TR5/Entity/tr5_ghost.cpp index d6534ea91..30d2b8d21 100644 --- a/TombEngine/Objects/TR5/Entity/tr5_ghost.cpp +++ b/TombEngine/Objects/TR5/Entity/tr5_ghost.cpp @@ -81,7 +81,7 @@ namespace TEN::Entities::Creatures::TR5 item->Animation.ActiveState <= 3 && !creature->Flags && item->TouchBits & 0x9470 && - item->Animation.FrameNumber > GetAnimData(item).frameBase + 18) + item->Animation.FrameNumber > g_Level.Anims[item->Animation.AnimNumber].frameBase + 18) { DoDamage(creature->Enemy, 400); CreatureEffect2(item, InvisibleGhostBite, 10, item->Pose.Orientation.y, DoBloodSplat); diff --git a/TombEngine/Objects/TR5/Entity/tr5_gladiator.cpp b/TombEngine/Objects/TR5/Entity/tr5_gladiator.cpp index 3ee994104..0eaffcd09 100644 --- a/TombEngine/Objects/TR5/Entity/tr5_gladiator.cpp +++ b/TombEngine/Objects/TR5/Entity/tr5_gladiator.cpp @@ -330,7 +330,7 @@ namespace TEN::Entities::Creatures::TR5 else item->Pose.Orientation.y += AI.angle; - if (item->Animation.FrameNumber > GetAnimData(item).frameBase + 10) + if (item->Animation.FrameNumber > g_Level.Anims[item->Animation.AnimNumber].frameBase + 10) { auto* room = &g_Level.Rooms[item->RoomNumber]; diff --git a/TombEngine/Objects/TR5/Entity/tr5_guard.cpp b/TombEngine/Objects/TR5/Entity/tr5_guard.cpp index a837c27b4..e79ce245a 100644 --- a/TombEngine/Objects/TR5/Entity/tr5_guard.cpp +++ b/TombEngine/Objects/TR5/Entity/tr5_guard.cpp @@ -242,7 +242,7 @@ namespace TEN::Entities::Creatures::TR5 roomItemNumber = item2->NextItem; if (roomItemNumber == NO_ITEM) { - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; item->Animation.ActiveState = item->Animation.TargetState; break; } @@ -366,7 +366,7 @@ namespace TEN::Entities::Creatures::TR5 item->Pose.Orientation.y += laraAI.angle; } - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; } } else @@ -536,7 +536,7 @@ namespace TEN::Entities::Creatures::TR5 else item->Pose.Orientation.y += ANGLE(2.0f); - if (item->Animation.FrameNumber == GetAnimData(item).frameEnd) + if (item->Animation.FrameNumber == g_Level.Anims[item->Animation.AnimNumber].frameEnd) item->Pose.Orientation.y += -ANGLE(180.0f); break; @@ -564,8 +564,8 @@ namespace TEN::Entities::Creatures::TR5 { if (creature->Flags) { - if (item->Animation.FrameNumber < GetAnimData(item).frameBase + 10 && - (item->Animation.FrameNumber - GetAnimData(item).frameBase) & 1) + if (item->Animation.FrameNumber < g_Level.Anims[item->Animation.AnimNumber].frameBase + 10 && + (item->Animation.FrameNumber - g_Level.Anims[item->Animation.AnimNumber].frameBase) & 1) { creature->Flags = 0; } @@ -740,13 +740,13 @@ namespace TEN::Entities::Creatures::TR5 case GUARD_STATE_STAND_UP: case GUARD_STATE_AWAKE_FROM_SLEEP: creature->MaxTurn = 0; - if (item->Animation.FrameNumber == GetAnimData(item).frameBase) + if (item->Animation.FrameNumber == g_Level.Anims[item->Animation.AnimNumber].frameBase) { TestTriggers(item, true); break; } - if (item->Animation.FrameNumber == GetAnimData(item).frameBase + 44) + if (item->Animation.FrameNumber == g_Level.Anims[item->Animation.AnimNumber].frameBase + 44) { item->SetMeshSwapFlags(NO_JOINT_BITS); @@ -776,7 +776,7 @@ namespace TEN::Entities::Creatures::TR5 currentItem->MeshBits = -3; } - else if (item->Animation.FrameNumber == GetAnimData(item).frameEnd) + else if (item->Animation.FrameNumber == g_Level.Anims[item->Animation.AnimNumber].frameEnd) item->Pose.Orientation.y -= ANGLE(90.0f); break; @@ -824,7 +824,7 @@ namespace TEN::Entities::Creatures::TR5 case GUARD_STATE_INSERT_CODE: creature->MaxTurn = 0; - if (item->Animation.FrameNumber == GetAnimData(item).frameBase + 39) + if (item->Animation.FrameNumber == g_Level.Anims[item->Animation.AnimNumber].frameBase + 39) TestTriggers(item, true); break; @@ -840,7 +840,7 @@ namespace TEN::Entities::Creatures::TR5 break; } - if (item->Animation.FrameNumber == GetAnimData(item).frameBase) + if (item->Animation.FrameNumber == g_Level.Anims[item->Animation.AnimNumber].frameBase) { currentItem->MeshBits = 0x1FFF; item->Pose.Position.x = currentItem->Pose.Position.x - CLICK(1); @@ -850,17 +850,17 @@ namespace TEN::Entities::Creatures::TR5 } else { - if (item->Animation.FrameNumber == GetAnimData(item).frameBase + 32) + if (item->Animation.FrameNumber == g_Level.Anims[item->Animation.AnimNumber].frameBase + 32) currentItem->MeshBits = 16381; - else if (item->Animation.FrameNumber == GetAnimData(item).frameBase + 74) + else if (item->Animation.FrameNumber == g_Level.Anims[item->Animation.AnimNumber].frameBase + 74) currentItem->MeshBits = 278461; - else if (item->Animation.FrameNumber == GetAnimData(item).frameBase + 120) + else if (item->Animation.FrameNumber == g_Level.Anims[item->Animation.AnimNumber].frameBase + 120) currentItem->MeshBits = 802621; - else if (item->Animation.FrameNumber == GetAnimData(item).frameBase + 157) + else if (item->Animation.FrameNumber == g_Level.Anims[item->Animation.AnimNumber].frameBase + 157) currentItem->MeshBits = 819001; - else if (item->Animation.FrameNumber == GetAnimData(item).frameBase + 190) + else if (item->Animation.FrameNumber == g_Level.Anims[item->Animation.AnimNumber].frameBase + 190) currentItem->MeshBits = 17592121; - else if (item->Animation.FrameNumber == GetAnimData(item).frameBase + GetAnimData(item).frameEnd) + else if (item->Animation.FrameNumber == g_Level.Anims[item->Animation.AnimNumber].frameBase + g_Level.Anims[item->Animation.AnimNumber].frameEnd) { currentItem->MeshBits = 0x1FFF; TestTriggers(item, true); @@ -905,7 +905,7 @@ namespace TEN::Entities::Creatures::TR5 item->Animation.TargetState = GUARD_STATE_IDLE; } - if (item->Animation.FrameNumber == GetAnimData(item).frameBase + 39) + if (item->Animation.FrameNumber == g_Level.Anims[item->Animation.AnimNumber].frameBase + 39) TestTriggers(item->Pose.Position.x, item->Pose.Position.y, item->Pose.Position.z, enemy->RoomNumber, true); break; @@ -1089,7 +1089,7 @@ namespace TEN::Entities::Creatures::TR5 if (item->Animation.ActiveState != SNIPER_STATE_DEATH) { item->Animation.AnimNumber = Objects[ID_SNIPER].animIndex + 5; - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; item->Animation.ActiveState = SNIPER_STATE_DEATH; } } @@ -1255,7 +1255,7 @@ namespace TEN::Entities::Creatures::TR5 if (canJump1Sector || canJump2Sectors) { item->Animation.AnimNumber = Objects[item->ObjectNumber].animIndex + 41; - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; item->Animation.ActiveState = MAFIA2_STATE_IDLE_START_JUMP; creature->MaxTurn = 0; @@ -1289,10 +1289,10 @@ namespace TEN::Entities::Creatures::TR5 else item->Pose.Orientation.y += ANGLE(2.0f); - if (item->Animation.FrameNumber != GetAnimData(item).frameBase + 16 || + if (item->Animation.FrameNumber != g_Level.Anims[item->Animation.AnimNumber].frameBase + 16 || !item->TestMeshSwapFlags(9216)) { - if (item->Animation.FrameNumber == GetAnimData(item).frameEnd) + if (item->Animation.FrameNumber == g_Level.Anims[item->Animation.AnimNumber].frameEnd) item->Pose.Orientation.y += -ANGLE(180.0f); } else @@ -1377,7 +1377,7 @@ namespace TEN::Entities::Creatures::TR5 if (canJump1Sector || canJump2Sectors) { item->Animation.AnimNumber = Objects[item->ObjectNumber].animIndex + 41; - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; item->Animation.ActiveState = MAFIA2_STATE_IDLE_START_JUMP; creature->MaxTurn = 0; @@ -1413,7 +1413,7 @@ namespace TEN::Entities::Creatures::TR5 else if (canJump1Sector || canJump2Sectors) { item->Animation.AnimNumber = Objects[item->ObjectNumber].animIndex + 50; - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; item->Animation.ActiveState = MAFIA2_STATE_IDLE_START_JUMP; creature->MaxTurn = 0; @@ -1437,7 +1437,7 @@ namespace TEN::Entities::Creatures::TR5 else item->Pose.Orientation.y -= ANGLE(2.0f); - if (item->Animation.FrameNumber == GetAnimData(item).frameBase + 16 && + if (item->Animation.FrameNumber == g_Level.Anims[item->Animation.AnimNumber].frameBase + 16 && item->TestMeshSwapFlags(9216)) { item->SetMeshSwapFlags(128); @@ -1467,7 +1467,7 @@ namespace TEN::Entities::Creatures::TR5 item->Pose.Orientation.y += AI.angle; } - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; } } @@ -1487,41 +1487,41 @@ namespace TEN::Entities::Creatures::TR5 { case 0: item->Animation.AnimNumber = Objects[item->ObjectNumber].animIndex + 38; - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; item->Animation.ActiveState = 23; break; case 1: item->Animation.AnimNumber = Objects[item->ObjectNumber].animIndex + 39; - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; item->Animation.ActiveState = 24; creature->MaxTurn = 0; break; case 2: item->Animation.AnimNumber = Objects[item->ObjectNumber].animIndex + 40; - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; item->Animation.ActiveState = 25; creature->MaxTurn = 0; break; case 6: item->Animation.AnimNumber = Objects[item->ObjectNumber].animIndex + 35; - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; item->Animation.ActiveState = 20; creature->MaxTurn = 0; break; case 7: item->Animation.AnimNumber = Objects[item->ObjectNumber].animIndex + 36; - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; item->Animation.ActiveState = 21; creature->MaxTurn = 0; break; case 8: item->Animation.AnimNumber = Objects[item->ObjectNumber].animIndex + 37; - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; item->Animation.ActiveState = 22; creature->MaxTurn = 0; break; diff --git a/TombEngine/Objects/TR5/Entity/tr5_hydra.cpp b/TombEngine/Objects/TR5/Entity/tr5_hydra.cpp index eb74f1689..5b8989adb 100644 --- a/TombEngine/Objects/TR5/Entity/tr5_hydra.cpp +++ b/TombEngine/Objects/TR5/Entity/tr5_hydra.cpp @@ -309,7 +309,7 @@ namespace TEN::Entities::Creatures::TR5 if (!(GlobalCounter & 3)) { - frame = ((GetAnimData(item).frameBase - item->Animation.FrameNumber) / 8) + 1; + frame = ((g_Level.Anims[item->Animation.AnimNumber].frameBase - item->Animation.FrameNumber) / 8) + 1; if (frame > 16) frame = 16; @@ -319,7 +319,7 @@ namespace TEN::Entities::Creatures::TR5 break; case 3: - if (item->Animation.FrameNumber == GetAnimData(item).frameBase) + if (item->Animation.FrameNumber == g_Level.Anims[item->Animation.AnimNumber].frameBase) { auto pos1 = GetJointPosition(item, 10, Vector3i(0, 1024, 40)); auto pos2 = GetJointPosition(item, 10, Vector3i(0, 144, 40)); @@ -373,10 +373,10 @@ namespace TEN::Entities::Creatures::TR5 { item->Animation.AnimNumber = Objects[item->ObjectNumber].animIndex + 15; item->Animation.ActiveState = HYDRA_STATE_DEATH; - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; } - if (!((item->Animation.FrameNumber - GetAnimData(item).frameBase) & 7)) + if (!((item->Animation.FrameNumber - g_Level.Anims[item->Animation.AnimNumber].frameBase) & 7)) { if (item->ItemFlags[3] < 12) { diff --git a/TombEngine/Objects/TR5/Entity/tr5_lagoon_witch.cpp b/TombEngine/Objects/TR5/Entity/tr5_lagoon_witch.cpp index 706335287..a7dc590b5 100644 --- a/TombEngine/Objects/TR5/Entity/tr5_lagoon_witch.cpp +++ b/TombEngine/Objects/TR5/Entity/tr5_lagoon_witch.cpp @@ -64,7 +64,7 @@ namespace TEN::Entities::Creatures::TR5 { item->Animation.ActiveState = WITCH_STATE_DEATH; item->Animation.AnimNumber = object->animIndex + WITCH_ANIM_DEATH; - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; item->HitPoints = 0; } } @@ -129,7 +129,7 @@ namespace TEN::Entities::Creatures::TR5 if (!creature->Flags && item->TouchBits.Test(LagoonWitchAttackJoints) && - item->Animation.FrameNumber > GetAnimData(item).frameBase + 29) + item->Animation.FrameNumber > g_Level.Anims[item->Animation.AnimNumber].frameBase + 29) { DoDamage(creature->Enemy, LAGOON_WITCH_ATTACK_DAMAGE); CreatureEffect2(item, LagoonWitchBite, 10, item->Pose.Orientation.y, DoBloodSplat); diff --git a/TombEngine/Objects/TR5/Entity/tr5_larson.cpp b/TombEngine/Objects/TR5/Entity/tr5_larson.cpp index 78eab228b..1a97511d6 100644 --- a/TombEngine/Objects/TR5/Entity/tr5_larson.cpp +++ b/TombEngine/Objects/TR5/Entity/tr5_larson.cpp @@ -320,7 +320,7 @@ namespace TEN::Entities::Creatures::TR5 else item->Pose.Orientation.y += AI.angle; - if (item->Animation.FrameNumber == GetAnimData(item).frameBase) + if (item->Animation.FrameNumber == GetFrameIndex(item, 0)) { if (item->ObjectNumber == ID_PIERRE) { @@ -352,7 +352,7 @@ namespace TEN::Entities::Creatures::TR5 { // When Larson dies, it activates trigger at start position if (item->ObjectNumber == ID_LARSON && - item->Animation.FrameNumber == GetAnimData(item).frameEnd) + item->Animation.FrameNumber == g_Level.Anims[item->Animation.AnimNumber].frameEnd) { short roomNumber = item->ItemFlags[2] & 0xFF; short floorHeight = item->ItemFlags[2] & 0xFF00; @@ -376,7 +376,7 @@ namespace TEN::Entities::Creatures::TR5 else item->Animation.AnimNumber = Objects[ID_LARSON].animIndex + ANIMATION_TR5_LARSON_DIE; - item->Animation.FrameNumber = GetAnimData(item).frameBase; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; item->Animation.ActiveState = STATE_TR5_LARSON_DIE; } diff --git a/TombEngine/Objects/TR5/Entity/tr5_roman_statue.cpp b/TombEngine/Objects/TR5/Entity/tr5_roman_statue.cpp index b34c98517..61c1be125 100644 --- a/TombEngine/Objects/TR5/Entity/tr5_roman_statue.cpp +++ b/TombEngine/Objects/TR5/Entity/tr5_roman_statue.cpp @@ -417,7 +417,7 @@ namespace TEN::Entities::Creatures::TR5 pos = Vector3i((pos1.x + pos2.x) / 2, (pos1.y + pos2.y) / 2, (pos1.z + pos2.z) / 2); - deltaFrame = item->Animation.FrameNumber - GetAnimData(item).frameBase; + deltaFrame = item->Animation.FrameNumber - g_Level.Anims[item->Animation.AnimNumber].frameBase; if (deltaFrame > 68 && deltaFrame < 130) { @@ -537,7 +537,7 @@ namespace TEN::Entities::Creatures::TR5 item->Pose.Orientation.y += ai.angle; } - if (item->Animation.FrameNumber > GetAnimData(item).frameBase + 10) + if (item->Animation.FrameNumber > g_Level.Anims[item->Animation.AnimNumber].frameBase + 10) { pos = GetJointPosition(item, 16); @@ -582,7 +582,7 @@ namespace TEN::Entities::Creatures::TR5 pos1 = GetJointPosition(item, 14, Vector3i(-40, 64, 360)); pos1.y = item->Pose.Position.y - 64; - if (item->Animation.FrameNumber == GetAnimData(item).frameBase + 34 && item->Animation.ActiveState == 3) + if (item->Animation.FrameNumber == g_Level.Anims[item->Animation.AnimNumber].frameBase + 34 && item->Animation.ActiveState == 3) { if (item->ItemFlags[0]) item->ItemFlags[0]--; @@ -593,8 +593,8 @@ namespace TEN::Entities::Creatures::TR5 TriggerShockwave((Pose*)&pos1, 16, 160, 64, 0, 64, 128, 48, EulerAngles::Zero, 1, true, false, (int)ShockwaveStyle::Normal); } - deltaFrame = item->Animation.FrameNumber - GetAnimData(item).frameBase; - int deltaFrame2 = GetAnimData(item).frameEnd - item->Animation.FrameNumber; + deltaFrame = item->Animation.FrameNumber - g_Level.Anims[item->Animation.AnimNumber].frameBase; + int deltaFrame2 = g_Level.Anims[item->Animation.AnimNumber].frameEnd - item->Animation.FrameNumber; if (deltaFrame2 >= 16) { @@ -672,7 +672,7 @@ namespace TEN::Entities::Creatures::TR5 else item->Pose.Orientation.y += ANGLE(2.0f); - if (item->Animation.FrameNumber == GetAnimData(item).frameEnd) + if (item->Animation.FrameNumber == g_Level.Anims[item->Animation.AnimNumber].frameEnd) item->Pose.Orientation.y += -ANGLE(180.0f); break; @@ -688,7 +688,7 @@ namespace TEN::Entities::Creatures::TR5 TriggerDynamicLight(RomanStatueData.Position.x, RomanStatueData.Position.y, RomanStatueData.Position.z, 16, 0, color, color / 2); } - deltaFrame = item->Animation.FrameNumber - GetAnimData(item).frameBase; + deltaFrame = item->Animation.FrameNumber - g_Level.Anims[item->Animation.AnimNumber].frameBase; if (deltaFrame == 34) { diff --git a/TombEngine/Objects/TR5/Object/tr5_genslot.cpp b/TombEngine/Objects/TR5/Object/tr5_genslot.cpp index 8ab99e4c7..86fc97535 100644 --- a/TombEngine/Objects/TR5/Object/tr5_genslot.cpp +++ b/TombEngine/Objects/TR5/Object/tr5_genslot.cpp @@ -14,7 +14,7 @@ void GenSlot1Control(short itemNumber) if (TriggerActive(item) && !item->TriggerFlags) { - int df = item->Animation.FrameNumber - GetAnimData(item).frameBase; + int df = item->Animation.FrameNumber - g_Level.Anims[item->Animation.AnimNumber].frameBase; if (df == 10 || df == 11) { diff --git a/TombEngine/Objects/TR5/Object/tr5_pushableblock.cpp b/TombEngine/Objects/TR5/Object/tr5_pushableblock.cpp index 8d863b55f..10bc7bc3b 100644 --- a/TombEngine/Objects/TR5/Object/tr5_pushableblock.cpp +++ b/TombEngine/Objects/TR5/Object/tr5_pushableblock.cpp @@ -210,7 +210,7 @@ namespace TEN::Entities::Generic displaceDepth = GetLastFrame(GAME_OBJECT_ID::ID_LARA, LaraItem->Animation.AnimNumber)->BoundingBox.Z2; displaceBox -= displaceDepth - BLOCK(1); - if (LaraItem->Animation.FrameNumber == GetAnimData(*LaraItem).frameBase) + if (LaraItem->Animation.FrameNumber == g_Level.Anims[LaraItem->Animation.AnimNumber].frameBase) { RemoveFromStack(itemNumber); RemoveBridgeStack(itemNumber); @@ -256,7 +256,7 @@ namespace TEN::Entities::Generic MoveStackXZ(itemNumber); - if (LaraItem->Animation.FrameNumber == GetAnimData(*LaraItem).frameEnd - 1) + if (LaraItem->Animation.FrameNumber == g_Level.Anims[LaraItem->Animation.AnimNumber].frameEnd - 1) { // Check if pushable is about to fall. if (pushable->canFall) @@ -301,7 +301,7 @@ namespace TEN::Entities::Generic displaceDepth = GetLastFrame(GAME_OBJECT_ID::ID_LARA, LaraItem->Animation.AnimNumber)->BoundingBox.Z2; displaceBox -= BLOCK(1) + displaceDepth; - if (LaraItem->Animation.FrameNumber == GetAnimData(*LaraItem).frameBase) + if (LaraItem->Animation.FrameNumber == g_Level.Anims[LaraItem->Animation.AnimNumber].frameBase) { RemoveFromStack(itemNumber); RemoveBridgeStack(itemNumber); @@ -343,7 +343,7 @@ namespace TEN::Entities::Generic MoveStackXZ(itemNumber); - if (LaraItem->Animation.FrameNumber == GetAnimData(*LaraItem).frameEnd - 1) + if (LaraItem->Animation.FrameNumber == g_Level.Anims[LaraItem->Animation.AnimNumber].frameEnd - 1) { if (IsHeld(In::Action)) { diff --git a/TombEngine/Objects/TR5/Object/tr5_rollingball.cpp b/TombEngine/Objects/TR5/Object/tr5_rollingball.cpp index 39d98c280..8088cac6f 100644 --- a/TombEngine/Objects/TR5/Object/tr5_rollingball.cpp +++ b/TombEngine/Objects/TR5/Object/tr5_rollingball.cpp @@ -485,9 +485,9 @@ void ClassicRollingBallControl(short itemNum) item->Animation.ActiveState = 0; item->Animation.TargetState = 0; item->Animation.AnimNumber = Objects[item->ObjectNumber].animIndex; - item->Animation.FrameNumber = GetAnimData(item).frameBase; - item->Animation.ActiveState = GetAnimData(item).ActiveState; - item->Animation.TargetState = GetAnimData(item).ActiveState; + item->Animation.FrameNumber = g_Level.Anims[item->Animation.AnimNumber].frameBase; + item->Animation.ActiveState = g_Level.Anims[item->Animation.AnimNumber].ActiveState; + item->Animation.TargetState = g_Level.Anims[item->Animation.AnimNumber].ActiveState; item->Animation.RequiredState = NO_STATE; RemoveActiveItem(itemNum); } diff --git a/TombEngine/Objects/TR5/Object/tr5_teleporter.cpp b/TombEngine/Objects/TR5/Object/tr5_teleporter.cpp index d427b9078..4fbbe6c5b 100644 --- a/TombEngine/Objects/TR5/Object/tr5_teleporter.cpp +++ b/TombEngine/Objects/TR5/Object/tr5_teleporter.cpp @@ -183,7 +183,10 @@ void ControlTeleporter(short itemNumber) SoundEffect(SFX_TR5_LIFT_HIT_FLOOR2, nullptr); } - SetAnimation(*LaraItem, LA_ELEVATOR_RECOVER); + LaraItem->Animation.AnimNumber = LA_ELEVATOR_RECOVER; + LaraItem->Animation.FrameNumber = g_Level.Anims[LaraItem->Animation.AnimNumber].frameBase; + LaraItem->Animation.TargetState = LS_MISC_CONTROL; + LaraItem->Animation.ActiveState = LS_MISC_CONTROL; item->ItemFlags[0]++; if (item->ItemFlags[0] >= 150) diff --git a/TombEngine/Objects/TR5/Switch/tr5_crowdove_switch.cpp b/TombEngine/Objects/TR5/Switch/tr5_crowdove_switch.cpp index ab4f89d9e..831dc12eb 100644 --- a/TombEngine/Objects/TR5/Switch/tr5_crowdove_switch.cpp +++ b/TombEngine/Objects/TR5/Switch/tr5_crowdove_switch.cpp @@ -63,7 +63,7 @@ namespace TEN::Entities::Switches { laraItem->Animation.AnimNumber = LA_DOVESWITCH_TURN; laraItem->Animation.ActiveState = LS_DOVE_SWITCH; - laraItem->Animation.FrameNumber = GetAnimData(laraItem).frameBase; + laraItem->Animation.FrameNumber = g_Level.Anims[laraItem->Animation.AnimNumber].frameBase; AddActiveItem(itemNumber); diff --git a/TombEngine/Objects/TR5/Trap/LaserBarrier.cpp b/TombEngine/Objects/TR5/Trap/LaserBarrier.cpp deleted file mode 100644 index ad6020acf..000000000 --- a/TombEngine/Objects/TR5/Trap/LaserBarrier.cpp +++ /dev/null @@ -1,188 +0,0 @@ -#include "framework.h" -#include "Objects/TR5/Trap/LaserBarrier.h" - -#include "Game/collision/collide_room.h" -#include "Game/collision/floordata.h" -#include "Game/effects/effects.h" -#include "Game/effects/item_fx.h" -#include "Game/items.h" -#include "Game/Lara/lara.h" -#include "Specific/level.h" - -using namespace TEN::Effects::Items; - -namespace TEN::Traps::TR5 -{ - // NOTES: - // item.ItemFlags[0] = barrier height. - - // TODO: - // - Randomize opacity pulses for each barrier. - // - Make SpawnLaserBarrierLight() spawn a line of light once engine allows it. - // - Make beam counts an attribute once attributes are implemented. - - extern std::unordered_map LaserBarriers = {}; - - void LaserBarrier::Initialize(const ItemInfo& item) - { - float barrierHeight = item.ItemFlags[0]; - int beamCount = std::max((int)floor((barrierHeight / 2) / LaserBarrierBeam::HEIGHT), 1); - - Color = item.Model.Color; - Color.w = 0.0f; - Beams.resize(beamCount); - IsLethal = (item.TriggerFlags > 0); - IsHeavyActivator = (item.TriggerFlags <= 0); - Update(item); - } - - void LaserBarrier::Update(const ItemInfo& item) - { - // Calculate dimension values. - float barrierHalfWidth = (abs(item.TriggerFlags) * BLOCK(1)) / 2; - float barrierHeight = item.ItemFlags[0]; - float beamStepHeight = barrierHeight / Beams.size(); - - // Determine beam vertex base. - auto basePos = item.Pose.Position.ToVector3(); - auto rotMatrix = EulerAngles(0, item.Pose.Orientation.y + ANGLE(90.0f), 0).ToRotationMatrix(); - auto baseVertices = std::array - { - basePos + Vector3::Transform(Vector3(barrierHalfWidth, -LaserBarrierBeam::HEIGHT / 2, 0.0f), rotMatrix), - basePos + Vector3::Transform(Vector3(-barrierHalfWidth, -LaserBarrierBeam::HEIGHT / 2, 0.0f), rotMatrix), - basePos + Vector3::Transform(Vector3(-barrierHalfWidth, LaserBarrierBeam::HEIGHT / 2, 0.0f), rotMatrix), - basePos + Vector3::Transform(Vector3(barrierHalfWidth, LaserBarrierBeam::HEIGHT / 2, 0.0f), rotMatrix) - }; - - // Set vertex positions. - auto beamOffset = Vector3(0.0f, -LaserBarrierBeam::HEIGHT, 0.0f); - for (auto& beam : Beams) - { - assertion(beam.VertexPoints.size() == baseVertices.size(), "Laser barrier beam vertex count out of sync."); - - for (int i = 0; i < beam.VertexPoints.size(); i++) - beam.VertexPoints[i] = baseVertices[i] + beamOffset; - - beamOffset.y -= beamStepHeight; - } - - // Determine bounding box reference points. - auto point0 = Beams.back().VertexPoints[0]; - auto point1 = Beams.back().VertexPoints[1]; - auto point2 = Beams.front().VertexPoints[2]; - auto point3 = Beams.front().VertexPoints[3]; - - // Update bounding box. - BoundingBox.Center = (point0 + point1 + point2 + point3) / 4; - BoundingBox.Extents = Vector3( - std::abs(point0.x - point1.x) / 2, - std::abs(point0.y - point2.y) / 2, - std::abs(point0.z - point2.z) / 2); - } - - void InitializeLaserBarrier(short itemNumber) - { - auto& item = g_Level.Items[itemNumber]; - - // Initialize barrier height. - auto pointColl = GetCollision(&item); - float barrierHeight = item.Pose.Position.y - pointColl.Position.Ceiling; - item.ItemFlags[0] = barrierHeight; - - // Initialize barrier effect. - auto barrier = LaserBarrier{}; - barrier.Initialize(item); - LaserBarriers.insert({ itemNumber, barrier }); - } - - static void SpawnLaserBarrierLight(const ItemInfo& item, float intensity, float amplitude) - { - float intensityNorm = intensity - Random::GenerateFloat(0.0f, amplitude); - TriggerDynamicLight( - item.Pose.Position.x, item.Pose.Position.y, item.Pose.Position.z, - 8, - intensityNorm * (item.Model.Color.x / 2), - intensityNorm * (item.Model.Color.y / 2), - intensityNorm * (item.Model.Color.z / 2)); - } - - void ControlLaserBarrier(short itemNumber) - { - constexpr auto LIGHT_INTENSITY = 150.0f; - constexpr auto LIGHT_AMPLITUDE = 31.0f; - - if (!LaserBarriers.count(itemNumber)) - return; - - auto& item = g_Level.Items[itemNumber]; - auto& barrier = LaserBarriers.at(itemNumber); - - if (!TriggerActive(&item)) - { - barrier.IsActive = false; - barrier.Color.w = 0.0f; - item.Model.Color.w = 0.0f; - return; - } - - // Brightness fade-in and distortion. - if (item.Model.Color.w < 1.0f) - item.Model.Color.w += 0.02f; - - if (barrier.Color.w < 1.0f) - barrier.Color.w += 0.02f; - - // TODO: Weird. - if (item.Model.Color.w > 8.0f) - { - barrier.Color.w = 0.8f; - item.Model.Color.w = 0.8f; - } - - barrier.IsActive = true; - barrier.Update(item); - - if (item.Model.Color.w >= 0.8f) - SpawnLaserBarrierLight(item, LIGHT_INTENSITY, LIGHT_AMPLITUDE); - - SoundEffect(SFX_TR5_DOOR_BEAM, &item.Pose); - } - - void CollideLaserBarrier(short itemNumber, ItemInfo* playerItem, CollisionInfo* coll) - { - constexpr auto LIGHT_INTENSITY = 255.0f; - constexpr auto LIGHT_AMPLITUDE = 100.0f; - - if (!LaserBarriers.count(itemNumber)) - return; - - auto& item = g_Level.Items[itemNumber]; - auto& barrier = LaserBarriers.at(itemNumber); - - if (!barrier.IsActive) - return; - - auto playerBox = GameBoundingBox(playerItem).ToBoundingOrientedBox(playerItem->Pose); - if (barrier.BoundingBox.Intersects(playerBox)) - { - if (barrier.IsLethal && - playerItem->HitPoints > 0 && playerItem->Effect.Type != EffectType::Smoke) - { - ItemRedLaserBurn(playerItem, 2.0f * FPS); - DoDamage(playerItem, MAXINT); - } - else if (barrier.IsHeavyActivator) - { - TestTriggers(&item, true, item.Flags & IFLAG_ACTIVATION_MASK); - } - - barrier.Color.w = Random::GenerateFloat(0.6f, 1.0f); - SpawnLaserBarrierLight(item, LIGHT_INTENSITY, LIGHT_AMPLITUDE); - } - } - - void ClearLaserBarrierEffects() - { - LaserBarriers.clear(); - } -} diff --git a/TombEngine/Objects/TR5/Trap/LaserBarrier.h b/TombEngine/Objects/TR5/Trap/LaserBarrier.h deleted file mode 100644 index 4f0f6bfa2..000000000 --- a/TombEngine/Objects/TR5/Trap/LaserBarrier.h +++ /dev/null @@ -1,40 +0,0 @@ -#pragma once -#include "Math/Math.h" - -using namespace TEN::Math; - -struct CollisionInfo; -struct ItemInfo; - -namespace TEN::Traps::TR5 -{ - struct LaserBarrierBeam - { - static constexpr auto VERTEX_COUNT = 4; - static constexpr auto HEIGHT = BLOCK(0.4f); - - std::array VertexPoints = {}; - }; - - struct LaserBarrier - { - Vector4 Color = Vector4::Zero; - BoundingOrientedBox BoundingBox = {}; - std::vector Beams = {}; - - bool IsActive = false; - bool IsLethal = false; - bool IsHeavyActivator = false; - - void Initialize(const ItemInfo& item); - void Update(const ItemInfo& item); - }; - - extern std::unordered_map LaserBarriers; - - void InitializeLaserBarrier(short itemNumber); - void ControlLaserBarrier(short itemNumber); - void CollideLaserBarrier(short itemNumber, ItemInfo* playerItem, CollisionInfo* coll); - - void ClearLaserBarrierEffects(); -} diff --git a/TombEngine/Objects/TR5/Trap/tr5_ventilator.cpp b/TombEngine/Objects/TR5/Trap/tr5_ventilator.cpp index 0c4d4a450..38a8ec418 100644 --- a/TombEngine/Objects/TR5/Trap/tr5_ventilator.cpp +++ b/TombEngine/Objects/TR5/Trap/tr5_ventilator.cpp @@ -153,7 +153,7 @@ void VentilatorControl(short itemNumber) if (item->Animation.ActiveState == 1) { //result = 5 * item->animNumber; - if (item->Animation.FrameNumber == GetAnimData(item).frameEnd) + if (item->Animation.FrameNumber == g_Level.Anims[item->Animation.AnimNumber].frameEnd) return; } else @@ -162,7 +162,7 @@ void VentilatorControl(short itemNumber) int speed = 0; if (item->Animation.ActiveState == 1) - speed = GetAnimData(item).frameEnd - item->Animation.FrameNumber; + speed = g_Level.Anims[item->Animation.AnimNumber].frameEnd - item->Animation.FrameNumber; else speed = 128; diff --git a/TombEngine/Objects/TR5/Trap/tr5_wreckingball.cpp b/TombEngine/Objects/TR5/Trap/tr5_wreckingball.cpp index 15ac69cf2..498372e00 100644 --- a/TombEngine/Objects/TR5/Trap/tr5_wreckingball.cpp +++ b/TombEngine/Objects/TR5/Trap/tr5_wreckingball.cpp @@ -233,7 +233,7 @@ void WreckingBallControl(short itemNumber) --item->TriggerFlags; else if (!item->Animation.ActiveState) item->Animation.TargetState = 1; - else if (item->Animation.FrameNumber == GetAnimData(item).frameEnd) + else if (item->Animation.FrameNumber == g_Level.Anims[item->Animation.AnimNumber].frameEnd) { SoundEffect(SFX_TR5_BASE_CLAW_DROP, &item->Pose); ++item->ItemFlags[1]; diff --git a/TombEngine/Objects/TR5/tr5_objects.cpp b/TombEngine/Objects/TR5/tr5_objects.cpp index 51d4e3445..9c7e0aa3d 100644 --- a/TombEngine/Objects/TR5/tr5_objects.cpp +++ b/TombEngine/Objects/TR5/tr5_objects.cpp @@ -57,14 +57,13 @@ // Traps #include "Objects/Effects/tr5_electricity.h" -#include "Objects/TR5/Trap/LaserBarrier.h" #include "Objects/TR5/Object/tr5_rollingball.h" -#include "Objects/TR5/Trap/tr5_ventilator.h" -#include "Objects/TR5/Trap/tr5_zip_line.h" -#include "Objects/TR5/Trap/tr5_romehammer.h" -#include "Objects/TR5/Trap/tr5_fallingceiling.h" #include "Objects/TR5/Trap/tr5_explosion.h" +#include "Objects/TR5/Trap/tr5_fallingceiling.h" +#include "Objects/TR5/Trap/tr5_romehammer.h" +#include "Objects/TR5/Trap/tr5_ventilator.h" #include "Objects/TR5/Trap/tr5_wreckingball.h" +#include "Objects/TR5/Trap/tr5_zip_line.h" // Switches #include "Objects/TR5/Switch/tr5_crowdove_switch.h" @@ -74,7 +73,6 @@ using namespace TEN::Entities::Creatures::TR5; using namespace TEN::Entities::Switches; -using namespace TEN::Traps::TR5; static void StartEntity(ObjectInfo *obj) { @@ -953,16 +951,6 @@ static void StartTrap(ObjectInfo *obj) obj->drawRoutine = nullptr; obj->usingDrawAnimatingItem = false; } - - obj = &Objects[ID_LASER_BARRIER]; - if (obj->loaded) - { - obj->Initialize = InitializeLaserBarrier; - obj->control = ControlLaserBarrier; - obj->collision = CollideLaserBarrier; - obj->drawRoutine = nullptr; - obj->usingDrawAnimatingItem = false; - } } static void StartSwitch(ObjectInfo *obj) diff --git a/TombEngine/Objects/game_object_ids.h b/TombEngine/Objects/game_object_ids.h index d1f65aefb..0c3b61793 100644 --- a/TombEngine/Objects/game_object_ids.h +++ b/TombEngine/Objects/game_object_ids.h @@ -767,7 +767,7 @@ enum GAME_OBJECT_ID : short ID_LARA_START_POS, ID_TELEPORTER, ID_LIFT_TELEPORTER, - ID_LASER_BARRIER, + ID_LASERS, ID_STEAM_LASERS, ID_FLOOR_LASERS, ID_KILL_ALL_TRIGGERS, diff --git a/TombEngine/Renderer/ConstantBuffers/SpriteBuffer.h b/TombEngine/Renderer/ConstantBuffers/SpriteBuffer.h index f0446bf9b..3e996bc49 100644 --- a/TombEngine/Renderer/ConstantBuffers/SpriteBuffer.h +++ b/TombEngine/Renderer/ConstantBuffers/SpriteBuffer.h @@ -8,5 +8,4 @@ using DirectX::SimpleMath::Vector4; struct alignas(16) CSpriteBuffer { float IsSoftParticle; - int RenderType; }; diff --git a/TombEngine/Renderer/Renderer11.h b/TombEngine/Renderer/Renderer11.h index 45e1da9e1..f86aa0df2 100644 --- a/TombEngine/Renderer/Renderer11.h +++ b/TombEngine/Renderer/Renderer11.h @@ -518,7 +518,6 @@ namespace TEN::Renderer void InitializeMenuBars(int y); void DrawAllStrings(); - void DrawLaserBarriers(RenderView& view); void DrawHorizonAndSky(RenderView& renderView, ID3D11DepthStencilView* depthTarget); void DrawRooms(RenderView& view, bool transparent); void DrawRoomsSorted(RendererTransparentFaceInfo* info, bool resetPipeline, RenderView& view); @@ -603,24 +602,24 @@ namespace TEN::Renderer float CalculateFrameRate(); void AddSpriteBillboard(RendererSprite* sprite, const Vector3& pos, const Vector4& color, float orient2D, float scale, - Vector2 size, BLEND_MODES blendMode, bool isSoftParticle, RenderView& view, SpriteRenderType renderType = SpriteRenderType::Default); + Vector2 size, BLEND_MODES blendMode, bool isSoftParticle, RenderView& view); void AddSpriteBillboardConstrained(RendererSprite* sprite, const Vector3& pos, const Vector4& color, float orient2D, - float scale, Vector2 size, BLEND_MODES blendMode, const Vector3& constrainAxis, - bool isSoftParticle, RenderView& view, SpriteRenderType renderType = SpriteRenderType::Default); + float scale, Vector2 size, BLEND_MODES blendMode, const Vector3& constrainAxis, + bool isSoftParticle, RenderView& view); void AddSpriteBillboardConstrainedLookAt(RendererSprite* sprite, const Vector3& pos, const Vector4& color, float orient2D, - float scale, Vector2 size, BLEND_MODES blendMode, const Vector3& lookAtAxis, - bool isSoftParticle, RenderView& view, SpriteRenderType renderType = SpriteRenderType::Default); + float scale, Vector2 size, BLEND_MODES blendMode, const Vector3& lookAtAxis, + bool isSoftParticle, RenderView& view); void AddQuad(RendererSprite* sprite, const Vector3& vertex0, const Vector3& vertex1, const Vector3& vertex2, const Vector3& vertex3, const Vector4 color, float orient2D, float scale, Vector2 size, BLEND_MODES blendMode, bool softParticles, RenderView& view); void AddQuad(RendererSprite* sprite, const Vector3& vertex0, const Vector3& vertex1, const Vector3& vertex2, const Vector3& vertex3, const Vector4& color0, const Vector4& color1, const Vector4& color2, const Vector4& color3, float orient2D, - float scale, Vector2 size, BLEND_MODES blendMode, bool isSoftParticle, RenderView& view, SpriteRenderType renderType = SpriteRenderType::Default); + float scale, Vector2 size, BLEND_MODES blendMode, bool isSoftParticle, RenderView& view); void AddColoredQuad(const Vector3& vertex0, const Vector3& vertex1, const Vector3& vertex2, const Vector3& vertex3, const Vector4& color, BLEND_MODES blendMode, RenderView& view); void AddColoredQuad(const Vector3& vertex0, const Vector3& vertex1, const Vector3& vertex2, const Vector3& vertex3, const Vector4& color0, const Vector4& color1, const Vector4& color2, const Vector4& color3, - BLEND_MODES blendMode, RenderView& view, SpriteRenderType renderType = SpriteRenderType::Default); + BLEND_MODES blendMode, RenderView& view); Matrix GetWorldMatrixForSprite(RendererSpriteToDraw* spr, RenderView& view); RendererObject& GetRendererObject(GAME_OBJECT_ID id); diff --git a/TombEngine/Renderer/Renderer11Draw.cpp b/TombEngine/Renderer/Renderer11Draw.cpp index 4a4873ea0..d04617f43 100644 --- a/TombEngine/Renderer/Renderer11Draw.cpp +++ b/TombEngine/Renderer/Renderer11Draw.cpp @@ -1513,7 +1513,6 @@ namespace TEN::Renderer DrawHelicalLasers(view); DrawRopes(view); DrawStreamers(view); - DrawLaserBarriers(view); // Here is where we actually output sprites DrawSprites(view); diff --git a/TombEngine/Renderer/Renderer11DrawEffect.cpp b/TombEngine/Renderer/Renderer11DrawEffect.cpp index e027998b9..e6960d412 100644 --- a/TombEngine/Renderer/Renderer11DrawEffect.cpp +++ b/TombEngine/Renderer/Renderer11DrawEffect.cpp @@ -26,10 +26,9 @@ #include "Game/misc.h" #include "Game/Setup.h" #include "Math/Math.h" -#include "Objects/TR5/Trap/LaserBarrier.h" #include "Objects/Utils/object_helper.h" -#include "Renderer/RendererSprites.h" #include "Renderer/Quad/RenderQuad.h" +#include "Renderer/RendererSprites.h" #include "Specific/level.h" using namespace TEN::Effects::Blood; @@ -42,14 +41,13 @@ using namespace TEN::Effects::Ripple; using namespace TEN::Effects::Streamer; using namespace TEN::Entities::Creatures::TR5; using namespace TEN::Math; -using namespace TEN::Traps::TR5; extern BLOOD_STRUCT Blood[MAX_SPARKS_BLOOD]; extern FIRE_SPARKS FireSparks[MAX_SPARKS_FIRE]; extern SMOKE_SPARKS SmokeSparks[MAX_SPARKS_SMOKE]; extern SHOCKWAVE_STRUCT ShockWaves[MAX_SHOCKWAVE]; extern FIRE_LIST Fires[MAX_FIRE_LIST]; -extern GUNFLASH_STRUCT Gunflashes[MAX_GUNFLASH]; +extern GUNFLASH_STRUCT Gunflashes[MAX_GUNFLASH]; // offset 0xA31D8 extern Particle Particles[MAX_PARTICLES]; extern SPLASH_STRUCT Splashes[MAX_SPLASHES]; @@ -62,31 +60,9 @@ namespace TEN::Renderer RendererSprite* Sprite; BLEND_MODES BlendMode; std::vector SpritesToDraw; - - bool IsBillboard = false; - bool IsSoftParticle = false; - - SpriteRenderType RenderType; + bool IsBillboard; + bool IsSoftParticle; }; - - void Renderer11::DrawLaserBarriers(RenderView& view) - { - if (LaserBarriers.empty()) - return; - - for (const auto& [entityID, barrier] : LaserBarriers) - { - for (const auto& beam : barrier.Beams) - { - AddColoredQuad( - beam.VertexPoints[0], beam.VertexPoints[1], - beam.VertexPoints[2], beam.VertexPoints[3], - barrier.Color, barrier.Color, - barrier.Color, barrier.Color, - BLENDMODE_ADDITIVE, view, SpriteRenderType::LaserBarrier); - } - } - } void Renderer11::DrawStreamers(RenderView& view) { @@ -1141,7 +1117,6 @@ namespace TEN::Renderer currentSpriteBucket.BlendMode = view.spritesToDraw[0].BlendMode; currentSpriteBucket.IsBillboard = view.spritesToDraw[0].Type != RENDERER_SPRITE_TYPE::SPRITE_TYPE_3D; currentSpriteBucket.IsSoftParticle = view.spritesToDraw[0].SoftParticle; - currentSpriteBucket.RenderType = view.spritesToDraw[0].renderType; for (auto& rDrawSprite : view.spritesToDraw) { @@ -1150,7 +1125,6 @@ namespace TEN::Renderer if (rDrawSprite.Sprite != currentSpriteBucket.Sprite || rDrawSprite.BlendMode != currentSpriteBucket.BlendMode || rDrawSprite.SoftParticle != currentSpriteBucket.IsSoftParticle || - rDrawSprite.renderType != currentSpriteBucket.RenderType || currentSpriteBucket.SpritesToDraw.size() == INSTANCED_SPRITES_BUCKET_SIZE || isBillboard != currentSpriteBucket.IsBillboard) { @@ -1160,12 +1134,10 @@ namespace TEN::Renderer currentSpriteBucket.BlendMode = rDrawSprite.BlendMode; currentSpriteBucket.IsBillboard = isBillboard; currentSpriteBucket.IsSoftParticle = rDrawSprite.SoftParticle; - currentSpriteBucket.RenderType = rDrawSprite.renderType; currentSpriteBucket.SpritesToDraw.clear(); } - //HACK: prevent sprites like Explosionsmoke which have blendmode_subtractive from having laser effects - if (DoesBlendModeRequireSorting(rDrawSprite.BlendMode) && currentSpriteBucket.RenderType) + if (DoesBlendModeRequireSorting(rDrawSprite.BlendMode)) { // If blend mode requires sorting, save sprite for later. int distance = (rDrawSprite.pos - Vector3(Camera.pos.x, Camera.pos.y, Camera.pos.z)).Length(); @@ -1240,13 +1212,9 @@ namespace TEN::Renderer BindTexture(TEXTURE_COLOR_MAP, spriteBucket.Sprite->Texture, SAMPLER_LINEAR_CLAMP); if (spriteBucket.BlendMode == BLEND_MODES::BLENDMODE_ALPHATEST) - { SetAlphaTest(ALPHA_TEST_GREATER_THAN, ALPHA_TEST_THRESHOLD, true); - } else - { SetAlphaTest(ALPHA_TEST_NONE, 0); - } m_cbInstancedSpriteBuffer.updateData(m_stInstancedSpriteBuffer, m_context.Get()); BindConstantBufferVS(CB_INSTANCED_SPRITES, m_cbInstancedSpriteBuffer.get()); @@ -1277,8 +1245,6 @@ namespace TEN::Renderer continue; m_stSprite.IsSoftParticle = spriteBucket.IsSoftParticle ? 1 : 0; - m_stSprite.RenderType = spriteBucket.RenderType; - m_cbSprite.updateData(m_stSprite, m_context.Get()); BindConstantBufferVS(CB_SPRITE, m_cbSprite.get()); BindConstantBufferPS(CB_SPRITE, m_cbSprite.get()); @@ -1287,13 +1253,9 @@ namespace TEN::Renderer BindTexture(TEXTURE_COLOR_MAP, spriteBucket.Sprite->Texture, SAMPLER_LINEAR_CLAMP); if (spriteBucket.BlendMode == BLEND_MODES::BLENDMODE_ALPHATEST) - { SetAlphaTest(ALPHA_TEST_GREATER_THAN, ALPHA_TEST_THRESHOLD, true); - } else - { SetAlphaTest(ALPHA_TEST_NONE, 0); - } m_primitiveBatch->Begin(); @@ -1347,8 +1309,6 @@ namespace TEN::Renderer if (resetPipeline) { m_stSprite.IsSoftParticle = info->sprite->SoftParticle ? 1 : 0; - m_stSprite.RenderType = SpriteRenderType::Default; - m_cbSprite.updateData(m_stSprite, m_context.Get()); BindConstantBufferVS(CB_SPRITE, m_cbSprite.get()); BindConstantBufferPS(CB_SPRITE, m_cbSprite.get()); diff --git a/TombEngine/Renderer/Renderer11DrawMenu.cpp b/TombEngine/Renderer/Renderer11DrawMenu.cpp index b90185f4b..3ad88046f 100644 --- a/TombEngine/Renderer/Renderer11DrawMenu.cpp +++ b/TombEngine/Renderer/Renderer11DrawMenu.cpp @@ -571,8 +571,8 @@ namespace TEN::Renderer { auto frameData = AnimFrameInterpData { - &g_Level.Frames[GetAnimData(object.animIndex).FramePtr], - &g_Level.Frames[GetAnimData(object.animIndex).FramePtr], + &g_Level.Frames[g_Level.Anims[object.animIndex].FramePtr], + &g_Level.Frames[g_Level.Anims[object.animIndex].FramePtr], 0.0f }; UpdateAnimation(nullptr, *moveableObject, frameData, 0xFFFFFFFF); diff --git a/TombEngine/Renderer/Renderer11Lara.cpp b/TombEngine/Renderer/Renderer11Lara.cpp index 1be85ccd5..15aefb60a 100644 --- a/TombEngine/Renderer/Renderer11Lara.cpp +++ b/TombEngine/Renderer/Renderer11Lara.cpp @@ -184,8 +184,8 @@ void Renderer11::UpdateLaraAnimations(bool force) mask = MESH_BITS(LM_LINARM) | MESH_BITS(LM_LOUTARM) | MESH_BITS(LM_LHAND); auto revolverFrameData = AnimFrameInterpData { - &g_Level.Frames[Lara.LeftArm.FrameBase + Lara.LeftArm.FrameNumber - GetAnimData(Lara.LeftArm.AnimNumber).frameBase], - &g_Level.Frames[Lara.LeftArm.FrameBase + Lara.LeftArm.FrameNumber - GetAnimData(Lara.LeftArm.AnimNumber).frameBase], + &g_Level.Frames[Lara.LeftArm.FrameBase + Lara.LeftArm.FrameNumber - g_Level.Anims[Lara.LeftArm.AnimNumber].frameBase], + &g_Level.Frames[Lara.LeftArm.FrameBase + Lara.LeftArm.FrameNumber - g_Level.Anims[Lara.LeftArm.AnimNumber].frameBase], 0.0f }; @@ -195,8 +195,8 @@ void Renderer11::UpdateLaraAnimations(bool force) mask = MESH_BITS(LM_RINARM) | MESH_BITS(LM_ROUTARM) | MESH_BITS(LM_RHAND); revolverFrameData = AnimFrameInterpData { - &g_Level.Frames[Lara.RightArm.FrameBase + Lara.RightArm.FrameNumber - GetAnimData(Lara.RightArm.AnimNumber).frameBase], - &g_Level.Frames[Lara.RightArm.FrameBase + Lara.RightArm.FrameNumber - GetAnimData(Lara.RightArm.AnimNumber).frameBase], + &g_Level.Frames[Lara.RightArm.FrameBase + Lara.RightArm.FrameNumber - g_Level.Anims[Lara.RightArm.AnimNumber].frameBase], + &g_Level.Frames[Lara.RightArm.FrameBase + Lara.RightArm.FrameNumber - g_Level.Anims[Lara.RightArm.AnimNumber].frameBase], 0.0f }; @@ -214,8 +214,8 @@ void Renderer11::UpdateLaraAnimations(bool force) mask = MESH_BITS(LM_LOUTARM) | MESH_BITS(LM_LHAND); auto pistolFrameData = AnimFrameInterpData { - &g_Level.Frames[Lara.LeftArm.FrameBase + Lara.LeftArm.FrameNumber - GetAnimData(Lara.LeftArm.AnimNumber).frameBase], - &g_Level.Frames[Lara.LeftArm.FrameBase + Lara.LeftArm.FrameNumber - GetAnimData(Lara.LeftArm.AnimNumber).frameBase], + &g_Level.Frames[Lara.LeftArm.FrameBase + Lara.LeftArm.FrameNumber - g_Level.Anims[Lara.LeftArm.AnimNumber].frameBase], + &g_Level.Frames[Lara.LeftArm.FrameBase + Lara.LeftArm.FrameNumber - g_Level.Anims[Lara.LeftArm.AnimNumber].frameBase], 0.0f }; @@ -227,8 +227,8 @@ void Renderer11::UpdateLaraAnimations(bool force) mask = MESH_BITS(LM_ROUTARM) | MESH_BITS(LM_RHAND); pistolFrameData = AnimFrameInterpData { - &g_Level.Frames[Lara.RightArm.FrameBase + Lara.RightArm.FrameNumber - GetAnimData(Lara.RightArm.AnimNumber).frameBase], - &g_Level.Frames[Lara.RightArm.FrameBase + Lara.RightArm.FrameNumber - GetAnimData(Lara.RightArm.AnimNumber).frameBase], + &g_Level.Frames[Lara.RightArm.FrameBase + Lara.RightArm.FrameNumber - g_Level.Anims[Lara.RightArm.AnimNumber].frameBase], + &g_Level.Frames[Lara.RightArm.FrameBase + Lara.RightArm.FrameNumber - g_Level.Anims[Lara.RightArm.AnimNumber].frameBase], 0.0f }; diff --git a/TombEngine/Renderer/RendererSprites.cpp b/TombEngine/Renderer/RendererSprites.cpp index fc6181329..5bae9b072 100644 --- a/TombEngine/Renderer/RendererSprites.cpp +++ b/TombEngine/Renderer/RendererSprites.cpp @@ -5,7 +5,7 @@ namespace TEN::Renderer { void Renderer11::AddSpriteBillboard(RendererSprite* sprite, const Vector3& pos, const Vector4& color, float orient2D, float scale, - Vector2 size, BLEND_MODES blendMode, bool isSoftParticle, RenderView& view, SpriteRenderType renderType) + Vector2 size, BLEND_MODES blendMode, bool isSoftParticle, RenderView& view) { if (m_Locked) return; @@ -32,14 +32,13 @@ namespace TEN::Renderer spr.c3 = color; spr.c4 = color; spr.color = color; - spr.renderType = renderType; view.spritesToDraw.push_back(spr); } void Renderer11::AddSpriteBillboardConstrained(RendererSprite* sprite, const Vector3& pos, const Vector4 &color, float orient2D, float scale, Vector2 size, BLEND_MODES blendMode, const Vector3& constrainAxis, - bool softParticles, RenderView& view, SpriteRenderType renderType) + bool softParticles, RenderView& view) { if (m_Locked) return; @@ -67,14 +66,13 @@ namespace TEN::Renderer spr.c3 = color; spr.c4 = color; spr.color = color; - spr.renderType = renderType; view.spritesToDraw.push_back(spr); } void Renderer11::AddSpriteBillboardConstrainedLookAt(RendererSprite* sprite, const Vector3& pos, const Vector4& color, float orient2D, float scale, Vector2 size, BLEND_MODES blendMode, const Vector3& lookAtAxis, - bool isSoftParticle, RenderView& view, SpriteRenderType renderType) + bool isSoftParticle, RenderView& view) { if (m_Locked) return; @@ -102,7 +100,6 @@ namespace TEN::Renderer spr.c3 = color; spr.c4 = color; spr.color = color; - spr.renderType = renderType; view.spritesToDraw.push_back(spr); } @@ -111,12 +108,12 @@ namespace TEN::Renderer const Vector4 color, float orient2D, float scale, Vector2 size, BLEND_MODES blendMode, bool softParticles, RenderView& view) { - AddQuad(sprite, vertex0, vertex1, vertex2, vertex3, color, color, color, color, orient2D, scale, size, blendMode, softParticles, view, SpriteRenderType::Default); + AddQuad(sprite, vertex0, vertex1, vertex2, vertex3, color, color, color, color, orient2D, scale, size, blendMode, softParticles, view); } void Renderer11::AddQuad(RendererSprite* sprite, const Vector3& vertex0, const Vector3& vertex1, const Vector3& vertex2, const Vector3& vertex3, const Vector4& color0, const Vector4& color1, const Vector4& color2, const Vector4& color3, float orient2D, - float scale, Vector2 size, BLEND_MODES blendMode, bool isSoftParticle, RenderView& view, SpriteRenderType renderType) + float scale, Vector2 size, BLEND_MODES blendMode, bool isSoftParticle, RenderView& view) { if (m_Locked) return; @@ -146,7 +143,6 @@ namespace TEN::Renderer spr.BlendMode = blendMode; spr.pos = (vertex0 + vertex1 + vertex2 + vertex3) / 4.0f; spr.SoftParticle = isSoftParticle; - spr.renderType = renderType; view.spritesToDraw.push_back(spr); } @@ -154,12 +150,12 @@ namespace TEN::Renderer void Renderer11::AddColoredQuad(const Vector3& vertex0, const Vector3& vertex1, const Vector3& vertex2, const Vector3& vertex3, const Vector4& color, BLEND_MODES blendMode, RenderView& view) { - AddColoredQuad(vertex0, vertex1, vertex2, vertex3, color, color, color, color, blendMode, view, SpriteRenderType::Default); + AddColoredQuad(vertex0, vertex1, vertex2, vertex3, color, color, color, color, blendMode, view); } void Renderer11::AddColoredQuad(const Vector3& vertex0, const Vector3& vertex1, const Vector3& vertex2, const Vector3& vertex3, const Vector4& color0, const Vector4& color1, const Vector4& color2, const Vector4& color3, - BLEND_MODES blendMode, RenderView& view, SpriteRenderType renderType) + BLEND_MODES blendMode, RenderView& view) { if (m_Locked) return; @@ -179,7 +175,6 @@ namespace TEN::Renderer sprite.BlendMode = blendMode; sprite.pos = (vertex0 + vertex1 + vertex2 + vertex3) / 4.0f; sprite.SoftParticle = false; - sprite.renderType = renderType; view.spritesToDraw.push_back(sprite); } diff --git a/TombEngine/Renderer/RendererSprites.h b/TombEngine/Renderer/RendererSprites.h index 6cab69039..c8a34f8e5 100644 --- a/TombEngine/Renderer/RendererSprites.h +++ b/TombEngine/Renderer/RendererSprites.h @@ -6,12 +6,6 @@ namespace TEN::Renderer struct RenderView; struct RendererSprite; - enum SpriteRenderType - { - Default, - LaserBarrier - }; - struct RendererSpriteToDraw { RENDERER_SPRITE_TYPE Type; @@ -34,6 +28,5 @@ namespace TEN::Renderer Vector3 ConstrainAxis; Vector3 LookAtAxis; bool SoftParticle; - SpriteRenderType renderType = SpriteRenderType::Default; }; } diff --git a/TombEngine/Resources.aps b/TombEngine/Resources.aps index 9f242a9896c2ac2c3fa90abc58cb0db0ab154c2a..82126b3c4aa052f304cd91102a4418487148ace5 100644 GIT binary patch delta 733 zcmZ4RlI6*BmI(@sdJ`2TMI>1mpkR#wBZG@oj7w_S^bdNBD$EQFQzrJxGftVf)|8Wh zft7)gfq{W>;%ix^FN~A97?l_=Ox9%-XLe%{p6t#j&l|+x!{ExGz~I7=%1}0WBBS`^ zWsF*k29qx`Hu5?%Xfh};7%>=4j%QlSYRaI;VAw3kyj_r)alRsB%=V2cjOC1y zVGQ{UISi!?xeTccB@9IjnGDGc3Jh)x`P*&P7+*6Je}j+{I}oMVvJ<6W?9Kl@){YDeo=oV5o&pJ*wf!H-qX*`A1RQn*^mN!dY(R`7>dAgeZ~+}A5B*?VElrjCf1OVTb+SH z1S4c1{z7()-t=BWMoE4|j89<##qmVx=@$$cSr|R0Uo~WuX9{4OoW&+JUBHNug>lAo zQ6olqrUbFcRbo=p13*F=(?dZ*8&oErQjwZI0VEVLeJV(3!QRQc_DW5^020cWeibD2 z;qPRwe^S#0j2T%NcT5*GW|U`6kYJo%Ex{-`Jpd$VF+CI{ctDwP`fX)KN!A!<28KD) zr-H<6G#IDrYcSffgFNy@gK_$64Ms~=PzsQlZfU|O&kBlEo$0Y4CMYTrrZ<`}$^!s+ C0;&xF delta 889 zcmaFzoMpjFmI(@s?h_Ryb=g@MpdiDLk-^z2CbT%Us5r(iH8(#s#w9)p z!L<1<)AqYejPn&4BevJ7FqSilI)V+$WJqMlVE~cE44Djh+j-R(Uo%NRXJ%kfVPIhJ zUXHU82lJg8FCr&8B!Ty7+e_g8Il=F;a&#GyMw*z z!BEPOG~H2`(U*~ZdcQ7XCc6=X5rY|n(e(eijMj{+r`zf=N;0xf57%RqlP4H`D%0od zF^UtT?tvbo7%}P;^ch2t17~`pKI0c+G|o3*k1AAhAGo4K_W5ollkPOSX;vw z7@kbu2@>h4o@`ew#kxY3f#J&ZpCFMrk0<**mSS5Wz`&sLZ@QHcqa5=aKE~T)~1WRi$PXDjYXv+qQXcf)r lcE*fWte`~XGriWBQJxi)HX^1k1Tj}LF)-|ze$<#z9so}m-*W%} diff --git a/TombEngine/Scripting/Internal/TEN/Objects/Moveable/MoveableObject.cpp b/TombEngine/Scripting/Internal/TEN/Objects/Moveable/MoveableObject.cpp index ead9f6c8d..8d5c2a375 100644 --- a/TombEngine/Scripting/Internal/TEN/Objects/Moveable/MoveableObject.cpp +++ b/TombEngine/Scripting/Internal/TEN/Objects/Moveable/MoveableObject.cpp @@ -814,7 +814,7 @@ void Moveable::SetAnimNumber(int animNumber) int Moveable::GetFrameNumber() const { - return (m_item->Animation.FrameNumber - GetAnimData(*m_item).frameBase); + return m_item->Animation.FrameNumber - g_Level.Anims[m_item->Animation.AnimNumber].frameBase; } Vec3 Moveable::GetVelocity() const @@ -835,15 +835,15 @@ void Moveable::SetVelocity(Vec3 velocity) void Moveable::SetFrameNumber(int frameNumber) { - const auto& anim = GetAnimData(*m_item); - - unsigned int frameCount = anim.frameEnd - anim.frameBase; + auto const fBase = g_Level.Anims[m_item->Animation.AnimNumber].frameBase; + auto const fEnd = g_Level.Anims[m_item->Animation.AnimNumber].frameEnd; + auto frameCount = fEnd - fBase; bool cond = frameNumber < frameCount; const char* err = "Invalid frame number {}; max frame number for anim {} is {}."; if (ScriptAssertF(cond, err, frameNumber, m_item->Animation.AnimNumber, frameCount-1)) { - m_item->Animation.FrameNumber = frameNumber + anim.frameBase; + m_item->Animation.FrameNumber = frameNumber + fBase; } else { @@ -1168,19 +1168,18 @@ bool Moveable::MeshExists(int index) const return true; } -// Attach camera and camera target to object mesh. +//Attach camera and camera target to a mesh of an object. void Moveable::AttachObjCamera(short camMeshId, Moveable& mov, short targetMeshId) { if ((m_item->Active || m_item->IsLara()) && (mov.m_item->Active || mov.m_item->IsLara())) ObjCamera(m_item, camMeshId, mov.m_item, targetMeshId, true); } -// Borrow animtaion and state ID from object. -void Moveable::AnimFromObject(GAME_OBJECT_ID objectID, int animNumber, int stateID) +//Borrow an animtaion and state id from an object. +void Moveable::AnimFromObject(GAME_OBJECT_ID object, int animNumber, int stateID) { - m_item->Animation.AnimObjectID = objectID; - m_item->Animation.AnimNumber = Objects[objectID].animIndex + animNumber; + m_item->Animation.AnimNumber = Objects[object].animIndex + animNumber; m_item->Animation.ActiveState = stateID; - m_item->Animation.FrameNumber = GetAnimData(*m_item).frameBase; + m_item->Animation.FrameNumber = g_Level.Anims[m_item->Animation.AnimNumber].frameBase; AnimateItem(m_item); } diff --git a/TombEngine/Scripting/Internal/TEN/Objects/ObjectIDs.h b/TombEngine/Scripting/Internal/TEN/Objects/ObjectIDs.h index db7024bd9..b3d03bf4e 100644 --- a/TombEngine/Scripting/Internal/TEN/Objects/ObjectIDs.h +++ b/TombEngine/Scripting/Internal/TEN/Objects/ObjectIDs.h @@ -1938,7 +1938,7 @@ static const std::unordered_map kObjIDs { { "LARA_START_POS", ID_LARA_START_POS }, { "TELEPORTER", ID_TELEPORTER }, { "LIFT_TELEPORTER", ID_LIFT_TELEPORTER }, - { "LASER_BARRIER", ID_LASER_BARRIER }, + { "LASERS", ID_LASERS }, { "STEAM_LASERS", ID_STEAM_LASERS }, { "FLOOR_LASERS", ID_FLOOR_LASERS }, { "KILL_ALL_TRIGGERS", ID_KILL_ALL_TRIGGERS }, diff --git a/TombEngine/Shaders/AnimatedTextures.hlsli b/TombEngine/Shaders/AnimatedTextures.hlsli index de62dbe1a..98ab626b0 100644 --- a/TombEngine/Shaders/AnimatedTextures.hlsli +++ b/TombEngine/Shaders/AnimatedTextures.hlsli @@ -18,18 +18,15 @@ cbuffer AnimatedBuffer : register(b6) float2 CalculateUVRotate(float2 uv, unsigned int frame) { if (FPS == 0) - { return uv; - } else { float step = uv.y - AnimFrames[frame].TopLeft.y; - float vert = AnimFrames[frame].TopLeft.y + (step / 2); - - float height = (AnimFrames[frame].BottomLeft.y - AnimFrames[frame].TopLeft.y) / 2; - float relPos = 1.0f - (Frame % FPS) / (float)FPS; - + float vert = AnimFrames[frame].TopLeft.y + step / 2.0f; + float height = (AnimFrames[frame].BottomLeft.y - AnimFrames[frame].TopLeft.y) / 2.0f; + float relPos = 1.0f - (Frame % FPS) / float(FPS); float newUV = vert + height * relPos; + return float2(uv.x, newUV); } } @@ -37,7 +34,7 @@ float2 CalculateUVRotate(float2 uv, unsigned int frame) float2 GetFrame(unsigned int index, unsigned int offset) { float speed = FPS / 30.0f; - int frame = int(Frame * speed + offset) % NumAnimFrames; + int frame = (int)(Frame * speed + offset) % NumAnimFrames; float2 result = 0; @@ -46,19 +43,16 @@ float2 GetFrame(unsigned int index, unsigned int offset) case 0: result = AnimFrames[frame].TopLeft; break; - case 1: result = AnimFrames[frame].TopRight; break; - case 2: result = AnimFrames[frame].BottomRight; break; - case 3: result = AnimFrames[frame].BottomLeft; break; } return result; -} +} \ No newline at end of file diff --git a/TombEngine/Shaders/Blending.hlsli b/TombEngine/Shaders/Blending.hlsli index 9f31f806b..b286561cf 100644 --- a/TombEngine/Shaders/Blending.hlsli +++ b/TombEngine/Shaders/Blending.hlsli @@ -3,29 +3,25 @@ #include "./Math.hlsli" -#define ALPHA_TEST_NONE 0 +#define ALPHA_TEST_NONE 0 #define ALPHA_TEST_GREATER_THAN 1 -#define ALPHA_TEST_LESS_THAN 2 +#define ALPHA_TEST_LESS_THAN 2 -#define BLENDMODE_OPAQUE 0, -#define BLENDMODE_ALPHATEST 1 -#define BLENDMODE_ADDITIVE 2 -#define BLENDMODE_NOZTEST 4 +#define BLENDMODE_OPAQUE 0, +#define BLENDMODE_ALPHATEST 1 +#define BLENDMODE_ADDITIVE 2 +#define BLENDMODE_NOZTEST 4 #define BLENDMODE_SUBTRACTIVE 5 -#define BLENDMODE_WIREFRAME 6 -#define BLENDMODE_EXCLUDE 8 -#define BLENDMODE_SCREEN 9 -#define BLENDMODE_LIGHTEN 10 -#define BLENDMODE_ALPHABLEND 11 - -#define ZERO float3(0.0f, 0.0f, 0.0f) -#define EIGHT_FIVE float3( 0.85f, 0.85f, 0.85f) -#define BLENDING 0.707f +#define BLENDMODE_WIREFRAME 6 +#define BLENDMODE_EXCLUDE 8 +#define BLENDMODE_SCREEN 9 +#define BLENDMODE_LIGHTEN 10 +#define BLENDMODE_ALPHABLEND 11 cbuffer BlendingBuffer : register(b12) { - uint BlendMode; - int AlphaTest; + uint BlendMode; + int AlphaTest; float AlphaThreshold; }; @@ -52,124 +48,30 @@ float4 DoFog(float4 sourceColor, float4 fogColor, float value) switch (BlendMode) { - case BLENDMODE_ADDITIVE: - case BLENDMODE_SCREEN: - case BLENDMODE_LIGHTEN: - fogColor.xyz *= Luma(sourceColor.xyz); - break; + case BLENDMODE_ADDITIVE: + case BLENDMODE_SCREEN: + case BLENDMODE_LIGHTEN: + fogColor.xyz *= Luma(sourceColor.xyz); + break; - case BLENDMODE_SUBTRACTIVE: - case BLENDMODE_EXCLUDE: - fogColor.xyz *= 1.0f - Luma(sourceColor.xyz); - break; + case BLENDMODE_SUBTRACTIVE: + case BLENDMODE_EXCLUDE: + fogColor.xyz *= 1.0f - Luma(sourceColor.xyz); + break; - case BLENDMODE_ALPHABLEND: - fogColor.w = sourceColor.w; - break; + case BLENDMODE_ALPHABLEND: + fogColor.w = sourceColor.w; + break; - default: - break; + default: + break; } if (fogColor.w > sourceColor.w) fogColor.w = sourceColor.w; - + float4 result = lerp(sourceColor, fogColor, value); return result; } -float4 DoLaserBarrierEffect(float3 input, float4 output, float2 uv, float faceFactor, float timeUniform) -{ - float2 noiseTexture = input.xy / uv; - noiseTexture *= uv.x / uv.y; - float noiseValue = FractalNoise(noiseTexture * 8.0f - timeUniform); - - float4 color = output; - float gradL = smoothstep(0.0, 1.0, uv.x); - float gradR = smoothstep(1.0, 0.0, uv.x); - float gradT = smoothstep(0.0, 0.25, uv.y); - float gradB = 1.0 - smoothstep(0.75, 1.0, uv.y); - - float distortion = timeUniform / 1024; - - float3 noisix = SimplexNoise - ( - SimplexNoise(float3(input.r * distortion, input.g, input.b)) - ); - float3 shadowx = SimplexNoise - ( - cos(SimplexNoise(sin(timeUniform + input.rgb * 400))) - ); - - noisix.x = noisix.x > 0.9 ? 0.7 : noisix.x; - noisix.y = noisix.y > 0.9 ? 0.7 : noisix.y; - noisix.z = noisix.z > 0.9 ? 0.7 : noisix.z; - color.rgb *= noisix + 1.3f; - color.rgb -= noisix + 0.2f; - - float frequency = 0.1; - float amplitude = 0.8; - float persistence = 0.5; - float noiseValue2 = 0; - float noiseValue3 = 0; - - float2 uv84 = (uv * 2.4); - uv84.y = (uv84.y - 1.3); - uv84.x = (uv84.x / 1.3); - float2 uv85 = (uv / 2.4); - - noiseValue2 = AnimatedNebula(uv84, timeUniform * 0.1f); - - frequency = 2.5; - amplitude = 0.2; - persistence = 4.7; - - float2 uv83 = uv * 8; - uv83.y = (uv.y + (timeUniform * 0.02)); - noiseValue3 = NebularNoise(uv83, frequency, amplitude, persistence); - - noiseValue2 += AnimatedNebula(uv/2, timeUniform * 0.05f); - - color.rgb -= noiseValue - 0.7f; - color.rgb *= noiseValue2 + 1.0f; - color.rgb += noiseValue3; - color.a *= noiseValue + 0.01f; - - color.rgb -= shadowx + 0.1f; - - color.a *= noiseValue2 + 0.9f; - color.a *= noiseValue3 + 2.0f; - - float fade0 = faceFactor * max(0.0, 1.0 - dot(float2(BLENDING, BLENDING), float2(gradL, gradT))); - float fade1 = faceFactor * max(0.0, 1.0 - dot(float2(BLENDING, BLENDING), float2(gradL, gradB))); - float fade2 = faceFactor * max(0.0, 1.0 - dot(float2(BLENDING, BLENDING), float2(gradR, gradB))); - float fade3 = faceFactor * max(0.0, 1.0 - dot(float2(BLENDING, BLENDING), float2(gradR, gradT))); - - float fadeL = 1.40f * faceFactor * faceFactor * (1.0 - gradL); - float fadeB = 2.75f * faceFactor * faceFactor * (1.0 - gradB); - float fadeR = 1.40f * faceFactor * faceFactor * (1.0 - gradR); - float fadeT = 2.75f * faceFactor * faceFactor * (1.0 - gradT); - - float fade = max( - max(max(fade0, fade1), max(fade2, fade3)), - max(max(fadeL, fadeR), max(fadeB, fadeT))); - - float scale = 1.0 - fade; - - color *= scale; - float decayFactor = 1.0f; - if (uv.y > 0.5f && uv.y < 1.0f) - { - decayFactor = uv.y / 2; - } - if (uv.y < 0.5f && uv.y > 0.0f) - { - decayFactor = (1.0f - uv.y) / 2; - } - color *= decayFactor; - - color.rgb = smoothstep(ZERO, EIGHT_FIVE, color.rgb); - return color; -} - -#endif // BLENDINGSHADER +#endif // BLENDINGSHADER \ No newline at end of file diff --git a/TombEngine/Shaders/DX11_Sprites.fx b/TombEngine/Shaders/DX11_Sprites.fx index 34a66a1a1..f207fda34 100644 --- a/TombEngine/Shaders/DX11_Sprites.fx +++ b/TombEngine/Shaders/DX11_Sprites.fx @@ -6,12 +6,9 @@ // NOTE: This shader is used for all 3D and alpha blended sprites, because we send aleady transformed vertices to the GPU // instead of instances -#define FADE_FACTOR .789f - cbuffer SpriteBuffer : register(b9) { float IsSoftParticle; - int RenderType; }; struct PixelShaderInput @@ -37,7 +34,7 @@ PixelShaderInput VS(VertexShaderInput input) float4 worldPosition = float4(input.Position, 1.0f); output.Position = mul(worldPosition, ViewProjection); - output.PositionCopy = output.Position; + output.PositionCopy = output.Position; output.Normal = input.Normal; output.Color = input.Color; output.UV = input.UV; @@ -74,12 +71,7 @@ float4 PS(PixelShaderInput input) : SV_TARGET output.w = min(output.w, fade); } - if (RenderType == 1) - { - output = DoLaserBarrierEffect(input.Position, output, input.UV, FADE_FACTOR, Frame); - } - output = DoFog(output, float4(0.0f, 0.0f, 0.0f, 0.0f), input.Fog); return output; -} +} \ No newline at end of file diff --git a/TombEngine/Shaders/Math.hlsli b/TombEngine/Shaders/Math.hlsli index 95daf2bbc..b9ef16545 100644 --- a/TombEngine/Shaders/Math.hlsli +++ b/TombEngine/Shaders/Math.hlsli @@ -1,13 +1,12 @@ #ifndef MATH #define MATH -#define PI 3.1415926535897932384626433832795028841971693993751058209749445923 -#define PI2 6.2831853071795864769252867665590057683943387987502116419498891846 -#define OCTAVES 6 +#define PI 3.1415926535897932384626433832795028841971693993751058209749445923 +#define PI2 6.2831853071795864769252867665590057683943387987502116419498891846 float Luma(float3 color) { - // Use Rec.709 trichromat formula to get perceptive luma value. + // Use Rec.709 trichromat formula to get perceptive luma value return float((color.x * 0.2126f) + (color.y * 0.7152f) + (color.z * 0.0722f)); } @@ -27,257 +26,121 @@ float3 Screen(float3 ambient, float3 tint) float LinearizeDepth(float depth, float nearPlane, float farPlane) { - return ((nearPlane * 2) / (farPlane + nearPlane - (depth * (farPlane - nearPlane)))); + return (2.0f * nearPlane) / (farPlane + nearPlane - depth * (farPlane - nearPlane)); } -float3 Mod289(float3 x) -{ - return (x - floor(x * (1 / 289.0f)) * 289.0f); +float3 Mod289(float3 x) { + return x - floor(x * (1.0 / 289.0)) * 289.0; } -float4 Mod289(float4 x) -{ - return (x - floor(x * (1 / 289.0f)) * 289.0f); +float4 Mod289(float4 x) { + return x - floor(x * (1.0 / 289.0)) * 289.0; } -float4 Permute(float4 x) -{ - return Mod289(((x * 34.0f) + 10.0f) * x); +float4 Permute(float4 x) { + return Mod289(((x*34.0)+10.0)*x); } float4 TaylorInvSqrt(float4 r) { - return (1.79284291400159f - 0.85373472095314f * r); + return 1.79284291400159 - 0.85373472095314 * r; } float SimplexNoise(float3 v) { - const float2 C = float2(1 / 6.0f, 1 / 3.0f) ; - const float4 D = float4(0.0f, 0.5f, 1.0f, 2.0f); + const float2 C = float2(1.0/6.0, 1.0/3.0) ; + const float4 D = float4(0.0, 0.5, 1.0, 2.0); - // First corner. - float3 i = floor(v + dot(v, C.yyy)); - float3 x0 = v - i + dot(i, C.xxx); +// First corner + float3 i = floor(v + dot(v, C.yyy) ); + float3 x0 = v - i + dot(i, C.xxx) ; - // Other corners. +// Other corners float3 g = step(x0.yzx, x0.xyz); - float3 l = 1.0f - g; - float3 i1 = min(g.xyz, l.zxy); - float3 i2 = max(g.xyz, l.zxy); + float3 l = 1.0 - g; + float3 i1 = min( g.xyz, l.zxy ); + float3 i2 = max( g.xyz, l.zxy ); - // x0 = x0 - 0.0 + 0.0 * C.xxx; - // x1 = x0 - i1 + 1.0 * C.xxx; - // x2 = x0 - i2 + 2.0 * C.xxx; - // x3 = x0 - 1.0 + 3.0 * C.xxx; +// x0 = x0 - 0.0 + 0.0 * C.xxx; +// x1 = x0 - i1 + 1.0 * C.xxx; +// x2 = x0 - i2 + 2.0 * C.xxx; +// x3 = x0 - 1.0 + 3.0 * C.xxx; float3 x1 = x0 - i1 + C.xxx; - float3 x2 = x0 - i2 + C.yyy;// 2.0 * C.x = 1 / 3 = C.y - float3 x3 = x0 - D.yyy; // -1.0 + 3.0 * C.x = -0.5 = -D.y + float3 x2 = x0 - i2 + C.yyy;// 2.0*C.x = 1/3 = C.y + float3 x3 = x0 - D.yyy; // -1.0+3.0*C.x = -0.5 = -D.y - // Permutations. +// Permutations i = Mod289(i); - float4 p = Permute( - Permute( - Permute( - i.z + float4(0.0f, i1.z, i2.z, 1.0f)) + - i.y + float4(0.0f, i1.y, i2.y, 1.0f)) + - i.x + float4(0.0f, i1.x, i2.x, 1.0f)); + float4 p = Permute( Permute( Permute( + i.z + float4(0.0, i1.z, i2.z, 1.0 )) + + i.y + float4(0.0, i1.y, i2.y, 1.0 )) + + i.x + float4(0.0, i1.x, i2.x, 1.0 )); - // Gradients: 7x7 points over square, mapped onto octahedron. - // Ring size 17*17 = 289 is close to multiple of 49 (49 * 6 = 294). - float n_ = 0.142857142857f; // 1.0/7.0 +// Gradients: 7x7 points over a square, mapped onto an octahedron. +// The ring size 17*17 = 289 is close to a multiple of 49 (49*6 = 294) + float n_ = 0.142857142857; // 1.0/7.0 float3 ns = n_ * D.wyz - D.xzx; - float4 j = p - 49.0f * floor(p * ns.z * ns.z);// mod(p, 7 * 7) + float4 j = p - 49.0 * floor(p * ns.z * ns.z);// mod(p,7*7) float4 x_ = floor(j * ns.z); - float4 y_ = floor(j - 7.0f * x_);// mod(j, N) + float4 y_ = floor(j - 7.0 * x_ );// mod(j,N) - float4 x = x_ * ns.x + ns.yyyy; - float4 y = y_ * ns.x + ns.yyyy; - float4 h = 1.0f - abs(x) - abs(y); + float4 x = x_ *ns.x + ns.yyyy; + float4 y = y_ *ns.x + ns.yyyy; + float4 h = 1.0 - abs(x) - abs(y); - float4 b0 = float4(x.x, x.y, y.x, y.y); - float4 b1 = float4(x.z, x.w, y.z, y.w); + float4 b0 = float4( x.x, x.y, y.x, y.y ); + float4 b1 = float4( x.z, x.w, y.z, y.w ); //float4 s0 = float4(lessThan(b0,0.0))*2.0 - 1.0; //float4 s1 = float4(lessThan(b1,0.0))*2.0 - 1.0; - float4 s0 = floor(b0) * 2.0 + 1.0; - float4 s1 = floor(b1) * 2.0 + 1.0; - float4 sh = -step(h, float4(0.0f, 0.0f, 0.0f, 0.0f)); + float4 s0 = floor(b0)*2.0 + 1.0; + float4 s1 = floor(b1)*2.0 + 1.0; + float4 sh = -step(h, float4(0.0f,0.0f,0.0f,0.0f)); - float4 a0 = b0.xzyw + s0.xzyw * sh.xxyy; - float4 a1 = b1.xzyw + s1.xzyw * sh.zzww; + float4 a0 = b0.xzyw + s0.xzyw*sh.xxyy; + float4 a1 = b1.xzyw + s1.xzyw*sh.zzww; - float3 p0 = float3(a0.xy, h.x); - float3 p1 = float3(a0.zw, h.y); - float3 p2 = float3(a1.xy, h.z); - float3 p3 = float3(a1.zw, h.w); + float3 p0 = float3(a0.xy,h.x); + float3 p1 = float3(a0.zw,h.y); + float3 p2 = float3(a1.xy,h.z); + float3 p3 = float3(a1.zw,h.w); - // Normalize gradients. - float4 norm = TaylorInvSqrt(float4(dot(p0, p0), dot(p1, p1), dot(p2, p2), dot(p3, p3))); +//Normalise gradients + float4 norm = TaylorInvSqrt(float4(dot(p0,p0), dot(p1,p1), dot(p2, p2), dot(p3,p3))); p0 *= norm.x; p1 *= norm.y; p2 *= norm.z; p3 *= norm.w; - // Mix final noise value. - float4 m = max(0.5 - float4(dot(x0, x0), dot(x1, x1), dot(x2, x2), dot(x3, x3)), 0.0); +// Mix final noise value + float4 m = max(0.5 - float4(dot(x0,x0), dot(x1,x1), dot(x2,x2), dot(x3,x3)), 0.0); m = m * m; - - return 105.0 * dot(m*m, float4(dot(p0, x0), dot(p1, x1), dot(p2, x2), dot(p3, x3))); -} - -float2 Gradient2D(float2 p) -{ - float angle = 2 * 3.14159265359f * frac(sin(dot(p, float2(12.9898f, 78.233f))) * 43758.5453f); - return normalize(float2(cos(angle), sin(angle))); -} - -float NebularNoise(float2 uv, float frequency, float amplitude, float persistence) -{ - float noiseValue = 0.0f; - float scale = 1.0f; - float range = 1.0f; - float2 p = uv * frequency; - - float2 floorP = floor(p); - float2 fracP = frac(p); - float4 v = float4(0.0f, 1.0f, 0.0f, 1.0f); - - float2 bl = floorP; - float2 br = bl + float2(1.0f, 0.0f); - float2 tl = bl + float2(0.0f, 1.0f); - float2 tr = bl + float2(1.0f, 1.0f); - - float2 v1 = fracP; - float2 v2 = v1 - float2(1.0f, 0.0f); - float2 v3 = v1 - float2(0.0f, 1.0f); - float2 v4 = v1 - float2(1.0f, 1.0f); - - float dot1 = dot(Gradient2D(bl), v1); - float dot2 = dot(Gradient2D(br), v2); - float dot3 = dot(Gradient2D(tl), v3); - float dot4 = dot(Gradient2D(tr), v4); - - float u = smoothstep(0.0f, 1.0f, v1.x); - float2 a = lerp(float2(dot1, dot3), float2(dot2, dot4), u); - - float k = smoothstep(0.0f, 1.0f, v1.y); - float b = lerp(a.x, a.y, k); - - noiseValue += b * scale / range; - - range += amplitude; - scale *= persistence; - p *= 2.0f; - - return noiseValue; -} - -float Noise(float2 p) -{ - return frac(sin(dot(p, float2(12.9898f, 78.233f))) * 43758.5453f); -} - -float PerlinNoise(float2 p) -{ - float2 i = floor(p); - float2 f = frac(p); - - float a = Noise(i); - float b = Noise(i + float2(1.0f, 0.0f)); - float c = Noise(i + float2(0.0f, 1.0f)); - float d = Noise(i + float2(1.0, 1.0f)); - - float2 u = f * f * (3.0f - 2.0f * f); - - return lerp(lerp(a, b, u.x), lerp(c, d, u.x), u.y); -} - -float4 AnimatedNebula(float2 uv, float time) -{ - // Scale UV coordinates. - float2 scaledUV = uv; - - // Apply horizontal mirroring. - scaledUV.y = abs(scaledUV.y); - - // Generate noise value using Perlin noise. - float noiseValue = PerlinNoise(scaledUV.xy + time); - - // Apply turbulence to noise value. - float turbulence = noiseValue * 0.9; - float2 distortedUV = scaledUV + turbulence; - - // Interpolate between two main colors based on distorted UV coordinates. - float4 color1 = float4(0.2f, 0.4f, 0.8f, 0.0f); - float4 color2 = float4(0.6f, 0.1f, 0.5f, 0.0f); - float4 interpolatedColor = lerp(color1, color2, saturate(distortedUV.y)); - - // Add some brightness flickering based on noise value. - interpolatedColor *= 1.0f + noiseValue * 1.3f; - return interpolatedColor; -} - -float RandomValue(float2 input) -{ - return frac(sin(dot(input, float2(12.9898, 78.233))) * 43758.5453123); -} - -float Noise2D(float2 input) -{ - float2 i = floor(input); - float2 f = frac(input); - - // Four corners in 2D of a tile - float a = RandomValue(i); - float b = RandomValue(i + float2(1.0, 0.0)); - float c = RandomValue(i + float2(0.0, 1.0)); - float d = RandomValue(i + float2(1.0, 1.0)); - - float2 u = f * f * (3.0 - 2.0 * f); - - return lerp(a, b, u.x) + - (c - a) * u.y * (1.0 - u.x) + - (d - b) * u.x * u.y; -} - -float FractalNoise(float2 input) -{ - float value = 0.0; - float amplitude = .5; - float frequency = 0.; - - // Octave loop. - for (int i = 0; i < OCTAVES; i++) - { - value += amplitude * Noise2D(input); - input *= 2.0; - amplitude *= 0.5; - } - - return value; + return 105.0 * dot( m*m, float4( dot(p0,x0), dot(p1,x1), + dot(p2,x2), dot(p3,x3) ) ); } float3 NormalNoise(float3 v, float3 i, float3 n) { - // Resulting vector. +//the resulting vector float3 r = float3(.0f,.0f,.0f); - // Interpolates lerp(v,i,dot(n,i)) - //v, which is the reference of the pixel and - //i, a vector perturbed with SimpleNoise - //the threshold dot(n,i) is based on a dot product between - //n, the normal and each tuple from it (xy, xz and yz) - //and the same for the vector from the noise +//interpolates lerp(v,i,dot(n,i)) +//v, which is the reference of the pixel and +//i, a vector perturbed with SimpleNoise +//the threshold dot(n,i) is based on a dot product between +//n, the normal and each tuple from it (xy, xz and yz) +//and the same for the vector from the noise r.x = lerp(v.x, i.x, dot(n.xy,i.xy))*.9f; r.y = lerp(v.y, i.y, dot(n.xz,i.xz))*.75f; r.z = lerp(v.z, i.z, dot(n.yz,i.yz))*.8f; - // c = threshold based on tuples of reference pixel. +//c, is a threshold based on the tuples of the reference pixel float c = dot(v.xy,v.yz); - // Return perturbed pixel based on reference pixel and resulting vector with threshold c attenuated by 2/5 times. - return lerp(v, r, c * 0.3f); +//returns the perturbed pixel based on the reference pixel +//and the resulting vector, with a threshold c attenuated by 2/5 times + return lerp(v,r,c*.3f); } #endif // MATH diff --git a/TombEngine/Specific/Input/Input.cpp b/TombEngine/Specific/Input/Input.cpp index 33a24c7b6..0ab8b2dd0 100644 --- a/TombEngine/Specific/Input/Input.cpp +++ b/TombEngine/Specific/Input/Input.cpp @@ -784,9 +784,6 @@ namespace TEN::Input for (int i = 0; i < KEY_COUNT; i++) g_Configuration.KeyboardLayout[i] = KeyboardLayout[1][i]; - // Additionally turn on thumbstick camera and vibration. - g_Configuration.EnableRumble = g_Configuration.EnableThumbstickCameraControl = true; - return true; } else diff --git a/TombEngine/TombEngine.vcxproj b/TombEngine/TombEngine.vcxproj index ffafe180a..a741272ae 100644 --- a/TombEngine/TombEngine.vcxproj +++ b/TombEngine/TombEngine.vcxproj @@ -593,7 +593,6 @@ CALL gen.bat - @@ -1023,7 +1022,6 @@ CALL gen.bat -