diff --git a/TombEngine/Game/Lara/lara_one_gun.cpp b/TombEngine/Game/Lara/lara_one_gun.cpp index a071d771b..59ca1993a 100644 --- a/TombEngine/Game/Lara/lara_one_gun.cpp +++ b/TombEngine/Game/Lara/lara_one_gun.cpp @@ -1419,7 +1419,7 @@ void HandleProjectile(ItemInfo& item, ItemInfo& emitter, const Vector3i& prevPos if (type == ProjectileType::Explosive && item.ItemFlags[3]) { // Fire trail and water collision for grenade fragments - TriggerFireFlame(item.Pose.Position.x, item.Pose.Position.y, item.Pose.Position.z, FlameType::Medium, Vector3(1.0f, 0.2f, 0.2f), Vector3(1.0f, 0.8f, 0.1f)); + TriggerFireFlame(item.Pose.Position.x, item.Pose.Position.y, item.Pose.Position.z, FlameType::Medium, Vector3::Zero, Vector3::Zero); if (TestEnvironment(ENV_FLAG_WATER, item.RoomNumber)) hasHit = true; } diff --git a/TombEngine/Game/effects/effects.cpp b/TombEngine/Game/effects/effects.cpp index ba36a3bd0..246f0a714 100644 --- a/TombEngine/Game/effects/effects.cpp +++ b/TombEngine/Game/effects/effects.cpp @@ -1294,7 +1294,7 @@ void TriggerFireFlame(int x, int y, int z, FlameType type, const Vector3& color1 if (type == FlameType::Small) { - if (color1 != Vector3(1.0f, 0.2f, 0.2f) && color2 != Vector3(1.0f, 0.8f, 0.1f)) + if (color1 != Vector3::Zero && color2 != Vector3::Zero) { spark->sR = colorsR; spark->sG = colorsG; @@ -1310,7 +1310,7 @@ void TriggerFireFlame(int x, int y, int z, FlameType type, const Vector3& color1 { if (type == FlameType::SmallFast) { - if (color1 != Vector3(1.0f, 0.2f, 0.2f) && color2 != Vector3(1.0f, 0.8f, 0.1f)) + if (color1 != Vector3::Zero && color2 != Vector3::Zero) { spark->sR = colorsR; spark->sG = colorsG; @@ -1333,7 +1333,7 @@ void TriggerFireFlame(int x, int y, int z, FlameType type, const Vector3& color1 } else { - if (color1 != Vector3(1.0f, 0.2f, 0.2f) && color2 != Vector3(1.0f, 0.8f, 0.1f)) + if (color1 != Vector3::Zero && color2 != Vector3::Zero) { spark->sR = colorsR; spark->sG = colorsG; @@ -1350,7 +1350,7 @@ void TriggerFireFlame(int x, int y, int z, FlameType type, const Vector3& color1 if (type != FlameType::StaticFlicker) { - if (color1 != Vector3(1.0f, 0.2f, 0.2f) && color2 != Vector3(1.0f, 0.8f, 0.1f)) + if (color1 != Vector3::Zero && color2 != Vector3::Zero) { spark->dR = colordR; spark->dG = colordG; @@ -1616,7 +1616,7 @@ void ProcessEffects(ItemInfo* item) { case EffectType::Fire: if (TestProbability(1 / 8.0f)) - TriggerFireFlame(pos.x, pos.y, pos.z, TestProbability(1 / 10.0f) ? FlameType::Trail : FlameType::Medium, Vector3(1.0f, 0.2f, 0.2f), Vector3(1.0f, 0.8f, 0.1f)); + TriggerFireFlame(pos.x, pos.y, pos.z, TestProbability(1 / 10.0f) ? FlameType::Trail : FlameType::Medium, Vector3::Zero, Vector3::Zero); break; case EffectType::ColoredFire: diff --git a/TombEngine/Game/effects/effects.h b/TombEngine/Game/effects/effects.h index aea09afe3..967fc2cbc 100644 --- a/TombEngine/Game/effects/effects.h +++ b/TombEngine/Game/effects/effects.h @@ -47,7 +47,7 @@ enum class FlameType StaticFlicker, GreenPulse, SmallFast, - Trail, + Trail }; struct FX_INFO @@ -206,7 +206,7 @@ void TriggerCyborgSpark(int x, int y, int z, short xv, short yv, short zv); void TriggerExplosionSparks(int x, int y, int z, int extraTrig, int dynamic, int uw, int roomNumber); void TriggerExplosionSmokeEnd(int x, int y, int z, int uw); void TriggerExplosionSmoke(int x, int y, int z, int uw); -void TriggerFireFlame(int x, int y, int z, FlameType type, const Vector3& color1 = Vector3::One, const Vector3& color2 = Vector3::One); +void TriggerFireFlame(int x, int y, int z, FlameType type, const Vector3& color1 = Vector3::Zero, const Vector3& color2 = Vector3::Zero); void TriggerSuperJetFlame(ItemInfo* item, int yvel, int deadly); void SetupSplash(const SPLASH_SETUP* const setup, int room); void UpdateSplashes(); diff --git a/TombEngine/Game/effects/item_fx.cpp b/TombEngine/Game/effects/item_fx.cpp index 1585a1e5e..a25c38315 100644 --- a/TombEngine/Game/effects/item_fx.cpp +++ b/TombEngine/Game/effects/item_fx.cpp @@ -20,53 +20,38 @@ namespace TEN::Effects::Items { item->Effect.Type = EffectType::Fire; item->Effect.Count = timeout; - item->Effect.LightColor = Vector3(250, 176, 0); - item->Effect.EffectColor1 = Vector3(1.0f, 0.2f, 0.2f); - item->Effect.EffectColor2 = Vector3(1.0f, 0.8f, 0.1f); + item->Effect.LightColor = Vector3(0.8f, 0.5f, 0.0f); + item->Effect.EffectColor1 = Vector3::Zero; + item->Effect.EffectColor2 = Vector3::Zero; } - void ItemColorBurn(ItemInfo* item, const ScriptColor& color1, const ScriptColor& color2, int timeout) + void ItemColorBurn(ItemInfo* item, Vector3 color1, Vector3 color2, int timeout) { - - item->Effect.Type = EffectType::ColoredFire; item->Effect.Count = timeout; - Vector3 col1 = Vector3(color1.GetR() * (1.f / 255.f), color1.GetG() * (1.f / 255.f), color1.GetB() * (1.f / 255.f)); - Vector3 col2 = Vector3(color2.GetR() * (1.f / 255.f), color2.GetG() * (1.f / 255.f), color2.GetB() * (1.f / 255.f)); - item->Effect.LightColor = col1; - item->Effect.EffectColor1 = col1; - item->Effect.EffectColor2 = col2; - } - - void ItemMagicBurn(ItemInfo* item, const ScriptColor& color1, const ScriptColor& color2, int timeout) - { - item->Effect.Type = EffectType::MagicFire; - Vector3 col1 = Vector3(color1.GetR() * (1.f / 255.f), color1.GetG() * (1.f / 255.f), color1.GetB() * (1.f / 255.f)); - Vector3 col2 = Vector3(color2.GetR() * (1.f / 255.f), color2.GetG() * (1.f / 255.f), color2.GetB() * (1.f / 255.f)); - item->Effect.Count = timeout; - item->Effect.LightColor = col1; - item->Effect.EffectColor1 = col1; - item->Effect.EffectColor2 = col2; + item->Effect.LightColor = color1; + item->Effect.EffectColor1 = color1; + item->Effect.EffectColor2 = color2; } void ItemElectricBurn(ItemInfo* item, int timeout) { item->Effect.Type = EffectType::Sparks; item->Effect.Count = timeout; - item->Effect.LightColor = Vector3(0, 147, 255 ); + item->Effect.LightColor = Vector3(0.0f, 0.6f, 1.0f); } void ItemBlueElectricBurn(ItemInfo* item, int timeout) { item->Effect.Type = EffectType::ElectricDeath; item->Effect.Count = 2; - item->Effect.LightColor = Vector3(0, 147, 255); + item->Effect.LightColor = Vector3(0.0f, 0.6f, 1.0f); } void ItemRedLaserBurn(ItemInfo* item, int timeout) { item->Effect.Type = EffectType::LaserDeath; item->Effect.Count = 2; - item->Effect.LightColor = Vector3(255, 100, 0); + item->Effect.LightColor = Vector3(1.0f, 0.4f, 0.0f); } void ItemSmoke(ItemInfo* item, int timeout) diff --git a/TombEngine/Game/effects/item_fx.h b/TombEngine/Game/effects/item_fx.h index a2bbe966e..61c27f9ad 100644 --- a/TombEngine/Game/effects/item_fx.h +++ b/TombEngine/Game/effects/item_fx.h @@ -8,10 +8,9 @@ namespace TEN::Effects::Items constexpr int DEFAULT_NONLETHAL_EFFECT_TIMEOUT = 48; void ItemBurn(ItemInfo* item, int timeout = -1); - void ItemColorBurn(ItemInfo* item, const ScriptColor& color1 = ScriptColor(1, 1, 1), const ScriptColor& color2 = ScriptColor(1, 1, 1), int timeout = -1); + void ItemColorBurn(ItemInfo* item, Vector3 color1 = Vector3::Zero, Vector3 color2 = Vector3::Zero, int timeout = -1); void ItemRedLaserBurn(ItemInfo* item, int timeout); void ItemBlueElectricBurn(ItemInfo* item, int timeout = DEFAULT_NONLETHAL_EFFECT_TIMEOUT); - void ItemMagicBurn(ItemInfo* item, const ScriptColor& color1 = ScriptColor(1, 1, 1), const ScriptColor& color2 = ScriptColor(1, 1, 1), int timeout = -1); void ItemElectricBurn(ItemInfo* item, int timeout = DEFAULT_NONLETHAL_EFFECT_TIMEOUT); void ItemSmoke(ItemInfo* item, int timeout = DEFAULT_NONLETHAL_EFFECT_TIMEOUT); void LavaBurn(ItemInfo* item); diff --git a/TombEngine/Objects/Effects/enemy_missile.cpp b/TombEngine/Objects/Effects/enemy_missile.cpp index a54bfebf4..486463cd8 100644 --- a/TombEngine/Objects/Effects/enemy_missile.cpp +++ b/TombEngine/Objects/Effects/enemy_missile.cpp @@ -274,7 +274,8 @@ namespace TEN::Entities::Effects { TriggerShockwave(&fx->pos, 48, 240, 64, 64, 128, 0, 24, 0, 0); TriggerExplosionSparks(oldX, oldY, oldZ, 3, -2, 2, fx->roomNumber); - ItemMagicBurn(LaraItem, ScriptColor(2, 202 ,40), ScriptColor(5, 221, 218), -1); + LaraItem->Effect.Type = EffectType::MagicFire; + ItemColorBurn(LaraItem, Vector3(0.0f, 0.8f, 0.1f), Vector3(0.0f, 0.9f, 0.8f), -1); } else if (fx->flag1) { diff --git a/TombEngine/Objects/Effects/flame_emitters.cpp b/TombEngine/Objects/Effects/flame_emitters.cpp index e53ebc4d6..81db752c7 100644 --- a/TombEngine/Objects/Effects/flame_emitters.cpp +++ b/TombEngine/Objects/Effects/flame_emitters.cpp @@ -272,7 +272,7 @@ namespace TEN::Entities::Effects item->Pose.Position.y = probe.Position.Floor; if (Wibble & 7) - TriggerFireFlame(item->Pose.Position.x, item->Pose.Position.y - 32, item->Pose.Position.z, FlameType::Medium, Vector3(1.0f, 0.2f, 0.2f), Vector3(1.0f, 0.8f, 0.1f)); + TriggerFireFlame(item->Pose.Position.x, item->Pose.Position.y - 32, item->Pose.Position.z, FlameType::Medium, Vector3::Zero, Vector3::Zero); } SoundEffect(SFX_TR4_LOOP_FOR_SMALL_FIRES, &item->Pose); @@ -470,14 +470,14 @@ namespace TEN::Entities::Effects i = item->ItemFlags[1] & 7; x = 16 * (Flame3xzoffs[i][0] - 32); z = 16 * (Flame3xzoffs[i][1] - 32); - TriggerFireFlame(x + item->Pose.Position.x, item->Pose.Position.y, z + item->Pose.Position.z, FlameType::Small, Vector3(1.0f, 0.2f, 0.2f), Vector3(1.0f, 0.8f, 0.1f)); + TriggerFireFlame(x + item->Pose.Position.x, item->Pose.Position.y, z + item->Pose.Position.z, FlameType::Small, Vector3::Zero, Vector3::Zero); } else { i = item->ItemFlags[1] >> 3; x = 16 * (Flame3xzoffs[i + 8][0] - 32); z = 16 * (Flame3xzoffs[i + 8][1] - 32); - TriggerFireFlame(x + item->Pose.Position.x, item->Pose.Position.y, z + item->Pose.Position.z, FlameType::Small, Vector3(1.0f, 0.2f, 0.2f), Vector3(1.0f, 0.8f, 0.1f)); + TriggerFireFlame(x + item->Pose.Position.x, item->Pose.Position.y, z + item->Pose.Position.z, FlameType::Small, Vector3::Zero, Vector3::Zero); } SoundEffect(SFX_TR4_LOOP_FOR_SMALL_FIRES, &item->Pose); diff --git a/TombEngine/Objects/TR4/Entity/tr4_ahmet.cpp b/TombEngine/Objects/TR4/Entity/tr4_ahmet.cpp index 457daa101..1a2ac6a49 100644 --- a/TombEngine/Objects/TR4/Entity/tr4_ahmet.cpp +++ b/TombEngine/Objects/TR4/Entity/tr4_ahmet.cpp @@ -92,7 +92,7 @@ namespace TEN::Entities::TR4 int meshCount = GetSpheres(item, spheres, SPHERES_SPACE_WORLD, Matrix::Identity); auto sphere = &spheres[(Wibble / 8) & 1]; for (int i = meshCount; i > 0; i--, sphere += 2) - TriggerFireFlame(sphere->x, sphere->y, sphere->z, FlameType::Medium, Vector3(1.0f, 0.2f, 0.2f), Vector3(1.0f, 0.8f, 0.1f)); + TriggerFireFlame(sphere->x, sphere->y, sphere->z, FlameType::Medium, Vector3::Zero, Vector3::Zero); } TriggerDynamicLight( diff --git a/TombEngine/Objects/TR4/Entity/tr4_setha.cpp b/TombEngine/Objects/TR4/Entity/tr4_setha.cpp index 03646afa2..416a7b800 100644 --- a/TombEngine/Objects/TR4/Entity/tr4_setha.cpp +++ b/TombEngine/Objects/TR4/Entity/tr4_setha.cpp @@ -492,7 +492,8 @@ namespace TEN::Entities::TR4 if (LaraItem->HitPoints < 0) { SethaKill(item, LaraItem); - ItemColorBurn(LaraItem, Vector3(2, 202, 40), Vector3(5, 221, 218), 60); + LaraItem->Effect.Type = EffectType::MagicFire; + ItemColorBurn(LaraItem, Vector3(0.0f, 0.8f, 0.1f), Vector3(0.0f, 0.9f, 0.8f), -1); creature->MaxTurn = 0; return; } diff --git a/TombEngine/Objects/TR5/Object/tr5_bodypart.cpp b/TombEngine/Objects/TR5/Object/tr5_bodypart.cpp index 58f35e4a5..c0e15df49 100644 --- a/TombEngine/Objects/TR5/Object/tr5_bodypart.cpp +++ b/TombEngine/Objects/TR5/Object/tr5_bodypart.cpp @@ -58,7 +58,7 @@ void ControlBodyPart(short fxNumber) !TestEnvironment(RoomEnvFlags::ENV_FLAG_WATER, fx->roomNumber)) { if (GenerateInt(0, 10) > (abs(fx->fallspeed) > 0 ? 5 : 8)) - TriggerFireFlame(fx->pos.Position.x, fx->pos.Position.y, fx->pos.Position.z, FlameType::Big, Vector3(1.0f, 0.2f, 0.2f), Vector3(1.0f, 0.8f, 0.1f)); + TriggerFireFlame(fx->pos.Position.x, fx->pos.Position.y, fx->pos.Position.z, FlameType::Big, Vector3::Zero, Vector3::Zero); } auto probe = GetCollision(fx->pos.Position.x, fx->pos.Position.y, fx->pos.Position.z, fx->roomNumber); diff --git a/TombEngine/Scripting/Internal/TEN/Objects/Moveable/MoveableObject.cpp b/TombEngine/Scripting/Internal/TEN/Objects/Moveable/MoveableObject.cpp index 669cdb326..817f87916 100644 --- a/TombEngine/Scripting/Internal/TEN/Objects/Moveable/MoveableObject.cpp +++ b/TombEngine/Scripting/Internal/TEN/Objects/Moveable/MoveableObject.cpp @@ -703,15 +703,19 @@ void Moveable::SetEffect(EffectType effectType, sol::optional timeout) void Moveable::SetCustomEffect(EffectType effectType, const ScriptColor& col1, const ScriptColor& col2, sol::optional timeout) { int realTimeout = timeout.has_value() ? int(timeout.value() * FPS) : -1; + Vector3 color1 = Vector3(col1.GetR() * (1.f / 255.f), col1.GetG() * (1.f / 255.f), col1.GetB() * (1.f / 255.f)); + Vector3 color2 = Vector3(col2.GetR() * (1.f / 255.f), col2.GetG() * (1.f / 255.f), col2.GetB() * (1.f / 255.f)); switch (effectType) { case EffectType::MagicFire: - ItemMagicBurn(m_item, col1, col2, realTimeout); + m_item->Effect.Type = EffectType::MagicFire; + ItemColorBurn(m_item, color1, color2, realTimeout); break; case EffectType::ColoredFire: - ItemColorBurn(m_item, col1, col2, realTimeout); + m_item->Effect.Type = EffectType::ColoredFire; + ItemColorBurn(m_item, color1, color2, realTimeout); break; } }