if (tutoriallevel != 1)
emit_sound_at(heavyimpactsound, victim->coords);
victim->RagDoll(0);
- for (int i = 0; i < victim->skeleton.num_joints; i++) {
+ for (int i = 0; i < victim->skeleton.joints.size(); i++) {
victim->skeleton.joints[i].velocity += relative * 120 * damagemult;
}
victim->Puff(neck);
*
* USES:
* GameTick/doPlayerCollisions - spread fire between players
- * GameTick/doDebugKeys - press f to ignite
+ * GameTick/doDevKeys - press f to ignite
* Person::DoStuff - spread fire from lit campfires and bushes
*/
void Person::CatchFire()
XYZ flatfacing, flatvelocity;
int howmany;
for (int i = 0; i < 10; i++) {
- howmany = abs(Random() % (skeleton.num_joints));
+ howmany = abs(Random() % (skeleton.joints.size()));
if (skeleton.free) {
flatvelocity = skeleton.joints[howmany].velocity;
flatfacing = skeleton.joints[howmany].position * scale + coords;
velocity = 0;
victim->velocity = 0;
- if (aitype != playercontrolled)
+ if (aitype != playercontrolled) {
feint = 0;
- if (aitype != playercontrolled && Random() % 3 == 0 && escapednum < 2 && difficulty == 2)
- feint = 1;
- if (aitype != playercontrolled && Random() % 5 == 0 && escapednum < 2 && difficulty == 1)
- feint = 1;
- if (aitype != playercontrolled && Random() % 10 == 0 && escapednum < 2 && difficulty == 0)
- feint = 1;
+ if (escapednum < 2) {
+ int chances = ((difficulty == 2) ? 3 : ((difficulty == 1) ? 5 : 10));
+ if ((Random() % chances) == 0) {
+ feint = 1;
+ }
+ }
+ }
if (victim->id == 0 && Animation::animations[victim->animTarget].attack == reversal)
numreversals++;
if (howmuch > damagetolerance * 50 && skeleton.free != 2) {
XYZ flatvelocity2;
XYZ flatfacing2;
- for (int i = 0; i < skeleton.num_joints; i++) {
+ for (int i = 0; i < skeleton.joints.size(); i++) {
if (skeleton.free) {
flatvelocity2 = skeleton.joints[i].velocity;
flatfacing2 = skeleton.joints[i].position * scale + coords;
skeleton.specialforward[0] = facing;
//skeleton.specialforward[0]=DoRotation(facing,0,yaw,0);
- for (int i = 0; i < skeleton.num_muscles; i++) {
+ for (int i = 0; i < skeleton.muscles.size(); 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 (int i = 0; i < skeleton.num_joints; i++) {
+ for (int i = 0; i < skeleton.joints.size(); 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);
skeleton.joints[i].realoldposition = skeleton.joints[i].position * scale + coords;
}
- for (int i = 0; i < skeleton.num_joints; i++) {
+ for (int i = 0; i < skeleton.joints.size(); i++) {
skeleton.joints[i].velocity = 0;
skeleton.joints[i].velchange = 0;
}
skeleton.DoConstraints(&coords, &scale);
}
- speed = Animation::animations[animTarget].frames[frameTarget].speed * 2;
- if (Animation::animations[animCurrent].frames[frameCurrent].speed > Animation::animations[animTarget].frames[frameTarget].speed) {
- speed = Animation::animations[animCurrent].frames[frameCurrent].speed * 2;
+ speed = targetFrame().speed * 2;
+ if (currentFrame().speed > targetFrame().speed) {
+ speed = currentFrame().speed * 2;
}
if (transspeed)
speed = transspeed * 2;
speed *= speedmult;
- for (int i = 0; i < skeleton.num_joints; i++) {
+ for (int i = 0; i < skeleton.joints.size(); i++) {
if ((Animation::animations[animCurrent].attack != reversed || animCurrent == swordslashreversedanim) && animCurrent != rabbitkickanim && !isLanding() && !wasLanding() && Animation::animations[animCurrent].height == Animation::animations[animTarget].height)
- skeleton.joints[i].velocity = velocity / scale + facing * 5 + DoRotation(DoRotation(DoRotation((Animation::animations[animTarget].frames[frameTarget].joints[i].position - Animation::animations[animCurrent].frames[frameCurrent].joints[i].position) * speed, 0, 0, tilt), tilt2, 0, 0), 0, yaw, 0);
+ skeleton.joints[i].velocity = velocity / scale + facing * 5 + DoRotation(DoRotation(DoRotation((targetFrame().joints[i].position - currentFrame().joints[i].position) * speed, 0, 0, tilt), tilt2, 0, 0), 0, yaw, 0);
else
skeleton.joints[i].velocity = velocity / scale + facing * 5;
change.x = (float)(Random() % 100) / 100;
change.y = (float)(Random() % 100) / 100;
change.z = (float)(Random() % 100) / 100;
skeleton.joints[i].velocity += change;
- skeleton.joints[abs(Random() % skeleton.num_joints)].velocity -= change;
+ skeleton.joints[abs(Random() % skeleton.joints.size())].velocity -= change;
change.x = (float)(Random() % 100) / 100;
change.y = (float)(Random() % 100) / 100;
change.z = (float)(Random() % 100) / 100;
skeleton.joints[i].velchange += change;
- skeleton.joints[abs(Random() % skeleton.num_joints)].velchange -= change;
+ skeleton.joints[abs(Random() % skeleton.joints.size())].velchange -= change;
}
if (checkcollision) {
int howmany;
average = 0;
howmany = 0;
- for (j = 0; j < skeleton.num_joints; j++) {
+ for (j = 0; j < skeleton.joints.size(); j++) {
average += skeleton.joints[j].position;
howmany++;
}
average /= howmany;
coords += average * scale;
- for (j = 0; j < skeleton.num_joints; j++) {
+ for (j = 0; j < skeleton.joints.size(); j++) {
skeleton.joints[j].position -= average;
}
updatedelay = 0;
velocity = 0;
- for (int i = 0; i < skeleton.num_joints; i++) {
+ for (int i = 0; i < skeleton.joints.size(); i++) {
velocity += skeleton.joints[i].velocity * scale;
}
- velocity /= skeleton.num_joints;
+ velocity /= skeleton.joints.size();
// drop weapon
if (Random() % 2 == 0) {
/* EFFECT
*/
-void Person::FootLand(bodyparts whichfoot, float opacity)
+void Person::FootLand(bodypart whichfoot, float opacity)
{
if ((whichfoot != leftfoot) && (whichfoot != rightfoot)) {
cerr << "FootLand called on wrong bodypart" << endl;
}
}
- if (!drawtogglekeydown && drawkeydown && (weaponactive == -1 || num_weapons == 1) && (Animation::animations[animTarget].frames[frameTarget].label || (animTarget != animCurrent && animCurrent == rollanim)) && num_weapons > 0 && creature != wolftype) {
+ if (!drawtogglekeydown && drawkeydown && (weaponactive == -1 || num_weapons == 1) && (targetFrame().label || (animTarget != animCurrent && animCurrent == rollanim)) && num_weapons > 0 && creature != wolftype) {
if (weapons[weaponids[0]].getType() == knife) {
if (weaponactive == -1)
weaponactive = 0;
}
//Footstep sounds
if (tutoriallevel != 1 || id == 0)
- if ((Animation::animations[animTarget].frames[frameTarget].label && (Animation::animations[animTarget].frames[frameTarget].label < 5 || Animation::animations[animTarget].frames[frameTarget].label == 8))/*||(animTarget==rollanim&&frameTarget==Animation::animations[rollanim].frames.size()-1)*/) {
+ if ((targetFrame().label && (targetFrame().label < 5 || targetFrame().label == 8))) {
int whichsound;
if (onterrain) {
if (terrain.getOpacity(coords.x, coords.z) < .2) {
- if (Animation::animations[animTarget].frames[frameTarget].label == 1)
+ if (targetFrame().label == 1)
whichsound = footstepsound;
else
whichsound = footstepsound2;
- if (Animation::animations[animTarget].frames[frameTarget].label == 1)
+ if (targetFrame().label == 1)
FootLand(leftfoot, 1);
- if (Animation::animations[animTarget].frames[frameTarget].label == 2)
+ if (targetFrame().label == 2)
FootLand(rightfoot, 1);
- if (Animation::animations[animTarget].frames[frameTarget].label == 3 && isRun()) {
+ if (targetFrame().label == 3 && isRun()) {
FootLand(rightfoot, 1);
FootLand(leftfoot, 1);
}
}
if (terrain.getOpacity(coords.x, coords.z) >= .2) {
- if (Animation::animations[animTarget].frames[frameTarget].label == 1)
+ if (targetFrame().label == 1)
whichsound = footstepsound3;
else
whichsound = footstepsound4;
}
}
if (!onterrain) {
- if (Animation::animations[animTarget].frames[frameTarget].label == 1)
+ if (targetFrame().label == 1)
whichsound = footstepsound3;
else
whichsound = footstepsound4;
}
- if (Animation::animations[animTarget].frames[frameTarget].label == 4 && (weaponactive == -1 || (animTarget != knifeslashstartanim && animTarget != knifethrowanim && animTarget != crouchstabanim && animTarget != swordgroundstabanim && animTarget != knifefollowanim))) {
+ if (targetFrame().label == 4 && (weaponactive == -1 || (animTarget != knifeslashstartanim && animTarget != knifethrowanim && animTarget != crouchstabanim && animTarget != swordgroundstabanim && animTarget != knifefollowanim))) {
if (Animation::animations[animTarget].attack != neutral) {
unsigned r = abs(Random() % 3);
if (r == 0)
}
if (Animation::animations[animTarget].attack == neutral)
whichsound = movewhooshsound;
- } else if (Animation::animations[animTarget].frames[frameTarget].label == 4)
+ } else if (targetFrame().label == 4)
whichsound = knifeswishsound;
- if (Animation::animations[animTarget].frames[frameTarget].label == 8 && tutoriallevel != 1)
+ if (targetFrame().label == 8 && tutoriallevel != 1)
whichsound = landsound2;
emit_sound_at(whichsound, coords, 256.);
}
}
- if (Animation::animations[animTarget].frames[frameTarget].label == 3) {
+ if (targetFrame().label == 3) {
whichsound--;
emit_sound_at(whichsound, coords, 128.);
}
if (tutoriallevel != 1 || id == 0)
if (speechdelay <= 0)
if (animTarget != crouchstabanim && animTarget != swordgroundstabanim && animTarget != staffgroundsmashanim)
- if ((Animation::animations[animTarget].frames[frameTarget].label && (Animation::animations[animTarget].frames[frameTarget].label < 5 || Animation::animations[animTarget].frames[frameTarget].label == 8))/*||(animTarget==rollanim&&frameTarget==Animation::animations[rollanim].frames.size()-1)*/) {
+ if ((targetFrame().label && (targetFrame().label < 5 || targetFrame().label == 8))) {
int whichsound = -1;
- if (Animation::animations[animTarget].frames[frameTarget].label == 4 && aitype != playercontrolled) {
+ if (targetFrame().label == 4 && aitype != playercontrolled) {
if (Animation::animations[animTarget].attack != neutral) {
unsigned r = abs(Random() % 4);
if (creature == rabbittype) {
victim->skeleton.free = 1;
victim->skeleton.broken = 0;
- for (int j = 0; j < victim->skeleton.num_joints; j++) {
+ for (int j = 0; j < victim->skeleton.joints.size(); j++) {
victim->skeleton.joints[j].velchange = 0;
victim->skeleton.joints[j].locked = 0;
}
relative.y = 0;
Normalise(&relative);
relative = DoRotation(relative, 0, -90, 0);
- for (int i = 0; i < victim->skeleton.num_joints; i++) {
+ for (int i = 0; i < victim->skeleton.joints.size(); i++) {
victim->skeleton.joints[i].velocity += relative * damagemult * 40;
}
victim->jointVel(head) += relative * damagemult * 200;
relative.y -= 1;
Normalise(&relative);
relative = DoRotation(relative, 0, 90, 0);
- for (int i = 0; i < victim->skeleton.num_joints; i++) {
+ for (int i = 0; i < victim->skeleton.joints.size(); i++) {
victim->skeleton.joints[i].velocity += relative * damagemult * 20;
}
victim->jointVel(head) += relative * damagemult * 100;
relative.y = 0;
Normalise(&relative);
relative = DoRotation(relative, 0, -90, 0);
- for (int i = 0; i < victim->skeleton.num_joints; i++) {
+ for (int i = 0; i < victim->skeleton.joints.size(); i++) {
victim->skeleton.joints[i].velocity += relative * damagemult * 40;
}
victim->jointVel(head) += relative * damagemult * 200;
relative.y = 0;
Normalise(&relative);
relative = DoRotation(relative, 0, 90, 0);
- for (int i = 0; i < victim->skeleton.num_joints; i++) {
+ for (int i = 0; i < victim->skeleton.joints.size(); i++) {
victim->skeleton.joints[i].velocity += relative * damagemult * 40;
}
victim->jointVel(head) += relative * damagemult * 200;
relative = victim->coords - coords;
relative.y = 0;
Normalise(&relative);
- for (int i = 0; i < victim->skeleton.num_joints; i++) {
+ for (int i = 0; i < victim->skeleton.joints.size(); i++) {
victim->skeleton.joints[i].velocity += relative * damagemult * 30;
}
victim->jointVel(head) += relative * damagemult * 100;
victim->skeleton.broken = 0;
victim->skeleton.spinny = 1;
- for (int i = 0; i < victim->skeleton.num_joints; i++) {
+ for (int i = 0; i < victim->skeleton.joints.size(); 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 (int i = 0; i < victim->skeleton.num_joints; i++) {
+ for (int i = 0; i < victim->skeleton.joints.size(); 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;
relative = victim->coords - coords;
relative.y = 0;
Normalise(&relative);
- for (int i = 0; i < victim->skeleton.num_joints; i++) {
+ for (int i = 0; i < victim->skeleton.joints.size(); i++) {
victim->skeleton.joints[i].velocity += relative * damagemult * 90;
}
victim->Puff(abdomen);
victim->skeleton.broken = 0;
victim->skeleton.spinny = 1;
- for (int i = 0; i < victim->skeleton.num_joints; i++) {
+ for (int i = 0; i < victim->skeleton.joints.size(); 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 (int i = 0; i < victim->skeleton.num_joints; i++) {
+ for (int i = 0; i < victim->skeleton.joints.size(); i++) {
victim->skeleton.joints[i].velocity += relative * damagemult * 20;
}
if (!victim->dead)
victim->skeleton.free = 1;
victim->skeleton.broken = 0;
- for (int i = 0; i < victim->skeleton.num_joints; i++) {
+ for (int i = 0; i < victim->skeleton.joints.size(); 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 (int i = 0; i < victim->skeleton.num_joints; i++) {
+ for (int i = 0; i < victim->skeleton.joints.size(); i++) {
victim->skeleton.joints[i].velchange = 0;
victim->skeleton.joints[i].locked = 0;
//victim->skeleton.joints[i].velocity=0;
relative = victim->coords - coords;
relative.y = 0;
Normalise(&relative);
- for (int i = 0; i < victim->skeleton.num_joints; i++) {
+ for (int i = 0; i < victim->skeleton.joints.size(); i++) {
victim->skeleton.joints[i].velocity = relative * 30;
}
victim->jointVel(head) += relative * damagemult * 150;
Normalise(&relative);
relative.y = .3;
Normalise(&relative);
- for (int i = 0; i < victim->skeleton.num_joints; i++) {
+ for (int i = 0; i < victim->skeleton.joints.size(); i++) {
victim->skeleton.joints[i].velocity = relative * 5;
}
victim->jointVel(abdomen) += relative * damagemult * 400;
relative = DoRotation(relative, 0, 90, 0);
relative.y -= 1;
Normalise(&relative);
- for (int i = 0; i < victim->skeleton.num_joints; i++) {
+ for (int i = 0; i < victim->skeleton.joints.size(); i++) {
victim->skeleton.joints[i].velocity += relative * damagemult * 60;
}
victim->jointVel(head) += relative * damagemult * 230;
relative.y = 0;
Normalise(&relative);
relative = DoRotation(relative, 0, -90, 0);
- for (int i = 0; i < victim->skeleton.num_joints; i++) {
+ for (int i = 0; i < victim->skeleton.joints.size(); i++) {
victim->skeleton.joints[i].velocity += relative * damagemult * 40;
}
victim->jointVel(head) += relative * damagemult * 220;
victim->skeleton.free = 1;
victim->skeleton.broken = 0;
- for (int i = 0; i < victim->skeleton.num_joints; i++) {
+ for (int i = 0; i < victim->skeleton.joints.size(); 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 (int i = 0; i < victim->skeleton.num_joints; i++) {
+ for (int i = 0; i < victim->skeleton.joints.size(); i++) {
victim->skeleton.joints[i].velocity = relative * damagemult * 40;
}
victim->jointVel(abdomen) += relative * damagemult * 40;
}
if (victim->dead) {
- for (int i = 0; i < victim->skeleton.num_joints; i++) {
+ for (int i = 0; i < victim->skeleton.joints.size(); i++) {
victim->skeleton.joints[i].velocity = relative * damagemult * abs(Random() % 20);
}
}
DoBlood(.2, 250);
}
victim->RagDoll(0);
- for (int i = 0; i < victim->skeleton.num_joints; i++) {
+ for (int i = 0; i < victim->skeleton.joints.size(); i++) {
victim->skeleton.joints[i].velocity += relative * damagemult * 40;
}
victim->jointVel(head) += relative * damagemult * 200;
} else {
if (victim->damage >= victim->damagetolerance)
victim->RagDoll(0);
- for (int i = 0; i < victim->skeleton.num_joints; i++) {
+ for (int i = 0; i < victim->skeleton.joints.size(); i++) {
victim->skeleton.joints[i].velocity += relative * damagemult * 10;
}
victim->jointVel(abdomen) += relative * damagemult * 200;
if (Animation::animations[victim->animTarget].height == middleheight || Animation::animations[victim->animCurrent].height == middleheight || victim->damage >= victim->damagetolerance - 40) {
victim->RagDoll(0);
- for (int i = 0; i < victim->skeleton.num_joints; i++) {
+ for (int i = 0; i < victim->skeleton.joints.size(); i++) {
victim->skeleton.joints[i].velocity += relative * damagemult * 15;
}
relative = DoRotation(relative, 0, -90, 0);
relative.y += .1;
- for (int i = 0; i < victim->skeleton.num_joints; i++) {
+ for (int i = 0; i < victim->skeleton.joints.size(); 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 (int i = 0; i < victim->skeleton.num_joints; i++) {
+ for (int i = 0; i < victim->skeleton.joints.size(); i++) {
victim->skeleton.joints[i].velocity += relative * damagemult * 10;
}
relative = DoRotation(relative, 0, -90, 0);
- for (int i = 0; i < victim->skeleton.num_joints; i++) {
+ for (int i = 0; i < victim->skeleton.joints.size(); 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;
}
relative = victim->coords - oldcoords;
relative.y = 0;
Normalise(&relative);
- for (int i = 0; i < victim->skeleton.num_joints; i++) {
+ for (int i = 0; i < victim->skeleton.joints.size(); i++) {
victim->skeleton.joints[i].velocity += relative * damagemult * 40;
}
victim->jointVel(abdomen) += relative * damagemult * 200;
relative = victim->coords - oldcoords;
relative.y = 0;
Normalise(&relative);
- for (int i = 0; i < victim->skeleton.num_joints; i++) {
+ for (int i = 0; i < victim->skeleton.joints.size(); i++) {
victim->skeleton.joints[i].velocity += relative * damagemult * 30;
}
victim->jointVel(abdomen) += relative * damagemult * 200;
relative = victim->coords - oldcoords;
relative.y = 0;
Normalise(&relative);
- for (int i = 0; i < victim->skeleton.num_joints; i++) {
+ for (int i = 0; i < victim->skeleton.joints.size(); i++) {
victim->skeleton.joints[i].velocity += relative * damagemult * 30;
}
victim->jointVel(abdomen) += relative * damagemult * 200;
relative.y = 0;
Normalise(&relative);
relative.y -= .1;
- for (int i = 0; i < victim->skeleton.num_joints; i++) {
+ for (int i = 0; i < victim->skeleton.joints.size(); i++) {
victim->skeleton.joints[i].velocity += relative * damagemult * 70;
}
victim->jointVel(lefthand) *= .1;
relative.y = 0;
Normalise(&relative);
relative.y -= .1;
- for (int i = 0; i < victim->skeleton.num_joints; i++) {
+ for (int i = 0; i < victim->skeleton.joints.size(); i++) {
victim->skeleton.joints[i].velocity += relative * damagemult * 70;
}
victim->jointVel(lefthand) *= .1 - 1;
relative.y = 0;
Normalise(&relative);
relative = DoRotation(relative, 0, -90, 0);
- for (int i = 0; i < victim->skeleton.num_joints; i++) {
+ for (int i = 0; i < victim->skeleton.joints.size(); i++) {
victim->skeleton.joints[i].velocity += relative * damagemult * 40;
}
victim->jointVel(abdomen) += relative * damagemult * 200;
Normalise(&relative);
if (victim->id == 0)
relative /= 30;
- for (int i = 0; i < victim->skeleton.num_joints; i++) {
+ for (int i = 0; i < victim->skeleton.joints.size(); i++) {
victim->skeleton.joints[i].velocity += relative * damagemult * 40;
}
victim->damage = victim->damagetolerance;
if (hasvictim && (animTarget == knifefollowanim || animTarget == knifesneakattackanim) && Animation::animations[animTarget].frames[frameCurrent].label == 6) {
escapednum = 0;
victim->velocity = 0;
- for (int i = 0; i < victim->skeleton.num_joints; i++) {
+ for (int i = 0; i < victim->skeleton.joints.size(); i++) {
victim->skeleton.joints[i].velocity = 0;
}
if (animTarget == knifefollowanim) {
victim->RagDoll(0);
- for (int i = 0; i < victim->skeleton.num_joints; i++) {
+ for (int i = 0; i < victim->skeleton.joints.size(); i++) {
victim->skeleton.joints[i].velocity = 0;
}
}
if (hasvictim && animTarget == swordsneakattackanim && Animation::animations[animTarget].frames[frameCurrent].label == 6) {
escapednum = 0;
victim->velocity = 0;
- for (int i = 0; i < victim->skeleton.num_joints; i++) {
+ for (int i = 0; i < victim->skeleton.joints.size(); i++) {
victim->skeleton.joints[i].velocity = 0;
}
if (weaponactive != -1) {
relative = DoRotation(relative, 0, 90, 0);
relative.y = .5;
Normalise(&relative);
- for (int i = 0; i < victim->skeleton.num_joints; i++) {
+ for (int i = 0; i < victim->skeleton.joints.size(); i++) {
victim->skeleton.joints[i].velocity += relative * damagemult * 20;
}
victim->jointVel(head) += relative * damagemult * 200;
relative = DoRotation(relative, 0, 90, 0);
relative.y = .5;
Normalise(&relative);
- for (int i = 0; i < victim->skeleton.num_joints; i++) {
+ for (int i = 0; i < victim->skeleton.joints.size(); i++) {
victim->skeleton.joints[i].velocity += relative * damagemult * 20;
}
victim->jointVel(head) += relative * damagemult * 200;
oldtarget = target;
if (!transspeed && Animation::animations[animTarget].attack != 2 && Animation::animations[animTarget].attack != 3) {
if (!isRun() || !wasRun()) {
- if (Animation::animations[animTarget].frames[frameTarget].speed > Animation::animations[animCurrent].frames[frameCurrent].speed)
- target += multiplier * Animation::animations[animTarget].frames[frameTarget].speed * speed * 2;
- if (Animation::animations[animTarget].frames[frameTarget].speed <= Animation::animations[animCurrent].frames[frameCurrent].speed)
- target += multiplier * Animation::animations[animCurrent].frames[frameCurrent].speed * speed * 2;
+ if (targetFrame().speed > currentFrame().speed)
+ target += multiplier * targetFrame().speed * speed * 2;
+ if (targetFrame().speed <= currentFrame().speed)
+ target += multiplier * currentFrame().speed * speed * 2;
}
if (isRun() && wasRun()) {
float tempspeed;
target += multiplier * transspeed * speed * 2;
else {
if (!isRun() || !wasRun()) {
- if (Animation::animations[animTarget].frames[frameTarget].speed > Animation::animations[animCurrent].frames[frameCurrent].speed)
- target += multiplier * Animation::animations[animTarget].frames[frameTarget].speed * 2;
- if (Animation::animations[animTarget].frames[frameTarget].speed <= Animation::animations[animCurrent].frames[frameCurrent].speed)
- target += multiplier * Animation::animations[animCurrent].frames[frameCurrent].speed * 2;
+ if (targetFrame().speed > currentFrame().speed)
+ target += multiplier * targetFrame().speed * 2;
+ if (targetFrame().speed <= currentFrame().speed)
+ target += multiplier * currentFrame().speed * 2;
}
}
oldrot = 0;
targetrot = 0;
}
+ if (frameCurrent >= Animation::animations[animCurrent].frames.size()) {
+ frameCurrent = Animation::animations[animCurrent].frames.size() - 1;
+ }
if (animCurrent != oldanimCurrent || animTarget != oldanimTarget || ((frameCurrent != oldframeCurrent || frameTarget != oldframeTarget) && !calcrot)) {
//Old rotates
- for (int i = 0; i < skeleton.num_joints; i++) {
- skeleton.joints[i].position = Animation::animations[animCurrent].frames[frameCurrent].joints[i].position;
+ for (int i = 0; i < skeleton.joints.size(); i++) {
+ skeleton.joints[i].position = currentFrame().joints[i].position;
}
skeleton.FindForwards();
- for (int i = 0; i < skeleton.num_muscles; i++) {
+ for (int i = 0; i < skeleton.muscles.size(); i++) {
if (skeleton.muscles[i].visible) {
skeleton.FindRotationMuscle(i, animTarget);
}
}
- for (int i = 0; i < skeleton.num_muscles; i++) {
+ for (int i = 0; i < skeleton.muscles.size(); 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 (int i = 0; i < skeleton.num_joints; i++) {
- skeleton.joints[i].position = Animation::animations[animTarget].frames[frameTarget].joints[i].position;
+ for (int i = 0; i < skeleton.joints.size(); i++) {
+ skeleton.joints[i].position = targetFrame().joints[i].position;
}
skeleton.FindForwards();
- for (int i = 0; i < skeleton.num_muscles; i++) {
+ for (int i = 0; i < skeleton.muscles.size(); i++) {
if (skeleton.muscles[i].visible) {
skeleton.FindRotationMuscle(i, animTarget);
}
}
- for (int i = 0; i < skeleton.num_muscles; i++) {
+ for (int i = 0; i < skeleton.muscles.size(); 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;
}
}
}
- if (frameCurrent >= Animation::animations[animCurrent].frames.size()) {
- frameCurrent = Animation::animations[animCurrent].frames.size() - 1;
- }
oldanimCurrent = animCurrent;
oldanimTarget = animTarget;
oldframeTarget = frameTarget;
oldframeCurrent = frameCurrent;
- for (int i = 0; i < skeleton.num_joints; i++) {
- skeleton.joints[i].velocity = (Animation::animations[animCurrent].frames[frameCurrent].joints[i].position * (1 - target) + Animation::animations[animTarget].frames[frameTarget].joints[i].position * (target) - skeleton.joints[i].position) / multiplier;
- skeleton.joints[i].position = Animation::animations[animCurrent].frames[frameCurrent].joints[i].position * (1 - target) + Animation::animations[animTarget].frames[frameTarget].joints[i].position * (target);
+ for (int i = 0; i < skeleton.joints.size(); i++) {
+ skeleton.joints[i].velocity = (currentFrame().joints[i].position * (1 - target) + targetFrame().joints[i].position * (target) - skeleton.joints[i].position) / multiplier;
+ skeleton.joints[i].position = currentFrame().joints[i].position * (1 - target) + targetFrame().joints[i].position * (target);
}
offset = currentoffset * (1 - target) + targetoffset * target;
- for (int i = 0; i < skeleton.num_muscles; i++) {
+ for (int i = 0; i < skeleton.muscles.size(); 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);
}
while (flamedelay < 0 && onfire) {
flamedelay += .006;
- howmany = abs(Random() % (skeleton.num_joints));
+ howmany = abs(Random() % (skeleton.joints.size()));
if (skeleton.free) {
flatvelocity = skeleton.joints[howmany].velocity * scale / 2;
flatfacing = skeleton.joints[howmany].position * scale + coords;
while (flamedelay < 0 && !onfire && tutoriallevel == 1 && id != 0) {
flamedelay += .05;
- howmany = abs(Random() % (skeleton.num_joints));
+ howmany = abs(Random() % (skeleton.joints.size()));
if (skeleton.free) {
flatvelocity = skeleton.joints[howmany].velocity * scale / 2;
flatfacing = skeleton.joints[howmany].position * scale + coords;
}
dead = 2;
if (animTarget == knifefollowedanim && !skeleton.free) {
- for (int i = 0; i < skeleton.num_joints; i++) {
+ for (int i = 0; i < skeleton.joints.size(); i++) {
skeleton.joints[i].velocity = 0;
skeleton.joints[i].velocity.y = -2;
}
dead = 0;
skeleton.free = 1;
damage -= 20;
- for (int i = 0; i < skeleton.num_joints; i++) {
+ for (int i = 0; i < skeleton.joints.size(); i++) {
skeleton.joints[i].velocity = 0;
}
}
average = 0;
howmany = 0;
- for (j = 0; j < skeleton.num_joints; j++) {
+ for (j = 0; j < skeleton.joints.size(); j++) {
average += skeleton.joints[j].position;
howmany++;
}
average /= howmany;
coords += average * scale;
- for (j = 0; j < skeleton.num_joints; j++) {
+ for (j = 0; j < skeleton.joints.size(); j++) {
skeleton.joints[j].position -= average;
}
average /= multiplier;
velocity = 0;
- for (int i = 0; i < skeleton.num_joints; i++) {
+ for (int i = 0; i < skeleton.joints.size(); i++) {
velocity += skeleton.joints[i].velocity * scale;
}
- velocity /= skeleton.num_joints;
+ velocity /= skeleton.joints.size();
if (!isnormal(velocity.x) && velocity.x) {
velocity = 0;
frameCurrent = 0;
target = 0;
- for (int i = 0; i < skeleton.num_joints; i++) {
+ for (int i = 0; i < skeleton.joints.size(); i++) {
tempanimation.frames[0].joints[i].position = skeleton.joints[i].position;
tempanimation.frames[0].joints[i].position = DoRotation(tempanimation.frames[0].joints[i].position, 0, -yaw, 0);
}
if (middle.y > 0 && animTarget != rollanim)
targetoffset.y = middle.y + 1;
- for (int i = 0; i < skeleton.num_joints; i++) {
+ for (int i = 0; i < skeleton.joints.size(); i++) {
tempanimation.frames[0].joints[i].position = skeleton.joints[i].position;
tempanimation.frames[0].joints[i].position = DoRotation(tempanimation.frames[0].joints[i].position, 0, -yaw, 0);
}
velocity = flatfacing * velspeed;
}
- if (animTarget == rollanim && Animation::animations[animTarget].frames[frameTarget].label != 6) {
+ if (animTarget == rollanim && targetFrame().label != 6) {
velocity += facing * multiplier * speed * 700 * scale;
velspeed = findLength(&velocity);
if (velspeed > speed * 45 * scale) {
coords += velocity * multiplier;
if (coords.y < terrain.getHeight(coords.x, coords.z) && (animTarget == jumpdownanim || animTarget == jumpupanim || isFlip())) {
- if (isFlip() && Animation::animations[animTarget].frames[frameTarget].label == 7)
+ if (isFlip() && targetFrame().label == 7)
RagDoll(0);
if (animTarget == jumpupanim) {
}
- if (isIdle() || animTarget == drawrightanim || animTarget == drawleftanim || animTarget == crouchdrawrightanim || animTarget == crouchstabanim || animTarget == swordgroundstabanim || isStop() || animTarget == removeknifeanim || animTarget == crouchremoveknifeanim || isLanding() || isCrouch() || Animation::animations[animTarget].attack || (animTarget == rollanim && Animation::animations[animTarget].frames[frameTarget].label == 6)) {
+ if (isIdle() || animTarget == drawrightanim || animTarget == drawleftanim || animTarget == crouchdrawrightanim || animTarget == crouchstabanim || animTarget == swordgroundstabanim || isStop() || animTarget == removeknifeanim || animTarget == crouchremoveknifeanim || isLanding() || isCrouch() || Animation::animations[animTarget].attack || (animTarget == rollanim && targetFrame().label == 6)) {
velspeed = findLength(&velocity);
velocity.y = 0;
if (velspeed < multiplier * 300 * scale) {
}
}
- if (!skeleton.free && (!Animation::animations[animTarget].attack && animTarget != getupfrombackanim && ((animTarget != rollanim && !isFlip()) || Animation::animations[animTarget].frames[frameTarget].label == 6) && animTarget != getupfromfrontanim && animTarget != wolfrunninganim && animTarget != rabbitrunninganim && animTarget != backhandspringanim && animTarget != walljumpfrontanim && animTarget != hurtidleanim && !isLandhard() && !isSleeping()))
+ if (!skeleton.free && (!Animation::animations[animTarget].attack && animTarget != getupfrombackanim && ((animTarget != rollanim && !isFlip()) || targetFrame().label == 6) && animTarget != getupfromfrontanim && animTarget != wolfrunninganim && animTarget != rabbitrunninganim && animTarget != backhandspringanim && animTarget != walljumpfrontanim && animTarget != hurtidleanim && !isLandhard() && !isSleeping()))
DoHead();
else {
targetheadyaw = -targetyaw;
skeleton.drawmodelclothes.vertex[i] = 0;
skeleton.drawmodelclothes.vertex[i].y = 999;
}
- for (int i = 0; i < skeleton.num_muscles; i++) {
+ for (int i = 0; i < skeleton.muscles.size(); 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)) {
+ if ((skeleton.muscles[i].vertices.size() > 0 && playerdetail) || (skeleton.muscles[i].verticeslow.size() > 0 && !playerdetail)) {
morphness = 0;
start = 0;
endthing = 0;
glRotatef(-skeleton.muscles[i].lastrotate3, 0, 1, 0);
if (playerdetail || skeleton.free == 3) {
- for (j = 0; j < skeleton.muscles[i].numvertices; j++) {
+ for (j = 0; j < skeleton.muscles[i].vertices.size(); j++) {
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);
}
}
if (!playerdetail || skeleton.free == 3) {
- for (j = 0; j < skeleton.muscles[i].numverticeslow; j++) {
+ for (j = 0; j < skeleton.muscles[i].verticeslow.size(); j++) {
XYZ &v0 = skeleton.modellow.vertex[skeleton.muscles[i].verticeslow[j]];
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
}
glPopMatrix();
}
- if (skeleton.clothes && skeleton.muscles[i].numverticesclothes > 0) {
+ if (skeleton.clothes && skeleton.muscles[i].verticesclothes.size() > 0) {
mid = (skeleton.muscles[i].parent1->position + skeleton.muscles[i].parent2->position) / 2;
glMatrixMode(GL_MODELVIEW);
skeleton.muscles[i].lastrotate3 = skeleton.muscles[i].rotate3;
glRotatef(-skeleton.muscles[i].lastrotate3, 0, 1, 0);
- for (j = 0; j < skeleton.muscles[i].numverticesclothes; j++) {
+ for (j = 0; j < skeleton.muscles[i].verticesclothes.size(); j++) {
XYZ &v0 = skeleton.modelclothes.vertex[skeleton.muscles[i].verticesclothes[j]];
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
i = weaponids[k];
if (weaponactive == k) {
if (weapons[i].getType() != staff) {
- for (j = 0; j < skeleton.num_muscles; j++) {
- if ((skeleton.muscles[j].parent1->label == righthand || skeleton.muscles[j].parent2->label == righthand) && skeleton.muscles[j].numvertices > 0) {
+ for (j = 0; j < skeleton.muscles.size(); j++) {
+ if ((skeleton.muscles[j].parent1->label == righthand || skeleton.muscles[j].parent2->label == righthand) && skeleton.muscles[j].vertices.size() > 0) {
weaponattachmuscle = j;
}
}
- for (j = 0; j < skeleton.num_muscles; j++) {
- if ((skeleton.muscles[j].parent1->label == rightwrist || skeleton.muscles[j].parent2->label == rightwrist) && (skeleton.muscles[j].parent1->label != righthand && skeleton.muscles[j].parent2->label != righthand) && skeleton.muscles[j].numvertices > 0) {
+ for (j = 0; j < skeleton.muscles.size(); j++) {
+ if ((skeleton.muscles[j].parent1->label == rightwrist || skeleton.muscles[j].parent2->label == rightwrist) && (skeleton.muscles[j].parent1->label != righthand && skeleton.muscles[j].parent2->label != righthand) && skeleton.muscles[j].vertices.size() > 0) {
weaponrotatemuscle = j;
}
}
weaponpoint = (jointPos(rightwrist) * .7 + jointPos(righthand) * .3);
}
if (weapons[i].getType() == staff) {
- for (j = 0; j < skeleton.num_muscles; j++) {
- if ((skeleton.muscles[j].parent1->label == righthand || skeleton.muscles[j].parent2->label == righthand) && skeleton.muscles[j].numvertices > 0) {
+ for (j = 0; j < skeleton.muscles.size(); j++) {
+ if ((skeleton.muscles[j].parent1->label == righthand || skeleton.muscles[j].parent2->label == righthand) && skeleton.muscles[j].vertices.size() > 0) {
weaponattachmuscle = j;
}
}
- for (j = 0; j < skeleton.num_muscles; j++) {
- if ((skeleton.muscles[j].parent1->label == rightelbow || skeleton.muscles[j].parent2->label == rightelbow) && (skeleton.muscles[j].parent1->label != rightshoulder && skeleton.muscles[j].parent2->label != rightshoulder) && skeleton.muscles[j].numvertices > 0) {
+ for (j = 0; j < skeleton.muscles.size(); j++) {
+ if ((skeleton.muscles[j].parent1->label == rightelbow || skeleton.muscles[j].parent2->label == rightelbow) && (skeleton.muscles[j].parent1->label != rightshoulder && skeleton.muscles[j].parent2->label != rightshoulder) && skeleton.muscles[j].vertices.size() > 0) {
weaponrotatemuscle = j;
}
}
weaponpoint = jointPos(abdomen) + (jointPos(lefthip) - jointPos(righthip)) * .09 + (jointPos(leftshoulder) - jointPos(rightshoulder)) * .33;
if (weapons[i].getType() == staff)
weaponpoint = jointPos(abdomen) + (jointPos(lefthip) - jointPos(righthip)) * .09 + (jointPos(leftshoulder) - jointPos(rightshoulder)) * .33;
- for (j = 0; j < skeleton.num_muscles; j++) {
- if ((skeleton.muscles[j].parent1->label == abdomen || skeleton.muscles[j].parent2->label == abdomen) && (skeleton.muscles[j].parent1->label == neck || skeleton.muscles[j].parent2->label == neck) && skeleton.muscles[j].numvertices > 0) {
+ for (j = 0; j < skeleton.muscles.size(); j++) {
+ if ((skeleton.muscles[j].parent1->label == abdomen || skeleton.muscles[j].parent2->label == abdomen) && (skeleton.muscles[j].parent1->label == neck || skeleton.muscles[j].parent2->label == neck) && skeleton.muscles[j].vertices.size() > 0) {
weaponrotatemuscle = j;
}
}
weaponpoint = jointPos(abdomen) * .5 + jointPos(neck) * .5 - skeleton.forward * .8;
else
weaponpoint = jointPos(abdomen) * .5 + jointPos(neck) * .5 + skeleton.forward * .8;
- for (j = 0; j < skeleton.num_muscles; j++) {
- if ((skeleton.muscles[j].parent1->label == abdomen || skeleton.muscles[j].parent2->label == abdomen) && (skeleton.muscles[j].parent1->label == neck || skeleton.muscles[j].parent2->label == neck) && skeleton.muscles[j].numvertices > 0) {
+ for (j = 0; j < skeleton.muscles.size(); j++) {
+ if ((skeleton.muscles[j].parent1->label == abdomen || skeleton.muscles[j].parent2->label == abdomen) && (skeleton.muscles[j].parent1->label == neck || skeleton.muscles[j].parent2->label == neck) && skeleton.muscles[j].vertices.size() > 0) {
weaponrotatemuscle = j;
}
}
float distance;
temppoint1 = jointPos(righthand);
- temppoint2 = Animation::animations[animCurrent].frames[frameCurrent].weapontarget * (1 - target) + Animation::animations[animTarget].frames[frameTarget].weapontarget * (target);
+ temppoint2 = currentFrame().weapontarget * (1 - target) + targetFrame().weapontarget * (target);
distance = findDistance(&temppoint1, &temppoint2);
weapons[i].rotation2 = asin((temppoint1.y - temppoint2.y) / distance);
weapons[i].rotation2 *= 360 / 6.28;
float distance;
temppoint1 = jointPos(righthand);
- temppoint2 = Animation::animations[animCurrent].frames[frameCurrent].weapontarget * (1 - target) + Animation::animations[animTarget].frames[frameTarget].weapontarget * (target);
+ temppoint2 = currentFrame().weapontarget * (1 - target) + targetFrame().weapontarget * (target);
distance = findDistance(&temppoint1, &temppoint2);
weapons[i].rotation2 = asin((temppoint1.y - temppoint2.y) / distance);
weapons[i].rotation2 *= 360 / 6.28;
XYZ temppoint1, temppoint2;
float distance;
- temppoint1 = Animation::animations[animCurrent].frames[frameCurrent].joints[skeleton.jointlabels[righthand]].position * (1 - target) + Animation::animations[animTarget].frames[frameTarget].joints[skeleton.jointlabels[righthand]].position * (target); //jointPos(righthand);
- temppoint2 = Animation::animations[animCurrent].frames[frameCurrent].weapontarget * (1 - target) + Animation::animations[animTarget].frames[frameTarget].weapontarget * (target);
+ temppoint1 = currentFrame().joints[skeleton.jointlabels[righthand]].position * (1 - target) + targetFrame().joints[skeleton.jointlabels[righthand]].position * (target); //jointPos(righthand);
+ temppoint2 = currentFrame().weapontarget * (1 - target) + targetFrame().weapontarget * (target);
distance = findDistance(&temppoint1, &temppoint2);
weapons[i].rotation2 = asin((temppoint1.y - temppoint2.y) / distance);
weapons[i].rotation2 *= 360 / 6.28;
XYZ temppoint1, temppoint2;
float distance;
- temppoint1 = Animation::animations[animCurrent].frames[frameCurrent].joints[skeleton.jointlabels[righthand]].position * (1 - target) + Animation::animations[animTarget].frames[frameTarget].joints[skeleton.jointlabels[righthand]].position * (target); //jointPos(righthand);
- temppoint2 = Animation::animations[animCurrent].frames[frameCurrent].weapontarget * (1 - target) + Animation::animations[animTarget].frames[frameTarget].weapontarget * (target);
+ temppoint1 = currentFrame().joints[skeleton.jointlabels[righthand]].position * (1 - target) + targetFrame().joints[skeleton.jointlabels[righthand]].position * (target); //jointPos(righthand);
+ temppoint2 = currentFrame().weapontarget * (1 - target) + targetFrame().weapontarget * (target);
distance = findDistance(&temppoint1, &temppoint2);
weapons[i].rotation2 = asin((temppoint1.y - temppoint2.y) / distance);
weapons[i].rotation2 *= 360 / 6.28;
if (LineFacetd(&start, &end, &model->vertex[model->Triangles[j].vertex[0]], &model->vertex[model->Triangles[j].vertex[1]], &model->vertex[model->Triangles[j].vertex[2]], &model->facenormals[j], &point)) {
p1->y = point.y + radius;
if ((animTarget == jumpdownanim || isFlip())) {
- if (isFlip() && (frameTarget < 5 || Animation::animations[animTarget].frames[frameTarget].label == 7 || Animation::animations[animTarget].frames[frameTarget].label == 4))
+ if (isFlip() && (frameTarget < 5 || targetFrame().label == 7 || targetFrame().label == 4))
RagDoll(0);
if (animTarget == jumpupanim) {