X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;f=Source%2FPerson.cpp;h=fb3c4450112b84200270596827ad267ca97d4df8;hb=bdabd9d4a53be2fa9d90f900f7e5949d2f0ef75c;hp=de138b054638f36617b5ad980b7e8ba454c56a71;hpb=9bd0be2befdf81aa4b5d377eaf29656935044faf;p=lugaru.git diff --git a/Source/Person.cpp b/Source/Person.cpp index de138b0..fb3c445 100644 --- a/Source/Person.cpp +++ b/Source/Person.cpp @@ -483,7 +483,7 @@ void Person::CheckKick() 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); @@ -523,7 +523,7 @@ void Person::CheckKick() * * 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() @@ -531,7 +531,7 @@ 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; @@ -1468,14 +1468,15 @@ void Person::Reverse() 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++; @@ -1531,7 +1532,7 @@ void Person::DoDamage(float howmuch) 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; @@ -1674,7 +1675,7 @@ void Person::DoHead() 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); } @@ -1720,7 +1721,7 @@ void Person::RagDoll(bool checkcollision) 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); @@ -1731,7 +1732,7 @@ void Person::RagDoll(bool checkcollision) 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; } @@ -1743,31 +1744,31 @@ void Person::RagDoll(bool checkcollision) 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) { @@ -1777,13 +1778,13 @@ void Person::RagDoll(bool 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; } @@ -1805,10 +1806,10 @@ void Person::RagDoll(bool checkcollision) 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) { @@ -1839,7 +1840,7 @@ void Person::RagDoll(bool checkcollision) /* 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; @@ -2015,7 +2016,7 @@ void Person::DoAnimations() } } - 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; @@ -2033,38 +2034,38 @@ void Person::DoAnimations() } //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) @@ -2076,9 +2077,9 @@ void Person::DoAnimations() } 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.); @@ -2092,7 +2093,7 @@ void Person::DoAnimations() } } - if (Animation::animations[animTarget].frames[frameTarget].label == 3) { + if (targetFrame().label == 3) { whichsound--; emit_sound_at(whichsound, coords, 128.); } @@ -2102,9 +2103,9 @@ void Person::DoAnimations() 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) { @@ -2193,7 +2194,7 @@ void Person::DoAnimations() 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; } @@ -2355,7 +2356,7 @@ void Person::DoAnimations() 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; @@ -2390,7 +2391,7 @@ void Person::DoAnimations() 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; @@ -2420,7 +2421,7 @@ void Person::DoAnimations() 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; @@ -2455,7 +2456,7 @@ void Person::DoAnimations() 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; @@ -2484,7 +2485,7 @@ void Person::DoAnimations() 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; @@ -2505,7 +2506,7 @@ void Person::DoAnimations() 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; @@ -2516,7 +2517,7 @@ void Person::DoAnimations() 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; @@ -2539,7 +2540,7 @@ void Person::DoAnimations() 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); @@ -2566,7 +2567,7 @@ void Person::DoAnimations() 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; @@ -2576,7 +2577,7 @@ void Person::DoAnimations() 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) @@ -2662,7 +2663,7 @@ void Person::DoAnimations() 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; @@ -2752,7 +2753,7 @@ void Person::DoAnimations() 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; @@ -2799,7 +2800,7 @@ void Person::DoAnimations() 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; @@ -2846,7 +2847,7 @@ void Person::DoAnimations() 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; @@ -3073,7 +3074,7 @@ void Person::DoAnimations() 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; @@ -3105,7 +3106,7 @@ void Person::DoAnimations() 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; @@ -3136,7 +3137,7 @@ void Person::DoAnimations() 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; @@ -3148,13 +3149,13 @@ void Person::DoAnimations() 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); } } @@ -3187,7 +3188,7 @@ void Person::DoAnimations() 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; @@ -3206,7 +3207,7 @@ void Person::DoAnimations() } 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; @@ -3247,12 +3248,12 @@ void Person::DoAnimations() 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; } @@ -3262,11 +3263,11 @@ void Person::DoAnimations() } 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; } @@ -3309,7 +3310,7 @@ void Person::DoAnimations() 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; @@ -3346,7 +3347,7 @@ void Person::DoAnimations() 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; @@ -3375,7 +3376,7 @@ void Person::DoAnimations() 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; @@ -3391,7 +3392,7 @@ void Person::DoAnimations() 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; @@ -3441,7 +3442,7 @@ void Person::DoAnimations() 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; @@ -3473,7 +3474,7 @@ void Person::DoAnimations() 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; @@ -3493,7 +3494,7 @@ void Person::DoAnimations() 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; @@ -3568,12 +3569,12 @@ void Person::DoAnimations() 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; } } @@ -3626,7 +3627,7 @@ void Person::DoAnimations() 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) { @@ -3694,7 +3695,7 @@ void Person::DoAnimations() 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; @@ -3714,7 +3715,7 @@ void Person::DoAnimations() 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; @@ -4142,10 +4143,10 @@ void Person::DoAnimations() 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; @@ -4159,10 +4160,10 @@ void Person::DoAnimations() 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; } } @@ -4181,20 +4182,23 @@ void Person::DoAnimations() 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; @@ -4206,18 +4210,18 @@ void Person::DoAnimations() } //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; @@ -4234,21 +4238,18 @@ void Person::DoAnimations() } } } - 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); @@ -4380,7 +4381,7 @@ void Person::DoStuff() } 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; @@ -4393,7 +4394,7 @@ void Person::DoStuff() 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; @@ -4485,7 +4486,7 @@ void Person::DoStuff() } 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; } @@ -4923,7 +4924,7 @@ void Person::DoStuff() 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; } } @@ -4997,22 +4998,22 @@ void Person::DoStuff() 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; @@ -5123,7 +5124,7 @@ void Person::DoStuff() 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); } @@ -5214,7 +5215,7 @@ void Person::DoStuff() 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); } @@ -5711,7 +5712,7 @@ void Person::DoStuff() 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) { @@ -5833,7 +5834,7 @@ void Person::DoStuff() 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) { @@ -5868,7 +5869,7 @@ void Person::DoStuff() } - 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) { @@ -6081,7 +6082,7 @@ int Person::DrawSkeleton() } } - 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; @@ -6101,12 +6102,12 @@ int Person::DrawSkeleton() 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; @@ -6160,7 +6161,7 @@ int Person::DrawSkeleton() 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); @@ -6189,7 +6190,7 @@ int Person::DrawSkeleton() } } 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(); @@ -6219,7 +6220,7 @@ int Person::DrawSkeleton() } 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); @@ -6239,7 +6240,7 @@ int Person::DrawSkeleton() 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(); @@ -6446,13 +6447,13 @@ int Person::DrawSkeleton() 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; } } @@ -6461,13 +6462,13 @@ int Person::DrawSkeleton() 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; } } @@ -6490,8 +6491,8 @@ int Person::DrawSkeleton() 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; } } @@ -6501,8 +6502,8 @@ int Person::DrawSkeleton() 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; } } @@ -6536,7 +6537,7 @@ int Person::DrawSkeleton() 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; @@ -6555,7 +6556,7 @@ int Person::DrawSkeleton() 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; @@ -6598,8 +6599,8 @@ int Person::DrawSkeleton() 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; @@ -6621,8 +6622,8 @@ int Person::DrawSkeleton() 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; @@ -6728,7 +6729,7 @@ int Person::SphereCheck(XYZ *p1, float radius, XYZ *p, XYZ *move, float *rotate, 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) {