X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;ds=sidebyside;f=Source%2FPerson.cpp;h=8bcf81e43f458aa76a694a8bab93c18e1efa2fc2;hb=94eac5da9db16b969a48f562554cde11fb5745f2;hp=3327f5abc3c139901d5b0f1cd9093c4981b8b67e;hpb=cd043e3f9e26c2b3406b40a354c2840941e9db7f;p=lugaru.git diff --git a/Source/Person.cpp b/Source/Person.cpp index 3327f5a..8bcf81e 100644 --- a/Source/Person.cpp +++ b/Source/Person.cpp @@ -1,5 +1,6 @@ /* Copyright (C) 2003, 2010 - Wolfire Games +Copyright (C) 2010-2016 - Lugaru contributors (see AUTHORS file) This file is part of Lugaru. @@ -42,7 +43,6 @@ extern GLubyte bloodText[512 * 512 * 3]; extern GLubyte wolfbloodText[512 * 512 * 3]; extern int bloodtoggle; extern Objects objects; -extern bool osx; extern bool autoslomo; extern float camerashake; extern float woozy; @@ -160,14 +160,13 @@ void Person::CatchFire() int howmany; for (int i = 0; i < 10; i++) { howmany = abs(Random() % (skeleton.num_joints)); - if (!skeleton.free) - flatvelocity = velocity; - if (skeleton.free) + if (skeleton.free) { flatvelocity = skeleton.joints[howmany].velocity; - if (!skeleton.free) - flatfacing = DoRotation(DoRotation(DoRotation(skeleton.joints[howmany].position, 0, 0, tilt), tilt2, 0, 0), 0, yaw, 0) * scale + coords; - if (skeleton.free) flatfacing = skeleton.joints[howmany].position * scale + coords; + } else { + flatvelocity = velocity; + flatfacing = DoRotation(DoRotation(DoRotation(skeleton.joints[howmany].position, 0, 0, tilt), tilt2, 0, 0), 0, yaw, 0) * scale + coords; + } Sprite::MakeSprite(flamesprite, flatfacing, flatvelocity, 1, 1, 1, 2, 1); } @@ -310,29 +309,21 @@ void Person::DoBlood(float howmuch, int which) // FIXME: should abstract out inputs static int bleedxint, bleedyint; static XYZ bloodvel; - //if(howmuch&&id==0)blooddimamount=1; if (bloodtoggle && tutoriallevel != 1) { if (bleeding <= 0 && spurt) { spurt = 0; for (int i = 0; i < 3; i++) { // emit blood particles bloodvel = 0; - if (!skeleton.free) { - bloodvel.z = 10; - bloodvel = DoRotation(bloodvel, ((float)(Random() % 100)) / 4, yaw + ((float)(Random() % 100)) / 4, 0) * scale; - } if (skeleton.free) { bloodvel -= DoRotation(skeleton.forward * 10 * scale, ((float)(Random() % 100)) / 4, ((float)(Random() % 100)) / 4, 0); - } - if (skeleton.free) bloodvel += DoRotation(jointVel(head), ((float)(Random() % 100)) / 4, yaw + ((float)(Random() % 100)) / 4, 0) * scale; - if (!skeleton.free) - bloodvel += DoRotation(velocity, ((float)(Random() % 100)) / 4, ((float)(Random() % 100)) / 4, 0) * scale; - if (skeleton.free) { Sprite::MakeSprite(bloodsprite, jointPos(head) * scale + coords, bloodvel, 1, 1, 1, .05, 1); Sprite::MakeSprite(bloodflamesprite, jointPos(head) * scale + coords, bloodvel, 1, 1, 1, .3, 1); - } - if (!skeleton.free) { + } else { + bloodvel.z = 10; + bloodvel = DoRotation(bloodvel, ((float)(Random() % 100)) / 4, yaw + ((float)(Random() % 100)) / 4, 0) * scale; + bloodvel += DoRotation(velocity, ((float)(Random() % 100)) / 4, ((float)(Random() % 100)) / 4, 0) * scale; Sprite::MakeSprite(bloodsprite, DoRotation((jointPos(head) + jointPos(neck)) / 2, 0, yaw, 0)*scale + coords, bloodvel, 1, 1, 1, .05, 1); Sprite::MakeSprite(bloodflamesprite, DoRotation((jointPos(head) + jointPos(neck)) / 2, 0, yaw, 0)*scale + coords, bloodvel, 1, 1, 1, .3, 1); } @@ -425,7 +416,6 @@ void Person::DoBloodBig(float howmuch, int which) envsoundvol[numenvsounds] = 16; envsoundlife[numenvsounds] = .4; numenvsounds++; - //if(i==2)whichsound=rabbitpain2sound; } if (whichsound != -1) @@ -448,22 +438,15 @@ void Person::DoBloodBig(float howmuch, int which) // emit blood particles // FIXME: copypaste from above bloodvel = 0; - if (!skeleton.free) { - bloodvel.z = 10; - bloodvel = DoRotation(bloodvel, ((float)(Random() % 100)) / 4, yaw + ((float)(Random() % 100)) / 4, 0) * scale; - } if (skeleton.free) { bloodvel -= DoRotation(skeleton.forward * 10 * scale, ((float)(Random() % 100)) / 4, ((float)(Random() % 100)) / 4, 0); - } - if (skeleton.free) bloodvel += DoRotation(jointVel(head), ((float)(Random() % 100)) / 4, yaw + ((float)(Random() % 100)) / 4, 0) * scale; - if (!skeleton.free) - bloodvel += DoRotation(velocity, ((float)(Random() % 100)) / 4, ((float)(Random() % 100)) / 4, 0) * scale; - if (skeleton.free) { Sprite::MakeSprite(bloodsprite, jointPos(head) * scale + coords, bloodvel, 1, 1, 1, .05, 1); Sprite::MakeSprite(bloodflamesprite, jointPos(head) * scale + coords, bloodvel, 1, 1, 1, .3, 1); - } - if (!skeleton.free) { + } else { + bloodvel.z = 10; + bloodvel = DoRotation(bloodvel, ((float)(Random() % 100)) / 4, yaw + ((float)(Random() % 100)) / 4, 0) * scale; + bloodvel += DoRotation(velocity, ((float)(Random() % 100)) / 4, ((float)(Random() % 100)) / 4, 0) * scale; Sprite::MakeSprite(bloodsprite, DoRotation((jointPos(head) + jointPos(neck)) / 2, 0, yaw, 0)*scale + coords, bloodvel, 1, 1, 1, .05, 1); Sprite::MakeSprite(bloodflamesprite, DoRotation((jointPos(head) + jointPos(neck)) / 2, 0, yaw, 0)*scale + coords, bloodvel, 1, 1, 1, .3, 1); } @@ -696,22 +679,15 @@ bool Person::DoBloodBigWhere(float howmuch, int which, XYZ where) // emit blood particles // FIXME: more copypaste code bloodvel = 0; - if (!skeleton.free) { - bloodvel.z = 10; - bloodvel = DoRotation(bloodvel, ((float)(Random() % 100)) / 4, yaw + ((float)(Random() % 100)) / 4, 0) * scale; - } if (skeleton.free) { bloodvel -= DoRotation(skeleton.forward * 10 * scale, ((float)(Random() % 100)) / 4, ((float)(Random() % 100)) / 4, 0); - } - if (skeleton.free) bloodvel += DoRotation(jointVel(head), ((float)(Random() % 100)) / 4, yaw + ((float)(Random() % 100)) / 4, 0) * scale; - if (!skeleton.free) - bloodvel += DoRotation(velocity, ((float)(Random() % 100)) / 4, ((float)(Random() % 100)) / 4, 0) * scale; - if (skeleton.free) { Sprite::MakeSprite(bloodsprite, jointPos(head) * scale + coords, bloodvel, 1, 1, 1, .05, 1); Sprite::MakeSprite(bloodflamesprite, jointPos(head) * scale + coords, bloodvel, 1, 1, 1, .3, 1); - } - if (!skeleton.free) { + } else { + bloodvel.z = 10; + bloodvel = DoRotation(bloodvel, ((float)(Random() % 100)) / 4, yaw + ((float)(Random() % 100)) / 4, 0) * scale; + bloodvel += DoRotation(velocity, ((float)(Random() % 100)) / 4, ((float)(Random() % 100)) / 4, 0) * scale; Sprite::MakeSprite(bloodsprite, DoRotation((jointPos(head) + jointPos(neck)) / 2, 0, yaw, 0)*scale + coords, bloodvel, 1, 1, 1, .05, 1); Sprite::MakeSprite(bloodflamesprite, DoRotation((jointPos(head) + jointPos(neck)) / 2, 0, yaw, 0)*scale + coords, bloodvel, 1, 1, 1, .3, 1); } @@ -721,15 +697,6 @@ bool Person::DoBloodBigWhere(float howmuch, int which, XYZ where) // texture manipulation follows int offsetx = 0, offsety = 0; - /*if(which==225){ - offsety=Random()%40; - offsetx=abs(Random()%120); - } - if(which==220||which==215){ - offsety=Random()%20; - offsetx=abs(Random()%80); - }*/ - //which=220; offsetx = (1 + coordsy) * 512 - 291; offsety = coordsx * 512 - 437; @@ -904,15 +871,10 @@ void Person::Reverse() if (animTarget == staffhitanim && distsq(&victim->coords, &coords) < 2 && ((victim->id == 0 && victim->crouchkeydown) || Random() % 4 == 0)) { if (victim->weaponactive != -1) { victim->throwtogglekeydown = 1; - weapons[victim->weaponids[0]].owner = -1; - weapons[victim->weaponids[0]].velocity = victim->velocity * .2; - if (weapons[victim->weaponids[0]].velocity.x == 0) - weapons[victim->weaponids[0]].velocity.x = .1; - weapons[victim->weaponids[0]].tipvelocity = weapons[victim->weaponids[0]].velocity; - weapons[victim->weaponids[0]].missed = 1; - weapons[victim->weaponids[0]].freetime = 0; - weapons[victim->weaponids[0]].firstfree = 1; - weapons[victim->weaponids[0]].physics = 1; + XYZ tempVelocity = victim->velocity * .2; + if (tempVelocity.x == 0) + tempVelocity.x = .1; + weapons[victim->weaponids[0]].drop(tempVelocity, tempVelocity, false); victim->num_weapons--; if (victim->num_weapons) { victim->weaponids[0] = victim->weaponids[victim->num_weapons]; @@ -934,15 +896,10 @@ void Person::Reverse() if (animTarget == staffspinhitanim && distsq(&victim->coords, &coords) < 2 && ((victim->id == 0 && victim->crouchkeydown) || Random() % 2 == 0)) { if (victim->weaponactive != -1) { victim->throwtogglekeydown = 1; - weapons[victim->weaponids[0]].owner = -1; - weapons[victim->weaponids[0]].velocity = victim->velocity * .2; - if (weapons[victim->weaponids[0]].velocity.x == 0) - weapons[victim->weaponids[0]].velocity.x = .1; - weapons[victim->weaponids[0]].tipvelocity = weapons[victim->weaponids[0]].velocity; - weapons[victim->weaponids[0]].missed = 1; - weapons[victim->weaponids[0]].freetime = 0; - weapons[victim->weaponids[0]].firstfree = 1; - weapons[victim->weaponids[0]].physics = 1; + XYZ tempVelocity = victim->velocity * .2; + if (tempVelocity.x == 0) + tempVelocity.x = .1; + weapons[victim->weaponids[0]].drop(tempVelocity, tempVelocity, false); victim->num_weapons--; if (victim->num_weapons) { victim->weaponids[0] = victim->weaponids[victim->num_weapons]; @@ -963,15 +920,10 @@ void Person::Reverse() if (animTarget == swordslashanim && distsq(&victim->coords, &coords) < 2 && ((victim->id == 0 && victim->crouchkeydown) || Random() % 4 == 0)) { if (victim->weaponactive != -1) { victim->throwtogglekeydown = 1; - weapons[victim->weaponids[0]].owner = -1; - weapons[victim->weaponids[0]].velocity = victim->velocity * .2; - if (weapons[victim->weaponids[0]].velocity.x == 0) - weapons[victim->weaponids[0]].velocity.x = .1; - weapons[victim->weaponids[0]].tipvelocity = weapons[victim->weaponids[0]].velocity; - weapons[victim->weaponids[0]].missed = 1; - weapons[victim->weaponids[0]].freetime = 0; - weapons[victim->weaponids[0]].firstfree = 1; - weapons[victim->weaponids[0]].physics = 1; + XYZ tempVelocity = victim->velocity * .2; + if (tempVelocity.x == 0) + tempVelocity.x = .1; + weapons[victim->weaponids[0]].drop(tempVelocity, tempVelocity, false); victim->num_weapons--; if (victim->num_weapons) { victim->weaponids[0] = victim->weaponids[victim->num_weapons]; @@ -992,15 +944,10 @@ void Person::Reverse() if (animTarget == knifeslashstartanim && distsq(&victim->coords, &coords) < 2 && (victim->id == 0 || Random() % 4 == 0)) { if (victim->weaponactive != -1) { victim->throwtogglekeydown = 1; - weapons[victim->weaponids[0]].owner = -1; - weapons[victim->weaponids[0]].velocity = victim->velocity * .2; - if (weapons[victim->weaponids[0]].velocity.x == 0) - weapons[victim->weaponids[0]].velocity.x = .1; - weapons[victim->weaponids[0]].tipvelocity = weapons[victim->weaponids[0]].velocity; - weapons[victim->weaponids[0]].missed = 1; - weapons[victim->weaponids[0]].freetime = 0; - weapons[victim->weaponids[0]].firstfree = 1; - weapons[victim->weaponids[0]].physics = 1; + XYZ tempVelocity = victim->velocity * .2; + if (tempVelocity.x == 0) + tempVelocity.x = .1; + weapons[victim->weaponids[0]].drop(tempVelocity, tempVelocity, false); victim->num_weapons--; if (victim->num_weapons) { victim->weaponids[0] = victim->weaponids[victim->num_weapons]; @@ -1018,7 +965,7 @@ void Person::Reverse() victim->animCurrent = knifeslashreversalanim; victim->animTarget = knifeslashreversalanim; } - if (animTarget != knifeslashstartanim && animTarget != staffhitanim && animTarget != staffspinhitanim && animTarget != winduppunchanim && animTarget != wolfslapanim && animTarget != swordslashanim && animTarget != swordslashanim) { + if (animTarget != knifeslashstartanim && animTarget != staffhitanim && animTarget != staffspinhitanim && animTarget != winduppunchanim && animTarget != wolfslapanim && animTarget != swordslashanim) { victim->targettilt2 = targettilt2; victim->frameCurrent = frameCurrent; victim->frameTarget = frameTarget; @@ -1075,16 +1022,9 @@ void Person::Reverse() victim->animTarget = staggerbackhighanim; victim->targetyaw = targetyaw + 180; victim->target = 0; - weapons[victim->weaponids[0]].owner = -1; aim = DoRotation(facing, 0, 90, 0) * 21; aim.y += 7; - weapons[victim->weaponids[0]].velocity = aim * -.2; - weapons[victim->weaponids[0]].tipvelocity = aim; - weapons[victim->weaponids[0]].missed = 1; - weapons[victim->weaponids[0]].hitsomething = 0; - weapons[victim->weaponids[0]].freetime = 0; - weapons[victim->weaponids[0]].firstfree = 1; - weapons[victim->weaponids[0]].physics = 1; + weapons[victim->weaponids[0]].drop(aim * -.2, aim); victim->num_weapons--; if (victim->num_weapons) { victim->weaponids[0] = victim->weaponids[num_weapons]; @@ -1118,16 +1058,9 @@ void Person::Reverse() animTarget = staggerbackhighanim; targetyaw = targetyaw + 180; target = 0; - weapons[weaponids[0]].owner = -1; aim = DoRotation(facing, 0, 90, 0) * 21; aim.y += 7; - weapons[weaponids[0]].velocity = aim * -.2; - weapons[weaponids[0]].tipvelocity = aim; - weapons[weaponids[0]].hitsomething = 0; - weapons[weaponids[0]].missed = 1; - weapons[weaponids[0]].freetime = 0; - weapons[weaponids[0]].firstfree = 1; - weapons[weaponids[0]].physics = 1; + weapons[victim->weaponids[0]].drop(aim * -.2, aim); num_weapons--; if (num_weapons) { weaponids[0] = weaponids[num_weapons]; @@ -1250,14 +1183,13 @@ void Person::DoDamage(float howmuch) XYZ flatvelocity2; XYZ flatfacing2; for (int i = 0; i < skeleton.num_joints; i++) { - if (!skeleton.free) - flatvelocity2 = velocity; - if (skeleton.free) + if (skeleton.free) { flatvelocity2 = skeleton.joints[i].velocity; - if (!skeleton.free) - flatfacing2 = DoRotation(DoRotation(DoRotation(skeleton.joints[i].position, 0, 0, tilt), tilt2, 0, 0), 0, yaw, 0) * scale + coords; - if (skeleton.free) flatfacing2 = skeleton.joints[i].position * scale + coords; + } else { + flatvelocity2 = velocity; + flatfacing2 = DoRotation(DoRotation(DoRotation(skeleton.joints[i].position, 0, 0, tilt), tilt2, 0, 0), 0, yaw, 0) * scale + coords; + } flatvelocity2.x += (float)(abs(Random() % 100) - 50) / 10; flatvelocity2.y += (float)(abs(Random() % 100) - 50) / 10; flatvelocity2.z += (float)(abs(Random() % 100) - 50) / 10; @@ -1271,10 +1203,6 @@ void Person::DoDamage(float howmuch) skeleton.free = 2; DoDamage(10000); RagDoll(0); - /*if(autoslomo){ - slomo=1; - slomodelay=.2; - }*/ if (!dead && creature == wolftype) { award_bonus(0, Wolfbonus); } @@ -1308,7 +1236,6 @@ void Person::DoDamage(float howmuch) envsoundvol[numenvsounds] = 16; envsoundlife[numenvsounds] = .4; numenvsounds++; - //if(i==2)whichsound=rabbitpain2sound; } if (whichsound != -1) { @@ -1316,9 +1243,6 @@ void Person::DoDamage(float howmuch) } } speechdelay = .3; - - //if(permanentdamage>=damagetolerance&&howmuch<50)permanentdamage=damagetolerance-1; - //if(damage>=damagetolerance&&howmuch<30&&!dead)damage=damagetolerance-1; } /* EFFECT @@ -1459,7 +1383,6 @@ void Person::RagDoll(bool checkcollision) skeleton.joints[i].locked = 0; skeleton.joints[i].position = DoRotation(DoRotation(DoRotation(skeleton.joints[i].position, 0, 0, tilt), tilt2, 0, 0), 0, yaw, 0); if (!isnormal(skeleton.joints[i].position.x)) skeleton.joints[i].position = DoRotation(skeleton.joints[i].position, 0, yaw, 0); - if (!isnormal(skeleton.joints[i].position.x)) skeleton.joints[i].position = skeleton.joints[i].position; if (!isnormal(skeleton.joints[i].position.x)) skeleton.joints[i].position = coords; skeleton.joints[i].position.y += .1; skeleton.joints[i].oldposition = skeleton.joints[i].position; @@ -1548,15 +1471,8 @@ void Person::RagDoll(bool checkcollision) // drop weapon if (Random() % 2 == 0) { if (weaponactive != -1 && animTarget != rabbitkickanim && num_weapons > 0) { - weapons[weaponids[0]].owner = -1; - weapons[weaponids[0]].hitsomething = 0; - weapons[weaponids[0]].velocity = jointVel(righthand) * scale * -.3; + weapons[weaponids[0]].drop(jointVel(righthand) * scale * -.3, jointVel(righthand) * scale); weapons[weaponids[0]].velocity.x += .01; - weapons[weaponids[0]].tipvelocity = jointVel(righthand) * scale; - weapons[weaponids[0]].missed = 1; - weapons[weaponids[0]].freetime = 0; - weapons[weaponids[0]].firstfree = 1; - weapons[weaponids[0]].physics = 1; num_weapons--; if (num_weapons) { weaponids[0] = weaponids[num_weapons]; @@ -1756,7 +1672,6 @@ void Person::DoAnimations() } if (animTarget == rabbittacklinganim && frameTarget == 1) { - //if(victim->aitype==attacktypecutoff&&Random()%2==0&&victim->stunned<=0&&animation[victim->animTarget].attack==neutral&&victim->id!=0)Reverse(); if (victim->aitype == attacktypecutoff && victim->stunned <= 0 && victim->surprised <= 0 && victim->id != 0) Reverse(); if (animTarget == rabbittacklinganim && frameTarget == 1 && !victim->isCrouch() && victim->animTarget != backhandspringanim) { @@ -1890,10 +1805,7 @@ void Person::DoAnimations() } speechdelay = .3; } - //if(animation[animTarget].attack==neutral)whichsound=movewhooshsound; } - //else if(animation[animTarget].label[frameTarget]==4)whichsound=knifeswishsound; - //if(animation[animTarget].label[frameTarget]==8)whichsound=landsound2; if (whichsound != -1) { emit_sound_at(whichsound, coords); @@ -1922,13 +1834,7 @@ void Person::DoAnimations() emit_sound_at(knifedrawsound, coords, 128.); } - weaponactive = 0; - weapons[i].owner = id; - if (num_weapons > 0) { - weaponids[num_weapons] = weaponids[0]; - } - num_weapons++; - weaponids[0] = i; + takeWeapon(i); } } } @@ -1959,9 +1865,7 @@ void Person::DoAnimations() emit_sound_at(knifedrawsound, coords, 128.); } } - weaponactive = 0; if (weapons[i].owner != -1) { - victim = Person::players[weapons[i].owner]; if (victim->num_weapons == 1) victim->num_weapons = 0; @@ -2006,12 +1910,7 @@ void Person::DoAnimations() victim->jointVel(rightshoulder) += relative * 6; victim->jointVel(leftshoulder) += relative * 6; } - weapons[i].owner = id; - if (num_weapons > 0) { - weaponids[num_weapons] = weaponids[0]; - } - num_weapons++; - weaponids[0] = i; + takeWeapon(i); } } } @@ -2114,7 +2013,6 @@ void Person::DoAnimations() if (hasvictim) { damagemult /= victim->damagetolerance / 200; } - //if(onfire)damagemult=3; if ((animation[animTarget].attack == normalattack || animTarget == walljumprightkickanim || animTarget == walljumpleftkickanim) && (!feint) && (victim->skeleton.free != 2 || animTarget == killanim || animTarget == dropkickanim || animTarget == crouchstabanim || animTarget == swordgroundstabanim || animTarget == staffgroundsmashanim)) { if (animTarget == spinkickanim && animation[animTarget].label[frameCurrent] == 5) { if (distsq(&coords, &victim->coords) < (scale * 5) * (scale * 5) * 3 && 3 && animation[victim->animTarget].height != lowheight) { @@ -2385,7 +2283,6 @@ void Person::DoAnimations() } if ((animTarget == crouchstabanim || animTarget == swordgroundstabanim) && animation[animTarget].label[frameCurrent] == 5) { - //if(id==0)camerashake+=.4; if (hasvictim) if (!victim->skeleton.free) @@ -2692,19 +2589,9 @@ void Person::DoAnimations() if (weaponactive != -1) { escapednum = 0; XYZ aim; - weapons[weaponids[0]].owner = -1; aim = victim->coords + DoRotation(victim->jointPos(abdomen), 0, victim->yaw, 0) * victim->scale + victim->velocity * findDistance(&victim->coords, &coords) / 50 - (coords + DoRotation(jointPos(righthand), 0, yaw, 0) * scale); Normalise(&aim); - /*if(victim->animTarget==jumpupanim||victim->animTarget==jumpdownanim){ - aim=DoRotation(aim,(float)abs(Random()%15)-7,(float)abs(Random()%15)-7,0); - }*/ - weapons[weaponids[0]].velocity = aim * 50; - weapons[weaponids[0]].tipvelocity = aim * 50; - weapons[weaponids[0]].missed = 0; - weapons[weaponids[0]].hitsomething = 0; - weapons[weaponids[0]].freetime = 0; - weapons[weaponids[0]].firstfree = 1; - weapons[weaponids[0]].physics = 0; + weapons[weaponids[0]].thrown(aim * 50); num_weapons--; if (num_weapons) { weaponids[0] = weaponids[num_weapons]; @@ -2748,8 +2635,7 @@ void Person::DoAnimations() footvel = 0; if (skeleton.free) { footpoint = (victim->jointPos(abdomen) + victim->jointPos(neck)) / 2 * victim->scale + victim->coords; - } - if (!skeleton.free) { + } else { footpoint = DoRotation((victim->jointPos(abdomen) + victim->jointPos(neck)) / 2, 0, victim->yaw, 0) * victim->scale + victim->coords; } if (tutoriallevel != 1) { @@ -2804,8 +2690,7 @@ void Person::DoAnimations() footvel = 0; if (skeleton.free) { footpoint = (victim->jointPos(abdomen) + victim->jointPos(neck)) / 2 * victim->scale + victim->coords; - } - if (!skeleton.free) { + } else { footpoint = DoRotation((victim->jointPos(abdomen) + victim->jointPos(neck)) / 2, 0, victim->yaw, 0) * victim->scale + victim->coords; } if (bloodtoggle) @@ -2839,16 +2724,9 @@ void Person::DoAnimations() victim->animTarget = staggerbackhighanim; victim->targetyaw = targetyaw + 180; victim->target = 0; - weapons[victim->weaponids[0]].owner = -1; aim = DoRotation(facing, 0, 90, 0) * 21; aim.y += 7; - weapons[victim->weaponids[0]].velocity = aim * -.2; - weapons[victim->weaponids[0]].tipvelocity = aim; - weapons[victim->weaponids[0]].missed = 1; - weapons[weaponids[0]].hitsomething = 0; - weapons[victim->weaponids[0]].freetime = 0; - weapons[victim->weaponids[0]].firstfree = 1; - weapons[victim->weaponids[0]].physics = 1; + weapons[victim->weaponids[0]].drop(aim * -.2, aim); victim->num_weapons--; if (victim->num_weapons) { victim->weaponids[0] = victim->weaponids[num_weapons]; @@ -3144,17 +3022,10 @@ void Person::DoAnimations() if ((animTarget == swordslashreversalanim || animTarget == knifeslashreversalanim || animTarget == staffhitreversalanim || animTarget == staffspinhitreversalanim) && animation[animTarget].label[frameCurrent] == 5) { if (victim->weaponactive != -1 && victim->num_weapons > 0) { if (weapons[victim->weaponids[victim->weaponactive]].owner == int(victim->id)) { - weapons[victim->weaponids[victim->weaponactive]].owner = id; - weaponactive = 0; - if (num_weapons > 0) { - weaponids[num_weapons] = weaponids[victim->weaponactive]; - } - num_weapons++; - weaponids[0] = victim->weaponids[victim->weaponactive]; + takeWeapon(victim->weaponids[victim->weaponactive]); victim->num_weapons--; if (victim->num_weapons > 0) { victim->weaponids[victim->weaponactive] = victim->weaponids[victim->num_weapons]; - //if(victim->weaponstuck==victim->num_weapons)victim->weaponstuck=0; } victim->weaponactive = -1; } @@ -3175,12 +3046,10 @@ void Person::DoAnimations() relative = victim->coords - oldcoords; relative.y = 0; Normalise(&relative); - //relative=DoRotation(relative,0,-90,0); for (int i = 0; i < victim->skeleton.num_joints; i++) { victim->skeleton.joints[i].velocity += relative * damagemult * 30; } victim->jointVel(abdomen) += relative * damagemult * 200; - //FootLand(1,2); victim->Puff(head); victim->DoDamage(damagemult * 70 / victim->protectionhigh); } @@ -3206,12 +3075,10 @@ void Person::DoAnimations() relative = victim->coords - oldcoords; relative.y = 0; Normalise(&relative); - //relative=DoRotation(relative,0,-90,0); for (int i = 0; i < victim->skeleton.num_joints; i++) { victim->skeleton.joints[i].velocity += relative * damagemult * 30; } victim->jointVel(abdomen) += relative * damagemult * 200; - //FootLand(1,2); victim->Puff(head); victim->DoDamage(damagemult * 70 / victim->protectionhigh); } @@ -3223,7 +3090,6 @@ void Person::DoAnimations() relative = facing; relative.y = 0; Normalise(&relative); - //relative*=-1; relative.y -= .1; for (int i = 0; i < victim->skeleton.num_joints; i++) { victim->skeleton.joints[i].velocity += relative * damagemult * 70; @@ -3275,7 +3141,6 @@ void Person::DoAnimations() relative = facing; relative.y = 0; Normalise(&relative); - //relative*=-1; relative.y -= .1; for (int i = 0; i < victim->skeleton.num_joints; i++) { victim->skeleton.joints[i].velocity += relative * damagemult * 70; @@ -3313,7 +3178,6 @@ void Person::DoAnimations() victim->skeleton.joints[i].velocity += relative * damagemult * 40; } victim->jointVel(abdomen) += relative * damagemult * 200; - //FootLand(1,2); victim->Puff(abdomen); victim->DoDamage(damagemult * 30 / victim->protectionhigh); @@ -3333,7 +3197,6 @@ void Person::DoAnimations() for (int i = 0; i < victim->skeleton.num_joints; i++) { victim->skeleton.joints[i].velocity += relative * damagemult * 40; } - //victim->DoDamage(1000); victim->damage = victim->damagetolerance; victim->permanentdamage = victim->damagetolerance - 1; bool doslice; @@ -3367,14 +3230,6 @@ void Person::DoAnimations() if (animTarget == knifefollowanim) victim->DoBloodBig(200, 210); if (animTarget == knifesneakattackanim) { - /*victim->DoBloodBig(200,195); - XYZ bloodvel; - bloodvel=0; - bloodvel.z=20; - bloodvel.y=5; - bloodvel=DoRotation(bloodvel,((float)(Random()%100))/4,yaw+((float)(Random()%100))/4,0)*scale; - Sprite::MakeSprite(bloodsprite, DoRotation(jointPos(neck),0,yaw,0)*scale+coords,bloodvel, 1,1,1, .05, 1); - */ XYZ footvel, footpoint; footvel = 0; footpoint = weapons[weaponids[0]].tippoint; @@ -3534,7 +3389,6 @@ void Person::DoAnimations() victim->Puff(neck); XYZ relative; - //relative=victim->coords-oldcoords; relative = facing * -1; relative.y = 0; Normalise(&relative); @@ -3555,7 +3409,6 @@ void Person::DoAnimations() escapednum = 0; victim->RagDoll(0); XYZ relative; - //relative=victim->coords-oldcoords; relative = facing * -1; relative.y = 0; Normalise(&relative); @@ -4113,7 +3966,6 @@ void Person::DoAnimations() transspeed = 15; } } - //skeleton.DoConstraints(); } /* EFFECT @@ -4204,8 +4056,6 @@ void Person::DoStuff() if (onfire) { burnt += multiplier; - /*if(aitype!=playercontrolled)*///deathbleeding=5; - /*if(aitype!=playercontrolled)*/ deathbleeding = 1; if (burnt > .6) burnt = .6; @@ -4230,28 +4080,26 @@ void Person::DoStuff() while (flamedelay < 0 && onfire) { flamedelay += .006; howmany = abs(Random() % (skeleton.num_joints)); - if (!skeleton.free) - flatvelocity = (coords - oldcoords) / multiplier / 2; //velocity/2; - if (skeleton.free) + if (skeleton.free) { flatvelocity = skeleton.joints[howmany].velocity * scale / 2; - if (!skeleton.free) - flatfacing = DoRotation(DoRotation(DoRotation(skeleton.joints[howmany].position, 0, 0, tilt), tilt2, 0, 0), 0, yaw, 0) * scale + coords; - if (skeleton.free) flatfacing = skeleton.joints[howmany].position * scale + coords; + } else { + flatfacing = DoRotation(DoRotation(DoRotation(skeleton.joints[howmany].position, 0, 0, tilt), tilt2, 0, 0), 0, yaw, 0) * scale + coords; + flatvelocity = (coords - oldcoords) / multiplier / 2; + } Sprite::MakeSprite(flamesprite, flatfacing, flatvelocity, 1, 1, 1, .6 + (float)abs(Random() % 100) / 200 - .25, 1); } while (flamedelay < 0 && !onfire && tutoriallevel == 1 && id != 0) { flamedelay += .05; howmany = abs(Random() % (skeleton.num_joints)); - if (!skeleton.free) - flatvelocity = (coords - oldcoords) / multiplier / 2; //velocity/2; - if (skeleton.free) + if (skeleton.free) { flatvelocity = skeleton.joints[howmany].velocity * scale / 2; - if (!skeleton.free) - flatfacing = DoRotation(DoRotation(DoRotation(skeleton.joints[howmany].position, 0, 0, tilt), tilt2, 0, 0), 0, yaw, 0) * scale + coords; - if (skeleton.free) flatfacing = skeleton.joints[howmany].position * scale + coords; + } else { + flatvelocity = (coords - oldcoords) / multiplier / 2; + flatfacing = DoRotation(DoRotation(DoRotation(skeleton.joints[howmany].position, 0, 0, tilt), tilt2, 0, 0), 0, yaw, 0) * scale + coords; + } Sprite::MakeSprite(breathsprite, flatfacing, flatvelocity, 1, 1, 1, .6 + (float)abs(Random() % 100) / 200 - .25, .3); } @@ -4259,7 +4107,7 @@ void Person::DoStuff() bleeding -= multiplier * .3; if (bloodtoggle == 2) { skeleton.drawmodel.textureptr.bind(); - if (bleeding <= 0 && (detail != 2 || osx)) + if ((bleeding <= 0) && (detail != 2)) DoMipmaps(); } } @@ -4271,21 +4119,16 @@ void Person::DoStuff() if (neckspurtparticledelay < 0 && neckspurtdelay > 2) { spurt = 0; bloodvel = 0; - if (!skeleton.free) { - bloodvel.z = 5 * neckspurtamount; - bloodvel = DoRotation(bloodvel, ((float)(Random() % 100)) / 40, yaw + ((float)(Random() % 100)) / 40, 0) * scale; - } if (skeleton.free) { bloodvel -= DoRotation(skeleton.forward * 10 * scale, ((float)(Random() % 100)) / 40, ((float)(Random() % 100)) / 40, 0); - } - if (skeleton.free) bloodvel += DoRotation(jointVel(head), ((float)(Random() % 100)) / 40, yaw + ((float)(Random() % 100)) / 40, 0) * scale; - if (!skeleton.free) - bloodvel += DoRotation(velocity, ((float)(Random() % 100)) / 40, ((float)(Random() % 100)) / 40, 0) * scale; - if (skeleton.free) Sprite::MakeSprite(bloodsprite, (jointPos(neck) + (jointPos(neck) - jointPos(head)) / 5)*scale + coords, bloodvel, 1, 1, 1, .05, .9); - if (!skeleton.free) + } else { + bloodvel.z = 5 * neckspurtamount; + bloodvel = DoRotation(bloodvel, ((float)(Random() % 100)) / 40, yaw + ((float)(Random() % 100)) / 40, 0) * scale; + bloodvel += DoRotation(velocity, ((float)(Random() % 100)) / 40, ((float)(Random() % 100)) / 40, 0) * scale; Sprite::MakeSprite(bloodsprite, DoRotation(jointPos(neck) + (jointPos(neck) - jointPos(head)) / 5, 0, yaw, 0)*scale + coords, bloodvel, 1, 1, 1, .05, .9); + } neckspurtparticledelay = .05; } if (neckspurtdelay < 0) { @@ -4303,32 +4146,23 @@ void Person::DoStuff() XYZ bloodvel; if (bloodtoggle) { bloodvel = 0; - if (skeleton.free) + if (skeleton.free) { bloodvel += DoRotation(jointVel(abdomen), ((float)(Random() % 100)) / 4, yaw + ((float)(Random() % 100)) / 4, 0) * scale; - if (!skeleton.free) - bloodvel += DoRotation(velocity, ((float)(Random() % 100)) / 4, ((float)(Random() % 100)) / 4, 0) * scale; - if (skeleton.free) Sprite::MakeSprite(bloodsprite, jointPos(abdomen) * scale + coords, bloodvel, 1, 1, 1, .05, 1); - if (!skeleton.free) + } else { + bloodvel += DoRotation(velocity, ((float)(Random() % 100)) / 4, ((float)(Random() % 100)) / 4, 0) * scale; Sprite::MakeSprite(bloodsprite, DoRotation((jointPos(abdomen) + jointPos(abdomen)) / 2, 0, yaw, 0)*scale + coords, bloodvel, 1, 1, 1, .05, 1); + } } } bloodloss += deathbleeding * multiplier * 80; deathbleeding -= multiplier * 1.6; - //if(id==0)deathbleeding-=multiplier*.2; if (deathbleeding < 0) deathbleeding = 0; if (bloodloss > damagetolerance && animation[animTarget].attack == neutral) { if (weaponactive != -1) { - weapons[weaponids[0]].owner = -1; - weapons[weaponids[0]].velocity = velocity * scale * -.3; + weapons[weaponids[0]].drop(velocity * scale * -.3, velocity * scale); weapons[weaponids[0]].velocity.x += .01; - weapons[weaponids[0]].tipvelocity = velocity * scale; - weapons[weaponids[0]].missed = 1; - weapons[weaponids[0]].hitsomething = 0; - weapons[weaponids[0]].freetime = 0; - weapons[weaponids[0]].firstfree = 1; - weapons[weaponids[0]].physics = 1; num_weapons--; if (num_weapons) { weaponids[0] = weaponids[num_weapons]; @@ -4411,24 +4245,23 @@ void Person::DoStuff() } } } - if (!osx && detail > 1) { + if (detail > 1) { skeleton.drawmodel.textureptr.bind(); DoMipmaps(); } - if (!skeleton.free) { - bleedy -= 4 / realtexdetail; - if (detail == 2) - bleedx += (abs(Random() % 3) - 1) * 2 / realtexdetail; - else - bleedx += (abs(Random() % 3) - 1) * 4 / realtexdetail; - } if (skeleton.free) { bleedx += 4 * direction / realtexdetail; if (detail == 2) bleedy += (abs(Random() % 3) - 1) * 2 / realtexdetail; else bleedy += (abs(Random() % 3) - 1) * 4 / realtexdetail; + } else { + bleedy -= 4 / realtexdetail; + if (detail == 2) + bleedx += (abs(Random() % 3) - 1) * 2 / realtexdetail; + else + bleedx += (abs(Random() % 3) - 1) * 4 / realtexdetail; } } @@ -4523,14 +4356,13 @@ void Person::DoStuff() if (environment == snowyenvironment) { XYZ footpoint; XYZ footvel; - if (!skeleton.free) - footvel = DoRotation(skeleton.specialforward[0], 0, yaw, 0) * -1; - if (skeleton.free) + if (skeleton.free) { footvel = skeleton.specialforward[0] * -1; - if (!skeleton.free) - footpoint = DoRotation((jointPos(head) + jointPos(neck)) / 2, 0, yaw, 0) * scale + coords; - if (skeleton.free) footpoint = ((jointPos(head) + jointPos(neck)) / 2) * scale + coords; + } else { + footvel = DoRotation(skeleton.specialforward[0], 0, yaw, 0) * -1; + footpoint = DoRotation((jointPos(head) + jointPos(neck)) / 2, 0, yaw, 0) * scale + coords; + } if (animTarget == sleepanim) footvel = DoRotation(footvel, 0, 90, 0); Sprite::MakeSprite(breathsprite, footpoint + footvel * .2, footvel * .4, 1, 1, 1, .4, .3); @@ -4746,15 +4578,8 @@ void Person::DoStuff() RagDoll(0); if (weaponactive != -1) { - weapons[weaponids[0]].owner = -1; - weapons[weaponids[0]].velocity = velocity * scale * -.3; + weapons[weaponids[0]].drop(velocity * scale * -.3, velocity * scale); weapons[weaponids[0]].velocity.x += .01; - weapons[weaponids[0]].tipvelocity = velocity * scale; - weapons[weaponids[0]].missed = 1; - weapons[weaponids[0]].hitsomething = 0; - weapons[weaponids[0]].freetime = 0; - weapons[weaponids[0]].firstfree = 1; - weapons[weaponids[0]].physics = 1; num_weapons--; if (num_weapons) { weaponids[0] = weaponids[num_weapons]; @@ -4777,16 +4602,13 @@ void Person::DoStuff() damage += 20; } - //if(dead)damage-=multiplier/4; if (!dead) damage -= multiplier * 13; - //if(!dead&&deathbleeding<=0&&id==0)bloodloss-=multiplier*4; if (!dead) permanentdamage -= multiplier * 4; if (isIdle() || isCrouch()) { if (!dead) permanentdamage -= multiplier * 4; - //if(!dead&&deathbleeding<=0&&id==0)bloodloss-=multiplier*4; } if (damage < 0) damage = 0; @@ -4812,15 +4634,8 @@ void Person::DoStuff() DoBlood(1, 255); if (weaponactive != -1) { - weapons[weaponids[0]].owner = -1; - weapons[weaponids[0]].velocity = velocity * scale * -.3; + weapons[weaponids[0]].drop(velocity * scale * -.3, velocity * scale); weapons[weaponids[0]].velocity.x += .01; - weapons[weaponids[0]].tipvelocity = velocity * scale; - weapons[weaponids[0]].missed = 1; - weapons[weaponids[0]].hitsomething = 0; - weapons[weaponids[0]].freetime = 0; - weapons[weaponids[0]].firstfree = 1; - weapons[weaponids[0]].physics = 1; num_weapons--; if (num_weapons) { weaponids[0] = weaponids[num_weapons]; @@ -4896,7 +4711,6 @@ void Person::DoStuff() } average /= multiplier; - //velocity=jointVel(groin)*scale; velocity = 0; for (int i = 0; i < skeleton.num_joints; i++) { velocity += skeleton.joints[i].velocity * scale; @@ -5002,7 +4816,6 @@ void Person::DoStuff() yaw = targetyaw; frameTarget = 0; - // frameTarget=2; animTarget = flipanim; crouchtogglekeydown = 1; target = 0; @@ -5012,9 +4825,6 @@ void Person::DoStuff() animCurrent = tempanim; frameCurrent = 0; target = 0; - //tilt2=targettilt2; - - //if(middle.y>0)targetoffset.y=middle.y+1; for (int i = 0; i < skeleton.num_joints; i++) { tempanimation.position[i][0] = skeleton.joints[i].position; @@ -5418,7 +5228,7 @@ void Person::DoStuff() } } - if (animTarget == jumpupanim || animTarget == crouchstabanim || animTarget == swordgroundstabanim || animTarget == swordfightidlebothanim || animTarget == blockhighleftanim || animTarget == blockhighleftanim) { + if (animTarget == jumpupanim || animTarget == crouchstabanim || animTarget == swordgroundstabanim || animTarget == swordfightidlebothanim || animTarget == blockhighleftanim) { //close hands and mouth if (righthandmorphend != 1 && righthandmorphness == targetrighthandmorphness) { righthandmorphness = 0; @@ -5558,7 +5368,6 @@ void Person::DoStuff() } //Running velocity - //if(!creature==wolftype||animTarget==rabbitkickanim) if (animTarget == rabbittackleanim) { velocity += facing * multiplier * speed * 700 * scale; velspeed = findLength(&velocity); @@ -5625,21 +5434,6 @@ void Person::DoStuff() velocity = flatfacing * velspeed; } - - /*if(animCurrent==rollanim&&(isCrouch()||isIdle())){ - velocity+=facing*multiplier*speed*700*scale; - velspeed=findLength(&velocity); - if(velspeed>speed*25*scale){ - velocity/=velspeed; - velspeed=speed*25*scale; - velocity*=velspeed; - } - velocity.y+=gravity*multiplier*20; - ReflectVector(&velocity,terrain.getNormal(coords.x,coords.z)); - velspeed=findLength(&velocity); - velocity=flatfacing*velspeed; - }*/ - if (animTarget == sneakanim || animTarget == walkanim) { velocity += facing * multiplier * speed * 700 * scale; velspeed = findLength(&velocity); @@ -6100,12 +5894,9 @@ int Person::DrawSkeleton() (v0.y * (1 - morphness) + v1.y * morphness) * proportionhead.y, (v0.z * (1 - morphness) + v1.z * morphness) * proportionhead.z); glGetFloatv(GL_MODELVIEW_MATRIX, M); - //if(!isnormal(M[12])||!isnormal(M[13])||!isnormal(M[14]))test=0; - //if(!isnormal(scale))test=1; skeleton.drawmodel.vertex[skeleton.muscles[i].vertices[j]].x = M[12] * scale; skeleton.drawmodel.vertex[skeleton.muscles[i].vertices[j]].y = M[13] * scale; skeleton.drawmodel.vertex[skeleton.muscles[i].vertices[j]].z = M[14] * scale; - //test=2; glPopMatrix(); } } @@ -6222,14 +6013,11 @@ int Person::DrawSkeleton() glMatrixMode(GL_MODELVIEW); glPushMatrix(); - if (!skeleton.free) - glTranslatef(coords.x, coords.y - .02, coords.z); - if (skeleton.free) - glTranslatef(coords.x, coords.y - .02, coords.z); - if (!skeleton.free) + glTranslatef(coords.x, coords.y - .02, coords.z); + if (!skeleton.free) { glTranslatef(offset.x * scale, offset.y * scale, offset.z * scale); - if (!skeleton.free) glRotatef(yaw, 0, 1, 0); + } if (showpoints) { glPointSize(5); glColor4f(.4, 1, .4, 1); @@ -6285,7 +6073,6 @@ int Person::DrawSkeleton() glEnable(GL_BLEND); } if (tutoriallevel && id != 0) { - //glDisable(GL_TEXTURE_2D); glColor4f(.7, .7, .7, 0.6); glDepthMask(0); glEnable(GL_LIGHTING); @@ -6596,7 +6383,6 @@ int Person::DrawSkeleton() calcrot = 1; if (animCurrent != animTarget) calcrot = 1; - //if(id==0)calcrot=1; if (skeleton.free == 2) calcrot = 0; @@ -6747,3 +6533,14 @@ int Person::SphereCheck(XYZ *p1, float radius, XYZ *p, XYZ *move, float *rotate, return firstintersecting; } +void Person::takeWeapon(int weaponId) +{ + weaponactive = 0; + weapons[weaponId].owner = id; + if (num_weapons > 0) { + weaponids[num_weapons] = weaponids[0]; + } + num_weapons++; + weaponids[0] = weaponId; +} +