X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;f=Source%2FPerson.cpp;h=3327f5abc3c139901d5b0f1cd9093c4981b8b67e;hb=cd043e3f9e26c2b3406b40a354c2840941e9db7f;hp=52b9b207b20984374edb08d0458b7996b85dab92;hpb=24004d6ab1e68faaf85ece11b566449997da5013;p=lugaru.git
diff --git a/Source/Person.cpp b/Source/Person.cpp
index 52b9b20..3327f5a 100644
--- a/Source/Person.cpp
+++ b/Source/Person.cpp
@@ -3,20 +3,18 @@ Copyright (C) 2003, 2010 - Wolfire Games
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 .
*/
/**> HEADER FILES <**/
@@ -83,22 +81,7 @@ extern int indialogue;
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> Person::players(1, std::shared_ptr(new Person()));
/* EFFECT
*
@@ -110,7 +93,7 @@ void Person::CheckKick()
if (!(hasvictim
&& (animTarget == rabbitkickanim
&& victim
- && victim != this
+ && victim != this->shared_from_this()
&& frameCurrent >= 2
&& animCurrent == rabbitkickanim)
&& distsq(&coords, &victim->coords) < 1.2
@@ -160,7 +143,7 @@ void Person::CheckKick()
victim->oldcoords = victim->coords;
coords = victim->coords;
victim->targetyaw = targetyaw;
- victim->victim = this;
+ victim->victim = this->shared_from_this();
}
}
@@ -206,8 +189,10 @@ int Person::getIdle()
{
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;
@@ -936,8 +921,8 @@ void Person::Reverse()
}
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;
}
}
@@ -966,8 +951,8 @@ void Person::Reverse()
}
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;
@@ -995,8 +980,8 @@ void Person::Reverse()
}
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;
@@ -1024,8 +1009,8 @@ void Person::Reverse()
}
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;
@@ -1043,14 +1028,14 @@ void Person::Reverse()
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) {
@@ -1058,7 +1043,7 @@ void Person::Reverse()
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) {
@@ -1068,7 +1053,7 @@ void Person::Reverse()
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) {
@@ -1107,8 +1092,8 @@ void Person::Reverse()
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;
}
}
@@ -1150,8 +1135,8 @@ void Person::Reverse()
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;
}
@@ -1423,8 +1408,7 @@ void Person::DoHead()
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);
}
@@ -1470,7 +1454,7 @@ void Person::RagDoll(bool checkcollision)
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);
@@ -1482,7 +1466,7 @@ void Person::RagDoll(bool checkcollision)
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;
}
@@ -1503,7 +1487,7 @@ void Person::RagDoll(bool checkcollision)
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
@@ -1556,7 +1540,7 @@ void Person::RagDoll(bool checkcollision)
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;
@@ -1580,8 +1564,8 @@ void Person::RagDoll(bool checkcollision)
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;
}
}
}
@@ -1698,7 +1682,6 @@ void Person::setAnimation(int animation)
void Person::DoAnimations()
{
if (!skeleton.free) {
- int i = 0;
static float oldtarget;
if (isIdle() && animCurrent != getIdle())
@@ -1850,12 +1833,12 @@ void Person::DoAnimations()
}
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)
@@ -1892,18 +1875,18 @@ void Person::DoAnimations()
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;
}
@@ -1931,7 +1914,7 @@ void Person::DoAnimations()
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) {
@@ -1952,20 +1935,20 @@ void Person::DoAnimations()
}
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;
}
}
@@ -1979,7 +1962,7 @@ void Person::DoAnimations()
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
@@ -2003,7 +1986,7 @@ void Person::DoAnimations()
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;
@@ -2014,7 +1997,7 @@ void Person::DoAnimations()
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];
}
@@ -2074,7 +2057,7 @@ void Person::DoAnimations()
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;
@@ -2093,17 +2076,17 @@ void Person::DoAnimations()
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;
@@ -2158,7 +2141,7 @@ void Person::DoAnimations()
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->jointVel(head) += relative * damagemult * 200;
@@ -2194,7 +2177,7 @@ void Person::DoAnimations()
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->jointVel(head) += relative * damagemult * 100;
@@ -2225,7 +2208,7 @@ void Person::DoAnimations()
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->jointVel(head) += relative * damagemult * 200;
@@ -2261,7 +2244,7 @@ void Person::DoAnimations()
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->jointVel(head) += relative * damagemult * 200;
@@ -2291,7 +2274,7 @@ void Person::DoAnimations()
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->jointVel(head) += relative * damagemult * 100;
@@ -2313,7 +2296,7 @@ void Person::DoAnimations()
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;
@@ -2324,7 +2307,7 @@ void Person::DoAnimations()
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;
@@ -2347,7 +2330,7 @@ void Person::DoAnimations()
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);
@@ -2374,7 +2357,7 @@ void Person::DoAnimations()
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;
@@ -2384,7 +2367,7 @@ void Person::DoAnimations()
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)
@@ -2471,7 +2454,7 @@ void Person::DoAnimations()
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;
@@ -2561,7 +2544,7 @@ void Person::DoAnimations()
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;
@@ -2608,7 +2591,7 @@ void Person::DoAnimations()
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->jointVel(head) += relative * damagemult * 150;
@@ -2655,7 +2638,7 @@ void Person::DoAnimations()
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->jointVel(abdomen) += relative * damagemult * 400;
@@ -2873,8 +2856,8 @@ void Person::DoAnimations()
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;
}
}
@@ -2901,7 +2884,7 @@ void Person::DoAnimations()
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->jointVel(head) += relative * damagemult * 230;
@@ -2934,7 +2917,7 @@ void Person::DoAnimations()
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->jointVel(head) += relative * damagemult * 220;
@@ -2966,7 +2949,7 @@ void Person::DoAnimations()
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;
@@ -2982,14 +2965,14 @@ void Person::DoAnimations()
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->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);
@@ -3024,7 +3007,7 @@ void Person::DoAnimations()
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->jointVel(head) += relative * damagemult * 200;
@@ -3043,7 +3026,7 @@ void Person::DoAnimations()
} 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->jointVel(abdomen) += relative * damagemult * 200;
@@ -3067,7 +3050,9 @@ void Person::DoAnimations()
}
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;
@@ -3082,12 +3067,12 @@ void Person::DoAnimations()
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;
}
@@ -3097,11 +3082,11 @@ void Person::DoAnimations()
} 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;
}
@@ -3145,7 +3130,7 @@ void Person::DoAnimations()
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->jointVel(abdomen) += relative * damagemult * 200;
@@ -3158,7 +3143,7 @@ void Person::DoAnimations()
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) {
+ if (weapons[victim->weaponids[victim->weaponactive]].owner == int(victim->id)) {
weapons[victim->weaponids[victim->weaponactive]].owner = id;
weaponactive = 0;
if (num_weapons > 0) {
@@ -3191,7 +3176,7 @@ void Person::DoAnimations()
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->jointVel(abdomen) += relative * damagemult * 200;
@@ -3222,7 +3207,7 @@ void Person::DoAnimations()
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->jointVel(abdomen) += relative * damagemult * 200;
@@ -3240,7 +3225,7 @@ void Person::DoAnimations()
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->jointVel(lefthand) *= .1;
@@ -3292,7 +3277,7 @@ void Person::DoAnimations()
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->jointVel(lefthand) *= .1 - 1;
@@ -3324,7 +3309,7 @@ void Person::DoAnimations()
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->jointVel(abdomen) += relative * damagemult * 200;
@@ -3345,7 +3330,7 @@ void Person::DoAnimations()
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);
@@ -3429,12 +3414,12 @@ void Person::DoAnimations()
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;
}
}
@@ -3487,7 +3472,7 @@ void Person::DoAnimations()
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) {
@@ -3556,7 +3541,7 @@ void Person::DoAnimations()
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->jointVel(head) += relative * damagemult * 200;
@@ -3577,7 +3562,7 @@ void Person::DoAnimations()
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->jointVel(head) += relative * damagemult * 200;
@@ -3690,10 +3675,10 @@ void Person::DoAnimations()
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;
@@ -3701,7 +3686,7 @@ void Person::DoAnimations()
}
}
if (closestdist > 0 && closest >= 0 && closestdist < 16) {
- victim = &player[closest];
+ victim = Person::players[closest];
animTarget = walljumprightkickanim;
frameTarget = 0;
XYZ rotatetarget = victim->coords - coords;
@@ -3748,10 +3733,10 @@ void Person::DoAnimations()
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;
@@ -3759,7 +3744,7 @@ void Person::DoAnimations()
}
}
if (closestdist > 0 && closest >= 0 && closestdist < 16) {
- victim = &player[closest];
+ victim = Person::players[closest];
animTarget = walljumpleftkickanim;
frameTarget = 0;
XYZ rotatetarget = victim->coords - coords;
@@ -4045,18 +4030,18 @@ void Person::DoAnimations()
}
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;
@@ -4068,18 +4053,18 @@ void Person::DoAnimations()
}
//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;
@@ -4104,12 +4089,12 @@ void Person::DoAnimations()
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);
@@ -4181,7 +4166,7 @@ void Person::DoStuff()
flamedelay -= multiplier;
parriedrecently -= multiplier;
if (!victim) {
- victim = this;
+ victim = this->shared_from_this();
hasvictim = 0;
}
@@ -4200,7 +4185,7 @@ void Person::DoStuff()
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;
}
}
@@ -4351,8 +4336,8 @@ void Person::DoStuff()
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) {
@@ -4369,7 +4354,7 @@ void Person::DoStuff()
}
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;
}
@@ -4777,8 +4762,8 @@ void Person::DoStuff()
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;
}
}
@@ -4819,7 +4804,7 @@ void Person::DoStuff()
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;
}
}
@@ -4843,8 +4828,8 @@ void Person::DoStuff()
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;
}
}
@@ -4913,7 +4898,7 @@ void Person::DoStuff()
//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;
@@ -5017,7 +5002,7 @@ void Person::DoStuff()
yaw = targetyaw;
frameTarget = 0;
- // frameTarget=2;
+ // frameTarget=2;
animTarget = flipanim;
crouchtogglekeydown = 1;
target = 0;
@@ -5031,7 +5016,7 @@ void Person::DoStuff()
//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);
}
@@ -5122,7 +5107,7 @@ void Person::DoStuff()
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);
}
@@ -5328,7 +5313,7 @@ void Person::DoStuff()
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)
@@ -5478,7 +5463,9 @@ void Person::DoStuff()
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);
}
}
@@ -6032,7 +6019,7 @@ int Person::DrawSkeleton()
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;