| 639 | } |
| 640 | |
| 641 | void TriggerShatterSmoke(int x, int y, int z) |
| 642 | { |
| 643 | SMOKE_SPARKS* spark = &SmokeSparks[GetFreeSmokeSpark()]; |
| 644 | |
| 645 | spark->on = true; |
| 646 | spark->sShade = 0; |
| 647 | spark->colFadeSpeed = 4; |
| 648 | spark->dShade = (GetRandomControl() & 0x1F) + 64; |
| 649 | spark->fadeToBlack = 24 - (GetRandomControl() & 7); |
| 650 | spark->blendMode = BlendMode::Additive; |
| 651 | spark->life = spark->sLife = (GetRandomControl() & 7) + 48; |
| 652 | spark->position.x = (GetRandomControl() & 0x1F) + x - 16; |
| 653 | spark->position.y = (GetRandomControl() & 0x1F) + y - 16; |
| 654 | spark->position.z = (GetRandomControl() & 0x1F) + z - 16; |
| 655 | spark->velocity.x = 2 * (GetRandomControl() & 0x1FF) - 512; |
| 656 | spark->velocity.y = 2 * (GetRandomControl() & 0x1FF) - 512; |
| 657 | spark->velocity.z = 2 * (GetRandomControl() & 0x1FF) - 512; |
| 658 | spark->friction = 7; |
| 659 | |
| 660 | if (GetRandomControl() & 1) |
| 661 | { |
| 662 | spark->flags = SP_ROTATE; |
| 663 | spark->rotAng = GetRandomControl() & 0xFFF; |
| 664 | if (GetRandomControl() & 1) |
| 665 | spark->rotAdd = -64 - (GetRandomControl() & 0x3F); |
| 666 | else |
| 667 | spark->rotAdd = (GetRandomControl() & 0x3F) + 64; |
| 668 | } |
| 669 | else if (g_Level.Rooms[LaraItem->RoomNumber].flags & ENV_FLAG_WIND) |
| 670 | { |
| 671 | spark->flags = SP_WIND; |
| 672 | } |
| 673 | else |
| 674 | { |
| 675 | spark->flags = SP_NONE; |
| 676 | } |
| 677 | |
| 678 | spark->gravity = -4 - (GetRandomControl() & 3); |
| 679 | spark->maxYvel = -4 - (GetRandomControl() & 3); |
| 680 | spark->dSize = (GetRandomControl() & 0x3F) + 64; |
| 681 | spark->sSize = spark->dSize >> 3; |
| 682 | spark->size = spark->dSize >> 3; |
| 683 | } |
| 684 | |
| 685 | int GetFreeBlood() |
| 686 | { |
no test coverage detected