(SubgameEntity self, int damage, GameExportsImpl gameExports)
| 587 | } |
| 588 | |
| 589 | static void ThrowClientHead(SubgameEntity self, int damage, GameExportsImpl gameExports) { |
| 590 | float vd[] = { 0, 0, 0 }; |
| 591 | String gibname; |
| 592 | |
| 593 | if ((Lib.rand() & 1) != 0) { |
| 594 | gibname = "models/objects/gibs/head2/tris.md2"; |
| 595 | self.s.skinnum = 1; // second skin is player |
| 596 | } else { |
| 597 | gibname = "models/objects/gibs/skull/tris.md2"; |
| 598 | self.s.skinnum = 0; |
| 599 | } |
| 600 | |
| 601 | self.s.origin[2] += 32; |
| 602 | self.s.frame = 0; |
| 603 | gameExports.gameImports.setmodel(self, gibname); |
| 604 | Math3D.VectorSet(self.mins, -16, -16, 0); |
| 605 | Math3D.VectorSet(self.maxs, 16, 16, 16); |
| 606 | |
| 607 | self.takedamage = Defines.DAMAGE_NO; |
| 608 | self.solid = Defines.SOLID_NOT; |
| 609 | self.s.effects = Defines.EF_GIB; |
| 610 | self.s.sound = 0; |
| 611 | self.flags |= GameDefines.FL_NO_KNOCKBACK; |
| 612 | |
| 613 | self.movetype = GameDefines.MOVETYPE_BOUNCE; |
| 614 | VelocityForDamage(damage, vd); |
| 615 | Math3D.VectorAdd(self.velocity, vd, self.velocity); |
| 616 | |
| 617 | gclient_t client = self.getClient(); |
| 618 | if (client != null) |
| 619 | // bodies in the queue don't have a client anymore |
| 620 | { |
| 621 | client.anim_priority = Defines.ANIM_DEATH; |
| 622 | client.anim_end = self.s.frame; |
| 623 | } else { |
| 624 | self.think.action = null; |
| 625 | self.think.nextTime = 0; |
| 626 | } |
| 627 | |
| 628 | gameExports.gameImports.linkentity(self); |
| 629 | } |
| 630 | |
| 631 | public static void ThrowDebris(SubgameEntity self, String modelname, float speed, |
| 632 | float[] origin, GameExportsImpl gameExports) { |
no test coverage detected