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();
}
}
{
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;
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;
}
victim->weaponactive = -1;
- for (int j = 0; j < numplayers; j++) {
- player[j].wentforweapon = 0;
+ for (int j = 0; j < Person::players.size(); j++) {
+ Person::players[j]->wentforweapon = 0;
}
}
}
victim->weaponactive = -1;
- for (int j = 0; j < numplayers; j++) {
- player[j].wentforweapon = 0;
+ for (int j = 0; j < Person::players.size(); j++) {
+ Person::players[j]->wentforweapon = 0;
}
}
animTarget = staffspinhitreversedanim;
}
victim->weaponactive = -1;
- for (int j = 0; j < numplayers; j++) {
- player[j].wentforweapon = 0;
+ for (int j = 0; j < Person::players.size(); j++) {
+ Person::players[j]->wentforweapon = 0;
}
}
animTarget = swordslashreversedanim;
}
victim->weaponactive = -1;
- for (int j = 0; j < numplayers; j++) {
- player[j].wentforweapon = 0;
+ for (int j = 0; j < Person::players.size(); j++) {
+ Person::players[j]->wentforweapon = 0;
}
}
animTarget = knifeslashreversedanim;
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->weaponstuck = 0;
}
victim->weaponactive = -1;
- for (int i = 0; i < numplayers; i++) {
- player[i].wentforweapon = 0;
+ for (int i = 0; i < Person::players.size(); i++) {
+ Person::players[i]->wentforweapon = 0;
}
}
weaponstuck = 0;
}
weaponactive = -1;
- for (int i = 0; i < numplayers; i++) {
- player[i].wentforweapon = 0;
+ for (int i = 0; i < Person::players.size(); i++) {
+ Person::players[i]->wentforweapon = 0;
}
weaponstuck = 0;
}
weaponactive = -1;
- for (i = 0; i < numplayers; i++) {
- player[i].wentforweapon = 0;
+ for (i = 0; i < Person::players.size(); i++) {
+ Person::players[i]->wentforweapon = 0;
}
}
}
for (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] == 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 (willwork && distsqflat(&coords, &weapons[i].position) < 3 && weaponactive == -1) {
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
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;
+ victim->jointVel(abdomen) += relative * 6;
+ victim->jointVel(neck) += relative * 6;
+ victim->jointVel(rightshoulder) += relative * 6;
+ victim->jointVel(leftshoulder) += relative * 6;
}
weapons[i].owner = id;
if (num_weapons > 0) {
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 (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;
for (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);
for (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);
for (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);
for (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);
for (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.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;
}
}
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->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;
victim->bled = 0;
}
- victim->skeleton.joints[victim->skeleton.jointlabels[abdomen]].velocity += relative * damagemult * 20;
+ victim->jointVel(abdomen) += relative * damagemult * 20;
}
}
}
for (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;
for (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;
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);
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;
+ footpoint = (victim->jointPos(abdomen) + victim->jointPos(neck)) / 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 = 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;
+ footpoint = (victim->jointPos(abdomen) + victim->jointPos(neck)) / 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 = 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->weaponstuck = 0;
}
victim->weaponactive = -1;
- for (i = 0; i < numplayers; i++) {
- player[i].wentforweapon = 0;
+ for (i = 0; i < Person::players.size(); i++) {
+ Person::players[i]->wentforweapon = 0;
}
}
for (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) {
for (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.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++) {
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) {
for (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.);
}
for (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 (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;
for (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);
for (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;
+ victim->jointVel(abdomen) += relative * damagemult * 200;
//FootLand(1,2);
victim->Puff(head);
victim->DoDamage(damagemult * 70 / victim->protectionhigh);
for (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;
+ victim->jointVel(abdomen) += relative * damagemult * 200;
//FootLand(1,2);
victim->Puff(head);
victim->DoDamage(damagemult * 70 / victim->protectionhigh);
for (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);
for (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);
}
for (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 * 30 / victim->protectionhigh);
for (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);
for (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 (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 (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;
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;
}
}
weaponstuck = 0;
}
weaponactive = -1;
- for (i = 0; i < numplayers; i++) {
- player[i].wentforweapon = 0;
+ for (i = 0; i < Person::players.size(); i++) {
+ Person::players[i]->wentforweapon = 0;
}
if (id == 0) {
weaponstuck = 0;
}
weaponactive = -1;
- for (i = 0; i < numplayers; i++) {
- player[i].wentforweapon = 0;
+ for (i = 0; i < Person::players.size(); i++) {
+ Person::players[i]->wentforweapon = 0;
}
}
weaponstuck = 0;
}
weaponactive = -1;
- for (i = 0; i < numplayers; i++) {
- player[i].wentforweapon = 0;
+ for (i = 0; i < Person::players.size(); i++) {
+ Person::players[i]->wentforweapon = 0;
}
}
yaw = targetyaw;
frameTarget = 0;
- // frameTarget=2;
+ // frameTarget=2;
animTarget = flipanim;
crouchtogglekeydown = 1;
target = 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)
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);
}
}
/* EFFECT
* inverse kinematics helper function
*/
-void IKHelper(Person *p, float interp){
+void IKHelper(Person *p, float interp)
+{
XYZ point, newpoint, change, change2;
float heightleft, heightright;
if (!isSleeping() && !isSitting()) {
// TODO: give these meaningful names
const bool cond1 = (isIdle() || isCrouch() || isLanding() || isLandhard()
- || animTarget == drawrightanim || animTarget == drawleftanim || animTarget == crouchdrawrightanim);
+ || animTarget == drawrightanim || animTarget == drawleftanim || animTarget == crouchdrawrightanim);
const bool cond2 = (wasIdle() || wasCrouch() || wasLanding() || wasLandhard()
- || animCurrent == drawrightanim || animCurrent == drawleftanim || animCurrent == crouchdrawrightanim);
+ || animCurrent == drawrightanim || animCurrent == drawleftanim || animCurrent == crouchdrawrightanim);
if (onterrain && (cond1 && cond2) && !skeleton.free) {
IKHelper(this, 1);
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
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);
+ 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);
+ 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);
+ 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);
+ 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;
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())) {