fixed commit

This commit is contained in:
Nemoel-Tomo 2022-11-29 17:00:16 +01:00
parent 9c33d66347
commit ab64f466ff
11 changed files with 34 additions and 44 deletions

View file

@ -1419,7 +1419,7 @@ void HandleProjectile(ItemInfo& item, ItemInfo& emitter, const Vector3i& prevPos
if (type == ProjectileType::Explosive && item.ItemFlags[3]) if (type == ProjectileType::Explosive && item.ItemFlags[3])
{ {
// Fire trail and water collision for grenade fragments // 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)) if (TestEnvironment(ENV_FLAG_WATER, item.RoomNumber))
hasHit = true; hasHit = true;
} }

View file

@ -1294,7 +1294,7 @@ void TriggerFireFlame(int x, int y, int z, FlameType type, const Vector3& color1
if (type == FlameType::Small) 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->sR = colorsR;
spark->sG = colorsG; 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 (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->sR = colorsR;
spark->sG = colorsG; spark->sG = colorsG;
@ -1333,7 +1333,7 @@ void TriggerFireFlame(int x, int y, int z, FlameType type, const Vector3& color1
} }
else 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->sR = colorsR;
spark->sG = colorsG; 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 (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->dR = colordR;
spark->dG = colordG; spark->dG = colordG;
@ -1616,7 +1616,7 @@ void ProcessEffects(ItemInfo* item)
{ {
case EffectType::Fire: case EffectType::Fire:
if (TestProbability(1 / 8.0f)) 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; break;
case EffectType::ColoredFire: case EffectType::ColoredFire:

View file

@ -47,7 +47,7 @@ enum class FlameType
StaticFlicker, StaticFlicker,
GreenPulse, GreenPulse,
SmallFast, SmallFast,
Trail, Trail
}; };
struct FX_INFO 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 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 TriggerExplosionSmokeEnd(int x, int y, int z, int uw);
void TriggerExplosionSmoke(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 TriggerSuperJetFlame(ItemInfo* item, int yvel, int deadly);
void SetupSplash(const SPLASH_SETUP* const setup, int room); void SetupSplash(const SPLASH_SETUP* const setup, int room);
void UpdateSplashes(); void UpdateSplashes();

View file

@ -20,53 +20,38 @@ namespace TEN::Effects::Items
{ {
item->Effect.Type = EffectType::Fire; item->Effect.Type = EffectType::Fire;
item->Effect.Count = timeout; item->Effect.Count = timeout;
item->Effect.LightColor = Vector3(250, 176, 0); item->Effect.LightColor = Vector3(0.8f, 0.5f, 0.0f);
item->Effect.EffectColor1 = Vector3(1.0f, 0.2f, 0.2f); item->Effect.EffectColor1 = Vector3::Zero;
item->Effect.EffectColor2 = Vector3(1.0f, 0.8f, 0.1f); 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; 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)); item->Effect.LightColor = color1;
Vector3 col2 = Vector3(color2.GetR() * (1.f / 255.f), color2.GetG() * (1.f / 255.f), color2.GetB() * (1.f / 255.f)); item->Effect.EffectColor1 = color1;
item->Effect.LightColor = col1; item->Effect.EffectColor2 = color2;
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;
} }
void ItemElectricBurn(ItemInfo* item, int timeout) void ItemElectricBurn(ItemInfo* item, int timeout)
{ {
item->Effect.Type = EffectType::Sparks; item->Effect.Type = EffectType::Sparks;
item->Effect.Count = timeout; 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) void ItemBlueElectricBurn(ItemInfo* item, int timeout)
{ {
item->Effect.Type = EffectType::ElectricDeath; item->Effect.Type = EffectType::ElectricDeath;
item->Effect.Count = 2; 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) void ItemRedLaserBurn(ItemInfo* item, int timeout)
{ {
item->Effect.Type = EffectType::LaserDeath; item->Effect.Type = EffectType::LaserDeath;
item->Effect.Count = 2; 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) void ItemSmoke(ItemInfo* item, int timeout)

View file

@ -8,10 +8,9 @@ namespace TEN::Effects::Items
constexpr int DEFAULT_NONLETHAL_EFFECT_TIMEOUT = 48; constexpr int DEFAULT_NONLETHAL_EFFECT_TIMEOUT = 48;
void ItemBurn(ItemInfo* item, int timeout = -1); 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 ItemRedLaserBurn(ItemInfo* item, int timeout);
void ItemBlueElectricBurn(ItemInfo* item, int timeout = DEFAULT_NONLETHAL_EFFECT_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 ItemElectricBurn(ItemInfo* item, int timeout = DEFAULT_NONLETHAL_EFFECT_TIMEOUT);
void ItemSmoke(ItemInfo* item, int timeout = DEFAULT_NONLETHAL_EFFECT_TIMEOUT); void ItemSmoke(ItemInfo* item, int timeout = DEFAULT_NONLETHAL_EFFECT_TIMEOUT);
void LavaBurn(ItemInfo* item); void LavaBurn(ItemInfo* item);

View file

@ -274,7 +274,8 @@ namespace TEN::Entities::Effects
{ {
TriggerShockwave(&fx->pos, 48, 240, 64, 64, 128, 0, 24, 0, 0); TriggerShockwave(&fx->pos, 48, 240, 64, 64, 128, 0, 24, 0, 0);
TriggerExplosionSparks(oldX, oldY, oldZ, 3, -2, 2, fx->roomNumber); 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) else if (fx->flag1)
{ {

View file

@ -272,7 +272,7 @@ namespace TEN::Entities::Effects
item->Pose.Position.y = probe.Position.Floor; item->Pose.Position.y = probe.Position.Floor;
if (Wibble & 7) 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); SoundEffect(SFX_TR4_LOOP_FOR_SMALL_FIRES, &item->Pose);
@ -470,14 +470,14 @@ namespace TEN::Entities::Effects
i = item->ItemFlags[1] & 7; i = item->ItemFlags[1] & 7;
x = 16 * (Flame3xzoffs[i][0] - 32); x = 16 * (Flame3xzoffs[i][0] - 32);
z = 16 * (Flame3xzoffs[i][1] - 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 else
{ {
i = item->ItemFlags[1] >> 3; i = item->ItemFlags[1] >> 3;
x = 16 * (Flame3xzoffs[i + 8][0] - 32); x = 16 * (Flame3xzoffs[i + 8][0] - 32);
z = 16 * (Flame3xzoffs[i + 8][1] - 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); SoundEffect(SFX_TR4_LOOP_FOR_SMALL_FIRES, &item->Pose);

View file

@ -92,7 +92,7 @@ namespace TEN::Entities::TR4
int meshCount = GetSpheres(item, spheres, SPHERES_SPACE_WORLD, Matrix::Identity); int meshCount = GetSpheres(item, spheres, SPHERES_SPACE_WORLD, Matrix::Identity);
auto sphere = &spheres[(Wibble / 8) & 1]; auto sphere = &spheres[(Wibble / 8) & 1];
for (int i = meshCount; i > 0; i--, sphere += 2) 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( TriggerDynamicLight(

View file

@ -492,7 +492,8 @@ namespace TEN::Entities::TR4
if (LaraItem->HitPoints < 0) if (LaraItem->HitPoints < 0)
{ {
SethaKill(item, LaraItem); 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; creature->MaxTurn = 0;
return; return;
} }

View file

@ -58,7 +58,7 @@ void ControlBodyPart(short fxNumber)
!TestEnvironment(RoomEnvFlags::ENV_FLAG_WATER, fx->roomNumber)) !TestEnvironment(RoomEnvFlags::ENV_FLAG_WATER, fx->roomNumber))
{ {
if (GenerateInt(0, 10) > (abs(fx->fallspeed) > 0 ? 5 : 8)) 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); auto probe = GetCollision(fx->pos.Position.x, fx->pos.Position.y, fx->pos.Position.z, fx->roomNumber);

View file

@ -703,15 +703,19 @@ void Moveable::SetEffect(EffectType effectType, sol::optional<float> timeout)
void Moveable::SetCustomEffect(EffectType effectType, const ScriptColor& col1, const ScriptColor& col2, sol::optional<float> timeout) void Moveable::SetCustomEffect(EffectType effectType, const ScriptColor& col1, const ScriptColor& col2, sol::optional<float> timeout)
{ {
int realTimeout = timeout.has_value() ? int(timeout.value() * FPS) : -1; 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) switch (effectType)
{ {
case EffectType::MagicFire: case EffectType::MagicFire:
ItemMagicBurn(m_item, col1, col2, realTimeout); m_item->Effect.Type = EffectType::MagicFire;
ItemColorBurn(m_item, color1, color2, realTimeout);
break; break;
case EffectType::ColoredFire: case EffectType::ColoredFire:
ItemColorBurn(m_item, col1, col2, realTimeout); m_item->Effect.Type = EffectType::ColoredFire;
ItemColorBurn(m_item, color1, color2, realTimeout);
break; break;
} }
} }