diff options
Diffstat (limited to 'src/GameTick.cpp')
-rw-r--r-- | src/GameTick.cpp | 69 |
1 files changed, 35 insertions, 34 deletions
diff --git a/src/GameTick.cpp b/src/GameTick.cpp index a096f9a..b380202 100644 --- a/src/GameTick.cpp +++ b/src/GameTick.cpp @@ -703,6 +703,39 @@ void attackCloseRange(Game* game, XYZ flatfacing) } } +void tackle(Game* game, XYZ flatfacing) +{ + auto& player = game->person[0]; + for (int i = 1; i < game->numpeople; ++i) { + auto& person = game->person[i]; + if (person.skeleton.free > 0 + || findDistancefast(person.playercoords, + player.playercoords + flatfacing) > 22) + continue; + + float gLoc[] { + flatfacing.x / soundscalefactor / 2, + flatfacing.y / soundscalefactor / 2, + flatfacing.z / soundscalefactor / 2, + }; + alSourcefv(gSourceID[headwhacksound], AL_POSITION, gLoc); + alSourcePlay(gSourceID[headwhacksound]); + person.skeleton.free = true; + person.longdead = 1; + + for (auto& joint : person.skeleton.joints) { + joint.position = person.playercoords + + DoRotation(joint.position, + 0, person.playerrotation, 0); + joint.realoldposition = joint.position; + joint.velocity = player.velocity; + joint.velocity.x += randInt(-4, 4); + joint.velocity.y = randInt(-4, 4) - 10; + joint.velocity.z += randInt(-4, 4); + } + } +} + void Game::Tick() { if (person[1].health <= 0 || person[0].health <= 0 || killedinnocent) @@ -1416,40 +1449,8 @@ void Game::Tick() } attackCloseRange(this, flatfacing); - - //Tackle - if (person[0].currentanimation == diveanim && visions == 0) { - for (int i = 1; i < numpeople; i++) { - if (person[i].skeleton.free > 0 - || findDistancefast(person[i].playercoords, - person[0].playercoords - + flatfacing) > 22) - continue; - - float gLoc[] { - flatfacing.x / soundscalefactor / 2, - flatfacing.y / soundscalefactor / 2, - flatfacing.z / soundscalefactor / 2, - }; - - alSourcefv(gSourceID[headwhacksound], - AL_POSITION, gLoc); - alSourcePlay(gSourceID[headwhacksound]); - person[i].skeleton.free = 1; - person[i].longdead = 1; - - for (auto& joint : person[i].skeleton.joints) { - joint.position = DoRotation(joint.position, 0, person[i].playerrotation, 0); - joint.position += person[i].playercoords; - joint.realoldposition = joint.position; - joint.velocity = person[0].velocity; - joint.velocity.y = -10; - joint.velocity.x += randInt(-4, 4); - joint.velocity.y += randInt(-4, 4); - joint.velocity.z += randInt(-4, 4); - } - } - } + if (person[0].currentanimation == diveanim && visions == 0) + tackle(this, flatfacing); // Empty magazine if (person[0].firing && person[0].ammo <= 0) { |