MCPcopy Create free account
hub / github.com/TombEngine/TombEngine / SpawnShockwaveExplosion

Function SpawnShockwaveExplosion

TombEngine/Objects/Effects/Boss.cpp:50–85  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

48 }
49
50 void SpawnShockwaveExplosion(const ItemInfo& item, const Vector4& color)
51 {
52 if (!item.TestFlags((int)BossItemFlags::Object, (short)BossFlagValue::ShockwaveExplosion))
53 return;
54
55 int itemNumber = CreateItem();
56 if (itemNumber == NO_VALUE)
57 return;
58
59 auto& shockwaveItem = g_Level.Items[itemNumber];
60
61 shockwaveItem.Pose.Position = item.Pose.Position;
62 shockwaveItem.Pose.Position.y -= CLICK(2);
63
64 shockwaveItem.Pose.Orientation = EulerAngles(
65 Random::GenerateAngle(ANGLE(-20.0f), ANGLE(20.0f)),
66 Random::GenerateAngle(ANGLE(-20.0f), ANGLE(20.0f)),
67 Random::GenerateAngle(ANGLE(-20.0f), ANGLE(20.0f)));
68
69 shockwaveItem.ObjectNumber = ID_BOSS_EXPLOSION_SHOCKWAVE;
70 shockwaveItem.RoomNumber = item.RoomNumber;
71 shockwaveItem.Flags |= IFLAG_ACTIVATION_MASK;
72
73 InitializeItem(itemNumber);
74
75 auto result = color;
76 result.w = 1.0f;
77 shockwaveItem.Model.Color = result;
78 shockwaveItem.Collidable = false; // No collision for this entity.
79 shockwaveItem.ItemFlags[0] = 70; // Timer before clearing; will fade out, then get destroyed.
80 shockwaveItem.Model.Mutators[0].Scale = Vector3::Zero; // Start without scale.
81 shockwaveItem.Status = ITEM_ACTIVE;
82
83 AddActiveItem(itemNumber);
84 SoundEffect(SFX_TR3_BLAST_CIRCLE, &shockwaveItem.Pose);
85 }
86
87 void ShieldControl(int itemNumber)
88 {

Callers 2

TonyControlFunction · 0.85
ExplodeBossFunction · 0.85

Calls 8

GenerateAngleFunction · 0.85
ANGLEFunction · 0.85
InitializeItemFunction · 0.85
AddActiveItemFunction · 0.85
SoundEffectFunction · 0.85
TestFlagsMethod · 0.80
EulerAnglesClass · 0.70
CreateItemFunction · 0.50

Tested by

no test coverage detected