fixed shockwave stuff and made effect lightning as int

This commit is contained in:
Nemoel-Tomo 2022-11-27 13:34:04 +01:00
parent e794ebb3f0
commit c156f45a63
17 changed files with 74 additions and 76 deletions

View file

@ -1376,7 +1376,7 @@ void ExplodeProjectile(ItemInfo& item, const Vector3i& prevPos)
} }
else else
{ {
TriggerShockwave(&item.Pose, 48, 304, 96, 0, 96, 128, 24, 0, ShockwaveDamage::none); TriggerShockwave(&item.Pose, 48, 304, 96, 0, 96, 128, 24, 0, 0);
item.Pose.Position.y += CLICK(1.0f / 2); item.Pose.Position.y += CLICK(1.0f / 2);
TriggerExplosionSparks(prevPos.x, prevPos.y, prevPos.z, 3, -2, 0, item.RoomNumber); TriggerExplosionSparks(prevPos.x, prevPos.y, prevPos.z, 3, -2, 0, item.RoomNumber);
@ -1496,7 +1496,7 @@ void HandleProjectile(ItemInfo& item, ItemInfo& emitter, const Vector3i& prevPos
TriggerExplosionSparks(currentMesh->pos.Position.x, currentMesh->pos.Position.y, currentMesh->pos.Position.z, 3, -2, 0, item.RoomNumber); TriggerExplosionSparks(currentMesh->pos.Position.x, currentMesh->pos.Position.y, currentMesh->pos.Position.z, 3, -2, 0, item.RoomNumber);
auto pose = Pose(currentMesh->pos.Position.x, currentMesh->pos.Position.y - 128, currentMesh->pos.Position.z, 0, currentMesh->pos.Orientation.y, 0); auto pose = Pose(currentMesh->pos.Position.x, currentMesh->pos.Position.y - 128, currentMesh->pos.Position.z, 0, currentMesh->pos.Orientation.y, 0);
TriggerShockwave(&pose, 40, 176, 64, 0, 96, 128, 16, 0, ShockwaveDamage::none); TriggerShockwave(&pose, 40, 176, 64, 0, 96, 128, 16, 0, 0);
} }
for (int i = 0; i < MAX_COLLIDED_OBJECTS; i++) for (int i = 0; i < MAX_COLLIDED_OBJECTS; i++)

View file

@ -1633,9 +1633,9 @@ void ProcessEffects(ItemInfo* item)
auto pos = GetJointPosition(item, 0); auto pos = GetJointPosition(item, 0);
TriggerDynamicLight(pos.x, pos.y, pos.z, falloff, TriggerDynamicLight(pos.x, pos.y, pos.z, falloff,
std::clamp(Random::GenerateInt(-32, 32) + int(item->Effect.LightColor.x * UCHAR_MAX), 0, UCHAR_MAX), std::clamp(Random::GenerateInt(-32, 32) + int(item->Effect.LightColor.x), 0, UCHAR_MAX),
std::clamp(Random::GenerateInt(-32, 32) + int(item->Effect.LightColor.y * UCHAR_MAX), 0, UCHAR_MAX), std::clamp(Random::GenerateInt(-32, 32) + int(item->Effect.LightColor.y), 0, UCHAR_MAX),
std::clamp(Random::GenerateInt(-32, 32) + int(item->Effect.LightColor.z * UCHAR_MAX), 0, UCHAR_MAX)); std::clamp(Random::GenerateInt(-32, 32) + int(item->Effect.LightColor.z), 0, UCHAR_MAX));
} }
switch (item->Effect.Type) switch (item->Effect.Type)

View file

@ -36,7 +36,7 @@ namespace TEN::Effects::Explosion
if (triggerShockwave) if (triggerShockwave)
{ {
auto shockPos = Pose(Vector3i(pos)); auto shockPos = Pose(Vector3i(pos));
TriggerShockwave(&shockPos, 0, size, 64, 32, 32, 32, 30, rand() & 0xFFFF, ShockwaveDamage::none); TriggerShockwave(&shockPos, 0, size, 64, 32, 32, 32, 30, rand() & 0xFFFF, 0);
} }
} }

View file

@ -7,6 +7,7 @@
#include "Game/effects/effects.h" #include "Game/effects/effects.h"
#include "Game/effects/smoke.h" #include "Game/effects/smoke.h"
#include "Game/items.h" #include "Game/items.h"
#include "Color/Color.h"
#include "Game/Lara/lara.h" #include "Game/Lara/lara.h"
#include "Game/Lara/lara_helpers.h" #include "Game/Lara/lara_helpers.h"
#include "Specific/level.h" #include "Specific/level.h"
@ -19,48 +20,52 @@ 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(0.8f, 0.5f, 0.0f); item->Effect.LightColor = Vector3(250, 176, 0);
item->Effect.EffectColor1 = Vector3(255, 48, 48); item->Effect.EffectColor1 = Vector3(255, 48, 48);
item->Effect.EffectColor2 = Vector3(255, 216, 32); item->Effect.EffectColor2 = Vector3(255, 216, 32);
} }
void ItemColorBurn(ItemInfo* item, Vector3 color1, Vector3 color2, int timeout) void ItemColorBurn(ItemInfo* item, ScriptColor const& color1, ScriptColor const& color2, int timeout)
{ {
item->Effect.Type = EffectType::ColoredFire; item->Effect.Type = EffectType::ColoredFire;
Vector3 col1 = Vector3(color1.GetR(), color1.GetG(), color1.GetB());
Vector3 col2 = Vector3(color2.GetR(), color2.GetG(), color2.GetB());
item->Effect.Count = timeout; item->Effect.Count = timeout;
item->Effect.LightColor = color1; item->Effect.LightColor = col1;
item->Effect.EffectColor1 = color1; item->Effect.EffectColor1 = col1;
item->Effect.EffectColor2 = color2; item->Effect.EffectColor2 = col2;
} }
void ItemMagicBurn(ItemInfo* item, Vector3 color1, Vector3 color2, int timeout) void ItemMagicBurn(ItemInfo* item, ScriptColor const& color1, ScriptColor const& color2, int timeout)
{ {
item->Effect.Type = EffectType::MagicFire; item->Effect.Type = EffectType::MagicFire;
Vector3 col1 = Vector3(color1.GetR(), color1.GetG(), color1.GetB());
Vector3 col2 = Vector3(color2.GetR(), color2.GetG(), color2.GetB());
item->Effect.Count = timeout; item->Effect.Count = timeout;
item->Effect.LightColor = color1; item->Effect.LightColor = col1;
item->Effect.EffectColor1 = color1; item->Effect.EffectColor1 = col1;
item->Effect.EffectColor2 = color2; 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.0f, 0.2f, 0.8f); item->Effect.LightColor = Vector3(0, 147, 255 );
} }
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.0f, 0.4f, 1.0f); item->Effect.LightColor = Vector3(0, 147, 255);
} }
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(1.0f, 0.0f, 0.0f); item->Effect.LightColor = Vector3(255, 100, 0);
} }
void ItemSmoke(ItemInfo* item, int timeout) void ItemSmoke(ItemInfo* item, int timeout)

View file

@ -1,4 +1,5 @@
#pragma once #pragma once
#include "Color/Color.h"
struct ItemInfo; struct ItemInfo;
@ -7,10 +8,10 @@ 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, Vector3 color1 = Vector3(1, 1, 1), Vector3 color2 = Vector3(1, 1, 1), int timeout = -1); void ItemColorBurn(ItemInfo* item, ScriptColor const& color1 = ScriptColor(1, 1, 1), ScriptColor const& color2 = ScriptColor(1, 1, 1), 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, Vector3 color1 = Vector3(1, 1, 1), Vector3 color2 = Vector3(1, 1, 1), int timeout = -1); void ItemMagicBurn(ItemInfo* item, ScriptColor const& color1 = ScriptColor(1, 1, 1), ScriptColor const& 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

@ -1494,7 +1494,7 @@ void TriggerShockwave(Pose* pos, short innerRad, short outerRad, int speed, unsi
sptr->innerRad = innerRad; sptr->innerRad = innerRad;
sptr->outerRad = outerRad; sptr->outerRad = outerRad;
sptr->xRot = angle; sptr->xRot = angle;
sptr->flags = damage; sptr->damage = damage;
sptr->speed = speed; sptr->speed = speed;
sptr->r = r; sptr->r = r;
sptr->g = g; sptr->g = g;
@ -1578,7 +1578,7 @@ void UpdateShockwaves()
if (LaraItem->HitPoints > 0) if (LaraItem->HitPoints > 0)
{ {
if (sw->flags & 3) if (sw->damage & 3)
{ {
AnimFrame* frame = GetBestFrame(LaraItem); AnimFrame* frame = GetBestFrame(LaraItem);
@ -1603,7 +1603,7 @@ void UpdateShockwaves()
angle, angle,
sw->speed); sw->speed);
DoDamage(LaraItem, sw->speed >> (((sw->flags >> 1) & 1) + 2)); DoDamage(LaraItem, sw->speed >> (((sw->damage >> 1) & 1) + 2));
} }
} }
} }

View file

@ -63,7 +63,7 @@ struct SHOCKWAVE_STRUCT
short innerRad; short innerRad;
short outerRad; short outerRad;
short xRot; short xRot;
short flags; short damage;
unsigned char r; unsigned char r;
unsigned char g; unsigned char g;
unsigned char b; unsigned char b;
@ -171,14 +171,6 @@ struct BLOOD_STRUCT
byte pad; byte pad;
}; };
enum ShockwaveDamage
{
none,
high,
medium,
low
};
#define ENERGY_ARC_STRAIGHT_LINE 0 #define ENERGY_ARC_STRAIGHT_LINE 0
#define ENERGY_ARC_CIRCLE 1 #define ENERGY_ARC_CIRCLE 1
#define ENERGY_ARC_NO_RANDOMIZE 1 #define ENERGY_ARC_NO_RANDOMIZE 1

View file

@ -224,7 +224,7 @@ namespace TEN::Entities::Effects
if (fx->flag1 == 1) if (fx->flag1 == 1)
{ {
TriggerShockwave(&fx->pos, 32, 160, 64, 64, 128, 00, 24, (((~g_Level.Rooms[fx->roomNumber].flags) / 16) & 2) * 65536, ShockwaveDamage::none); TriggerShockwave(&fx->pos, 32, 160, 64, 64, 128, 00, 24, (((~g_Level.Rooms[fx->roomNumber].flags) / 16) & 2) * 65536, 0);
TriggerExplosionSparks(oldX, oldY, oldZ, 3, -2, 2, fx->roomNumber); TriggerExplosionSparks(oldX, oldY, oldZ, 3, -2, 2, fx->roomNumber);
} }
else else
@ -232,9 +232,9 @@ namespace TEN::Entities::Effects
if (fx->flag1) if (fx->flag1)
{ {
if (fx->flag1 == 3 || fx->flag1 == 4) if (fx->flag1 == 3 || fx->flag1 == 4)
TriggerShockwave(&fx->pos, 32, 160, 64, 128, 64, 0, 16, 0, ShockwaveDamage::none); TriggerShockwave(&fx->pos, 32, 160, 64, 128, 64, 0, 16, 0, 0);
else if (fx->flag1 == 5) else if (fx->flag1 == 5)
TriggerShockwave(&fx->pos, 32, 160, 64, 0, 96, 128, 16, 0, ShockwaveDamage::none); TriggerShockwave(&fx->pos, 32, 160, 64, 0, 96, 128, 16, 0, 0);
else else
{ {
if (fx->flag1 != 2) if (fx->flag1 != 2)
@ -242,20 +242,20 @@ namespace TEN::Entities::Effects
if (fx->flag1 == 6) if (fx->flag1 == 6)
{ {
TriggerExplosionSparks(oldX, oldY, oldZ, 3, -2, 0, fx->roomNumber); TriggerExplosionSparks(oldX, oldY, oldZ, 3, -2, 0, fx->roomNumber);
TriggerShockwave(&fx->pos, 48, 240, 64, 0, 96, 128, 24, 0, ShockwaveDamage::medium); TriggerShockwave(&fx->pos, 48, 240, 64, 0, 96, 128, 24, 0, 2);
fx->pos.Position.y -= 128; fx->pos.Position.y -= 128;
TriggerShockwave(&fx->pos, 48, 240, 48, 0, 112, 128, 16, 0, ShockwaveDamage::medium); TriggerShockwave(&fx->pos, 48, 240, 48, 0, 112, 128, 16, 0, 2);
fx->pos.Position.y += 256; fx->pos.Position.y += 256;
TriggerShockwave(&fx->pos, 48, 240, 48, 0, 112, 128, 16, 0, ShockwaveDamage::medium); TriggerShockwave(&fx->pos, 48, 240, 48, 0, 112, 128, 16, 0, 2);
} }
} }
else else
TriggerShockwave(&fx->pos, 32, 160, 64, 0, 128, 128, 16, 0, ShockwaveDamage::none); TriggerShockwave(&fx->pos, 32, 160, 64, 0, 128, 128, 16, 0, 0);
} }
} }
else else
TriggerShockwave(&fx->pos, 32, 160, 64, 64, 128, 0, 16, 0, ShockwaveDamage::none); TriggerShockwave(&fx->pos, 32, 160, 64, 64, 128, 0, 16, 0, 0);
} }
KillEffect(fxNum); KillEffect(fxNum);
@ -272,9 +272,9 @@ namespace TEN::Entities::Effects
if (fx->flag1 == 1) if (fx->flag1 == 1)
{ {
TriggerShockwave(&fx->pos, 48, 240, 64, 64, 128, 0, 24, 0, ShockwaveDamage::none); 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, Vector3(2, 202 ,40), Vector3(5, 221, 218), -1); ItemMagicBurn(LaraItem, ScriptColor(2, 202 ,40), ScriptColor(5, 221, 218), -1);
} }
else if (fx->flag1) else if (fx->flag1)
{ {
@ -282,30 +282,30 @@ namespace TEN::Entities::Effects
{ {
case 3: case 3:
case 4: case 4:
TriggerShockwave(&fx->pos, 32, 160, 64, 128, 64, 0, 16, 0, ShockwaveDamage::high); TriggerShockwave(&fx->pos, 32, 160, 64, 128, 64, 0, 16, 0, 1);
break; break;
case 5: case 5:
TriggerShockwave(&fx->pos, 32, 160, 64, 0, 96, 128, 16, 0, ShockwaveDamage::medium); TriggerShockwave(&fx->pos, 32, 160, 64, 0, 96, 128, 16, 0, 2);
break; break;
case 2: case 2:
TriggerShockwave(&fx->pos, 32, 160, 64, 0, 128, 128, 16, 0, ShockwaveDamage::medium); TriggerShockwave(&fx->pos, 32, 160, 64, 0, 128, 128, 16, 0, 2);
break; break;
case 6: case 6:
TriggerExplosionSparks(oldX, oldY, oldZ, 3, -2, 0, fx->roomNumber); TriggerExplosionSparks(oldX, oldY, oldZ, 3, -2, 0, fx->roomNumber);
TriggerShockwave(&fx->pos, 48, 240, 64, 0, 96, 128, 24, 0, ShockwaveDamage::none); TriggerShockwave(&fx->pos, 48, 240, 64, 0, 96, 128, 24, 0, 0);
fx->pos.Position.y -= 128; fx->pos.Position.y -= 128;
TriggerShockwave(&fx->pos, 48, 240, 48, 0, 112, 128, 16, 0, ShockwaveDamage::none); TriggerShockwave(&fx->pos, 48, 240, 48, 0, 112, 128, 16, 0, 0);
fx->pos.Position.y += 256; fx->pos.Position.y += 256;
TriggerShockwave(&fx->pos, 48, 240, 48, 0, 112, 128, 16, 0, ShockwaveDamage::none); TriggerShockwave(&fx->pos, 48, 240, 48, 0, 112, 128, 16, 0, 0);
ItemBurn(LaraItem); ItemBurn(LaraItem);
break; break;
} }
} }
else else
TriggerShockwave(&fx->pos, 24, 88, 48, 64, 128, 0, 16, (((~g_Level.Rooms[fx->roomNumber].flags) / 16) & 2) * 65536, ShockwaveDamage::low); TriggerShockwave(&fx->pos, 24, 88, 48, 64, 128, 0, 16, (((~g_Level.Rooms[fx->roomNumber].flags) / 16) & 2) * 65536, 3);
} }
else else
{ {

View file

@ -693,7 +693,7 @@ namespace TEN::Entities::TR4
else else
pos.y = height - CLICK(0.5f); pos.y = height - CLICK(0.5f);
TriggerShockwave((Pose*)&pos, 24, 88, 256, 128, 128, 128, 32, 0, ShockwaveDamage::medium); TriggerShockwave((Pose*)&pos, 24, 88, 256, 128, 128, 128, 32, 0, 2);
TriggerHammerSmoke(pos.x, pos.y + 128, pos.z, 8); TriggerHammerSmoke(pos.x, pos.y + 128, pos.z, 8);
Camera.bounce = -128; Camera.bounce = -128;

View file

@ -373,10 +373,10 @@ namespace TEN::Entities::TR4
item->Pose.Position.y -= 384; item->Pose.Position.y -= 384;
TriggerShockwave(&item->Pose, inner, outer, speed, r, g, b, 24, 0, ShockwaveDamage::none); TriggerShockwave(&item->Pose, inner, outer, speed, r, g, b, 24, 0, 0);
TriggerShockwave(&item->Pose, inner, outer, speed, r, g, b, 24, ANGLE(45.0f), ShockwaveDamage::none); TriggerShockwave(&item->Pose, inner, outer, speed, r, g, b, 24, ANGLE(45.0f), 0);
TriggerShockwave(&item->Pose, inner, outer, speed, r, g, b, 24, ANGLE(90.0f), ShockwaveDamage::none); TriggerShockwave(&item->Pose, inner, outer, speed, r, g, b, 24, ANGLE(90.0f), 0);
TriggerShockwave(&item->Pose, inner, outer, speed, r, g, b, 24, ANGLE(135.0f), ShockwaveDamage::none); TriggerShockwave(&item->Pose, inner, outer, speed, r, g, b, 24, ANGLE(135.0f), 0);
item->Pose.Position.y += 384; item->Pose.Position.y += 384;
} }

View file

@ -318,10 +318,10 @@ void SenetPieceExplosionEffect(ItemInfo* item, int color, int speed)
int radius = speed >= 0 ? 0xA00020 : 0x2000280; int radius = speed >= 0 ? 0xA00020 : 0x2000280;
int clr = color | 0x18000000; int clr = color | 0x18000000;
item->Pose.Position.y -= STEPUP_HEIGHT; item->Pose.Position.y -= STEPUP_HEIGHT;
TriggerShockwave(&item->Pose, radius & 0xFFFF, radius >> 16, speed, clr & 0xFF, (clr >> 8) & 0xFF, (clr >> 16) & 0xFF, 64, 0, ShockwaveDamage::none); TriggerShockwave(&item->Pose, radius & 0xFFFF, radius >> 16, speed, clr & 0xFF, (clr >> 8) & 0xFF, (clr >> 16) & 0xFF, 64, 0, 0);
TriggerShockwave(&item->Pose, radius & 0xFFFF, radius >> 16, speed, clr & 0xFF, (clr >> 8) & 0xFF, (clr >> 16) & 0xFF, 64, 0x2000, ShockwaveDamage::none); TriggerShockwave(&item->Pose, radius & 0xFFFF, radius >> 16, speed, clr & 0xFF, (clr >> 8) & 0xFF, (clr >> 16) & 0xFF, 64, 0x2000, 0);
TriggerShockwave(&item->Pose, radius & 0xFFFF, radius >> 16, speed, clr & 0xFF, (clr >> 8) & 0xFF, (clr >> 16) & 0xFF, 64, 0x4000, ShockwaveDamage::none); TriggerShockwave(&item->Pose, radius & 0xFFFF, radius >> 16, speed, clr & 0xFF, (clr >> 8) & 0xFF, (clr >> 16) & 0xFF, 64, 0x4000, 0);
TriggerShockwave(&item->Pose, radius & 0xFFFF, radius >> 16, speed, clr & 0xFF, (clr >> 8) & 0xFF, (clr >> 16) & 0xFF, 64, 0x6000, ShockwaveDamage::none); TriggerShockwave(&item->Pose, radius & 0xFFFF, radius >> 16, speed, clr & 0xFF, (clr >> 8) & 0xFF, (clr >> 16) & 0xFF, 64, 0x6000, 0);
item->Pose.Position.y += STEPUP_HEIGHT; item->Pose.Position.y += STEPUP_HEIGHT;
} }

View file

@ -44,7 +44,7 @@ namespace TEN::Entities::TR4
TriggerExplosionSparks(sphere->x, sphere->y, sphere->z, 3, -2, 0, -item->RoomNumber); TriggerExplosionSparks(sphere->x, sphere->y, sphere->z, 3, -2, 0, -item->RoomNumber);
TriggerExplosionSparks(sphere->x, sphere->y, sphere->z, 3, -1, 0, -item->RoomNumber); TriggerExplosionSparks(sphere->x, sphere->y, sphere->z, 3, -1, 0, -item->RoomNumber);
TriggerShockwave((Pose*)sphere, 48, 304, (GetRandomControl() & 0x1F) + 112, 0, 96, 128, 32, 2048, ShockwaveDamage::none); TriggerShockwave((Pose*)sphere, 48, 304, (GetRandomControl() & 0x1F) + 112, 0, 96, 128, 32, 2048, 0);
} }
} }

View file

@ -263,9 +263,9 @@ namespace TEN::Entities::Creatures::TR5
TriggerExplosionSparks(item->Pose.Position.x, item->Pose.Position.y, item->Pose.Position.z, 3, -2, 2, item->RoomNumber); TriggerExplosionSparks(item->Pose.Position.x, item->Pose.Position.y, item->Pose.Position.z, 3, -2, 2, item->RoomNumber);
TriggerExplosionSparks(item->Pose.Position.x, item->Pose.Position.y, item->Pose.Position.z, 2, 0, 2, item->RoomNumber); TriggerExplosionSparks(item->Pose.Position.x, item->Pose.Position.y, item->Pose.Position.z, 2, 0, 2, item->RoomNumber);
TriggerShockwave(&item->Pose, 32, 160, 64, 64, 128, 0, 36, 0, ShockwaveDamage::none); TriggerShockwave(&item->Pose, 32, 160, 64, 64, 128, 0, 36, 0, 0);
TriggerShockwave(&item->Pose, 32, 160, 64, 64, 128, 0, 36, 0x3000, ShockwaveDamage::none); TriggerShockwave(&item->Pose, 32, 160, 64, 64, 128, 0, 36, 0x3000, 0);
TriggerShockwave(&item->Pose, 32, 160, 64, 64, 128, 0, 36, 0x6000, ShockwaveDamage::none); TriggerShockwave(&item->Pose, 32, 160, 64, 64, 128, 0, 36, 0x6000, 0);
g_Level.Items[creature->PuzzleItem].Pose.Position.y = item->Pose.Position.y; g_Level.Items[creature->PuzzleItem].Pose.Position.y = item->Pose.Position.y;
TestTriggers(item, true); TestTriggers(item, true);

View file

@ -619,10 +619,10 @@ namespace TEN::Entities::Creatures::TR5
if (item->ItemFlags[0]) if (item->ItemFlags[0])
item->ItemFlags[0]--; item->ItemFlags[0]--;
TriggerShockwave((Pose*)&pos1, 16, 160, 96, 0, 64, 128, 48, 0, ShockwaveDamage::high); TriggerShockwave((Pose*)&pos1, 16, 160, 96, 0, 64, 128, 48, 0, 1);
TriggerRomanStatueShockwaveAttackSparks(pos1.x, pos1.y, pos1.z, 128, 64, 0, 128); TriggerRomanStatueShockwaveAttackSparks(pos1.x, pos1.y, pos1.z, 128, 64, 0, 128);
pos1.y -= 64; pos1.y -= 64;
TriggerShockwave((Pose*)&pos1, 16, 160, 64, 0, 64, 128, 48, 0, ShockwaveDamage::high); TriggerShockwave((Pose*)&pos1, 16, 160, 64, 0, 64, 128, 48, 0, 1);
} }
deltaFrame = item->Animation.FrameNumber - g_Level.Anims[item->Animation.AnimNumber].frameBase; deltaFrame = item->Animation.FrameNumber - g_Level.Anims[item->Animation.AnimNumber].frameBase;

View file

@ -120,9 +120,9 @@ void MissileControl(short itemNumber)
{ {
TriggerExplosionSparks(x, y, z, 3, -2, 2, fx->roomNumber); TriggerExplosionSparks(x, y, z, 3, -2, 2, fx->roomNumber);
fx->pos.Position.y -= 64; fx->pos.Position.y -= 64;
TriggerShockwave(&fx->pos, 48, 256, 64, 64, 128, 0, 24, 0, ShockwaveDamage::high); TriggerShockwave(&fx->pos, 48, 256, 64, 64, 128, 0, 24, 0, 1);
fx->pos.Position.y -= 128; fx->pos.Position.y -= 128;
TriggerShockwave(&fx->pos, 48, 256, 48, 64, 128, 0, 24, 0, ShockwaveDamage::high); TriggerShockwave(&fx->pos, 48, 256, 48, 64, 128, 0, 24, 0, 1);
} }
else if (fx->flag1 == 2) else if (fx->flag1 == 2)
{ {
@ -133,7 +133,7 @@ void MissileControl(short itemNumber)
else else
{ {
TriggerExplosionSparks(x, y, z, 3, -2, 0, fx->roomNumber); TriggerExplosionSparks(x, y, z, 3, -2, 0, fx->roomNumber);
TriggerShockwave(&fx->pos, 48, 240, 48, 0, 96, 128, 24, 0, ShockwaveDamage::medium); TriggerShockwave(&fx->pos, 48, 240, 48, 0, 96, 128, 24, 0, 2);
} }
KillEffect(itemNumber); KillEffect(itemNumber);
@ -147,9 +147,9 @@ void MissileControl(short itemNumber)
// ROMAN_GOD hit effect // ROMAN_GOD hit effect
TriggerExplosionSparks(x, y, z, 3, -2, 2, fx->roomNumber); TriggerExplosionSparks(x, y, z, 3, -2, 2, fx->roomNumber);
fx->pos.Position.y -= 64; fx->pos.Position.y -= 64;
TriggerShockwave(&fx->pos, 48, 256, 64, 0, 128, 64, 24, 0, ShockwaveDamage::high); TriggerShockwave(&fx->pos, 48, 256, 64, 0, 128, 64, 24, 0, 1);
fx->pos.Position.y -= 128; fx->pos.Position.y -= 128;
TriggerShockwave(&fx->pos, 48, 256, 48, 0, 128, 64, 24, 0, ShockwaveDamage::high); TriggerShockwave(&fx->pos, 48, 256, 48, 0, 128, 64, 24, 0, 1);
KillEffect(itemNumber); KillEffect(itemNumber);
DoDamage(LaraItem, 200); DoDamage(LaraItem, 200);
} }
@ -172,7 +172,7 @@ void MissileControl(short itemNumber)
{ {
// HYDRA hit effect // HYDRA hit effect
TriggerExplosionSparks(x, y, z, 3, -2, 0, fx->roomNumber); TriggerExplosionSparks(x, y, z, 3, -2, 0, fx->roomNumber);
TriggerShockwave(&fx->pos, 48, 240, 48, 0, 96, 128, 24, 0, ShockwaveDamage::none); TriggerShockwave(&fx->pos, 48, 240, 48, 0, 96, 128, 24, 0, 0);
if (LaraItem->HitPoints >= 500) if (LaraItem->HitPoints >= 500)
DoDamage(LaraItem, 300); DoDamage(LaraItem, 300);
else else

View file

@ -88,9 +88,9 @@ void ExplosionControl(short itemNumber)
if (item->ItemFlags[3]) if (item->ItemFlags[3])
{ {
if (flag == 2) if (flag == 2)
TriggerShockwave(&pos, 48, 32 * item->ItemFlags[2] + 304, 4 * item->ItemFlags[2] + 96, 128, 96, 0, 24, 2048, ShockwaveDamage::none); TriggerShockwave(&pos, 48, 32 * item->ItemFlags[2] + 304, 4 * item->ItemFlags[2] + 96, 128, 96, 0, 24, 2048, 0);
else else
TriggerShockwave(&pos, 48, 32 * item->ItemFlags[2] + 304, 4 * item->ItemFlags[2] + 96, 0, 96, 128, 24, 2048, ShockwaveDamage::none); TriggerShockwave(&pos, 48, 32 * item->ItemFlags[2] + 304, 4 * item->ItemFlags[2] + 96, 0, 96, 128, 24, 2048, 0);
} }
else if (flag == 2) else if (flag == 2)
{ {
@ -125,7 +125,7 @@ void ExplosionControl(short itemNumber)
{ {
TriggerExplosionSparks(CollidedItems[i]->Pose.Position.x, CollidedItems[i]->Pose.Position.y, CollidedItems[i]->Pose.Position.z, 3, -2, 0, CollidedItems[i]->RoomNumber); TriggerExplosionSparks(CollidedItems[i]->Pose.Position.x, CollidedItems[i]->Pose.Position.y, CollidedItems[i]->Pose.Position.z, 3, -2, 0, CollidedItems[i]->RoomNumber);
CollidedItems[i]->Pose.Position.y -= 128; CollidedItems[i]->Pose.Position.y -= 128;
TriggerShockwave(&CollidedItems[i]->Pose, 48, 304, 96, 0, 96, 128, 24, 0, ShockwaveDamage::none); TriggerShockwave(&CollidedItems[i]->Pose, 48, 304, 96, 0, 96, 128, 24, 0, 0);
CollidedItems[i]->Pose.Position.y += 128; CollidedItems[i]->Pose.Position.y += 128;
ExplodeItemNode(CollidedItems[i], 0, 0, 80); ExplodeItemNode(CollidedItems[i], 0, 0, 80);
SmashObject(CollidedItems[i] - g_Level.Items.data()); SmashObject(CollidedItems[i] - g_Level.Items.data());
@ -151,7 +151,7 @@ void ExplosionControl(short itemNumber)
{ {
TriggerExplosionSparks(CollidedMeshes[i]->pos.Position.x, CollidedMeshes[i]->pos.Position.y, CollidedMeshes[i]->pos.Position.z, 3, -2, 0, item->RoomNumber); TriggerExplosionSparks(CollidedMeshes[i]->pos.Position.x, CollidedMeshes[i]->pos.Position.y, CollidedMeshes[i]->pos.Position.z, 3, -2, 0, item->RoomNumber);
CollidedMeshes[i]->pos.Position.y -= 128; CollidedMeshes[i]->pos.Position.y -= 128;
TriggerShockwave(&CollidedMeshes[i]->pos, 40, 176, 64, 0, 96, 128, 16, 0, ShockwaveDamage::none); TriggerShockwave(&CollidedMeshes[i]->pos, 40, 176, 64, 0, 96, 128, 16, 0, 0);
CollidedMeshes[i]->pos.Position.y += 128; CollidedMeshes[i]->pos.Position.y += 128;
SoundEffect(GetShatterSound(CollidedMeshes[i]->staticNumber), &CollidedMeshes[i]->pos); SoundEffect(GetShatterSound(CollidedMeshes[i]->staticNumber), &CollidedMeshes[i]->pos);
ShatterObject(NULL, CollidedMeshes[i], -128, item->RoomNumber, 0); ShatterObject(NULL, CollidedMeshes[i], -128, item->RoomNumber, 0);

View file

@ -707,11 +707,11 @@ void Moveable::SetCustomEffect(EffectType effectType, ScriptColor const& col1, S
switch (effectType) switch (effectType)
{ {
case EffectType::MagicFire: case EffectType::MagicFire:
ItemMagicBurn(m_item, Vector3(col1.GetR(), col1.GetG(), col1.GetB()), Vector3(col2.GetR(), col2.GetG(), col2.GetB()), realTimeout); ItemMagicBurn(m_item, col1, col2, realTimeout);
break; break;
case EffectType::ColoredFire: case EffectType::ColoredFire:
ItemColorBurn(m_item, Vector3(col1.GetR(), col1.GetG(), col1.GetB()), Vector3(col2.GetR(), col2.GetG(), col2.GetB()), realTimeout); ItemColorBurn(m_item, col1, col2, realTimeout);
break; break;
} }
} }