/*
Copyright (C) 2003, 2010 - Wolfire Games
+Copyright (C) 2010-2016 - Lugaru contributors (see AUTHORS file)
This file is part of Lugaru.
-Lugaru is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2
-of the License, or (at your option) any later version.
+Lugaru is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
-This program is distributed in the hope that it will be useful,
+Lugaru is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-See the GNU General Public License for more details.
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+along with Lugaru. If not, see <http://www.gnu.org/licenses/>.
*/
/**> HEADER FILES <**/
extern GLubyte wolfbloodText[512 * 512 * 3];
extern int bloodtoggle;
extern Objects objects;
-extern bool osx;
extern bool autoslomo;
extern float camerashake;
extern float woozy;
extern bool gamestarted;
-Person player[maxplayers];
-
-/* convenience functions
- */
-Joint& Person::joint(int bodypart) { return skeleton.joints[skeleton.jointlabels[bodypart]]; }
-XYZ& Person::jointPos(int bodypart) { return joint(bodypart).position; }
-XYZ& Person::jointVel(int bodypart) { return joint(bodypart).velocity; }
+std::vector<std::shared_ptr<Person>> Person::players(1, std::shared_ptr<Person>(new Person()));
/* EFFECT
*
if (!(hasvictim
&& (animTarget == rabbitkickanim
&& victim
- && victim != this
+ && victim != this->shared_from_this()
&& frameCurrent >= 2
&& animCurrent == rabbitkickanim)
&& distsq(&coords, &victim->coords) < 1.2
victim->oldcoords = victim->coords;
coords = victim->coords;
victim->targetyaw = targetyaw;
- victim->victim = this;
+ victim->victim = this->shared_from_this();
}
}
int howmany;
for (int i = 0; i < 10; i++) {
howmany = abs(Random() % (skeleton.num_joints));
- if (!skeleton.free)
- flatvelocity = velocity;
- if (skeleton.free)
+ if (skeleton.free) {
flatvelocity = skeleton.joints[howmany].velocity;
- if (!skeleton.free)
- flatfacing = DoRotation(DoRotation(DoRotation(skeleton.joints[howmany].position, 0, 0, tilt), tilt2, 0, 0), 0, yaw, 0) * scale + coords;
- if (skeleton.free)
flatfacing = skeleton.joints[howmany].position * scale + coords;
+ } else {
+ flatvelocity = velocity;
+ flatfacing = DoRotation(DoRotation(DoRotation(skeleton.joints[howmany].position, 0, 0, tilt), tilt2, 0, 0), 0, yaw, 0) * scale + coords;
+ }
Sprite::MakeSprite(flamesprite, flatfacing, flatvelocity, 1, 1, 1, 2, 1);
}
{
if (indialogue != -1 && howactive == typeactive && creature == rabbittype)
return talkidleanim;
- if (hasvictim && victim != this/*||(id==0&&attackkeydown)*/)
- if (/*(id==0&&attackkeydown)||*/(!victim->dead && victim->aitype != passivetype && victim->aitype != searchtype && aitype != passivetype && aitype != searchtype && victim->id < numplayers)) {
+ if (hasvictim && (victim != this->shared_from_this())/*||(id==0&&attackkeydown)*/)
+ if (/*(id==0&&attackkeydown)||*/(!victim->dead && victim->aitype != passivetype &&
+ victim->aitype != searchtype && aitype != passivetype && aitype != searchtype &&
+ victim->id < Person::players.size())) {
if ((aitype == playercontrolled && stunned <= 0 && weaponactive == -1) || pause) {
if (creature == rabbittype)
return fightidleanim;
// FIXME: should abstract out inputs
static int bleedxint, bleedyint;
static XYZ bloodvel;
- //if(howmuch&&id==0)blooddimamount=1;
if (bloodtoggle && tutoriallevel != 1) {
if (bleeding <= 0 && spurt) {
spurt = 0;
for (int i = 0; i < 3; i++) {
// emit blood particles
bloodvel = 0;
- if (!skeleton.free) {
- bloodvel.z = 10;
- bloodvel = DoRotation(bloodvel, ((float)(Random() % 100)) / 4, yaw + ((float)(Random() % 100)) / 4, 0) * scale;
- }
if (skeleton.free) {
bloodvel -= DoRotation(skeleton.forward * 10 * scale, ((float)(Random() % 100)) / 4, ((float)(Random() % 100)) / 4, 0);
- }
- if (skeleton.free)
bloodvel += DoRotation(jointVel(head), ((float)(Random() % 100)) / 4, yaw + ((float)(Random() % 100)) / 4, 0) * scale;
- if (!skeleton.free)
- bloodvel += DoRotation(velocity, ((float)(Random() % 100)) / 4, ((float)(Random() % 100)) / 4, 0) * scale;
- if (skeleton.free) {
Sprite::MakeSprite(bloodsprite, jointPos(head) * scale + coords, bloodvel, 1, 1, 1, .05, 1);
Sprite::MakeSprite(bloodflamesprite, jointPos(head) * scale + coords, bloodvel, 1, 1, 1, .3, 1);
- }
- if (!skeleton.free) {
+ } else {
+ bloodvel.z = 10;
+ bloodvel = DoRotation(bloodvel, ((float)(Random() % 100)) / 4, yaw + ((float)(Random() % 100)) / 4, 0) * scale;
+ bloodvel += DoRotation(velocity, ((float)(Random() % 100)) / 4, ((float)(Random() % 100)) / 4, 0) * scale;
Sprite::MakeSprite(bloodsprite, DoRotation((jointPos(head) + jointPos(neck)) / 2, 0, yaw, 0)*scale + coords, bloodvel, 1, 1, 1, .05, 1);
Sprite::MakeSprite(bloodflamesprite, DoRotation((jointPos(head) + jointPos(neck)) / 2, 0, yaw, 0)*scale + coords, bloodvel, 1, 1, 1, .3, 1);
}
envsoundvol[numenvsounds] = 16;
envsoundlife[numenvsounds] = .4;
numenvsounds++;
- //if(i==2)whichsound=rabbitpain2sound;
}
if (whichsound != -1)
// emit blood particles
// FIXME: copypaste from above
bloodvel = 0;
- if (!skeleton.free) {
- bloodvel.z = 10;
- bloodvel = DoRotation(bloodvel, ((float)(Random() % 100)) / 4, yaw + ((float)(Random() % 100)) / 4, 0) * scale;
- }
if (skeleton.free) {
bloodvel -= DoRotation(skeleton.forward * 10 * scale, ((float)(Random() % 100)) / 4, ((float)(Random() % 100)) / 4, 0);
- }
- if (skeleton.free)
bloodvel += DoRotation(jointVel(head), ((float)(Random() % 100)) / 4, yaw + ((float)(Random() % 100)) / 4, 0) * scale;
- if (!skeleton.free)
- bloodvel += DoRotation(velocity, ((float)(Random() % 100)) / 4, ((float)(Random() % 100)) / 4, 0) * scale;
- if (skeleton.free) {
Sprite::MakeSprite(bloodsprite, jointPos(head) * scale + coords, bloodvel, 1, 1, 1, .05, 1);
Sprite::MakeSprite(bloodflamesprite, jointPos(head) * scale + coords, bloodvel, 1, 1, 1, .3, 1);
- }
- if (!skeleton.free) {
+ } else {
+ bloodvel.z = 10;
+ bloodvel = DoRotation(bloodvel, ((float)(Random() % 100)) / 4, yaw + ((float)(Random() % 100)) / 4, 0) * scale;
+ bloodvel += DoRotation(velocity, ((float)(Random() % 100)) / 4, ((float)(Random() % 100)) / 4, 0) * scale;
Sprite::MakeSprite(bloodsprite, DoRotation((jointPos(head) + jointPos(neck)) / 2, 0, yaw, 0)*scale + coords, bloodvel, 1, 1, 1, .05, 1);
Sprite::MakeSprite(bloodflamesprite, DoRotation((jointPos(head) + jointPos(neck)) / 2, 0, yaw, 0)*scale + coords, bloodvel, 1, 1, 1, .3, 1);
}
if (creature == rabbittype)
for (i = 0; i < 512; i++) {
for (j = 0; j < 512; j++) {
- if (bloodText[i*512*3 + j*3 + 0] <= which + 4 && bloodText[i*512*3 + j*3 + 0] >= which - 4) {
+ if (bloodText[i * 512 * 3 + j * 3 + 0] <= which + 4 && bloodText[i * 512 * 3 + j * 3 + 0] >= which - 4) {
if (i < startx) startx = i;
if (j < starty) starty = j;
if (i > endx) endx = i;
if (creature == wolftype)
for (i = 0; i < 512; i++) {
for (j = 0; j < 512; j++) {
- if (wolfbloodText[i*512*3 + j*3 + 0] <= which + 4 && wolfbloodText[i*512*3 + j*3 + 0] >= which - 4) {
+ if (wolfbloodText[i * 512 * 3 + j * 3 + 0] <= which + 4 && wolfbloodText[i * 512 * 3 + j * 3 + 0] >= which - 4) {
if (i < startx) startx = i;
if (j < starty) starty = j;
if (i > endx) endx = i;
// emit blood particles
// FIXME: more copypaste code
bloodvel = 0;
- if (!skeleton.free) {
- bloodvel.z = 10;
- bloodvel = DoRotation(bloodvel, ((float)(Random() % 100)) / 4, yaw + ((float)(Random() % 100)) / 4, 0) * scale;
- }
if (skeleton.free) {
bloodvel -= DoRotation(skeleton.forward * 10 * scale, ((float)(Random() % 100)) / 4, ((float)(Random() % 100)) / 4, 0);
- }
- if (skeleton.free)
bloodvel += DoRotation(jointVel(head), ((float)(Random() % 100)) / 4, yaw + ((float)(Random() % 100)) / 4, 0) * scale;
- if (!skeleton.free)
- bloodvel += DoRotation(velocity, ((float)(Random() % 100)) / 4, ((float)(Random() % 100)) / 4, 0) * scale;
- if (skeleton.free) {
Sprite::MakeSprite(bloodsprite, jointPos(head) * scale + coords, bloodvel, 1, 1, 1, .05, 1);
Sprite::MakeSprite(bloodflamesprite, jointPos(head) * scale + coords, bloodvel, 1, 1, 1, .3, 1);
- }
- if (!skeleton.free) {
+ } else {
+ bloodvel.z = 10;
+ bloodvel = DoRotation(bloodvel, ((float)(Random() % 100)) / 4, yaw + ((float)(Random() % 100)) / 4, 0) * scale;
+ bloodvel += DoRotation(velocity, ((float)(Random() % 100)) / 4, ((float)(Random() % 100)) / 4, 0) * scale;
Sprite::MakeSprite(bloodsprite, DoRotation((jointPos(head) + jointPos(neck)) / 2, 0, yaw, 0)*scale + coords, bloodvel, 1, 1, 1, .05, 1);
Sprite::MakeSprite(bloodflamesprite, DoRotation((jointPos(head) + jointPos(neck)) / 2, 0, yaw, 0)*scale + coords, bloodvel, 1, 1, 1, .3, 1);
}
// texture manipulation follows
int offsetx = 0, offsety = 0;
- /*if(which==225){
- offsety=Random()%40;
- offsetx=abs(Random()%120);
- }
- if(which==220||which==215){
- offsety=Random()%20;
- offsetx=abs(Random()%80);
- }*/
- //which=220;
offsetx = (1 + coordsy) * 512 - 291;
offsety = coordsx * 512 - 437;
if (animTarget == staffhitanim && distsq(&victim->coords, &coords) < 2 && ((victim->id == 0 && victim->crouchkeydown) || Random() % 4 == 0)) {
if (victim->weaponactive != -1) {
victim->throwtogglekeydown = 1;
- weapons[victim->weaponids[0]].owner = -1;
- weapons[victim->weaponids[0]].velocity = victim->velocity * .2;
- if (weapons[victim->weaponids[0]].velocity.x == 0)
- weapons[victim->weaponids[0]].velocity.x = .1;
- weapons[victim->weaponids[0]].tipvelocity = weapons[victim->weaponids[0]].velocity;
- weapons[victim->weaponids[0]].missed = 1;
- weapons[victim->weaponids[0]].freetime = 0;
- weapons[victim->weaponids[0]].firstfree = 1;
- weapons[victim->weaponids[0]].physics = 1;
+ XYZ tempVelocity = victim->velocity * .2;
+ if (tempVelocity.x == 0)
+ tempVelocity.x = .1;
+ weapons[victim->weaponids[0]].drop(tempVelocity, tempVelocity, false);
victim->num_weapons--;
if (victim->num_weapons) {
victim->weaponids[0] = victim->weaponids[victim->num_weapons];
}
victim->weaponactive = -1;
- for (int j = 0; j < numplayers; j++) {
- player[j].wentforweapon = 0;
+ for (unsigned j = 0; j < Person::players.size(); j++) {
+ Person::players[j]->wentforweapon = 0;
}
}
if (animTarget == staffspinhitanim && distsq(&victim->coords, &coords) < 2 && ((victim->id == 0 && victim->crouchkeydown) || Random() % 2 == 0)) {
if (victim->weaponactive != -1) {
victim->throwtogglekeydown = 1;
- weapons[victim->weaponids[0]].owner = -1;
- weapons[victim->weaponids[0]].velocity = victim->velocity * .2;
- if (weapons[victim->weaponids[0]].velocity.x == 0)
- weapons[victim->weaponids[0]].velocity.x = .1;
- weapons[victim->weaponids[0]].tipvelocity = weapons[victim->weaponids[0]].velocity;
- weapons[victim->weaponids[0]].missed = 1;
- weapons[victim->weaponids[0]].freetime = 0;
- weapons[victim->weaponids[0]].firstfree = 1;
- weapons[victim->weaponids[0]].physics = 1;
+ XYZ tempVelocity = victim->velocity * .2;
+ if (tempVelocity.x == 0)
+ tempVelocity.x = .1;
+ weapons[victim->weaponids[0]].drop(tempVelocity, tempVelocity, false);
victim->num_weapons--;
if (victim->num_weapons) {
victim->weaponids[0] = victim->weaponids[victim->num_weapons];
}
victim->weaponactive = -1;
- for (int j = 0; j < numplayers; j++) {
- player[j].wentforweapon = 0;
+ for (unsigned j = 0; j < Person::players.size(); j++) {
+ Person::players[j]->wentforweapon = 0;
}
}
animTarget = staffspinhitreversedanim;
if (animTarget == swordslashanim && distsq(&victim->coords, &coords) < 2 && ((victim->id == 0 && victim->crouchkeydown) || Random() % 4 == 0)) {
if (victim->weaponactive != -1) {
victim->throwtogglekeydown = 1;
- weapons[victim->weaponids[0]].owner = -1;
- weapons[victim->weaponids[0]].velocity = victim->velocity * .2;
- if (weapons[victim->weaponids[0]].velocity.x == 0)
- weapons[victim->weaponids[0]].velocity.x = .1;
- weapons[victim->weaponids[0]].tipvelocity = weapons[victim->weaponids[0]].velocity;
- weapons[victim->weaponids[0]].missed = 1;
- weapons[victim->weaponids[0]].freetime = 0;
- weapons[victim->weaponids[0]].firstfree = 1;
- weapons[victim->weaponids[0]].physics = 1;
+ XYZ tempVelocity = victim->velocity * .2;
+ if (tempVelocity.x == 0)
+ tempVelocity.x = .1;
+ weapons[victim->weaponids[0]].drop(tempVelocity, tempVelocity, false);
victim->num_weapons--;
if (victim->num_weapons) {
victim->weaponids[0] = victim->weaponids[victim->num_weapons];
}
victim->weaponactive = -1;
- for (int j = 0; j < numplayers; j++) {
- player[j].wentforweapon = 0;
+ for (unsigned j = 0; j < Person::players.size(); j++) {
+ Person::players[j]->wentforweapon = 0;
}
}
animTarget = swordslashreversedanim;
if (animTarget == knifeslashstartanim && distsq(&victim->coords, &coords) < 2 && (victim->id == 0 || Random() % 4 == 0)) {
if (victim->weaponactive != -1) {
victim->throwtogglekeydown = 1;
- weapons[victim->weaponids[0]].owner = -1;
- weapons[victim->weaponids[0]].velocity = victim->velocity * .2;
- if (weapons[victim->weaponids[0]].velocity.x == 0)
- weapons[victim->weaponids[0]].velocity.x = .1;
- weapons[victim->weaponids[0]].tipvelocity = weapons[victim->weaponids[0]].velocity;
- weapons[victim->weaponids[0]].missed = 1;
- weapons[victim->weaponids[0]].freetime = 0;
- weapons[victim->weaponids[0]].firstfree = 1;
- weapons[victim->weaponids[0]].physics = 1;
+ XYZ tempVelocity = victim->velocity * .2;
+ if (tempVelocity.x == 0)
+ tempVelocity.x = .1;
+ weapons[victim->weaponids[0]].drop(tempVelocity, tempVelocity, false);
victim->num_weapons--;
if (victim->num_weapons) {
victim->weaponids[0] = victim->weaponids[victim->num_weapons];
}
victim->weaponactive = -1;
- for (int j = 0; j < numplayers; j++) {
- player[j].wentforweapon = 0;
+ for (unsigned j = 0; j < Person::players.size(); j++) {
+ Person::players[j]->wentforweapon = 0;
}
}
animTarget = knifeslashreversedanim;
victim->animCurrent = knifeslashreversalanim;
victim->animTarget = knifeslashreversalanim;
}
- if (animTarget != knifeslashstartanim && animTarget != staffhitanim && animTarget != staffspinhitanim && animTarget != winduppunchanim && animTarget != wolfslapanim && animTarget != swordslashanim && animTarget != swordslashanim) {
+ if (animTarget != knifeslashstartanim && animTarget != staffhitanim && animTarget != staffspinhitanim && animTarget != winduppunchanim && animTarget != wolfslapanim && animTarget != swordslashanim) {
victim->targettilt2 = targettilt2;
victim->frameCurrent = frameCurrent;
victim->frameTarget = frameTarget;
victim->coords = coords;
victim->targetyaw = targetyaw;
victim->yaw = targetyaw;
- victim->victim = this;
+ victim->victim = this->shared_from_this();
}
if (animTarget == winduppunchanim) {
animTarget = winduppunchblockedanim;
victim->animTarget = blockhighleftanim;
victim->frameTarget = 1;
victim->target = .5;
- victim->victim = this;
+ victim->victim = this->shared_from_this();
victim->targetyaw = targetyaw + 180;
}
if (animTarget == wolfslapanim) {
victim->animTarget = blockhighleftanim;
victim->frameTarget = 1;
victim->target = .5;
- victim->victim = this;
+ victim->victim = this->shared_from_this();
victim->targetyaw = targetyaw + 180;
}
if ((animTarget == swordslashanim || animTarget == staffhitanim || animTarget == staffspinhitanim) && victim->weaponactive != -1) {
victim->animTarget = swordslashparryanim;
victim->frameTarget = 1;
victim->target = .5;
- victim->victim = this;
+ victim->victim = this->shared_from_this();
victim->targetyaw = targetyaw + 180;
if (abs(Random() % 20) == 0 || weapons[victim->weaponids[victim->weaponactive]].getType() == knife) {
victim->animTarget = staggerbackhighanim;
victim->targetyaw = targetyaw + 180;
victim->target = 0;
- weapons[victim->weaponids[0]].owner = -1;
aim = DoRotation(facing, 0, 90, 0) * 21;
aim.y += 7;
- weapons[victim->weaponids[0]].velocity = aim * -.2;
- weapons[victim->weaponids[0]].tipvelocity = aim;
- weapons[victim->weaponids[0]].missed = 1;
- weapons[victim->weaponids[0]].hitsomething = 0;
- weapons[victim->weaponids[0]].freetime = 0;
- weapons[victim->weaponids[0]].firstfree = 1;
- weapons[victim->weaponids[0]].physics = 1;
+ weapons[victim->weaponids[0]].drop(aim * -.2, aim);
victim->num_weapons--;
if (victim->num_weapons) {
victim->weaponids[0] = victim->weaponids[num_weapons];
victim->weaponstuck = 0;
}
victim->weaponactive = -1;
- for (int i = 0; i < numplayers; i++) {
- player[i].wentforweapon = 0;
+ for (unsigned i = 0; i < Person::players.size(); i++) {
+ Person::players[i]->wentforweapon = 0;
}
}
animTarget = staggerbackhighanim;
targetyaw = targetyaw + 180;
target = 0;
- weapons[weaponids[0]].owner = -1;
aim = DoRotation(facing, 0, 90, 0) * 21;
aim.y += 7;
- weapons[weaponids[0]].velocity = aim * -.2;
- weapons[weaponids[0]].tipvelocity = aim;
- weapons[weaponids[0]].hitsomething = 0;
- weapons[weaponids[0]].missed = 1;
- weapons[weaponids[0]].freetime = 0;
- weapons[weaponids[0]].firstfree = 1;
- weapons[weaponids[0]].physics = 1;
+ weapons[victim->weaponids[0]].drop(aim * -.2, aim);
num_weapons--;
if (num_weapons) {
weaponids[0] = weaponids[num_weapons];
weaponstuck = 0;
}
weaponactive = -1;
- for (int i = 0; i < numplayers; i++) {
- player[i].wentforweapon = 0;
+ for (unsigned i = 0; i < Person::players.size(); i++) {
+ Person::players[i]->wentforweapon = 0;
}
XYZ flatvelocity2;
XYZ flatfacing2;
for (int i = 0; i < skeleton.num_joints; i++) {
- if (!skeleton.free)
- flatvelocity2 = velocity;
- if (skeleton.free)
+ if (skeleton.free) {
flatvelocity2 = skeleton.joints[i].velocity;
- if (!skeleton.free)
- flatfacing2 = DoRotation(DoRotation(DoRotation(skeleton.joints[i].position, 0, 0, tilt), tilt2, 0, 0), 0, yaw, 0) * scale + coords;
- if (skeleton.free)
flatfacing2 = skeleton.joints[i].position * scale + coords;
+ } else {
+ flatvelocity2 = velocity;
+ flatfacing2 = DoRotation(DoRotation(DoRotation(skeleton.joints[i].position, 0, 0, tilt), tilt2, 0, 0), 0, yaw, 0) * scale + coords;
+ }
flatvelocity2.x += (float)(abs(Random() % 100) - 50) / 10;
flatvelocity2.y += (float)(abs(Random() % 100) - 50) / 10;
flatvelocity2.z += (float)(abs(Random() % 100) - 50) / 10;
skeleton.free = 2;
DoDamage(10000);
RagDoll(0);
- /*if(autoslomo){
- slomo=1;
- slomodelay=.2;
- }*/
if (!dead && creature == wolftype) {
award_bonus(0, Wolfbonus);
}
envsoundvol[numenvsounds] = 16;
envsoundlife[numenvsounds] = .4;
numenvsounds++;
- //if(i==2)whichsound=rabbitpain2sound;
}
if (whichsound != -1) {
}
}
speechdelay = .3;
-
- //if(permanentdamage>=damagetolerance&&howmuch<50)permanentdamage=damagetolerance-1;
- //if(damage>=damagetolerance&&howmuch<30&&!dead)damage=damagetolerance-1;
}
/* EFFECT
skeleton.specialforward[0] = facing;
//skeleton.specialforward[0]=DoRotation(facing,0,yaw,0);
- static int i;
- for (i = 0; i < skeleton.num_muscles; i++) {
+ for (int i = 0; i < skeleton.num_muscles; i++) {
if (skeleton.muscles[i].visible && (skeleton.muscles[i].parent1->label == head || skeleton.muscles[i].parent2->label == head)) {
skeleton.FindRotationMuscle(i, animTarget);
}
if (!isnormal(tilt)) tilt = 0;
if (!isnormal(tilt2)) tilt2 = 0;
- for (i = 0; i < skeleton.num_joints; i++) {
+ for (int i = 0; i < skeleton.num_joints; i++) {
skeleton.joints[i].delay = 0;
skeleton.joints[i].locked = 0;
skeleton.joints[i].position = DoRotation(DoRotation(DoRotation(skeleton.joints[i].position, 0, 0, tilt), tilt2, 0, 0), 0, yaw, 0);
if (!isnormal(skeleton.joints[i].position.x)) skeleton.joints[i].position = DoRotation(skeleton.joints[i].position, 0, yaw, 0);
- if (!isnormal(skeleton.joints[i].position.x)) skeleton.joints[i].position = skeleton.joints[i].position;
if (!isnormal(skeleton.joints[i].position.x)) skeleton.joints[i].position = coords;
skeleton.joints[i].position.y += .1;
skeleton.joints[i].oldposition = skeleton.joints[i].position;
skeleton.joints[i].realoldposition = skeleton.joints[i].position * scale + coords;
}
- for (i = 0; i < skeleton.num_joints; i++) {
+ for (int i = 0; i < skeleton.num_joints; i++) {
skeleton.joints[i].velocity = 0;
skeleton.joints[i].velchange = 0;
}
speed *= speedmult;
- for (i = 0; i < skeleton.num_joints; i++) {
+ for (int i = 0; i < skeleton.num_joints; i++) {
if ((animation[animCurrent].attack != reversed || animCurrent == swordslashreversedanim) && animCurrent != rabbitkickanim && !isLanding() && !wasLanding() && animation[animCurrent].height == animation[animTarget].height)
skeleton.joints[i].velocity = velocity / scale + facing * 5 + DoRotation(DoRotation(DoRotation((animation[animTarget].position[i][frameTarget] - animation[animCurrent].position[i][frameCurrent]) * speed, 0, 0, tilt), tilt2, 0, 0), 0, yaw, 0);
else
updatedelay = 0;
velocity = 0;
- for (i = 0; i < skeleton.num_joints; i++) {
+ for (int i = 0; i < skeleton.num_joints; i++) {
velocity += skeleton.joints[i].velocity * scale;
}
velocity /= skeleton.num_joints;
// drop weapon
if (Random() % 2 == 0) {
if (weaponactive != -1 && animTarget != rabbitkickanim && num_weapons > 0) {
- weapons[weaponids[0]].owner = -1;
- weapons[weaponids[0]].hitsomething = 0;
- weapons[weaponids[0]].velocity = jointVel(righthand) * scale * -.3;
+ weapons[weaponids[0]].drop(jointVel(righthand) * scale * -.3, jointVel(righthand) * scale);
weapons[weaponids[0]].velocity.x += .01;
- weapons[weaponids[0]].tipvelocity = jointVel(righthand) * scale;
- weapons[weaponids[0]].missed = 1;
- weapons[weaponids[0]].freetime = 0;
- weapons[weaponids[0]].firstfree = 1;
- weapons[weaponids[0]].physics = 1;
num_weapons--;
if (num_weapons) {
weaponids[0] = weaponids[num_weapons];
weaponstuck = 0;
}
weaponactive = -1;
- for (i = 0; i < numplayers; i++) {
- player[i].wentforweapon = 0;
+ for (unsigned i = 0; i < Person::players.size(); i++) {
+ Person::players[i]->wentforweapon = 0;
}
}
}
void Person::DoAnimations()
{
if (!skeleton.free) {
- int i = 0;
static float oldtarget;
if (isIdle() && animCurrent != getIdle())
}
if (animTarget == rabbittacklinganim && frameTarget == 1) {
- //if(victim->aitype==attacktypecutoff&&Random()%2==0&&victim->stunned<=0&&animation[victim->animTarget].attack==neutral&&victim->id!=0)Reverse();
if (victim->aitype == attacktypecutoff && victim->stunned <= 0 && victim->surprised <= 0 && victim->id != 0)
Reverse();
if (animTarget == rabbittacklinganim && frameTarget == 1 && !victim->isCrouch() && victim->animTarget != backhandspringanim) {
}
if (animation[animTarget].label[frameTarget] == 4 && (weaponactive == -1 || (animTarget != knifeslashstartanim && animTarget != knifethrowanim && animTarget != crouchstabanim && animTarget != swordgroundstabanim && animTarget != knifefollowanim))) {
if (animation[animTarget].attack != neutral) {
- i = abs(Random() % 3);
- if (i == 0)
+ unsigned r = abs(Random() % 3);
+ if (r == 0)
whichsound = lowwhooshsound;
- if (i == 1)
+ if (r == 1)
whichsound = midwhooshsound;
- if (i == 2)
+ if (r == 2)
whichsound = highwhooshsound;
}
if (animation[animTarget].attack == neutral)
int whichsound = -1;
if (animation[animTarget].label[frameTarget] == 4 && aitype != playercontrolled) {
if (animation[animTarget].attack != neutral) {
- i = abs(Random() % 4);
+ unsigned r = abs(Random() % 4);
if (creature == rabbittype) {
- if (i == 0) whichsound = rabbitattacksound;
- if (i == 1) whichsound = rabbitattack2sound;
- if (i == 2) whichsound = rabbitattack3sound;
- if (i == 3) whichsound = rabbitattack4sound;
+ if (r == 0) whichsound = rabbitattacksound;
+ if (r == 1) whichsound = rabbitattack2sound;
+ if (r == 2) whichsound = rabbitattack3sound;
+ if (r == 3) whichsound = rabbitattack4sound;
}
if (creature == wolftype) {
- if (i == 0) whichsound = barksound;
- if (i == 1) whichsound = bark2sound;
- if (i == 2) whichsound = bark3sound;
- if (i == 3) whichsound = barkgrowlsound;
+ if (r == 0) whichsound = barksound;
+ if (r == 1) whichsound = bark2sound;
+ if (r == 2) whichsound = bark3sound;
+ if (r == 3) whichsound = barkgrowlsound;
}
speechdelay = .3;
}
- //if(animation[animTarget].attack==neutral)whichsound=movewhooshsound;
}
- //else if(animation[animTarget].label[frameTarget]==4)whichsound=knifeswishsound;
- //if(animation[animTarget].label[frameTarget]==8)whichsound=landsound2;
if (whichsound != -1) {
emit_sound_at(whichsound, coords);
frameTarget++;
if (animTarget == removeknifeanim && animation[animTarget].label[frameCurrent] == 5) {
- for (i = 0; i < weapons.size(); i++) {
+ for (unsigned i = 0; i < weapons.size(); i++) {
if (weapons[i].owner == -1)
if (distsqflat(&coords, &weapons[i].position) < 4 && weaponactive == -1) {
if (distsq(&coords, &weapons[i].position) >= 1) {
emit_sound_at(knifedrawsound, coords, 128.);
}
- weaponactive = 0;
- weapons[i].owner = id;
- if (num_weapons > 0) {
- weaponids[num_weapons] = weaponids[0];
- }
- num_weapons++;
- weaponids[0] = i;
+ takeWeapon(i);
}
}
}
}
if (animTarget == crouchremoveknifeanim && animation[animTarget].label[frameCurrent] == 5) {
- for (i = 0; i < weapons.size(); i++) {
+ for (unsigned i = 0; i < weapons.size(); i++) {
bool willwork = true;
if (weapons[i].owner != -1)
- if (player[weapons[i].owner].weaponstuck != -1)
- if (player[weapons[i].owner].weaponids[player[weapons[i].owner].weaponstuck] == i)
- if (player[weapons[i].owner].num_weapons > 1)
+ if (Person::players[weapons[i].owner]->weaponstuck != -1)
+ if (Person::players[weapons[i].owner]->weaponids[Person::players[weapons[i].owner]->weaponstuck] == int(i))
+ if (Person::players[weapons[i].owner]->num_weapons > 1)
willwork = 0;
- if ((weapons[i].owner == -1) || (hasvictim && weapons[i].owner == victim->id && victim->skeleton.free))
+ if ((weapons[i].owner == -1) || (hasvictim && (weapons[i].owner == int(victim->id)) && victim->skeleton.free))
if (willwork && distsqflat(&coords, &weapons[i].position) < 3 && weaponactive == -1) {
if (distsq(&coords, &weapons[i].position) < 1 || hasvictim) {
bool fleshstuck = false;
if (weapons[i].owner != -1)
if (victim->weaponstuck != -1) {
- if (victim->weaponids[victim->weaponstuck] == i) {
+ if (victim->weaponids[victim->weaponstuck] == int(i)) {
fleshstuck = true;
}
}
emit_sound_at(knifedrawsound, coords, 128.);
}
}
- weaponactive = 0;
if (weapons[i].owner != -1) {
-
- victim = &player[weapons[i].owner];
+ victim = Person::players[weapons[i].owner];
if (victim->num_weapons == 1)
victim->num_weapons = 0;
else
footvel = 0;
footpoint = weapons[i].position;
if (victim->weaponstuck != -1) {
- if (victim->weaponids[victim->weaponstuck] == i) {
+ if (victim->weaponids[victim->weaponstuck] == int(i)) {
if (bloodtoggle)
Sprite::MakeSprite(cloudimpactsprite, footpoint, footvel, 1, 0, 0, .8, .3);
weapons[i].bloody = 2;
if (victim->num_weapons > 0) {
if (victim->weaponstuck != 0 && victim->weaponstuck != -1)
victim->weaponstuck = 0;
- if (victim->weaponids[0] == i)
+ if (victim->weaponids[0] == int(i))
victim->weaponids[0] = victim->weaponids[victim->num_weapons];
}
- victim->skeleton.joints[victim->skeleton.jointlabels[abdomen]].velocity += relative * 6;
- victim->skeleton.joints[victim->skeleton.jointlabels[neck]].velocity += relative * 6;
- victim->skeleton.joints[victim->skeleton.jointlabels[rightshoulder]].velocity += relative * 6;
- victim->skeleton.joints[victim->skeleton.jointlabels[leftshoulder]].velocity += relative * 6;
- }
- weapons[i].owner = id;
- if (num_weapons > 0) {
- weaponids[num_weapons] = weaponids[0];
+ victim->jointVel(abdomen) += relative * 6;
+ victim->jointVel(neck) += relative * 6;
+ victim->jointVel(rightshoulder) += relative * 6;
+ victim->jointVel(leftshoulder) += relative * 6;
}
- num_weapons++;
- weaponids[0] = i;
+ takeWeapon(i);
}
}
}
if ((animTarget == rabbitrunninganim || animTarget == wolfrunninganim) && frameTarget == 3 && (jumpkeydown || attackkeydown || id != 0))
dojumpattack = 1;
if (hasvictim)
- if (distsq(&victim->coords, &/*player[i].*/coords) < 5 && victim->aitype == gethelptype && (attackkeydown) && !victim->skeleton.free && victim->isRun() && victim->runninghowlong >= 1)
+ if (distsq(&victim->coords, &/*Person::players[i]->*/coords) < 5 && victim->aitype == gethelptype && (attackkeydown) && !victim->skeleton.free && victim->isRun() && victim->runninghowlong >= 1)
dojumpattack = 1;
if (!hostile)
dojumpattack = 0;
targetloc = velocity;
Normalise(&targetloc);
targetloc += coords;
- for (i = 0; i < numplayers; i++) {
+ for (unsigned i = 0; i < Person::players.size(); i++) {
if (i != id)
- if (distsq(&targetloc, &player[i].coords) < closestdist || closestdist == 0) {
- closestdist = distsq(&targetloc, &player[i].coords);
+ if (distsq(&targetloc, &Person::players[i]->coords) < closestdist || closestdist == 0) {
+ closestdist = distsq(&targetloc, &Person::players[i]->coords);
closestid = i;
}
}
if (closestid != -1)
- if (closestdist < 5 && !player[closestid].dead && animation[player[closestid].animTarget].height != lowheight && player[closestid].animTarget != backhandspringanim) {
+ if (closestdist < 5 && !Person::players[closestid]->dead && animation[Person::players[closestid]->animTarget].height != lowheight && Person::players[closestid]->animTarget != backhandspringanim) {
hasvictim = 1;
- victim = &player[closestid];
+ victim = Person::players[closestid];
coords = victim->coords;
animCurrent = rabbittacklinganim;
animTarget = rabbittacklinganim;
if (hasvictim) {
damagemult /= victim->damagetolerance / 200;
}
- //if(onfire)damagemult=3;
if ((animation[animTarget].attack == normalattack || animTarget == walljumprightkickanim || animTarget == walljumpleftkickanim) && (!feint) && (victim->skeleton.free != 2 || animTarget == killanim || animTarget == dropkickanim || animTarget == crouchstabanim || animTarget == swordgroundstabanim || animTarget == staffgroundsmashanim)) {
if (animTarget == spinkickanim && animation[animTarget].label[frameCurrent] == 5) {
if (distsq(&coords, &victim->coords) < (scale * 5) * (scale * 5) * 3 && 3 && animation[victim->animTarget].height != lowheight) {
relative.y = 0;
Normalise(&relative);
relative = DoRotation(relative, 0, -90, 0);
- for (i = 0; i < victim->skeleton.num_joints; i++) {
+ for (int i = 0; i < victim->skeleton.num_joints; i++) {
victim->skeleton.joints[i].velocity += relative * damagemult * 40;
}
- victim->skeleton.joints[victim->skeleton.jointlabels[head]].velocity += relative * damagemult * 200;
+ victim->jointVel(head) += relative * damagemult * 200;
//FootLand(1,2);
victim->Puff(head);
victim->DoDamage(damagemult * 100 / victim->protectionhead);
relative.y -= 1;
Normalise(&relative);
relative = DoRotation(relative, 0, 90, 0);
- for (i = 0; i < victim->skeleton.num_joints; i++) {
+ for (int i = 0; i < victim->skeleton.num_joints; i++) {
victim->skeleton.joints[i].velocity += relative * damagemult * 20;
}
- victim->skeleton.joints[victim->skeleton.jointlabels[head]].velocity += relative * damagemult * 100;
+ victim->jointVel(head) += relative * damagemult * 100;
//FootLand(1,2);
victim->Puff(head);
victim->DoDamage(damagemult * 50 / victim->protectionhead);
relative.y = 0;
Normalise(&relative);
relative = DoRotation(relative, 0, -90, 0);
- for (i = 0; i < victim->skeleton.num_joints; i++) {
+ for (int i = 0; i < victim->skeleton.num_joints; i++) {
victim->skeleton.joints[i].velocity += relative * damagemult * 40;
}
- victim->skeleton.joints[victim->skeleton.jointlabels[head]].velocity += relative * damagemult * 200;
+ victim->jointVel(head) += relative * damagemult * 200;
//FootLand(1,2);
victim->Puff(head);
victim->DoDamage(damagemult * 150 / victim->protectionhead);
relative.y = 0;
Normalise(&relative);
relative = DoRotation(relative, 0, 90, 0);
- for (i = 0; i < victim->skeleton.num_joints; i++) {
+ for (int i = 0; i < victim->skeleton.num_joints; i++) {
victim->skeleton.joints[i].velocity += relative * damagemult * 40;
}
- victim->skeleton.joints[victim->skeleton.jointlabels[head]].velocity += relative * damagemult * 200;
+ victim->jointVel(head) += relative * damagemult * 200;
//FootLand(1,2);
victim->Puff(head);
victim->DoDamage(damagemult * 150 / victim->protectionhead);
relative = victim->coords - coords;
relative.y = 0;
Normalise(&relative);
- for (i = 0; i < victim->skeleton.num_joints; i++) {
+ for (int i = 0; i < victim->skeleton.num_joints; i++) {
victim->skeleton.joints[i].velocity += relative * damagemult * 30;
}
- victim->skeleton.joints[victim->skeleton.jointlabels[head]].velocity += relative * damagemult * 100;
+ victim->jointVel(head) += relative * damagemult * 100;
//FootLand(1,2);
victim->Puff(head);
victim->DoDamage(damagemult * 50 / victim->protectionhead);
victim->skeleton.broken = 0;
victim->skeleton.spinny = 1;
- for (i = 0; i < victim->skeleton.num_joints; i++) {
+ for (int i = 0; i < victim->skeleton.num_joints; i++) {
victim->skeleton.joints[i].velchange = 0;
victim->skeleton.joints[i].delay = 0;
victim->skeleton.joints[i].locked = 0;
relative = 0;
relative.y = 1;
Normalise(&relative);
- for (i = 0; i < victim->skeleton.num_joints; i++) {
+ for (int i = 0; i < victim->skeleton.num_joints; i++) {
victim->skeleton.joints[i].velocity.y = relative.y * 10;
victim->skeleton.joints[i].position.y += relative.y * .3;
victim->skeleton.joints[i].oldposition.y += relative.y * .3;
victim->skeleton.joints[i].realoldposition.y += relative.y * .3;
}
victim->Puff(abdomen);
- victim->skeleton.joints[victim->skeleton.jointlabels[abdomen]].velocity.y = relative.y * 400;
+ victim->jointVel(abdomen).y = relative.y * 400;
}
}
relative = victim->coords - coords;
relative.y = 0;
Normalise(&relative);
- for (i = 0; i < victim->skeleton.num_joints; i++) {
+ for (int i = 0; i < victim->skeleton.num_joints; i++) {
victim->skeleton.joints[i].velocity += relative * damagemult * 90;
}
victim->Puff(abdomen);
slomodelay = .2;
}
victim->DoDamage(damagemult * 500 / victim->protectionhigh);
- victim->skeleton.joints[victim->skeleton.jointlabels[abdomen]].velocity += relative * damagemult * 300;
+ victim->jointVel(abdomen) += relative * damagemult * 300;
}
}
victim->skeleton.broken = 0;
victim->skeleton.spinny = 1;
- for (i = 0; i < victim->skeleton.num_joints; i++) {
+ for (int i = 0; i < victim->skeleton.num_joints; i++) {
victim->skeleton.joints[i].velchange = 0;
//victim->skeleton.joints[i].delay=0;
victim->skeleton.joints[i].locked = 0;
Normalise(&relative);
relative.y += .3;
Normalise(&relative);
- for (i = 0; i < victim->skeleton.num_joints; i++) {
+ for (int i = 0; i < victim->skeleton.num_joints; i++) {
victim->skeleton.joints[i].velocity += relative * damagemult * 20;
}
if (!victim->dead)
victim->Puff(abdomen);
victim->DoDamage(damagemult * 20 / victim->protectionhigh);
- victim->skeleton.joints[victim->skeleton.jointlabels[abdomen]].velocity += relative * damagemult * 200;
+ victim->jointVel(abdomen) += relative * damagemult * 200;
staggerdelay = .5;
if (!victim->dead)
staggerdelay = 1.2;
}
if ((animTarget == crouchstabanim || animTarget == swordgroundstabanim) && animation[animTarget].label[frameCurrent] == 5) {
- //if(id==0)camerashake+=.4;
if (hasvictim)
if (!victim->skeleton.free)
victim->skeleton.free = 1;
victim->skeleton.broken = 0;
- for (i = 0; i < victim->skeleton.num_joints; i++) {
+ for (int i = 0; i < victim->skeleton.num_joints; i++) {
victim->skeleton.joints[i].velchange = 0;
victim->skeleton.joints[i].locked = 0;
//victim->skeleton.joints[i].velocity=0;
victim->skeleton.free = 1;
victim->skeleton.broken = 0;
- for (i = 0; i < victim->skeleton.num_joints; i++) {
+ for (int i = 0; i < victim->skeleton.num_joints; i++) {
victim->skeleton.joints[i].velchange = 0;
victim->skeleton.joints[i].locked = 0;
//victim->skeleton.joints[i].velocity=0;
victim->bled = 0;
}
- victim->skeleton.joints[victim->skeleton.jointlabels[abdomen]].velocity += relative * damagemult * 20;
+ victim->jointVel(abdomen) += relative * damagemult * 20;
}
}
}
relative = victim->coords - coords;
relative.y = 0;
Normalise(&relative);
- for (i = 0; i < victim->skeleton.num_joints; i++) {
+ for (int i = 0; i < victim->skeleton.num_joints; i++) {
victim->skeleton.joints[i].velocity = relative * 30;
}
- victim->skeleton.joints[victim->skeleton.jointlabels[head]].velocity += relative * damagemult * 150;
+ victim->jointVel(head) += relative * damagemult * 150;
victim->frameTarget = 0;
victim->animTarget = staggerbackhardanim;
Normalise(&relative);
relative.y = .3;
Normalise(&relative);
- for (i = 0; i < victim->skeleton.num_joints; i++) {
+ for (int i = 0; i < victim->skeleton.num_joints; i++) {
victim->skeleton.joints[i].velocity = relative * 5;
}
- victim->skeleton.joints[victim->skeleton.jointlabels[abdomen]].velocity += relative * damagemult * 400;
+ victim->jointVel(abdomen) += relative * damagemult * 400;
victim->frameTarget = 0;
victim->animTarget = staggerbackhardanim;
if (weaponactive != -1) {
escapednum = 0;
XYZ aim;
- weapons[weaponids[0]].owner = -1;
- aim = victim->coords + DoRotation(victim->skeleton.joints[victim->skeleton.jointlabels[abdomen]].position, 0, victim->yaw, 0) * victim->scale + victim->velocity * findDistance(&victim->coords, &coords) / 50 - (coords + DoRotation(jointPos(righthand), 0, yaw, 0) * scale);
+ aim = victim->coords + DoRotation(victim->jointPos(abdomen), 0, victim->yaw, 0) * victim->scale + victim->velocity * findDistance(&victim->coords, &coords) / 50 - (coords + DoRotation(jointPos(righthand), 0, yaw, 0) * scale);
Normalise(&aim);
- /*if(victim->animTarget==jumpupanim||victim->animTarget==jumpdownanim){
- aim=DoRotation(aim,(float)abs(Random()%15)-7,(float)abs(Random()%15)-7,0);
- }*/
- weapons[weaponids[0]].velocity = aim * 50;
- weapons[weaponids[0]].tipvelocity = aim * 50;
- weapons[weaponids[0]].missed = 0;
- weapons[weaponids[0]].hitsomething = 0;
- weapons[weaponids[0]].freetime = 0;
- weapons[weaponids[0]].firstfree = 1;
- weapons[weaponids[0]].physics = 0;
+ weapons[weaponids[0]].thrown(aim * 50);
num_weapons--;
if (num_weapons) {
weaponids[0] = weaponids[num_weapons];
if (tutoriallevel != 1) {
emit_sound_at(knifeslicesound, victim->coords);
}
- //victim->skeleton.joints[victim->skeleton.jointlabels[abdomen]].velocity+=relative*damagemult*200;
+ //victim->jointVel(abdomen)+=relative*damagemult*200;
if (animation[victim->animTarget].attack && (victim->aitype != playercontrolled || victim->animTarget == knifeslashstartanim) && (victim->creature == rabbittype || victim->deathbleeding <= 0)) {
if (victim->id != 0 || difficulty == 2) {
victim->frameTarget = 0;
XYZ footvel, footpoint;
footvel = 0;
if (skeleton.free) {
- footpoint = (victim->skeleton.joints[victim->skeleton.jointlabels[abdomen]].position + victim->skeleton.joints[victim->skeleton.jointlabels[neck]].position) / 2 * victim->scale + victim->coords;
- }
- if (!skeleton.free) {
- footpoint = DoRotation((victim->skeleton.joints[victim->skeleton.jointlabels[abdomen]].position + victim->skeleton.joints[victim->skeleton.jointlabels[neck]].position) / 2, 0, victim->yaw, 0) * victim->scale + victim->coords;
+ footpoint = (victim->jointPos(abdomen) + victim->jointPos(neck)) / 2 * victim->scale + victim->coords;
+ } else {
+ footpoint = DoRotation((victim->jointPos(abdomen) + victim->jointPos(neck)) / 2, 0, victim->yaw, 0) * victim->scale + victim->coords;
}
if (tutoriallevel != 1) {
if (bloodtoggle)
victim->deathbleeding = 1;
emit_sound_at(swordslicesound, victim->coords);
}
- //victim->skeleton.joints[victim->skeleton.jointlabels[abdomen]].velocity+=relative*damagemult*200;
+ //victim->jointVel(abdomen)+=relative*damagemult*200;
if (tutoriallevel != 1) {
victim->frameTarget = 0;
victim->animTarget = staggerbackhardanim;
XYZ footvel, footpoint;
footvel = 0;
if (skeleton.free) {
- footpoint = (victim->skeleton.joints[victim->skeleton.jointlabels[abdomen]].position + victim->skeleton.joints[victim->skeleton.jointlabels[neck]].position) / 2 * victim->scale + victim->coords;
- }
- if (!skeleton.free) {
- footpoint = DoRotation((victim->skeleton.joints[victim->skeleton.jointlabels[abdomen]].position + victim->skeleton.joints[victim->skeleton.jointlabels[neck]].position) / 2, 0, victim->yaw, 0) * victim->scale + victim->coords;
+ footpoint = (victim->jointPos(abdomen) + victim->jointPos(neck)) / 2 * victim->scale + victim->coords;
+ } else {
+ footpoint = DoRotation((victim->jointPos(abdomen) + victim->jointPos(neck)) / 2, 0, victim->yaw, 0) * victim->scale + victim->coords;
}
if (bloodtoggle)
Sprite::MakeSprite(cloudimpactsprite, footpoint, footvel, 1, 0, 0, .9, .3);
victim->animTarget = staggerbackhighanim;
victim->targetyaw = targetyaw + 180;
victim->target = 0;
- weapons[victim->weaponids[0]].owner = -1;
aim = DoRotation(facing, 0, 90, 0) * 21;
aim.y += 7;
- weapons[victim->weaponids[0]].velocity = aim * -.2;
- weapons[victim->weaponids[0]].tipvelocity = aim;
- weapons[victim->weaponids[0]].missed = 1;
- weapons[weaponids[0]].hitsomething = 0;
- weapons[victim->weaponids[0]].freetime = 0;
- weapons[victim->weaponids[0]].firstfree = 1;
- weapons[victim->weaponids[0]].physics = 1;
+ weapons[victim->weaponids[0]].drop(aim * -.2, aim);
victim->num_weapons--;
if (victim->num_weapons) {
victim->weaponids[0] = victim->weaponids[num_weapons];
victim->weaponstuck = 0;
}
victim->weaponactive = -1;
- for (i = 0; i < numplayers; i++) {
- player[i].wentforweapon = 0;
+ for (unsigned i = 0; i < Person::players.size(); i++) {
+ Person::players[i]->wentforweapon = 0;
}
}
relative = DoRotation(relative, 0, 90, 0);
relative.y -= 1;
Normalise(&relative);
- for (i = 0; i < victim->skeleton.num_joints; i++) {
+ for (int i = 0; i < victim->skeleton.num_joints; i++) {
victim->skeleton.joints[i].velocity += relative * damagemult * 60;
}
- victim->skeleton.joints[victim->skeleton.jointlabels[head]].velocity += relative * damagemult * 230;
- victim->skeleton.joints[victim->skeleton.jointlabels[neck]].velocity += relative * damagemult * 230;
+ victim->jointVel(head) += relative * damagemult * 230;
+ victim->jointVel(neck) += relative * damagemult * 230;
//FootLand(1,2);
victim->Puff(head);
if (tutoriallevel != 1) {
relative.y = 0;
Normalise(&relative);
relative = DoRotation(relative, 0, -90, 0);
- for (i = 0; i < victim->skeleton.num_joints; i++) {
+ for (int i = 0; i < victim->skeleton.num_joints; i++) {
victim->skeleton.joints[i].velocity += relative * damagemult * 40;
}
- victim->skeleton.joints[victim->skeleton.jointlabels[head]].velocity += relative * damagemult * 220;
- victim->skeleton.joints[victim->skeleton.jointlabels[neck]].velocity += relative * damagemult * 220;
+ victim->jointVel(head) += relative * damagemult * 220;
+ victim->jointVel(neck) += relative * damagemult * 220;
//FootLand(1,2);
victim->Puff(head);
if (tutoriallevel != 1) {
victim->skeleton.free = 1;
victim->skeleton.broken = 0;
- for (i = 0; i < victim->skeleton.num_joints; i++) {
+ for (int i = 0; i < victim->skeleton.num_joints; i++) {
victim->skeleton.joints[i].velchange = 0;
victim->skeleton.joints[i].locked = 0;
//victim->skeleton.joints[i].velocity=0;
relative.y = -1;
Normalise(&relative);
if (!victim->dead) {
- for (i = 0; i < victim->skeleton.num_joints; i++) {
+ for (int i = 0; i < victim->skeleton.num_joints; i++) {
victim->skeleton.joints[i].velocity = relative * damagemult * 40;
}
//FootLand(1,2);
- victim->skeleton.joints[victim->skeleton.jointlabels[abdomen]].velocity += relative * damagemult * 40;
+ victim->jointVel(abdomen) += relative * damagemult * 40;
}
if (victim->dead) {
- for (i = 0; i < victim->skeleton.num_joints; i++) {
+ for (int i = 0; i < victim->skeleton.num_joints; i++) {
victim->skeleton.joints[i].velocity = relative * damagemult * abs(Random() % 20);
}
//FootLand(1,2);
- //victim->skeleton.joints[victim->skeleton.jointlabels[abdomen]].velocity+=relative*damagemult*20;
+ //victim->jointVel(abdomen)+=relative*damagemult*20;
}
victim->Puff(abdomen);
if (tutoriallevel != 1) {
DoBlood(.2, 250);
}
victim->RagDoll(0);
- for (i = 0; i < victim->skeleton.num_joints; i++) {
+ for (int i = 0; i < victim->skeleton.num_joints; i++) {
victim->skeleton.joints[i].velocity += relative * damagemult * 40;
}
- victim->skeleton.joints[victim->skeleton.jointlabels[head]].velocity += relative * damagemult * 200;
+ victim->jointVel(head) += relative * damagemult * 200;
if (tutoriallevel != 1) {
emit_sound_at(heavyimpactsound, victim->coords, 128.);
}
} else {
if (victim->damage >= victim->damagetolerance)
victim->RagDoll(0);
- for (i = 0; i < victim->skeleton.num_joints; i++) {
+ for (int i = 0; i < victim->skeleton.num_joints; i++) {
victim->skeleton.joints[i].velocity += relative * damagemult * 10;
}
- victim->skeleton.joints[victim->skeleton.jointlabels[abdomen]].velocity += relative * damagemult * 200;
+ victim->jointVel(abdomen) += relative * damagemult * 200;
victim->frameTarget = 0;
victim->animTarget = staggerbackhighanim;
victim->targetyaw = targetyaw + 180;
}
if (animTarget == sweepanim && animation[animTarget].label[frameCurrent] == 5) {
- if (victim->animTarget != jumpupanim && distsq(&coords, &victim->coords) < (scale * 5) * (scale * 5) * 3 && victim != this) {
+ if ((victim->animTarget != jumpupanim) &&
+ (distsq(&coords, &victim->coords) < (scale * 5) * (scale * 5) * 3) &&
+ (victim != this->shared_from_this())) {
escapednum = 0;
if (id == 0)
camerashake += .2;
if (animation[victim->animTarget].height == middleheight || animation[victim->animCurrent].height == middleheight || victim->damage >= victim->damagetolerance - 40) {
victim->RagDoll(0);
- for (i = 0; i < victim->skeleton.num_joints; i++) {
+ for (int i = 0; i < victim->skeleton.num_joints; i++) {
victim->skeleton.joints[i].velocity += relative * damagemult * 15;
}
relative = DoRotation(relative, 0, -90, 0);
relative.y += .1;
- for (i = 0; i < victim->skeleton.num_joints; i++) {
+ for (int i = 0; i < victim->skeleton.num_joints; i++) {
if (victim->skeleton.joints[i].label == leftfoot || victim->skeleton.joints[i].label == rightfoot || victim->skeleton.joints[i].label == leftankle || victim->skeleton.joints[i].label == rightankle)
victim->skeleton.joints[i].velocity = relative * 80;
}
} else {
if (victim->damage >= victim->damagetolerance)
victim->RagDoll(0);
- for (i = 0; i < victim->skeleton.num_joints; i++) {
+ for (int i = 0; i < victim->skeleton.num_joints; i++) {
victim->skeleton.joints[i].velocity += relative * damagemult * 10;
}
relative = DoRotation(relative, 0, -90, 0);
- for (i = 0; i < victim->skeleton.num_joints; i++) {
+ for (int i = 0; i < victim->skeleton.num_joints; i++) {
if (victim->skeleton.joints[i].label == leftfoot || victim->skeleton.joints[i].label == rightfoot || victim->skeleton.joints[i].label == leftankle || victim->skeleton.joints[i].label == rightankle)
victim->skeleton.joints[i].velocity += relative * damagemult * 80;
}
- victim->skeleton.joints[victim->skeleton.jointlabels[abdomen]].velocity += relative * damagemult * 200;
+ victim->jointVel(abdomen) += relative * damagemult * 200;
victim->frameTarget = 0;
victim->animTarget = staggerbackhighanim;
victim->targetyaw = targetyaw + 180;
relative.y = 0;
Normalise(&relative);
//relative=DoRotation(relative,0,-90,0);
- for (i = 0; i < victim->skeleton.num_joints; i++) {
+ for (int i = 0; i < victim->skeleton.num_joints; i++) {
victim->skeleton.joints[i].velocity += relative * damagemult * 40;
}
- victim->skeleton.joints[victim->skeleton.jointlabels[abdomen]].velocity += relative * damagemult * 200;
+ victim->jointVel(abdomen) += relative * damagemult * 200;
//FootLand(1,2);
victim->Puff(abdomen);
victim->DoDamage(damagemult * 150 / victim->protectionhigh);
if ((animTarget == swordslashreversalanim || animTarget == knifeslashreversalanim || animTarget == staffhitreversalanim || animTarget == staffspinhitreversalanim) && animation[animTarget].label[frameCurrent] == 5) {
if (victim->weaponactive != -1 && victim->num_weapons > 0) {
- if (weapons[victim->weaponids[victim->weaponactive]].owner == victim->id) {
- weapons[victim->weaponids[victim->weaponactive]].owner = id;
- weaponactive = 0;
- if (num_weapons > 0) {
- weaponids[num_weapons] = weaponids[victim->weaponactive];
- }
- num_weapons++;
- weaponids[0] = victim->weaponids[victim->weaponactive];
+ if (weapons[victim->weaponids[victim->weaponactive]].owner == int(victim->id)) {
+ takeWeapon(victim->weaponids[victim->weaponactive]);
victim->num_weapons--;
if (victim->num_weapons > 0) {
victim->weaponids[victim->weaponactive] = victim->weaponids[victim->num_weapons];
- //if(victim->weaponstuck==victim->num_weapons)victim->weaponstuck=0;
}
victim->weaponactive = -1;
}
relative = victim->coords - oldcoords;
relative.y = 0;
Normalise(&relative);
- //relative=DoRotation(relative,0,-90,0);
- for (i = 0; i < victim->skeleton.num_joints; i++) {
+ for (int i = 0; i < victim->skeleton.num_joints; i++) {
victim->skeleton.joints[i].velocity += relative * damagemult * 30;
}
- victim->skeleton.joints[victim->skeleton.jointlabels[abdomen]].velocity += relative * damagemult * 200;
- //FootLand(1,2);
+ victim->jointVel(abdomen) += relative * damagemult * 200;
victim->Puff(head);
victim->DoDamage(damagemult * 70 / victim->protectionhigh);
}
relative = victim->coords - oldcoords;
relative.y = 0;
Normalise(&relative);
- //relative=DoRotation(relative,0,-90,0);
- for (i = 0; i < victim->skeleton.num_joints; i++) {
+ for (int i = 0; i < victim->skeleton.num_joints; i++) {
victim->skeleton.joints[i].velocity += relative * damagemult * 30;
}
- victim->skeleton.joints[victim->skeleton.jointlabels[abdomen]].velocity += relative * damagemult * 200;
- //FootLand(1,2);
+ victim->jointVel(abdomen) += relative * damagemult * 200;
victim->Puff(head);
victim->DoDamage(damagemult * 70 / victim->protectionhigh);
}
relative = facing;
relative.y = 0;
Normalise(&relative);
- //relative*=-1;
relative.y -= .1;
- for (i = 0; i < victim->skeleton.num_joints; i++) {
+ for (int i = 0; i < victim->skeleton.num_joints; i++) {
victim->skeleton.joints[i].velocity += relative * damagemult * 70;
}
- victim->skeleton.joints[victim->skeleton.jointlabels[lefthand]].velocity *= .1;
- victim->skeleton.joints[victim->skeleton.jointlabels[leftwrist]].velocity *= .2;
- victim->skeleton.joints[victim->skeleton.jointlabels[leftelbow]].velocity *= .5;
- victim->skeleton.joints[victim->skeleton.jointlabels[leftshoulder]].velocity *= .7;
- victim->skeleton.joints[victim->skeleton.jointlabels[righthand]].velocity *= .1;
- victim->skeleton.joints[victim->skeleton.jointlabels[rightwrist]].velocity *= .2;
- victim->skeleton.joints[victim->skeleton.jointlabels[rightelbow]].velocity *= .5;
- victim->skeleton.joints[victim->skeleton.jointlabels[rightshoulder]].velocity *= .7;
+ victim->jointVel(lefthand) *= .1;
+ victim->jointVel(leftwrist) *= .2;
+ victim->jointVel(leftelbow) *= .5;
+ victim->jointVel(leftshoulder) *= .7;
+ victim->jointVel(righthand) *= .1;
+ victim->jointVel(rightwrist) *= .2;
+ victim->jointVel(rightelbow) *= .5;
+ victim->jointVel(rightshoulder) *= .7;
victim->Puff(abdomen);
victim->DoDamage(damagemult * 90 / victim->protectionhigh);
relative = facing;
relative.y = 0;
Normalise(&relative);
- //relative*=-1;
relative.y -= .1;
- for (i = 0; i < victim->skeleton.num_joints; i++) {
+ for (int i = 0; i < victim->skeleton.num_joints; i++) {
victim->skeleton.joints[i].velocity += relative * damagemult * 70;
}
- victim->skeleton.joints[victim->skeleton.jointlabels[lefthand]].velocity *= .1 - 1;
- victim->skeleton.joints[victim->skeleton.jointlabels[leftwrist]].velocity *= .2 - 1;
- victim->skeleton.joints[victim->skeleton.jointlabels[leftelbow]].velocity *= .5 - 1;
- victim->skeleton.joints[victim->skeleton.jointlabels[leftshoulder]].velocity *= .7 - 1;
- victim->skeleton.joints[victim->skeleton.jointlabels[righthand]].velocity *= .1 - 1;
- victim->skeleton.joints[victim->skeleton.jointlabels[rightwrist]].velocity *= .2 - 1;
- victim->skeleton.joints[victim->skeleton.jointlabels[rightelbow]].velocity *= .5 - 1;
- victim->skeleton.joints[victim->skeleton.jointlabels[rightshoulder]].velocity *= .7 - 1;
+ victim->jointVel(lefthand) *= .1 - 1;
+ victim->jointVel(leftwrist) *= .2 - 1;
+ victim->jointVel(leftelbow) *= .5 - 1;
+ victim->jointVel(leftshoulder) *= .7 - 1;
+ victim->jointVel(righthand) *= .1 - 1;
+ victim->jointVel(rightwrist) *= .2 - 1;
+ victim->jointVel(rightelbow) *= .5 - 1;
+ victim->jointVel(rightshoulder) *= .7 - 1;
award_bonus(id, swordreversebonus);
}
relative.y = 0;
Normalise(&relative);
relative = DoRotation(relative, 0, -90, 0);
- for (i = 0; i < victim->skeleton.num_joints; i++) {
+ for (int i = 0; i < victim->skeleton.num_joints; i++) {
victim->skeleton.joints[i].velocity += relative * damagemult * 40;
}
- victim->skeleton.joints[victim->skeleton.jointlabels[abdomen]].velocity += relative * damagemult * 200;
- //FootLand(1,2);
+ victim->jointVel(abdomen) += relative * damagemult * 200;
victim->Puff(abdomen);
victim->DoDamage(damagemult * 30 / victim->protectionhigh);
Normalise(&relative);
if (victim->id == 0)
relative /= 30;
- for (i = 0; i < victim->skeleton.num_joints; i++) {
+ for (int i = 0; i < victim->skeleton.num_joints; i++) {
victim->skeleton.joints[i].velocity += relative * damagemult * 40;
}
- //victim->DoDamage(1000);
victim->damage = victim->damagetolerance;
victim->permanentdamage = victim->damagetolerance - 1;
bool doslice;
if (animTarget == knifefollowanim)
victim->DoBloodBig(200, 210);
if (animTarget == knifesneakattackanim) {
- /*victim->DoBloodBig(200,195);
- XYZ bloodvel;
- bloodvel=0;
- bloodvel.z=20;
- bloodvel.y=5;
- bloodvel=DoRotation(bloodvel,((float)(Random()%100))/4,yaw+((float)(Random()%100))/4,0)*scale;
- Sprite::MakeSprite(bloodsprite, DoRotation(jointPos(neck),0,yaw,0)*scale+coords,bloodvel, 1,1,1, .05, 1);
- */
XYZ footvel, footpoint;
footvel = 0;
footpoint = weapons[weaponids[0]].tippoint;
if (hasvictim && (animTarget == knifefollowanim || animTarget == knifesneakattackanim) && animation[animTarget].label[frameCurrent] == 6) {
escapednum = 0;
victim->velocity = 0;
- for (i = 0; i < victim->skeleton.num_joints; i++) {
+ for (int i = 0; i < victim->skeleton.num_joints; i++) {
victim->skeleton.joints[i].velocity = 0;
}
if (animTarget == knifefollowanim) {
victim->RagDoll(0);
- for (i = 0; i < victim->skeleton.num_joints; i++) {
+ for (int i = 0; i < victim->skeleton.num_joints; i++) {
victim->skeleton.joints[i].velocity = 0;
}
}
if (hasvictim && animTarget == swordsneakattackanim && animation[animTarget].label[frameCurrent] == 6) {
escapednum = 0;
victim->velocity = 0;
- for (i = 0; i < victim->skeleton.num_joints; i++) {
+ for (int i = 0; i < victim->skeleton.num_joints; i++) {
victim->skeleton.joints[i].velocity = 0;
}
if (weaponactive != -1) {
victim->Puff(neck);
XYZ relative;
- //relative=victim->coords-oldcoords;
relative = facing * -1;
relative.y = 0;
Normalise(&relative);
relative = DoRotation(relative, 0, 90, 0);
relative.y = .5;
Normalise(&relative);
- for (i = 0; i < victim->skeleton.num_joints; i++) {
+ for (int i = 0; i < victim->skeleton.num_joints; i++) {
victim->skeleton.joints[i].velocity += relative * damagemult * 20;
}
- victim->skeleton.joints[victim->skeleton.jointlabels[head]].velocity += relative * damagemult * 200;
+ victim->jointVel(head) += relative * damagemult * 200;
if (victim->damage < victim->damagetolerance - 100)
victim->velocity = relative * 200;
victim->DoDamage(damagemult * 100 / victim->protectionhead);
escapednum = 0;
victim->RagDoll(0);
XYZ relative;
- //relative=victim->coords-oldcoords;
relative = facing * -1;
relative.y = 0;
Normalise(&relative);
relative = DoRotation(relative, 0, 90, 0);
relative.y = .5;
Normalise(&relative);
- for (i = 0; i < victim->skeleton.num_joints; i++) {
+ for (int i = 0; i < victim->skeleton.num_joints; i++) {
victim->skeleton.joints[i].velocity += relative * damagemult * 20;
}
- victim->skeleton.joints[victim->skeleton.jointlabels[head]].velocity += relative * damagemult * 200;
+ victim->jointVel(head) += relative * damagemult * 200;
}
if (hasvictim && (animTarget == spinkickreversalanim || animTarget == sweepreversalanim || animTarget == rabbitkickreversalanim || animTarget == upunchreversalanim || animTarget == jumpreversalanim || animTarget == swordslashreversalanim || animTarget == knifeslashreversalanim || animTarget == rabbittacklereversal || animTarget == wolftacklereversal || animTarget == staffhitreversalanim || animTarget == staffspinhitreversalanim))
int closest = -1;
float closestdist = -1;
float distance;
- if (numplayers > 1)
- for (i = 0; i < numplayers; i++) {
- if (id != i && player[i].coords.y < coords.y && !player[i].skeleton.free) {
- distance = distsq(&player[i].coords, &coords);
+ if (Person::players.size() > 1)
+ for (unsigned i = 0; i < Person::players.size(); i++) {
+ if (id != i && Person::players[i]->coords.y < coords.y && !Person::players[i]->skeleton.free) {
+ distance = distsq(&Person::players[i]->coords, &coords);
if (closestdist == -1 || distance < closestdist) {
closestdist = distance;
closest = i;
}
}
if (closestdist > 0 && closest >= 0 && closestdist < 16) {
- victim = &player[closest];
+ victim = Person::players[closest];
animTarget = walljumprightkickanim;
frameTarget = 0;
XYZ rotatetarget = victim->coords - coords;
int closest = -1;
float closestdist = -1;
float distance;
- if (numplayers > 1)
- for (i = 0; i < numplayers; i++) {
- if (id != i && player[i].coords.y < coords.y && !player[i].skeleton.free) {
- distance = distsq(&player[i].coords, &coords);
+ if (Person::players.size() > 1)
+ for (unsigned i = 0; i < Person::players.size(); i++) {
+ if (id != i && Person::players[i]->coords.y < coords.y && !Person::players[i]->skeleton.free) {
+ distance = distsq(&Person::players[i]->coords, &coords);
if (closestdist == -1 || distance < closestdist) {
closestdist = distance;
closest = i;
}
}
if (closestdist > 0 && closest >= 0 && closestdist < 16) {
- victim = &player[closest];
+ victim = Person::players[closest];
animTarget = walljumpleftkickanim;
frameTarget = 0;
XYZ rotatetarget = victim->coords - coords;
}
if (animCurrent != oldanimCurrent || animTarget != oldanimTarget || ((frameCurrent != oldframeCurrent || frameTarget != oldframeTarget) && !calcrot)) {
//Old rotates
- for (i = 0; i < skeleton.num_joints; i++) {
+ for (int i = 0; i < skeleton.num_joints; i++) {
skeleton.joints[i].position = animation[animCurrent].position[i][frameCurrent];
}
skeleton.FindForwards();
- for (i = 0; i < skeleton.num_muscles; i++) {
+ for (int i = 0; i < skeleton.num_muscles; i++) {
if (skeleton.muscles[i].visible) {
skeleton.FindRotationMuscle(i, animTarget);
}
}
- for (i = 0; i < skeleton.num_muscles; i++) {
+ for (int i = 0; i < skeleton.num_muscles; i++) {
if (skeleton.muscles[i].visible) {
if (isnormal((float)((int)(skeleton.muscles[i].rotate1 * 100) % 36000) / 100))
skeleton.muscles[i].oldrotate1 = (float)((int)(skeleton.muscles[i].rotate1 * 100) % 36000) / 100;
}
//New rotates
- for (i = 0; i < skeleton.num_joints; i++) {
+ for (int i = 0; i < skeleton.num_joints; i++) {
skeleton.joints[i].position = animation[animTarget].position[i][frameTarget];
}
skeleton.FindForwards();
- for (i = 0; i < skeleton.num_muscles; i++) {
+ for (int i = 0; i < skeleton.num_muscles; i++) {
if (skeleton.muscles[i].visible) {
skeleton.FindRotationMuscle(i, animTarget);
}
}
- for (i = 0; i < skeleton.num_muscles; i++) {
+ for (int i = 0; i < skeleton.num_muscles; i++) {
if (skeleton.muscles[i].visible) {
if (isnormal((float)((int)(skeleton.muscles[i].rotate1 * 100) % 36000) / 100))
skeleton.muscles[i].newrotate1 = (float)((int)(skeleton.muscles[i].rotate1 * 100) % 36000) / 100;
oldframeTarget = frameTarget;
oldframeCurrent = frameCurrent;
- for (i = 0; i < skeleton.num_joints; i++) {
+ for (int i = 0; i < skeleton.num_joints; i++) {
skeleton.joints[i].velocity = (animation[animCurrent].position[i][frameCurrent] * (1 - target) + animation[animTarget].position[i][frameTarget] * (target) - skeleton.joints[i].position) / multiplier;
skeleton.joints[i].position = animation[animCurrent].position[i][frameCurrent] * (1 - target) + animation[animTarget].position[i][frameTarget] * (target);
}
offset = currentoffset * (1 - target) + targetoffset * target;
- for (i = 0; i < skeleton.num_muscles; i++) {
+ for (int i = 0; i < skeleton.num_muscles; i++) {
if (skeleton.muscles[i].visible) {
skeleton.muscles[i].rotate1 = skeleton.muscles[i].oldrotate1 * (1 - target) + skeleton.muscles[i].newrotate1 * (target);
skeleton.muscles[i].rotate2 = skeleton.muscles[i].oldrotate2 * (1 - target) + skeleton.muscles[i].newrotate2 * (target);
transspeed = 15;
}
}
- //skeleton.DoConstraints();
}
/* EFFECT
flamedelay -= multiplier;
parriedrecently -= multiplier;
if (!victim) {
- victim = this;
+ victim = this->shared_from_this();
hasvictim = 0;
}
superruntoggle = 0;
if (aitype != passivetype) {
superruntoggle = 1;
- if (aitype == attacktypecutoff && (player[0].isIdle() || player[0].isCrouch() || player[0].skeleton.free || player[0].animTarget == getupfrombackanim || player[0].animTarget == getupfromfrontanim || player[0].animTarget == sneakanim) && distsq(&coords, &player[0].coords) < 16) {
+ if (aitype == attacktypecutoff && (Person::players[0]->isIdle() || Person::players[0]->isCrouch() || Person::players[0]->skeleton.free || Person::players[0]->animTarget == getupfrombackanim || Person::players[0]->animTarget == getupfromfrontanim || Person::players[0]->animTarget == sneakanim) && distsq(&coords, &Person::players[0]->coords) < 16) {
superruntoggle = 0;
}
}
if (onfire) {
burnt += multiplier;
- /*if(aitype!=playercontrolled)*///deathbleeding=5;
- /*if(aitype!=playercontrolled)*/
deathbleeding = 1;
if (burnt > .6)
burnt = .6;
while (flamedelay < 0 && onfire) {
flamedelay += .006;
howmany = abs(Random() % (skeleton.num_joints));
- if (!skeleton.free)
- flatvelocity = (coords - oldcoords) / multiplier / 2; //velocity/2;
- if (skeleton.free)
+ if (skeleton.free) {
flatvelocity = skeleton.joints[howmany].velocity * scale / 2;
- if (!skeleton.free)
- flatfacing = DoRotation(DoRotation(DoRotation(skeleton.joints[howmany].position, 0, 0, tilt), tilt2, 0, 0), 0, yaw, 0) * scale + coords;
- if (skeleton.free)
flatfacing = skeleton.joints[howmany].position * scale + coords;
+ } else {
+ flatfacing = DoRotation(DoRotation(DoRotation(skeleton.joints[howmany].position, 0, 0, tilt), tilt2, 0, 0), 0, yaw, 0) * scale + coords;
+ flatvelocity = (coords - oldcoords) / multiplier / 2;
+ }
Sprite::MakeSprite(flamesprite, flatfacing, flatvelocity, 1, 1, 1, .6 + (float)abs(Random() % 100) / 200 - .25, 1);
}
while (flamedelay < 0 && !onfire && tutoriallevel == 1 && id != 0) {
flamedelay += .05;
howmany = abs(Random() % (skeleton.num_joints));
- if (!skeleton.free)
- flatvelocity = (coords - oldcoords) / multiplier / 2; //velocity/2;
- if (skeleton.free)
+ if (skeleton.free) {
flatvelocity = skeleton.joints[howmany].velocity * scale / 2;
- if (!skeleton.free)
- flatfacing = DoRotation(DoRotation(DoRotation(skeleton.joints[howmany].position, 0, 0, tilt), tilt2, 0, 0), 0, yaw, 0) * scale + coords;
- if (skeleton.free)
flatfacing = skeleton.joints[howmany].position * scale + coords;
+ } else {
+ flatvelocity = (coords - oldcoords) / multiplier / 2;
+ flatfacing = DoRotation(DoRotation(DoRotation(skeleton.joints[howmany].position, 0, 0, tilt), tilt2, 0, 0), 0, yaw, 0) * scale + coords;
+ }
Sprite::MakeSprite(breathsprite, flatfacing, flatvelocity, 1, 1, 1, .6 + (float)abs(Random() % 100) / 200 - .25, .3);
}
bleeding -= multiplier * .3;
if (bloodtoggle == 2) {
skeleton.drawmodel.textureptr.bind();
- if (bleeding <= 0 && (detail != 2 || osx))
+ if ((bleeding <= 0) && (detail != 2))
DoMipmaps();
}
}
if (neckspurtparticledelay < 0 && neckspurtdelay > 2) {
spurt = 0;
bloodvel = 0;
- if (!skeleton.free) {
- bloodvel.z = 5 * neckspurtamount;
- bloodvel = DoRotation(bloodvel, ((float)(Random() % 100)) / 40, yaw + ((float)(Random() % 100)) / 40, 0) * scale;
- }
if (skeleton.free) {
bloodvel -= DoRotation(skeleton.forward * 10 * scale, ((float)(Random() % 100)) / 40, ((float)(Random() % 100)) / 40, 0);
- }
- if (skeleton.free)
bloodvel += DoRotation(jointVel(head), ((float)(Random() % 100)) / 40, yaw + ((float)(Random() % 100)) / 40, 0) * scale;
- if (!skeleton.free)
- bloodvel += DoRotation(velocity, ((float)(Random() % 100)) / 40, ((float)(Random() % 100)) / 40, 0) * scale;
- if (skeleton.free)
Sprite::MakeSprite(bloodsprite, (jointPos(neck) + (jointPos(neck) - jointPos(head)) / 5)*scale + coords, bloodvel, 1, 1, 1, .05, .9);
- if (!skeleton.free)
+ } else {
+ bloodvel.z = 5 * neckspurtamount;
+ bloodvel = DoRotation(bloodvel, ((float)(Random() % 100)) / 40, yaw + ((float)(Random() % 100)) / 40, 0) * scale;
+ bloodvel += DoRotation(velocity, ((float)(Random() % 100)) / 40, ((float)(Random() % 100)) / 40, 0) * scale;
Sprite::MakeSprite(bloodsprite, DoRotation(jointPos(neck) + (jointPos(neck) - jointPos(head)) / 5, 0, yaw, 0)*scale + coords, bloodvel, 1, 1, 1, .05, .9);
+ }
neckspurtparticledelay = .05;
}
if (neckspurtdelay < 0) {
XYZ bloodvel;
if (bloodtoggle) {
bloodvel = 0;
- if (skeleton.free)
+ if (skeleton.free) {
bloodvel += DoRotation(jointVel(abdomen), ((float)(Random() % 100)) / 4, yaw + ((float)(Random() % 100)) / 4, 0) * scale;
- if (!skeleton.free)
- bloodvel += DoRotation(velocity, ((float)(Random() % 100)) / 4, ((float)(Random() % 100)) / 4, 0) * scale;
- if (skeleton.free)
Sprite::MakeSprite(bloodsprite, jointPos(abdomen) * scale + coords, bloodvel, 1, 1, 1, .05, 1);
- if (!skeleton.free)
+ } else {
+ bloodvel += DoRotation(velocity, ((float)(Random() % 100)) / 4, ((float)(Random() % 100)) / 4, 0) * scale;
Sprite::MakeSprite(bloodsprite, DoRotation((jointPos(abdomen) + jointPos(abdomen)) / 2, 0, yaw, 0)*scale + coords, bloodvel, 1, 1, 1, .05, 1);
+ }
}
}
bloodloss += deathbleeding * multiplier * 80;
deathbleeding -= multiplier * 1.6;
- //if(id==0)deathbleeding-=multiplier*.2;
if (deathbleeding < 0)
deathbleeding = 0;
if (bloodloss > damagetolerance && animation[animTarget].attack == neutral) {
if (weaponactive != -1) {
- weapons[weaponids[0]].owner = -1;
- weapons[weaponids[0]].velocity = velocity * scale * -.3;
+ weapons[weaponids[0]].drop(velocity * scale * -.3, velocity * scale);
weapons[weaponids[0]].velocity.x += .01;
- weapons[weaponids[0]].tipvelocity = velocity * scale;
- weapons[weaponids[0]].missed = 1;
- weapons[weaponids[0]].hitsomething = 0;
- weapons[weaponids[0]].freetime = 0;
- weapons[weaponids[0]].firstfree = 1;
- weapons[weaponids[0]].physics = 1;
num_weapons--;
if (num_weapons) {
weaponids[0] = weaponids[num_weapons];
weaponstuck = 0;
}
weaponactive = -1;
- for (i = 0; i < numplayers; i++) {
- player[i].wentforweapon = 0;
+ for (unsigned i = 0; i < Person::players.size(); i++) {
+ Person::players[i]->wentforweapon = 0;
}
if (id == 0) {
}
dead = 2;
if (animTarget == knifefollowedanim && !skeleton.free) {
- for (i = 0; i < skeleton.num_joints; i++) {
+ for (int i = 0; i < skeleton.num_joints; i++) {
skeleton.joints[i].velocity = 0;
skeleton.joints[i].velocity.y = -2;
}
}
}
}
- if (!osx && detail > 1) {
+ if (detail > 1) {
skeleton.drawmodel.textureptr.bind();
DoMipmaps();
}
- if (!skeleton.free) {
- bleedy -= 4 / realtexdetail;
- if (detail == 2)
- bleedx += (abs(Random() % 3) - 1) * 2 / realtexdetail;
- else
- bleedx += (abs(Random() % 3) - 1) * 4 / realtexdetail;
- }
if (skeleton.free) {
bleedx += 4 * direction / realtexdetail;
if (detail == 2)
bleedy += (abs(Random() % 3) - 1) * 2 / realtexdetail;
else
bleedy += (abs(Random() % 3) - 1) * 4 / realtexdetail;
+ } else {
+ bleedy -= 4 / realtexdetail;
+ if (detail == 2)
+ bleedx += (abs(Random() % 3) - 1) * 2 / realtexdetail;
+ else
+ bleedx += (abs(Random() % 3) - 1) * 4 / realtexdetail;
}
}
if (environment == snowyenvironment) {
XYZ footpoint;
XYZ footvel;
- if (!skeleton.free)
- footvel = DoRotation(skeleton.specialforward[0], 0, yaw, 0) * -1;
- if (skeleton.free)
+ if (skeleton.free) {
footvel = skeleton.specialforward[0] * -1;
- if (!skeleton.free)
- footpoint = DoRotation((jointPos(head) + jointPos(neck)) / 2, 0, yaw, 0) * scale + coords;
- if (skeleton.free)
footpoint = ((jointPos(head) + jointPos(neck)) / 2) * scale + coords;
+ } else {
+ footvel = DoRotation(skeleton.specialforward[0], 0, yaw, 0) * -1;
+ footpoint = DoRotation((jointPos(head) + jointPos(neck)) / 2, 0, yaw, 0) * scale + coords;
+ }
if (animTarget == sleepanim)
footvel = DoRotation(footvel, 0, 90, 0);
Sprite::MakeSprite(breathsprite, footpoint + footvel * .2, footvel * .4, 1, 1, 1, .4, .3);
RagDoll(0);
if (weaponactive != -1) {
- weapons[weaponids[0]].owner = -1;
- weapons[weaponids[0]].velocity = velocity * scale * -.3;
+ weapons[weaponids[0]].drop(velocity * scale * -.3, velocity * scale);
weapons[weaponids[0]].velocity.x += .01;
- weapons[weaponids[0]].tipvelocity = velocity * scale;
- weapons[weaponids[0]].missed = 1;
- weapons[weaponids[0]].hitsomething = 0;
- weapons[weaponids[0]].freetime = 0;
- weapons[weaponids[0]].firstfree = 1;
- weapons[weaponids[0]].physics = 1;
num_weapons--;
if (num_weapons) {
weaponids[0] = weaponids[num_weapons];
weaponstuck = 0;
}
weaponactive = -1;
- for (i = 0; i < numplayers; i++) {
- player[i].wentforweapon = 0;
+ for (unsigned i = 0; i < Person::players.size(); i++) {
+ Person::players[i]->wentforweapon = 0;
}
}
damage += 20;
}
- //if(dead)damage-=multiplier/4;
if (!dead)
damage -= multiplier * 13;
- //if(!dead&&deathbleeding<=0&&id==0)bloodloss-=multiplier*4;
if (!dead)
permanentdamage -= multiplier * 4;
if (isIdle() || isCrouch()) {
if (!dead)
permanentdamage -= multiplier * 4;
- //if(!dead&&deathbleeding<=0&&id==0)bloodloss-=multiplier*4;
}
if (damage < 0)
damage = 0;
dead = 0;
skeleton.free = 1;
damage -= 20;
- for (i = 0; i < skeleton.num_joints; i++) {
+ for (int i = 0; i < skeleton.num_joints; i++) {
skeleton.joints[i].velocity = 0;
}
}
DoBlood(1, 255);
if (weaponactive != -1) {
- weapons[weaponids[0]].owner = -1;
- weapons[weaponids[0]].velocity = velocity * scale * -.3;
+ weapons[weaponids[0]].drop(velocity * scale * -.3, velocity * scale);
weapons[weaponids[0]].velocity.x += .01;
- weapons[weaponids[0]].tipvelocity = velocity * scale;
- weapons[weaponids[0]].missed = 1;
- weapons[weaponids[0]].hitsomething = 0;
- weapons[weaponids[0]].freetime = 0;
- weapons[weaponids[0]].firstfree = 1;
- weapons[weaponids[0]].physics = 1;
num_weapons--;
if (num_weapons) {
weaponids[0] = weaponids[num_weapons];
weaponstuck = 0;
}
weaponactive = -1;
- for (i = 0; i < numplayers; i++) {
- player[i].wentforweapon = 0;
+ for (unsigned i = 0; i < Person::players.size(); i++) {
+ Person::players[i]->wentforweapon = 0;
}
}
}
average /= multiplier;
- //velocity=jointVel(groin)*scale;
velocity = 0;
- for (i = 0; i < skeleton.num_joints; i++) {
+ for (int i = 0; i < skeleton.num_joints; i++) {
velocity += skeleton.joints[i].velocity * scale;
}
velocity /= skeleton.num_joints;
yaw = targetyaw;
frameTarget = 0;
- // frameTarget=2;
animTarget = flipanim;
crouchtogglekeydown = 1;
target = 0;
animCurrent = tempanim;
frameCurrent = 0;
target = 0;
- //tilt2=targettilt2;
-
- //if(middle.y>0)targetoffset.y=middle.y+1;
- for (i = 0; i < skeleton.num_joints; i++) {
+ for (int i = 0; i < skeleton.num_joints; i++) {
tempanimation.position[i][0] = skeleton.joints[i].position;
tempanimation.position[i][0] = DoRotation(tempanimation.position[i][0], 0, -yaw, 0);
}
if (middle.y > 0 && animTarget != rollanim)
targetoffset.y = middle.y + 1;
- for (i = 0; i < skeleton.num_joints; i++) {
+ for (int i = 0; i < skeleton.num_joints; i++) {
tempanimation.position[i][0] = skeleton.joints[i].position;
tempanimation.position[i][0] = DoRotation(tempanimation.position[i][0], 0, -yaw, 0);
}
if (!skeleton.free) {
bool play;
play = 0;
- if ((stunned > 0 || surprised > 0) && numplayers > 2 && aitype != passivetype)
+ if ((stunned > 0 || surprised > 0) && Person::players.size() > 2 && aitype != passivetype)
play = 1;
if (hasvictim)
if (aitype != passivetype && victim->skeleton.free && !victim->dead)
}
}
- if (animTarget == jumpupanim || animTarget == crouchstabanim || animTarget == swordgroundstabanim || animTarget == swordfightidlebothanim || animTarget == blockhighleftanim || animTarget == blockhighleftanim) {
+ if (animTarget == jumpupanim || animTarget == crouchstabanim || animTarget == swordgroundstabanim || animTarget == swordfightidlebothanim || animTarget == blockhighleftanim) {
//close hands and mouth
if (righthandmorphend != 1 && righthandmorphness == targetrighthandmorphness) {
righthandmorphness = 0;
bool behind;
behind = 0;
if (hasvictim) {
- if (victim != this && !victim->dead && victim->aitype != passivetype && victim->aitype != searchtype && aitype != passivetype && aitype != searchtype && victim->id < numplayers && aitype != passivetype) {
+ if ((victim != this->shared_from_this()) && !victim->dead && (victim->aitype != passivetype) &&
+ (victim->aitype != searchtype) && (aitype != passivetype) &&
+ (aitype != searchtype) && (victim->id < Person::players.size()) && (aitype != passivetype)) {
behind = (normaldotproduct(facing, coords - victim->coords) > 0);
}
}
}
//Running velocity
- //if(!creature==wolftype||animTarget==rabbitkickanim)
if (animTarget == rabbittackleanim) {
velocity += facing * multiplier * speed * 700 * scale;
velspeed = findLength(&velocity);
velocity = flatfacing * velspeed;
}
-
- /*if(animCurrent==rollanim&&(isCrouch()||isIdle())){
- velocity+=facing*multiplier*speed*700*scale;
- velspeed=findLength(&velocity);
- if(velspeed>speed*25*scale){
- velocity/=velspeed;
- velspeed=speed*25*scale;
- velocity*=velspeed;
- }
- velocity.y+=gravity*multiplier*20;
- ReflectVector(&velocity,terrain.getNormal(coords.x,coords.z));
- velspeed=findLength(&velocity);
- velocity=flatfacing*velspeed;
- }*/
-
if (animTarget == sneakanim || animTarget == walkanim) {
velocity += facing * multiplier * speed * 700 * scale;
velspeed = findLength(&velocity);
}
}
+
+/* EFFECT
+ * inverse kinematics helper function
+ */
+void IKHelper(Person *p, float interp)
+{
+ XYZ point, newpoint, change, change2;
+ float heightleft, heightright;
+
+ // TODO: implement localToWorld and worldToLocal
+ // but keep in mind it won't be the same math if player is ragdolled or something
+ // - localToWorldStanding / worldToLocalStanding (or crouching or...?)
+ // then comb through code for places where to use it
+
+ // point = localToWorld(jointPos(leftfoot))
+ point = DoRotation(p->jointPos(leftfoot), 0, p->yaw, 0) * p->scale + p->coords;
+ // adjust height of foot
+ heightleft = terrain.getHeight(point.x, point.z) + .04;
+ point.y = heightleft;
+ change = p->jointPos(leftankle) - p->jointPos(leftfoot);
+ change2 = p->jointPos(leftknee) - p->jointPos(leftfoot);
+ // jointPos(leftfoot) = interpolate(worldToLocal(point), jointPos(leftfoot), interp)
+ p->jointPos(leftfoot) = DoRotation((point - p->coords) / p->scale, 0, -p->yaw, 0) * interp + p->jointPos(leftfoot) * (1 - interp);
+ // move ankle along with foot
+ p->jointPos(leftankle) = p->jointPos(leftfoot) + change;
+ // average knee pos between old and new pos
+ p->jointPos(leftknee) = (p->jointPos(leftfoot) + change2) / 2 + (p->jointPos(leftknee)) / 2;
+
+ // do same as above for right leg
+ point = DoRotation(p->jointPos(rightfoot), 0, p->yaw, 0) * p->scale + p->coords;
+ heightright = terrain.getHeight(point.x, point.z) + .04;
+ point.y = heightright;
+ change = p->jointPos(rightankle) - p->jointPos(rightfoot);
+ change2 = p->jointPos(rightknee) - p->jointPos(rightfoot);
+ p->jointPos(rightfoot) = DoRotation((point - p->coords) / p->scale, 0, -p->yaw, 0) * interp + p->jointPos(rightfoot) * (1 - interp);
+ p->jointPos(rightankle) = p->jointPos(rightfoot) + change;
+ p->jointPos(rightknee) = (p->jointPos(rightfoot) + change2) / 2 + (p->jointPos(rightknee)) / 2;
+
+ // fix up skeleton now that we've moved body parts?
+ p->skeleton.DoConstraints(&p->coords, &p->scale);
+}
+
/* EFFECT
* MONSTER
* TODO: ???
static int start, endthing;
if ((dead != 2 || skeleton.free != 2) && updatedelay <= 0) {
if (!isSleeping() && !isSitting()) {
- if (onterrain && ((isIdle() || isCrouch() || isLanding() || isLandhard() || animTarget == drawrightanim || animTarget == drawleftanim || animTarget == crouchdrawrightanim) && (wasIdle() || wasCrouch() || wasLanding() || wasLandhard() || animCurrent == drawrightanim || animCurrent == drawleftanim || animCurrent == crouchdrawrightanim)) && !skeleton.free) {
- XYZ point, newpoint, change, change2;
- point = DoRotation(jointPos(leftfoot), 0, yaw, 0) * scale + coords;
- heightleft = terrain.getHeight(point.x, point.z) + .04;
- point.y = heightleft;
- change = jointPos(leftankle) - jointPos(leftfoot);
- change2 = jointPos(leftknee) - jointPos(leftfoot);
- jointPos(leftfoot) = DoRotation((point - coords) / scale, 0, -yaw, 0);
- jointPos(leftankle) = jointPos(leftfoot) + change;
- jointPos(leftknee) = (jointPos(leftfoot) + change2) / 2 + (jointPos(leftknee)) / 2;
-
- point = DoRotation(jointPos(rightfoot), 0, yaw, 0) * scale + coords;
- heightright = terrain.getHeight(point.x, point.z) + .04;
- point.y = heightright;
- change = jointPos(rightankle) - jointPos(rightfoot);
- change2 = jointPos(rightknee) - jointPos(rightfoot);
- jointPos(rightfoot) = DoRotation((point - coords) / scale, 0, -yaw, 0);
- jointPos(rightankle) = jointPos(rightfoot) + change;
- jointPos(rightknee) = (jointPos(rightfoot) + change2) / 2 + (jointPos(rightknee)) / 2;
- skeleton.DoConstraints(&coords, &scale);
+ // TODO: give these meaningful names
+ const bool cond1 = (isIdle() || isCrouch() || isLanding() || isLandhard()
+ || animTarget == drawrightanim || animTarget == drawleftanim || animTarget == crouchdrawrightanim);
+ const bool cond2 = (wasIdle() || wasCrouch() || wasLanding() || wasLandhard()
+ || animCurrent == drawrightanim || animCurrent == drawleftanim || animCurrent == crouchdrawrightanim);
- if (creature == wolftype) {
- point = DoRotation(jointPos(leftfoot), 0, yaw, 0) * scale + coords;
- heightleft = terrain.getHeight(point.x, point.z) + .04;
- point.y = heightleft;
- change = jointPos(leftankle) - jointPos(leftfoot);
- change2 = jointPos(leftknee) - jointPos(leftfoot);
- jointPos(leftfoot) = DoRotation((point - coords) / scale, 0, -yaw, 0);
- jointPos(leftankle) = jointPos(leftfoot) + change;
- jointPos(leftknee) = (jointPos(leftfoot) + change2) / 2 + (jointPos(leftknee)) / 2;
-
- point = DoRotation(jointPos(rightfoot), 0, yaw, 0) * scale + coords;
- heightright = terrain.getHeight(point.x, point.z) + .04;
- point.y = heightright;
- change = jointPos(rightankle) - jointPos(rightfoot);
- change2 = jointPos(rightknee) - jointPos(rightfoot);
- jointPos(rightfoot) = DoRotation((point - coords) / scale, 0, -yaw, 0);
- jointPos(rightankle) = jointPos(rightfoot) + change;
- jointPos(rightknee) = (jointPos(rightfoot) + change2) / 2 + (jointPos(rightknee)) / 2;
- skeleton.DoConstraints(&coords, &scale);
- }
- }
- if (onterrain && ((isIdle() || isCrouch() || isLanding() || isLandhard() || animTarget == drawrightanim || animTarget == drawleftanim || animTarget == crouchdrawrightanim) && !(wasIdle() || wasCrouch() || wasLanding() || wasLandhard() || animCurrent == drawrightanim || animCurrent == drawleftanim || animCurrent == crouchdrawrightanim)) && !skeleton.free) {
- XYZ point, newpoint, change, change2;
- point = DoRotation(jointPos(leftfoot), 0, yaw, 0) * scale + coords;
- heightleft = terrain.getHeight(point.x, point.z) + .04;
- point.y = heightleft;
- change = jointPos(leftankle) - jointPos(leftfoot);
- change2 = jointPos(leftknee) - jointPos(leftfoot);
- jointPos(leftfoot) = DoRotation((point - coords) / scale, 0, -yaw, 0) * target + jointPos(leftfoot) * (1 - target);
- jointPos(leftankle) = jointPos(leftfoot) + change;
- jointPos(leftknee) = (jointPos(leftfoot) + change2) / 2 + (jointPos(leftknee)) / 2;
-
- point = DoRotation(jointPos(rightfoot), 0, yaw, 0) * scale + coords;
- heightright = terrain.getHeight(point.x, point.z) + .04;
- point.y = heightright;
- change = jointPos(rightankle) - jointPos(rightfoot);
- change2 = jointPos(rightknee) - jointPos(rightfoot);
- jointPos(rightfoot) = DoRotation((point - coords) / scale, 0, -yaw, 0) * target + jointPos(rightfoot) * (1 - target);
- jointPos(rightankle) = jointPos(rightfoot) + change;
- jointPos(rightknee) = (jointPos(rightfoot) + change2) / 2 + (jointPos(rightknee)) / 2;
- skeleton.DoConstraints(&coords, &scale);
+ if (onterrain && (cond1 && cond2) && !skeleton.free) {
+ IKHelper(this, 1);
+ if (creature == wolftype)
+ IKHelper(this, 1);
+ }
- if (creature == wolftype) {
- point = DoRotation(jointPos(leftfoot), 0, yaw, 0) * scale + coords;
- heightleft = terrain.getHeight(point.x, point.z) + .04;
- point.y = heightleft;
- change = jointPos(leftankle) - jointPos(leftfoot);
- change2 = jointPos(leftknee) - jointPos(leftfoot);
- jointPos(leftfoot) = DoRotation((point - coords) / scale, 0, -yaw, 0) * target + jointPos(leftfoot) * (1 - target);
- jointPos(leftankle) = jointPos(leftfoot) + change;
- jointPos(leftknee) = (jointPos(leftfoot) + change2) / 2 + (jointPos(leftknee)) / 2;
-
- point = DoRotation(jointPos(rightfoot), 0, yaw, 0) * scale + coords;
- heightright = terrain.getHeight(point.x, point.z) + .04;
- point.y = heightright;
- change = jointPos(rightankle) - jointPos(rightfoot);
- change2 = jointPos(rightknee) - jointPos(rightfoot);
- jointPos(rightfoot) = DoRotation((point - coords) / scale, 0, -yaw, 0) * target + jointPos(rightfoot) * (1 - target);
- jointPos(rightankle) = jointPos(rightfoot) + change;
- jointPos(rightknee) = (jointPos(rightfoot) + change2) / 2 + (jointPos(rightknee)) / 2;
- skeleton.DoConstraints(&coords, &scale);
- }
- }
-
- if (onterrain && (!(isIdle() || isCrouch() || isLanding() || isLandhard() || animTarget == drawrightanim || animTarget == drawleftanim || animTarget == crouchdrawrightanim) && (wasIdle() || wasCrouch() || wasLanding() || wasLandhard() || animCurrent == drawrightanim || animCurrent == drawleftanim || animCurrent == crouchdrawrightanim)) && !skeleton.free) {
- XYZ point, newpoint, change, change2;
- point = DoRotation(jointPos(leftfoot), 0, yaw, 0) * scale + coords;
- heightleft = terrain.getHeight(point.x, point.z) + .04;
- point.y = heightleft;
- change = jointPos(leftankle) - jointPos(leftfoot);
- change2 = jointPos(leftknee) - jointPos(leftfoot);
- jointPos(leftfoot) = DoRotation((point - coords) / scale, 0, -yaw, 0) * (1 - target) + jointPos(leftfoot) * target;
- jointPos(leftankle) = jointPos(leftfoot) + change;
- jointPos(leftknee) = (jointPos(leftfoot) + change2) / 2 + (jointPos(leftknee)) / 2;
-
- point = DoRotation(jointPos(rightfoot), 0, yaw, 0) * scale + coords;
- heightright = terrain.getHeight(point.x, point.z) + .04;
- point.y = heightright;
- change = jointPos(rightankle) - jointPos(rightfoot);
- change2 = jointPos(rightknee) - jointPos(rightfoot);
- jointPos(rightfoot) = DoRotation((point - coords) / scale, 0, -yaw, 0) * (1 - target) + jointPos(rightfoot) * target;
- jointPos(rightankle) = jointPos(rightfoot) + change;
- jointPos(rightknee) = (jointPos(rightfoot) + change2) / 2 + (jointPos(rightknee)) / 2;
- skeleton.DoConstraints(&coords, &scale);
+ if (onterrain && (cond1 && !cond2) && !skeleton.free) {
+ IKHelper(this, target);
+ if (creature == wolftype)
+ IKHelper(this, target);
+ }
- if (creature == wolftype) {
- point = DoRotation(jointPos(leftfoot), 0, yaw, 0) * scale + coords;
- heightleft = terrain.getHeight(point.x, point.z) + .04;
- point.y = heightleft;
- change = jointPos(leftankle) - jointPos(leftfoot);
- change2 = jointPos(leftknee) - jointPos(leftfoot);
- jointPos(leftfoot) = DoRotation((point - coords) / scale, 0, -yaw, 0) * (1 - target) + jointPos(leftfoot) * target;
- jointPos(leftankle) = jointPos(leftfoot) + change;
- jointPos(leftknee) = (jointPos(leftfoot) + change2) / 2 + (jointPos(leftknee)) / 2;
-
- point = DoRotation(jointPos(rightfoot), 0, yaw, 0) * scale + coords;
- heightright = terrain.getHeight(point.x, point.z) + .04;
- point.y = heightright;
- change = jointPos(rightankle) - jointPos(rightfoot);
- change2 = jointPos(rightknee) - jointPos(rightfoot);
- jointPos(rightfoot) = DoRotation((point - coords) / scale, 0, -yaw, 0) * (1 - target) + jointPos(rightfoot) * target;
- jointPos(rightankle) = jointPos(rightfoot) + change;
- jointPos(rightknee) = (jointPos(rightfoot) + change2) / 2 + (jointPos(rightknee)) / 2;
- skeleton.DoConstraints(&coords, &scale);
- }
+ if (onterrain && (!cond1 && cond2) && !skeleton.free) {
+ IKHelper(this, 1 - target);
+ if (creature == wolftype)
+ IKHelper(this, 1 - target);
}
}
+
if (!skeleton.free && (!animation[animTarget].attack && animTarget != getupfrombackanim && ((animTarget != rollanim && !isFlip()) || animation[animTarget].label[frameTarget] == 6) && animTarget != getupfromfrontanim && animTarget != wolfrunninganim && animTarget != rabbitrunninganim && animTarget != backhandspringanim && animTarget != walljumpfrontanim && animTarget != hurtidleanim && !isLandhard() && !isSleeping()))
DoHead();
else {
skeleton.drawmodelclothes.vertex[i] = 0;
skeleton.drawmodelclothes.vertex[i].y = 999;
}
- for (i = 0; i < skeleton.num_muscles; i++) {
+ for (int i = 0; i < skeleton.num_muscles; i++) {
+ // convenience renames
+ const int p1 = skeleton.muscles[i].parent1->label;
+ const int p2 = skeleton.muscles[i].parent2->label;
+
if ((skeleton.muscles[i].numvertices > 0 && playerdetail) || (skeleton.muscles[i].numverticeslow > 0 && !playerdetail)) {
morphness = 0;
start = 0;
endthing = 0;
- if (skeleton.muscles[i].parent1->label == righthand || skeleton.muscles[i].parent2->label == righthand) {
+
+ if (p1 == righthand || p2 == righthand) {
morphness = righthandmorphness;
start = righthandmorphstart;
endthing = righthandmorphend;
}
- if (skeleton.muscles[i].parent1->label == lefthand || skeleton.muscles[i].parent2->label == lefthand) {
+ if (p1 == lefthand || p2 == lefthand) {
morphness = lefthandmorphness;
start = lefthandmorphstart;
endthing = lefthandmorphend;
}
- if (skeleton.muscles[i].parent1->label == head || skeleton.muscles[i].parent2->label == head) {
+ if (p1 == head || p2 == head) {
morphness = headmorphness;
start = headmorphstart;
endthing = headmorphend;
}
- if ((skeleton.muscles[i].parent1->label == neck && skeleton.muscles[i].parent2->label == abdomen) || (skeleton.muscles[i].parent2->label == neck && skeleton.muscles[i].parent1->label == abdomen)) {
+ if ((p1 == neck && p2 == abdomen) || (p2 == neck && p1 == abdomen)) {
morphness = chestmorphness;
start = chestmorphstart;
endthing = chestmorphend;
}
- if ((skeleton.muscles[i].parent1->label == groin && skeleton.muscles[i].parent2->label == abdomen) || (skeleton.muscles[i].parent2->label == groin && skeleton.muscles[i].parent1->label == abdomen)) {
+ if ((p1 == groin && p2 == abdomen) || (p2 == groin && p1 == abdomen)) {
morphness = tailmorphness;
start = tailmorphstart;
endthing = tailmorphend;
if (calcrot)
skeleton.FindRotationMuscle(i, animTarget);
mid = (skeleton.muscles[i].parent1->position + skeleton.muscles[i].parent2->position) / 2;
- glMatrixMode(GL_MODELVIEW); // Select The Modelview Matrix
+ glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glLoadIdentity();
if (!skeleton.free)
if (playerdetail || skeleton.free == 3) {
for (j = 0; j < skeleton.muscles[i].numvertices; j++) {
- glMatrixMode(GL_MODELVIEW); // Select The Modelview Matrix
+ XYZ &v0 = skeleton.model[start].vertex[skeleton.muscles[i].vertices[j]];
+ XYZ &v1 = skeleton.model[endthing].vertex[skeleton.muscles[i].vertices[j]];
+ glMatrixMode(GL_MODELVIEW);
glPushMatrix();
- if (skeleton.muscles[i].parent1->label == abdomen || skeleton.muscles[i].parent2->label == abdomen)
- glTranslatef((skeleton.model[start].vertex[skeleton.muscles[i].vertices[j]].x * (1 - morphness) + skeleton.model[endthing].vertex[skeleton.muscles[i].vertices[j]].x * morphness)*proportionbody.x,
- (skeleton.model[start].vertex[skeleton.muscles[i].vertices[j]].y * (1 - morphness) + skeleton.model[endthing].vertex[skeleton.muscles[i].vertices[j]].y * morphness)*proportionbody.y,
- (skeleton.model[start].vertex[skeleton.muscles[i].vertices[j]].z * (1 - morphness) + skeleton.model[endthing].vertex[skeleton.muscles[i].vertices[j]].z * morphness)*proportionbody.z);
- if (skeleton.muscles[i].parent1->label == lefthand || skeleton.muscles[i].parent1->label == righthand || skeleton.muscles[i].parent1->label == leftwrist || skeleton.muscles[i].parent1->label == rightwrist || skeleton.muscles[i].parent1->label == leftelbow || skeleton.muscles[i].parent1->label == rightelbow || skeleton.muscles[i].parent2->label == leftelbow || skeleton.muscles[i].parent2->label == rightelbow)
- glTranslatef((skeleton.model[start].vertex[skeleton.muscles[i].vertices[j]].x * (1 - morphness) + skeleton.model[endthing].vertex[skeleton.muscles[i].vertices[j]].x * morphness)*proportionarms.x,
- (skeleton.model[start].vertex[skeleton.muscles[i].vertices[j]].y * (1 - morphness) + skeleton.model[endthing].vertex[skeleton.muscles[i].vertices[j]].y * morphness)*proportionarms.y,
- (skeleton.model[start].vertex[skeleton.muscles[i].vertices[j]].z * (1 - morphness) + skeleton.model[endthing].vertex[skeleton.muscles[i].vertices[j]].z * morphness)*proportionarms.z);
- if (skeleton.muscles[i].parent1->label == leftfoot || skeleton.muscles[i].parent1->label == rightfoot || skeleton.muscles[i].parent1->label == leftankle || skeleton.muscles[i].parent1->label == rightankle || skeleton.muscles[i].parent1->label == leftknee || skeleton.muscles[i].parent1->label == rightknee || skeleton.muscles[i].parent2->label == leftknee || skeleton.muscles[i].parent2->label == rightknee)
- glTranslatef((skeleton.model[start].vertex[skeleton.muscles[i].vertices[j]].x * (1 - morphness) + skeleton.model[endthing].vertex[skeleton.muscles[i].vertices[j]].x * morphness)*proportionlegs.x,
- (skeleton.model[start].vertex[skeleton.muscles[i].vertices[j]].y * (1 - morphness) + skeleton.model[endthing].vertex[skeleton.muscles[i].vertices[j]].y * morphness)*proportionlegs.y,
- (skeleton.model[start].vertex[skeleton.muscles[i].vertices[j]].z * (1 - morphness) + skeleton.model[endthing].vertex[skeleton.muscles[i].vertices[j]].z * morphness)*proportionlegs.z);
- if (skeleton.muscles[i].parent1->label == head || skeleton.muscles[i].parent2->label == head)
- glTranslatef((skeleton.model[start].vertex[skeleton.muscles[i].vertices[j]].x * (1 - morphness) + skeleton.model[endthing].vertex[skeleton.muscles[i].vertices[j]].x * morphness)*proportionhead.x,
- (skeleton.model[start].vertex[skeleton.muscles[i].vertices[j]].y * (1 - morphness) + skeleton.model[endthing].vertex[skeleton.muscles[i].vertices[j]].y * morphness)*proportionhead.y,
- (skeleton.model[start].vertex[skeleton.muscles[i].vertices[j]].z * (1 - morphness) + skeleton.model[endthing].vertex[skeleton.muscles[i].vertices[j]].z * morphness)*proportionhead.z);
+ if (p1 == abdomen || p2 == abdomen)
+ glTranslatef((v0.x * (1 - morphness) + v1.x * morphness) * proportionbody.x,
+ (v0.y * (1 - morphness) + v1.y * morphness) * proportionbody.y,
+ (v0.z * (1 - morphness) + v1.z * morphness) * proportionbody.z);
+ if (p1 == lefthand || p1 == righthand || p1 == leftwrist || p1 == rightwrist || p1 == leftelbow || p1 == rightelbow || p2 == leftelbow || p2 == rightelbow)
+ glTranslatef((v0.x * (1 - morphness) + v1.x * morphness) * proportionarms.x,
+ (v0.y * (1 - morphness) + v1.y * morphness) * proportionarms.y,
+ (v0.z * (1 - morphness) + v1.z * morphness) * proportionarms.z);
+ if (p1 == leftfoot || p1 == rightfoot || p1 == leftankle || p1 == rightankle || p1 == leftknee || p1 == rightknee || p2 == leftknee || p2 == rightknee)
+ glTranslatef((v0.x * (1 - morphness) + v1.x * morphness) * proportionlegs.x,
+ (v0.y * (1 - morphness) + v1.y * morphness) * proportionlegs.y,
+ (v0.z * (1 - morphness) + v1.z * morphness) * proportionlegs.z);
+ if (p1 == head || p2 == head)
+ glTranslatef((v0.x * (1 - morphness) + v1.x * morphness) * proportionhead.x,
+ (v0.y * (1 - morphness) + v1.y * morphness) * proportionhead.y,
+ (v0.z * (1 - morphness) + v1.z * morphness) * proportionhead.z);
glGetFloatv(GL_MODELVIEW_MATRIX, M);
- //if(!isnormal(M[12])||!isnormal(M[13])||!isnormal(M[14]))test=0;
- //if(!isnormal(scale))test=1;
skeleton.drawmodel.vertex[skeleton.muscles[i].vertices[j]].x = M[12] * scale;
skeleton.drawmodel.vertex[skeleton.muscles[i].vertices[j]].y = M[13] * scale;
skeleton.drawmodel.vertex[skeleton.muscles[i].vertices[j]].z = M[14] * scale;
- //test=2;
glPopMatrix();
}
}
if (!playerdetail || skeleton.free == 3) {
for (j = 0; j < skeleton.muscles[i].numverticeslow; j++) {
- glMatrixMode(GL_MODELVIEW); // Select The Modelview Matrix
+ XYZ &v0 = skeleton.modellow.vertex[skeleton.muscles[i].verticeslow[j]];
+ glMatrixMode(GL_MODELVIEW);
glPushMatrix();
- if (skeleton.muscles[i].parent1->label == abdomen || skeleton.muscles[i].parent2->label == abdomen)
- glTranslatef((skeleton.modellow.vertex[skeleton.muscles[i].verticeslow[j]].x)*proportionbody.x,
- (skeleton.modellow.vertex[skeleton.muscles[i].verticeslow[j]].y)*proportionbody.y,
- (skeleton.modellow.vertex[skeleton.muscles[i].verticeslow[j]].z)*proportionbody.z);
- if (skeleton.muscles[i].parent1->label == lefthand || skeleton.muscles[i].parent1->label == righthand || skeleton.muscles[i].parent1->label == leftwrist || skeleton.muscles[i].parent1->label == rightwrist || skeleton.muscles[i].parent1->label == leftelbow || skeleton.muscles[i].parent1->label == rightelbow || skeleton.muscles[i].parent2->label == leftelbow || skeleton.muscles[i].parent2->label == rightelbow)
- glTranslatef((skeleton.modellow.vertex[skeleton.muscles[i].verticeslow[j]].x)*proportionarms.x,
- (skeleton.modellow.vertex[skeleton.muscles[i].verticeslow[j]].y)*proportionarms.y,
- (skeleton.modellow.vertex[skeleton.muscles[i].verticeslow[j]].z)*proportionarms.z);
- if (skeleton.muscles[i].parent1->label == leftfoot || skeleton.muscles[i].parent1->label == rightfoot || skeleton.muscles[i].parent1->label == leftankle || skeleton.muscles[i].parent1->label == rightankle || skeleton.muscles[i].parent1->label == leftknee || skeleton.muscles[i].parent1->label == rightknee || skeleton.muscles[i].parent2->label == leftknee || skeleton.muscles[i].parent2->label == rightknee)
- glTranslatef((skeleton.modellow.vertex[skeleton.muscles[i].verticeslow[j]].x)*proportionlegs.x,
- (skeleton.modellow.vertex[skeleton.muscles[i].verticeslow[j]].y)*proportionlegs.y,
- (skeleton.modellow.vertex[skeleton.muscles[i].verticeslow[j]].z)*proportionlegs.z);
- if (skeleton.muscles[i].parent1->label == head || skeleton.muscles[i].parent2->label == head)
- glTranslatef((skeleton.modellow.vertex[skeleton.muscles[i].verticeslow[j]].x)*proportionhead.x,
- (skeleton.modellow.vertex[skeleton.muscles[i].verticeslow[j]].y)*proportionhead.y,
- (skeleton.modellow.vertex[skeleton.muscles[i].verticeslow[j]].z)*proportionhead.z);
+ if (p1 == abdomen || p2 == abdomen)
+ glTranslatef(v0.x * proportionbody.x,
+ v0.y * proportionbody.y,
+ v0.z * proportionbody.z);
+ if (p1 == lefthand || p1 == righthand || p1 == leftwrist || p1 == rightwrist || p1 == leftelbow || p1 == rightelbow || p2 == leftelbow || p2 == rightelbow)
+ glTranslatef(v0.x * proportionarms.x,
+ v0.y * proportionarms.y,
+ v0.z * proportionarms.z);
+ if (p1 == leftfoot || p1 == rightfoot || p1 == leftankle || p1 == rightankle || p1 == leftknee || p1 == rightknee || p2 == leftknee || p2 == rightknee)
+ glTranslatef(v0.x * proportionlegs.x,
+ v0.y * proportionlegs.y,
+ v0.z * proportionlegs.z);
+ if (p1 == head || p2 == head)
+ glTranslatef(v0.x * proportionhead.x,
+ v0.y * proportionhead.y,
+ v0.z * proportionhead.z);
glGetFloatv(GL_MODELVIEW_MATRIX, M);
skeleton.drawmodellow.vertex[skeleton.muscles[i].verticeslow[j]].x = M[12] * scale;
if (skeleton.clothes && skeleton.muscles[i].numverticesclothes > 0) {
mid = (skeleton.muscles[i].parent1->position + skeleton.muscles[i].parent2->position) / 2;
- glMatrixMode(GL_MODELVIEW); // Select The Modelview Matrix
+ glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glLoadIdentity();
if (!skeleton.free)
glRotatef(-skeleton.muscles[i].lastrotate3, 0, 1, 0);
for (j = 0; j < skeleton.muscles[i].numverticesclothes; j++) {
- glMatrixMode(GL_MODELVIEW); // Select The Modelview Matrix
+ XYZ &v0 = skeleton.modelclothes.vertex[skeleton.muscles[i].verticesclothes[j]];
+ glMatrixMode(GL_MODELVIEW);
glPushMatrix();
- if (skeleton.muscles[i].parent1->label == abdomen || skeleton.muscles[i].parent2->label == abdomen)
- glTranslatef((skeleton.modelclothes.vertex[skeleton.muscles[i].verticesclothes[j]].x)*proportionbody.x,
- (skeleton.modelclothes.vertex[skeleton.muscles[i].verticesclothes[j]].y)*proportionbody.y,
- (skeleton.modelclothes.vertex[skeleton.muscles[i].verticesclothes[j]].z)*proportionbody.z);
- if (skeleton.muscles[i].parent1->label == lefthand || skeleton.muscles[i].parent1->label == righthand || skeleton.muscles[i].parent1->label == leftwrist || skeleton.muscles[i].parent1->label == rightwrist || skeleton.muscles[i].parent1->label == leftelbow || skeleton.muscles[i].parent1->label == rightelbow || skeleton.muscles[i].parent2->label == leftelbow || skeleton.muscles[i].parent2->label == rightelbow)
- glTranslatef((skeleton.modelclothes.vertex[skeleton.muscles[i].verticesclothes[j]].x)*proportionarms.x,
- (skeleton.modelclothes.vertex[skeleton.muscles[i].verticesclothes[j]].y)*proportionarms.y,
- (skeleton.modelclothes.vertex[skeleton.muscles[i].verticesclothes[j]].z)*proportionarms.z);
- if (skeleton.muscles[i].parent1->label == leftfoot || skeleton.muscles[i].parent1->label == rightfoot || skeleton.muscles[i].parent1->label == leftankle || skeleton.muscles[i].parent1->label == rightankle || skeleton.muscles[i].parent1->label == leftknee || skeleton.muscles[i].parent1->label == rightknee || skeleton.muscles[i].parent2->label == leftknee || skeleton.muscles[i].parent2->label == rightknee)
- glTranslatef((skeleton.modelclothes.vertex[skeleton.muscles[i].verticesclothes[j]].x)*proportionlegs.x,
- (skeleton.modelclothes.vertex[skeleton.muscles[i].verticesclothes[j]].y)*proportionlegs.y,
- (skeleton.modelclothes.vertex[skeleton.muscles[i].verticesclothes[j]].z)*proportionlegs.z);
- if (skeleton.muscles[i].parent1->label == head || skeleton.muscles[i].parent2->label == head)
- glTranslatef((skeleton.modelclothes.vertex[skeleton.muscles[i].verticesclothes[j]].x)*proportionhead.x,
- (skeleton.modelclothes.vertex[skeleton.muscles[i].verticesclothes[j]].y)*proportionhead.y,
- (skeleton.modelclothes.vertex[skeleton.muscles[i].verticesclothes[j]].z)*proportionhead.z);
+ if (p1 == abdomen || p2 == abdomen)
+ glTranslatef(v0.x * proportionbody.x,
+ v0.y * proportionbody.y,
+ v0.z * proportionbody.z);
+ if (p1 == lefthand || p1 == righthand || p1 == leftwrist || p1 == rightwrist || p1 == leftelbow || p1 == rightelbow || p2 == leftelbow || p2 == rightelbow)
+ glTranslatef(v0.x * proportionarms.x,
+ v0.y * proportionarms.y,
+ v0.z * proportionarms.z);
+ if (p1 == leftfoot || p1 == rightfoot || p1 == leftankle || p1 == rightankle || p1 == leftknee || p1 == rightknee || p2 == leftknee || p2 == rightknee)
+ glTranslatef(v0.x * proportionlegs.x,
+ v0.y * proportionlegs.y,
+ v0.z * proportionlegs.z);
+ if (p1 == head || p2 == head)
+ glTranslatef(v0.x * proportionhead.x,
+ v0.y * proportionhead.y,
+ v0.z * proportionhead.z);
glGetFloatv(GL_MODELVIEW_MATRIX, M);
skeleton.drawmodelclothes.vertex[skeleton.muscles[i].verticesclothes[j]].x = M[12] * scale;
skeleton.drawmodelclothes.vertex[skeleton.muscles[i].verticesclothes[j]].y = M[13] * scale;
updatedelaychange *= 8;
updatedelay += updatedelaychange;
- glMatrixMode(GL_MODELVIEW); // Select The Modelview Matrix
+ glMatrixMode(GL_MODELVIEW);
glPushMatrix();
- if (!skeleton.free)
- glTranslatef(coords.x, coords.y - .02, coords.z);
- if (skeleton.free)
- glTranslatef(coords.x, coords.y - .02, coords.z);
- if (!skeleton.free)
+ glTranslatef(coords.x, coords.y - .02, coords.z);
+ if (!skeleton.free) {
glTranslatef(offset.x * scale, offset.y * scale, offset.z * scale);
- if (!skeleton.free)
glRotatef(yaw, 0, 1, 0);
+ }
if (showpoints) {
glPointSize(5);
glColor4f(.4, 1, .4, 1);
glBegin(GL_POINTS);
if (playerdetail)
for (i = 0; i < skeleton.drawmodel.vertexNum; i++) {
- glVertex3f(skeleton.drawmodel.vertex[i].x, skeleton.drawmodel.vertex[i].y, skeleton.drawmodel.vertex[i].z);
+ XYZ &v0 = skeleton.drawmodel.vertex[i];
+ glVertex3f(v0.x, v0.y, v0.z);
}
glEnd();
glBegin(GL_LINES);
if (playerdetail)
for (i = 0; i < skeleton.drawmodel.TriangleNum; i++) {
- glVertex3f(skeleton.drawmodel.vertex[skeleton.drawmodel.Triangles[i].vertex[0]].x, skeleton.drawmodel.vertex[skeleton.drawmodel.Triangles[i].vertex[0]].y, skeleton.drawmodel.vertex[skeleton.drawmodel.Triangles[i].vertex[0]].z);
- glVertex3f(skeleton.drawmodel.vertex[skeleton.drawmodel.Triangles[i].vertex[1]].x, skeleton.drawmodel.vertex[skeleton.drawmodel.Triangles[i].vertex[1]].y, skeleton.drawmodel.vertex[skeleton.drawmodel.Triangles[i].vertex[1]].z);
- glVertex3f(skeleton.drawmodel.vertex[skeleton.drawmodel.Triangles[i].vertex[1]].x, skeleton.drawmodel.vertex[skeleton.drawmodel.Triangles[i].vertex[1]].y, skeleton.drawmodel.vertex[skeleton.drawmodel.Triangles[i].vertex[1]].z);
- glVertex3f(skeleton.drawmodel.vertex[skeleton.drawmodel.Triangles[i].vertex[2]].x, skeleton.drawmodel.vertex[skeleton.drawmodel.Triangles[i].vertex[2]].y, skeleton.drawmodel.vertex[skeleton.drawmodel.Triangles[i].vertex[2]].z);
- glVertex3f(skeleton.drawmodel.vertex[skeleton.drawmodel.Triangles[i].vertex[2]].x, skeleton.drawmodel.vertex[skeleton.drawmodel.Triangles[i].vertex[2]].y, skeleton.drawmodel.vertex[skeleton.drawmodel.Triangles[i].vertex[2]].z);
- glVertex3f(skeleton.drawmodel.vertex[skeleton.drawmodel.Triangles[i].vertex[0]].x, skeleton.drawmodel.vertex[skeleton.drawmodel.Triangles[i].vertex[0]].y, skeleton.drawmodel.vertex[skeleton.drawmodel.Triangles[i].vertex[0]].z);
+ XYZ &v0 = skeleton.drawmodel.vertex[skeleton.drawmodel.Triangles[i].vertex[0]];
+ XYZ &v1 = skeleton.drawmodel.vertex[skeleton.drawmodel.Triangles[i].vertex[1]];
+ XYZ &v2 = skeleton.drawmodel.vertex[skeleton.drawmodel.Triangles[i].vertex[2]];
+ glVertex3f(v0.x, v0.y, v0.z);
+ glVertex3f(v1.x, v1.y, v1.z);
+ glVertex3f(v1.x, v1.y, v1.z);
+ glVertex3f(v2.x, v2.y, v2.z);
+ glVertex3f(v2.x, v2.y, v2.z);
+ glVertex3f(v0.x, v0.y, v0.z);
}
glEnd();
glEnable(GL_BLEND);
}
if (tutoriallevel && id != 0) {
- //glDisable(GL_TEXTURE_2D);
glColor4f(.7, .7, .7, 0.6);
glDepthMask(0);
glEnable(GL_LIGHTING);
calcrot = 1;
if (animCurrent != animTarget)
calcrot = 1;
- //if(id==0)calcrot=1;
if (skeleton.free == 2)
calcrot = 0;
intersecting = 1;
if (!intersecting)
intersecting = sphere_line_intersection(&model->vertex[model->Triangles[j].vertex[0]],
- &model->vertex[model->Triangles[j].vertex[1]],
- p1, &radius);
+ &model->vertex[model->Triangles[j].vertex[1]],
+ p1, &radius);
if (!intersecting)
intersecting = sphere_line_intersection(&model->vertex[model->Triangles[j].vertex[1]],
- &model->vertex[model->Triangles[j].vertex[2]],
- p1, &radius);
+ &model->vertex[model->Triangles[j].vertex[2]],
+ p1, &radius);
if (!intersecting)
intersecting = sphere_line_intersection(&model->vertex[model->Triangles[j].vertex[0]],
- &model->vertex[model->Triangles[j].vertex[2]],
- p1, &radius);
+ &model->vertex[model->Triangles[j].vertex[2]],
+ p1, &radius);
end = *p1 - point;
if (dotproduct(&model->facenormals[j], &end) > 0 && intersecting) {
start = *p1;
XYZ &v1 = model->vertex[model->Triangles[j].vertex[1]];
XYZ &v2 = model->vertex[model->Triangles[j].vertex[2]];
distance = abs((model->facenormals[j].x * start.x)
- + (model->facenormals[j].y * start.y)
- + (model->facenormals[j].z * start.z)
- - ((model->facenormals[j].x * v0.x)
- + (model->facenormals[j].y * v0.y)
- + (model->facenormals[j].z * v0.z)));
+ + (model->facenormals[j].y * start.y)
+ + (model->facenormals[j].z * start.z)
+ - ((model->facenormals[j].x * v0.x)
+ + (model->facenormals[j].y * v0.y)
+ + (model->facenormals[j].z * v0.z)));
if (distance < radius * .5) {
point = start - model->facenormals[j] * distance;
if (PointInTriangle( &point, model->facenormals[j], &v0, &v1, &v2))
intersecting = 1;
if (!intersecting)
- intersecting = sphere_line_intersection(v0.x,v0.y,v0.z, v1.x,v1.y,v1.z, p1->x, p1->y, p1->z, radius / 2);
+ intersecting = sphere_line_intersection(v0.x, v0.y, v0.z, v1.x, v1.y, v1.z, p1->x, p1->y, p1->z, radius / 2);
if (!intersecting)
- intersecting = sphere_line_intersection(v1.x,v1.y,v1.z, v2.x,v2.y,v2.z, p1->x, p1->y, p1->z, radius / 2);
+ intersecting = sphere_line_intersection(v1.x, v1.y, v1.z, v2.x, v2.y, v2.z, p1->x, p1->y, p1->z, radius / 2);
if (!intersecting)
- intersecting = sphere_line_intersection(v0.x,v0.y,v0.z, v2.x,v2.y,v2.z, p1->x, p1->y, p1->z, radius / 2);
+ intersecting = sphere_line_intersection(v0.x, v0.y, v0.z, v2.x, v2.y, v2.z, p1->x, p1->y, p1->z, radius / 2);
end = *p1 - point;
if (dotproduct(&model->facenormals[j], &end) > 0 && intersecting) {
if ((animTarget == jumpdownanim || animTarget == jumpupanim || isFlip())) {
return firstintersecting;
}
+void Person::takeWeapon(int weaponId)
+{
+ weaponactive = 0;
+ weapons[weaponId].owner = id;
+ if (num_weapons > 0) {
+ weaponids[num_weapons] = weaponids[0];
+ }
+ num_weapons++;
+ weaponids[0] = weaponId;
+}
+