| 1348 | } |
| 1349 | |
| 1350 | void TriggerShockwaveHitEffect(int x, int y, int z, unsigned char r, unsigned char g, unsigned char b, short rot, int vel) |
| 1351 | { |
| 1352 | int dx = LaraItem->Pose.Position.x - x; |
| 1353 | int dz = LaraItem->Pose.Position.z - z; |
| 1354 | |
| 1355 | if (dx >= -16384 && dx <= 16384 && dz >= -16384 && dz <= 16384) |
| 1356 | { |
| 1357 | auto* spark = GetFreeParticle(); |
| 1358 | spark->dB = b; |
| 1359 | spark->on = true; |
| 1360 | spark->sR = 0; |
| 1361 | spark->sG = 0; |
| 1362 | spark->sB = 0; |
| 1363 | spark->dG = g; |
| 1364 | spark->dR = r; |
| 1365 | spark->colFadeSpeed = 4; |
| 1366 | spark->fadeToBlack = 8; |
| 1367 | spark->blendMode = BlendMode::Additive; |
| 1368 | spark->life = spark->sLife = (GetRandomControl() & 3) + 16; |
| 1369 | |
| 1370 | int speed = (GetRandomControl() & 0xF) + vel; |
| 1371 | spark->xVel = speed * 16 * phd_sin(rot); |
| 1372 | spark->yVel = -512 - (GetRandomControl() & 0x1FF); |
| 1373 | spark->zVel = speed * 16 * phd_cos(rot); |
| 1374 | |
| 1375 | short angle; |
| 1376 | if (GetRandomControl() & 1) |
| 1377 | angle = rot + ANGLE(90); |
| 1378 | else |
| 1379 | angle = rot - ANGLE(90); |
| 1380 | |
| 1381 | int shift = (GetRandomControl() & 0x1FF) - 256; |
| 1382 | x += shift * phd_sin(angle); |
| 1383 | z += shift * phd_cos(angle); |
| 1384 | |
| 1385 | spark->x = (GetRandomControl() & 0x1F) + x - 16; |
| 1386 | spark->y = (GetRandomControl() & 0x1F) + y - 16; |
| 1387 | spark->z = (GetRandomControl() & 0x1F) + z - 16; |
| 1388 | |
| 1389 | spark->friction = 3; |
| 1390 | spark->flags = SP_EXPDEF | SP_ROTATE | SP_DEF | SP_SCALE; |
| 1391 | spark->rotAng = GetRandomControl() & 0xFFF; |
| 1392 | if (GetRandomControl() & 1) |
| 1393 | spark->rotAdd = -16 - (GetRandomControl() & 0xF); |
| 1394 | else |
| 1395 | spark->rotAdd = (GetRandomControl() & 0xF) + 16; |
| 1396 | |
| 1397 | spark->scalar = 1; |
| 1398 | spark->SpriteSeqID = ID_DEFAULT_SPRITES; |
| 1399 | spark->SpriteID = SPR_UNDERWATERDUST; |
| 1400 | spark->maxYvel = 0; |
| 1401 | spark->gravity = (GetRandomControl() & 0x3F) + 64; |
| 1402 | spark->sSize = spark->size = (GetRandomControl() & 0x1F) + 32; |
| 1403 | spark->dSize = spark->size / 4; |
| 1404 | } |
| 1405 | } |
| 1406 | |
| 1407 | void UpdateShockwaves() |
no test coverage detected