X-Git-Url: https://git.jsancho.org/?p=lugaru.git;a=blobdiff_plain;f=Source%2FObjects%2FPerson.cpp;h=55b62090c51b4016e23403852765e6ad9d129c2c;hp=063f40f6f7ab0ed57747f3e72cd221fd82908ad1;hb=762fb78d53f8be2003944fbdcc84f87e7851f453;hpb=cf610b0dfbf15ffafaefcae72a44957095fd7740 diff --git a/Source/Objects/Person.cpp b/Source/Objects/Person.cpp index 063f40f..55b6209 100644 --- a/Source/Objects/Person.cpp +++ b/Source/Objects/Person.cpp @@ -1,6 +1,6 @@ /* Copyright (C) 2003, 2010 - Wolfire Games -Copyright (C) 2010-2016 - Lugaru contributors (see AUTHORS file) +Copyright (C) 2010-2017 - Lugaru contributors (see AUTHORS file) This file is part of Lugaru. @@ -21,13 +21,13 @@ along with Lugaru. If not, see . #include "Objects/Person.hpp" #include "Animation/Animation.hpp" -#include "Audio/openal_wrapper.hpp" #include "Audio/Sounds.hpp" +#include "Audio/openal_wrapper.hpp" #include "Game.hpp" #include "Level/Awards.hpp" #include "Level/Dialog.hpp" -#include "Utils/Folders.hpp" #include "Tutorial.hpp" +#include "Utils/Folders.hpp" extern float multiplier; extern Terrain terrain; @@ -51,7 +51,7 @@ extern float woozy; extern float viewdistance; extern float blackout; extern int difficulty; -extern bool decals; +extern bool decalstoggle; extern float fadestart; extern bool freeze; extern bool winfreeze; @@ -76,244 +76,299 @@ extern XYZ windvector; std::vector> Person::players(1, std::shared_ptr(new Person())); -Person::Person() : - whichpatchx(0), - whichpatchz(0), - animCurrent(bounceidleanim), - animTarget(bounceidleanim), - frameCurrent(0), - frameTarget(1), - oldanimCurrent(0), - oldanimTarget(0), - oldframeCurrent(0), - oldframeTarget(0), - howactive(typeactive), - parriedrecently(0), - superruntoggle(false), - lastattack(0), lastattack2(0), lastattack3(0), - currentoffset(), targetoffset(), offset(), - target(0), - transspeed(0), - - realoldcoords(), - oldcoords(), - coords(), - velocity(), - - proportionhead(), - proportionlegs(), - proportionarms(), - proportionbody(), - - unconscioustime(0), - - immobile(false), - - velspeed(0), - targetyaw(0), - targetrot(0), - rot(0), - oldrot(0), - lookyaw(0), - lookpitch(0), - yaw(0), - pitch(0), - lowyaw(0), - tilt(0), - targettilt(0), - tilt2(0), - targettilt2(0), - rabbitkickenabled(false), - - bloodloss(0), - bleeddelay(0), - skiddelay(0), - skiddingdelay(0), - deathbleeding(0), - tempdeltav(0), - - damagetolerance(200), - damage(0), - permanentdamage(0), - superpermanentdamage(0), - lastcollide(0), - dead(0), - - jumppower(5), - onground(false), - - wentforweapon(0), - - calcrot(false), - - facing(), - - bleeding(0), - bleedx(0), bleedy(0), - direction(0), - texupdatedelay(0), - - headyaw(0), headpitch(0), - targetheadyaw(0), targetheadpitch(0), - - onterrain(false), - pause(false), - - grabdelay(0), - - victim(nullptr), - hasvictim(false), - - updatedelay(0), - normalsupdatedelay(0), - - jumpstart(false), - forwardkeydown(false), - forwardstogglekeydown(false), - rightkeydown(false), - leftkeydown(false), - backkeydown(false), - jumpkeydown(false), - jumptogglekeydown(false), - crouchkeydown(false), - crouchtogglekeydown(false), - drawkeydown(false), - drawtogglekeydown(false), - throwkeydown(false), - throwtogglekeydown(false), - attackkeydown(false), - feint(false), - lastfeint(false), - headless(false), - - crouchkeydowntime(0), - jumpkeydowntime(0), - freefall(false), - - turnspeed(0), - - aitype(passivetype), - aiupdatedelay(0), - losupdatedelay(0), - ally(0), - collide(0), - collided(-10), - avoidcollided(0), - loaded(false), - whichdirection(false), - whichdirectiondelay(0), - avoidsomething(false), - avoidwhere(), - blooddimamount(0), - - staggerdelay(0), - blinkdelay(0), - twitchdelay(0), - twitchdelay2(0), - twitchdelay3(0), - lefthandmorphness(0), - righthandmorphness(0), - headmorphness(0), - chestmorphness(0), - tailmorphness(0), - targetlefthandmorphness(0), - targetrighthandmorphness(0), - targetheadmorphness(1), - targetchestmorphness(0), - targettailmorphness(0), - lefthandmorphstart(0), lefthandmorphend(0), - righthandmorphstart(0), righthandmorphend(0), - headmorphstart(0), headmorphend(0), - chestmorphstart(0), chestmorphend(0), - tailmorphstart(0), tailmorphend(0), - - weaponmissdelay(0), - highreversaldelay(0), - lowreversaldelay(0), - - creature(rabbittype), - - id(0), - - skeleton(), - - speed(0), - scale(-1), - power(0), - speedmult(0), - - protectionhead(0), - protectionhigh(0), - protectionlow(0), - armorhead(0), - armorhigh(0), - armorlow(0), - metalhead(false), - metalhigh(false), - metallow(false), - - numclothes(0), - - landhard(false), - bled(false), - spurt(false), - onfire(false), - onfiredelay(0), - burnt(0), - - flamedelay(0), - - playerdetail(0), - - num_weapons(0), - weaponactive(-1), - weaponstuck(-1), - weaponstuckwhere(0), - - numwaypoints(0), - pausetime(0), - - headtarget(), - interestdelay(0), - - finalfinaltarget(), - finaltarget(), - finalpathfindpoint(0), - targetpathfindpoint(0), - lastpathfindpoint(0), - lastpathfindpoint2(0), - lastpathfindpoint3(0), - lastpathfindpoint4(0), - - waypoint(0), - - lastseen(), - lastseentime(0), - lastchecktime(0), - stunned(0), - surprised(0), - runninghowlong(0), - occluded(0), - lastoccluded(0), - laststanding(0), - escapednum(0), - - speechdelay(0), - neckspurtdelay(0), - neckspurtparticledelay(0), - neckspurtamount(0), - - whichskin(0), - rabbitkickragdoll(false), - - tempanimation(), +Person::Person() + : whichpatchx(0) + , whichpatchz(0) + , animCurrent(bounceidleanim) + , animTarget(bounceidleanim) + , frameCurrent(0) + , frameTarget(1) + , oldanimCurrent(0) + , oldanimTarget(0) + , oldframeCurrent(0) + , oldframeTarget(0) + , howactive(typeactive) + , parriedrecently(0) + , superruntoggle(false) + , lastattack(0) + , lastattack2(0) + , lastattack3(0) + , currentoffset() + , targetoffset() + , offset() + , target(0) + , transspeed(0) + , + + realoldcoords() + , oldcoords() + , coords() + , velocity() + , + + proportionhead() + , proportionlegs() + , proportionarms() + , proportionbody() + , + + unconscioustime(0) + , + + immobile(false) + , + + velspeed(0) + , targetyaw(0) + , targetrot(0) + , rot(0) + , oldrot(0) + , lookyaw(0) + , lookpitch(0) + , yaw(0) + , pitch(0) + , lowyaw(0) + , tilt(0) + , targettilt(0) + , tilt2(0) + , targettilt2(0) + , rabbitkickenabled(false) + , + + bloodloss(0) + , bleeddelay(0) + , skiddelay(0) + , skiddingdelay(0) + , deathbleeding(0) + , tempdeltav(0) + , + + damagetolerance(200) + , damage(0) + , permanentdamage(0) + , superpermanentdamage(0) + , lastcollide(0) + , dead(0) + , + + jumppower(5) + , onground(false) + , + + wentforweapon(0) + , + + calcrot(false) + , + + facing() + , + + bleeding(0) + , bleedx(0) + , bleedy(0) + , direction(0) + , texupdatedelay(0) + , + + headyaw(0) + , headpitch(0) + , targetheadyaw(0) + , targetheadpitch(0) + , + + onterrain(false) + , pause(false) + , + + grabdelay(0) + , + + victim(nullptr) + , hasvictim(false) + , + + updatedelay(0) + , normalsupdatedelay(0) + , + + jumpstart(false) + , forwardkeydown(false) + , forwardstogglekeydown(false) + , rightkeydown(false) + , leftkeydown(false) + , backkeydown(false) + , jumpkeydown(false) + , jumptogglekeydown(false) + , crouchkeydown(false) + , crouchtogglekeydown(false) + , drawkeydown(false) + , drawtogglekeydown(false) + , throwkeydown(false) + , throwtogglekeydown(false) + , attackkeydown(false) + , feint(false) + , lastfeint(false) + , headless(false) + , + + crouchkeydowntime(0) + , jumpkeydowntime(0) + , freefall(false) + , + + turnspeed(0) + , + + aitype(passivetype) + , aiupdatedelay(0) + , losupdatedelay(0) + , ally(0) + , collide(0) + , collided(-10) + , avoidcollided(0) + , loaded(false) + , whichdirection(false) + , whichdirectiondelay(0) + , avoidsomething(false) + , avoidwhere() + , blooddimamount(0) + , + + staggerdelay(0) + , blinkdelay(0) + , twitchdelay(0) + , twitchdelay2(0) + , twitchdelay3(0) + , lefthandmorphness(0) + , righthandmorphness(0) + , headmorphness(0) + , chestmorphness(0) + , tailmorphness(0) + , targetlefthandmorphness(0) + , targetrighthandmorphness(0) + , targetheadmorphness(1) + , targetchestmorphness(0) + , targettailmorphness(0) + , lefthandmorphstart(0) + , lefthandmorphend(0) + , righthandmorphstart(0) + , righthandmorphend(0) + , headmorphstart(0) + , headmorphend(0) + , chestmorphstart(0) + , chestmorphend(0) + , tailmorphstart(0) + , tailmorphend(0) + , + + weaponmissdelay(0) + , highreversaldelay(0) + , lowreversaldelay(0) + , + + creature(rabbittype) + , + + id(0) + , + + skeleton() + , + + speed(0) + , scale(-1) + , power(0) + , speedmult(0) + , + + protectionhead(0) + , protectionhigh(0) + , protectionlow(0) + , armorhead(0) + , armorhigh(0) + , armorlow(0) + , metalhead(false) + , metalhigh(false) + , metallow(false) + , + + numclothes(0) + , + + landhard(false) + , bled(false) + , spurt(false) + , onfire(false) + , onfiredelay(0) + , burnt(0) + , + + flamedelay(0) + , + + playerdetail(0) + , + + num_weapons(0) + , weaponactive(-1) + , weaponstuck(-1) + , weaponstuckwhere(0) + , + + numwaypoints(0) + , pausetime(0) + , + + headtarget() + , interestdelay(0) + , + + finalfinaltarget() + , finaltarget() + , finalpathfindpoint(0) + , targetpathfindpoint(0) + , lastpathfindpoint(0) + , lastpathfindpoint2(0) + , lastpathfindpoint3(0) + , lastpathfindpoint4(0) + , + + waypoint(0) + , + + lastseen() + , lastseentime(0) + , lastchecktime(0) + , stunned(0) + , surprised(0) + , runninghowlong(0) + , occluded(0) + , lastoccluded(0) + , laststanding(0) + , escapednum(0) + , + + speechdelay(0) + , neckspurtdelay(0) + , neckspurtparticledelay(0) + , neckspurtamount(0) + , + + whichskin(0) + , rabbitkickragdoll(false) + , + + tempanimation() + , jumpclimb(false) { } /* Read a person in tfile. Throws an error if it’s not valid */ -Person::Person(FILE *tfile, int mapvers, unsigned i) : Person() +Person::Person(FILE* tfile, int mapvers, unsigned i) + : Person() { id = i; funpackf(tfile, "Bi Bi Bf Bf Bf Bi", &whichskin, &creature, &coords.x, &coords.y, &coords.z, &num_weapons); @@ -399,8 +454,9 @@ Person::Person(FILE *tfile, int mapvers, unsigned i) : Person() for (int k = 0; k < numclothes; k++) { int templength; funpackf(tfile, "Bi", &templength); - for (int l = 0; l < templength; l++) + for (int l = 0; l < templength; l++) { funpackf(tfile, "Bb", &clothes[k][l]); + } clothes[k][templength] = '\0'; funpackf(tfile, "Bf Bf Bf", &clothestintr[k], &clothestintg[k], &clothestintb[k]); } @@ -437,8 +493,7 @@ void Person::skeletonLoad(bool clothes) "Models/Body7.solid", "Models/BodyLow.solid", "Models/Belt.solid", - clothes - ); + clothes); } else { skeleton.Load( "Skeleton/BasicFigureWolf", @@ -453,8 +508,7 @@ void Person::skeletonLoad(bool clothes) "Models/Wolf7.solid", "Models/WolfLow.solid", "Models/Belt.solid", - clothes - ); + clothes); } skeleton.drawmodel.textureptr.load(creatureskin[creature][whichskin], 1, &skeleton.skinText[0], &skeleton.skinsize); @@ -467,15 +521,9 @@ void Person::skeletonLoad(bool clothes) */ void Person::CheckKick() { - if (!(hasvictim - && (animTarget == rabbitkickanim - && victim - && victim != this->shared_from_this() - && frameCurrent >= 2 - && animCurrent == rabbitkickanim) - && distsq(&coords, &victim->coords) < 1.2 - && !victim->skeleton.free)) + if (!(hasvictim && (animTarget == rabbitkickanim && victim && victim != this->shared_from_this() && frameCurrent >= 2 && animCurrent == rabbitkickanim) && distsq(&coords, &victim->coords) < 1.2 && !victim->skeleton.free)) { return; + } if (Animation::animations[victim->animTarget].height != lowheight) { float damagemult = (creature == wolftype ? 2.5 : 1.) * power * power; @@ -485,16 +533,18 @@ void Person::CheckKick() victim->spurt = 1; DoBlood(.2, 250); - if (!Tutorial::active) + if (!Tutorial::active) { emit_sound_at(heavyimpactsound, victim->coords); + } victim->RagDoll(0); for (unsigned i = 0; i < victim->skeleton.joints.size(); i++) { victim->skeleton.joints[i].velocity += relative * 120 * damagemult; } victim->Puff(neck); victim->DoDamage(100 * damagemult / victim->protectionhigh); - if (id == 0) + if (id == 0) { camerashake += .4; + } target = 0; frameCurrent = 3; @@ -503,8 +553,9 @@ void Person::CheckKick() velocity = facing * -10; velocity.y = 5; skeleton.free = 0; - if (id == 0) + if (id == 0) { resume_stream(whooshsound); + } award_bonus(id, cannon); } else if (victim->isCrouch()) { @@ -563,42 +614,70 @@ void Person::CatchFire() */ int Person::getIdle() { - if (Dialog::inDialog() && (howactive == typeactive) && (creature == rabbittype)) + if (Dialog::inDialog() && (howactive == typeactive) && (creature == rabbittype)) { return talkidleanim; - if (hasvictim && (victim != this->shared_from_this())/*||(id==0&&attackkeydown)*/) - if (/*(id==0&&attackkeydown)||*/(!victim->dead && victim->aitype != passivetype && - victim->aitype != searchtype && aitype != passivetype && aitype != searchtype && - victim->id < Person::players.size())) { + } + if (hasvictim && (victim != this->shared_from_this())) { + if ((!victim->dead && victim->aitype != passivetype && + victim->aitype != searchtype && aitype != passivetype && aitype != searchtype && + victim->id < Person::players.size())) { if ((aitype == playercontrolled && stunned <= 0 && weaponactive == -1) || pause) { - if (creature == rabbittype) + if (creature == rabbittype) { return fightidleanim; - if (creature == wolftype) + } + if (creature == wolftype) { return wolfidle; + } } if (aitype == playercontrolled && stunned <= 0 && weaponactive != -1) { - if (weapons[weaponids[weaponactive]].getType() == knife) + if (weapons[weaponids[weaponactive]].getType() == knife) { return knifefightidleanim; - if (weapons[weaponids[weaponactive]].getType() == sword && victim->weaponactive != -1) + } + if (weapons[weaponids[weaponactive]].getType() == sword && victim->weaponactive != -1) { return swordfightidlebothanim; - if (weapons[weaponids[weaponactive]].getType() == sword) + } + if (weapons[weaponids[weaponactive]].getType() == sword) { return swordfightidleanim; - if (weapons[weaponids[weaponactive]].getType() == staff) + } + if (weapons[weaponids[weaponactive]].getType() == staff) { return swordfightidleanim; + } } - if (aitype != playercontrolled && stunned <= 0 && creature != wolftype && !pause) + if (aitype != playercontrolled && stunned <= 0 && creature != wolftype && !pause) { return fightsidestep; + } } - if ((damage > permanentdamage || damage > damagetolerance * .8 || deathbleeding > 0) && creature != wolftype) + } + if ((damage > permanentdamage || damage > damagetolerance * .8 || deathbleeding > 0) && creature != wolftype) { return hurtidleanim; - if (howactive == typesitting) return sitanim; - if (howactive == typesittingwall) return sitwallanim; - if (howactive == typesleeping) return sleepanim; - if (howactive == typedead1) return dead1anim; - if (howactive == typedead2) return dead2anim; - if (howactive == typedead3) return dead3anim; - if (howactive == typedead4) return dead4anim; - if (creature == rabbittype) return bounceidleanim; - if (creature == wolftype) return wolfidle; + } + if (howactive == typesitting) { + return sitanim; + } + if (howactive == typesittingwall) { + return sitwallanim; + } + if (howactive == typesleeping) { + return sleepanim; + } + if (howactive == typedead1) { + return dead1anim; + } + if (howactive == typedead2) { + return dead2anim; + } + if (howactive == typedead3) { + return dead3anim; + } + if (howactive == typedead4) { + return dead4anim; + } + if (creature == rabbittype) { + return bounceidleanim; + } + if (creature == wolftype) { + return wolfidle; + } return 0; } @@ -607,10 +686,12 @@ int Person::getIdle() */ int Person::getCrouch() { - if (creature == rabbittype) + if (creature == rabbittype) { return crouchanim; - if (creature == wolftype) + } + if (creature == wolftype) { return wolfcrouchanim; + } return 0; } @@ -619,15 +700,19 @@ int Person::getCrouch() */ int Person::getRun() { - if (creature == rabbittype && (!superruntoggle || weaponactive != -1)) + if (creature == rabbittype && (!superruntoggle || weaponactive != -1)) { return runanim; - if (creature == wolftype && (!superruntoggle)) + } + if (creature == wolftype && (!superruntoggle)) { return wolfrunanim; + } - if (creature == rabbittype && (superruntoggle && weaponactive == -1)) + if (creature == rabbittype && (superruntoggle && weaponactive == -1)) { return rabbitrunninganim; - if (creature == wolftype && (superruntoggle)) + } + if (creature == wolftype && (superruntoggle)) { return wolfrunninganim; + } return 0; } @@ -635,10 +720,12 @@ int Person::getRun() */ int Person::getStop() { - if (creature == rabbittype) + if (creature == rabbittype) { return stopanim; - if (creature == wolftype) + } + if (creature == wolftype) { return wolfstopanim; + } return 0; } @@ -646,10 +733,12 @@ int Person::getStop() */ int Person::getLanding() { - if (creature == rabbittype) + if (creature == rabbittype) { return landanim; - if (creature == wolftype) + } + if (creature == wolftype) { return wolflandanim; + } return 0; } @@ -657,10 +746,12 @@ int Person::getLanding() */ int Person::getLandhard() { - if (creature == rabbittype) + if (creature == rabbittype) { return landhardanim; - if (creature == wolftype) + } + if (creature == wolftype) { return wolflandhardanim; + } return 0; } @@ -672,10 +763,11 @@ int Person::getLandhard() static void SolidHitBonus(int playerid) { - if (bonustime < 1.5 && bonus >= solidhit && bonus <= megacombo) + if (bonustime < 1.5 && bonus >= solidhit && bonus <= megacombo) { award_bonus(playerid, bonus == megacombo ? bonus : bonus + 1); - else + } else { award_bonus(playerid, solidhit); + } } /* EFFECT @@ -701,11 +793,11 @@ void Person::DoBlood(float howmuch, int which) 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); + 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); } } - if (Random() % 2 == 0) // 50% chance + if (Random() % 2 == 0) { // 50% chance for (int i = 0; i < 3; i++) { if (Random() % 2 != 0) { // emit teeth particles @@ -722,37 +814,40 @@ void Person::DoBlood(float howmuch, int which) if (skeleton.free) { Sprite::MakeSprite(splintersprite, jointPos(head) * scale + coords, bloodvel, 1, 1, 1, .05, 1); } else { - Sprite::MakeSprite(splintersprite, DoRotation((jointPos(head) + jointPos(neck)) / 2, 0, yaw, 0)*scale + coords, bloodvel, 1, 1, 1, .05, 1); + Sprite::MakeSprite(splintersprite, DoRotation((jointPos(head) + jointPos(neck)) / 2, 0, yaw, 0) * scale + coords, bloodvel, 1, 1, 1, .05, 1); } Sprite::setLastSpriteSpecial(3); // sets it to teeth } } + } } - if (decals) { + if (decalstoggle) { // FIXME: manipulating attributes bleeding = howmuch + (float)abs(Random() % 100) / 200 - .25; bleedxint = 0; bleedyint = 0; - if (creature == rabbittype) + if (creature == rabbittype) { while (bloodText[bleedxint * 512 * 3 + bleedyint * 3 + 0] > which + 4 || bloodText[bleedxint * 512 * 3 + bleedyint * 3 + 0] < which - 4 || bleedxint < 10 || bleedyint < 10 || bleedxint > 500 || bleedyint > 500) { bleedxint = abs(Random() % 512); bleedyint = abs(Random() % 512); } - if (creature == wolftype) + } + if (creature == wolftype) { while (wolfbloodText[bleedxint * 512 * 3 + bleedyint * 3 + 0] > which + 4 || wolfbloodText[bleedxint * 512 * 3 + bleedyint * 3 + 0] < which - 4 || bleedxint < 10 || bleedyint < 10 || bleedxint > 500 || bleedyint > 500) { bleedxint = abs(Random() % 512); bleedyint = abs(Random() % 512); } + } bleedy = bleedxint; bleedx = bleedyint; bleedy /= realtexdetail; bleedx /= realtexdetail; direction = abs(Random() % 2) * 2 - 1; } - } - if (bleeding > 2) + if (bleeding > 2) { bleeding = 2; + } } /* EFFECT @@ -763,27 +858,32 @@ void Person::DoBloodBig(float howmuch, int which) { static int bleedxint, bleedyint, i, j; static XYZ bloodvel; - if (howmuch && id == 0) + if (howmuch && id == 0) { blooddimamount = 1; + } - if (!Tutorial::active || id == 0) + if (!Tutorial::active || id == 0) { if (aitype != playercontrolled && howmuch > 0) { // play pain sounds int whichsound = -1; if (creature == wolftype) { int i = abs(Random() % 2); - if (i == 0) + if (i == 0) { whichsound = snarlsound; - if (i == 1) + } + if (i == 1) { whichsound = snarl2sound; + } } if (creature == rabbittype) { int i = abs(Random() % 2); - if (i == 0) + if (i == 0) { whichsound = rabbitpainsound; - if (i == 1 && howmuch >= 2) + } + if (i == 1 && howmuch >= 2) { whichsound = rabbitpain1sound; + } } if (whichsound != -1) { @@ -791,12 +891,13 @@ void Person::DoBloodBig(float howmuch, int which) addEnvSound(coords); } } + } if (id == 0 && howmuch > 0) { Game::flash(.5, 0); } - if (bloodtoggle && decals && !Tutorial::active) { + if (bloodtoggle && decalstoggle && !Tutorial::active) { if (bleeding <= 0 && spurt) { spurt = 0; for (int i = 0; i < 3; i++) { @@ -812,8 +913,8 @@ void Person::DoBloodBig(float howmuch, int which) 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); + 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); } } } @@ -843,46 +944,75 @@ void Person::DoBloodBig(float howmuch, int which) offsetx = 20; } - int startx = 512; int starty = 512; int endx = 0; int endy = 0; GLubyte color; - if (creature == rabbittype) + if (creature == rabbittype) { for (i = 0; i < 512; i++) { for (j = 0; j < 512; j++) { if (bloodText[i * 512 * 3 + j * 3 + 0] <= which + 4 && bloodText[i * 512 * 3 + j * 3 + 0] >= which - 4) { - if (i < startx) startx = i; - if (j < starty) starty = j; - if (i > endx) endx = i; - if (j > endy) endy = j; + if (i < startx) { + startx = i; + } + if (j < starty) { + starty = j; + } + if (i > endx) { + endx = i; + } + if (j > endy) { + endy = j; + } } } } - if (creature == wolftype) + } + if (creature == wolftype) { for (i = 0; i < 512; i++) { for (j = 0; j < 512; j++) { if (wolfbloodText[i * 512 * 3 + j * 3 + 0] <= which + 4 && wolfbloodText[i * 512 * 3 + j * 3 + 0] >= which - 4) { - if (i < startx) startx = i; - if (j < starty) starty = j; - if (i > endx) endx = i; - if (j > endy) endy = j; + if (i < startx) { + startx = i; + } + if (j < starty) { + starty = j; + } + if (i > endx) { + endx = i; + } + if (j > endy) { + endy = j; + } } } } + } startx += offsetx; endx += offsetx; starty += offsety; endy += offsety; - if (startx < 0) startx = 0; - if (starty < 0) starty = 0; - if (endx > 512 - 1) endx = 512 - 1; - if (endy > 512 - 1) endy = 512 - 1; - if (endx < startx) endx = startx; - if (endy < starty) endy = starty; + if (startx < 0) { + startx = 0; + } + if (starty < 0) { + starty = 0; + } + if (endx > 512 - 1) { + endx = 512 - 1; + } + if (endy > 512 - 1) { + endy = 512 - 1; + } + if (endx < startx) { + endx = startx; + } + if (endy < starty) { + endy = starty; + } startx /= realtexdetail; starty /= realtexdetail; @@ -891,61 +1021,70 @@ void Person::DoBloodBig(float howmuch, int which) int texdetailint = realtexdetail; int where; - if (creature == rabbittype) + if (creature == rabbittype) { for (i = startx; i < endx; i++) { for (j = starty; j < endy; j++) { if (bloodText[(i * texdetailint - offsetx) * 512 * 3 + (j * texdetailint - offsety) * 3 + 0] <= which + 4 && bloodText[(i * texdetailint - offsetx) * 512 * 3 + (j * texdetailint - offsety) * 3 + 0] >= which - 4) { color = Random() % 85 + 170; where = i * skeleton.skinsize * 3 + j * 3; - if (skeleton.skinText[where + 0] > color / 2) + if (skeleton.skinText[where + 0] > color / 2) { skeleton.skinText[where + 0] = color / 2; + } skeleton.skinText[where + 1] = 0; skeleton.skinText[where + 2] = 0; } } } - if (creature == wolftype) + } + if (creature == wolftype) { for (i = startx; i < endx; i++) { for (j = starty; j < endy; j++) { if (wolfbloodText[(i * texdetailint - offsetx) * 512 * 3 + (j * texdetailint - offsety) * 3 + 0] <= which + 4 && wolfbloodText[(i * texdetailint - offsetx) * 512 * 3 + (j * texdetailint - offsety) * 3 + 0] >= which - 4) { color = Random() % 85 + 170; where = i * skeleton.skinsize * 3 + j * 3; - if (skeleton.skinText[where + 0] > color / 2) + if (skeleton.skinText[where + 0] > color / 2) { skeleton.skinText[where + 0] = color / 2; + } skeleton.skinText[where + 1] = 0; skeleton.skinText[where + 2] = 0; } } } + } skeleton.drawmodel.textureptr.bind(); DoMipmaps(); bleedxint = 0; bleedyint = 0; - if (creature == rabbittype) + if (creature == rabbittype) { while (bloodText[bleedxint * 512 * 3 + bleedyint * 3 + 0] > which + 4 || bloodText[bleedxint * 512 * 3 + bleedyint * 3 + 0] < which - 4 || bleedxint < 10 || bleedyint < 10 || bleedxint > 500 || bleedyint > 500) { bleedxint = abs(Random() % 512); bleedyint = abs(Random() % 512); } - if (creature == wolftype) + } + if (creature == wolftype) { while (wolfbloodText[bleedxint * 512 * 3 + bleedyint * 3 + 0] > which + 4 || wolfbloodText[bleedxint * 512 * 3 + bleedyint * 3 + 0] < which - 4 || bleedxint < 10 || bleedyint < 10 || bleedxint > 500 || bleedyint > 500) { bleedxint = abs(Random() % 512); bleedyint = abs(Random() % 512); } + } bleedy = bleedxint + offsetx; bleedx = bleedyint + offsety; bleedy /= realtexdetail; bleedx /= realtexdetail; - if (bleedx < 0) + if (bleedx < 0) { bleedx = 0; - if (bleedy < 0) + } + if (bleedy < 0) { bleedy = 0; - if (bleedx > skeleton.skinsize - 1) + } + if (bleedx > skeleton.skinsize - 1) { bleedx = skeleton.skinsize - 1; - if (bleedy > skeleton.skinsize - 1) + } + if (bleedy > skeleton.skinsize - 1) { bleedy = skeleton.skinsize - 1; + } direction = abs(Random() % 2) * 2 - 1; - } bleeding = howmuch + (float)abs(Random() % 100) / 200 - .25; deathbleeding += bleeding; @@ -955,12 +1094,14 @@ void Person::DoBloodBig(float howmuch, int which) if (abs(Random() % 2) == 0) { aitype = gethelptype; lastseentime = 12; - } else + } else { aitype = attacktypecutoff; + } ally = 0; } - if (bleeding > 2) + if (bleeding > 2) { bleeding = 2; + } } /* EFFECT @@ -979,10 +1120,11 @@ bool Person::DoBloodBigWhere(float howmuch, int which, XYZ where) float coordsx, coordsy; float total; - if (bloodtoggle && decals && !Tutorial::active) { + if (bloodtoggle && decalstoggle && !Tutorial::active) { where -= coords; - if (!skeleton.free) + if (!skeleton.free) { where = DoRotation(where, 0, -yaw, 0); + } //where=scale; startpoint = where; startpoint.y += 100; @@ -995,9 +1137,9 @@ bool Person::DoBloodBigWhere(float howmuch, int which, XYZ where) if (whichtri != -1) { // low level geometry math p0 = colpoint; - p1 = skeleton.drawmodel.vertex[skeleton.drawmodel.Triangles[whichtri].vertex[0]]; - p2 = skeleton.drawmodel.vertex[skeleton.drawmodel.Triangles[whichtri].vertex[1]]; - p3 = skeleton.drawmodel.vertex[skeleton.drawmodel.Triangles[whichtri].vertex[2]]; + p1 = skeleton.drawmodel.getTriangleVertex(whichtri, 0); + p2 = skeleton.drawmodel.getTriangleVertex(whichtri, 1); + p3 = skeleton.drawmodel.getTriangleVertex(whichtri, 2); bary.x = distsq(&p0, &p1); bary.y = distsq(&p0, &p2); @@ -1017,7 +1159,6 @@ bool Person::DoBloodBigWhere(float howmuch, int which, XYZ where) bary.y /= total; bary.z /= total; - gxx.x = skeleton.drawmodel.Triangles[whichtri].gx[0]; gxx.y = skeleton.drawmodel.Triangles[whichtri].gx[1]; gxx.z = skeleton.drawmodel.Triangles[whichtri].gx[2]; @@ -1042,8 +1183,8 @@ bool Person::DoBloodBigWhere(float howmuch, int which, XYZ where) 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); + 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); } } } @@ -1059,39 +1200,69 @@ bool Person::DoBloodBigWhere(float howmuch, int which, XYZ where) int endx = 0; int endy = 0; GLubyte color; - if (creature == rabbittype) + if (creature == rabbittype) { for (i = 0; i < 512; i++) { for (j = 0; j < 512; j++) { if (bloodText[i * 512 * 3 + j * 3 + 0] <= which + 4 && bloodText[i * 512 * 3 + j * 3 + 0] >= which - 4) { - if (i < startx) startx = i; - if (j < starty) starty = j; - if (i > endx) endx = i; - if (j > endy) endy = j; + if (i < startx) { + startx = i; + } + if (j < starty) { + starty = j; + } + if (i > endx) { + endx = i; + } + if (j > endy) { + endy = j; + } } } } - if (creature == wolftype) + } + if (creature == wolftype) { for (i = 0; i < 512; i++) { for (j = 0; j < 512; j++) { if (wolfbloodText[i * 512 * 3 + j * 3 + 0] <= which + 4 && wolfbloodText[i * 512 * 3 + j * 3 + 0] >= which - 4) { - if (i < startx) startx = i; - if (j < starty) starty = j; - if (i > endx) endx = i; - if (j > endy) endy = j; + if (i < startx) { + startx = i; + } + if (j < starty) { + starty = j; + } + if (i > endx) { + endx = i; + } + if (j > endy) { + endy = j; + } } } } + } startx += offsetx; endx += offsetx; starty += offsety; endy += offsety; - if (startx < 0) startx = 0; - if (starty < 0) starty = 0; - if (endx > 512 - 1) endx = 512 - 1; - if (endy > 512 - 1) endy = 512 - 1; - if (endx < startx) endx = startx; - if (endy < starty) endy = starty; + if (startx < 0) { + startx = 0; + } + if (starty < 0) { + starty = 0; + } + if (endx > 512 - 1) { + endx = 512 - 1; + } + if (endy > 512 - 1) { + endy = 512 - 1; + } + if (endx < startx) { + endx = startx; + } + if (endy < starty) { + endy = starty; + } startx /= realtexdetail; starty /= realtexdetail; @@ -1100,46 +1271,52 @@ bool Person::DoBloodBigWhere(float howmuch, int which, XYZ where) int texdetailint = realtexdetail; int where; - if (creature == rabbittype) + if (creature == rabbittype) { for (i = startx; i < endx; i++) { for (j = starty; j < endy; j++) { if (bloodText[(i * texdetailint - offsetx) * 512 * 3 + (j * texdetailint - offsety) * 3 + 0] <= which + 4 && bloodText[(i * texdetailint - offsetx) * 512 * 3 + (j * texdetailint - offsety) * 3 + 0] >= which - 4) { color = Random() % 85 + 170; where = i * skeleton.skinsize * 3 + j * 3; - if (skeleton.skinText[where + 0] > color / 2) + if (skeleton.skinText[where + 0] > color / 2) { skeleton.skinText[where + 0] = color / 2; + } skeleton.skinText[where + 1] = 0; skeleton.skinText[where + 2] = 0; } else if (bloodText[(i * texdetailint - offsetx) * 512 * 3 + (j * texdetailint - offsety) * 3 + 0] <= 160 + 4 && bloodText[(i * texdetailint - offsetx) * 512 * 3 + (j * texdetailint - offsety) * 3 + 0] >= 160 - 4) { color = Random() % 85 + 170; where = i * skeleton.skinsize * 3 + j * 3; - if (skeleton.skinText[where + 0] > color / 2) + if (skeleton.skinText[where + 0] > color / 2) { skeleton.skinText[where + 0] = color / 2; + } skeleton.skinText[where + 1] = 0; skeleton.skinText[where + 2] = 0; } } } - if (creature == wolftype) + } + if (creature == wolftype) { for (i = startx; i < endx; i++) { for (j = starty; j < endy; j++) { if (wolfbloodText[(i * texdetailint - offsetx) * 512 * 3 + (j * texdetailint - offsety) * 3 + 0] <= which + 4 && wolfbloodText[(i * texdetailint - offsetx) * 512 * 3 + (j * texdetailint - offsety) * 3 + 0] >= which - 4) { color = Random() % 85 + 170; where = i * skeleton.skinsize * 3 + j * 3; - if (skeleton.skinText[where + 0] > color / 2) + if (skeleton.skinText[where + 0] > color / 2) { skeleton.skinText[where + 0] = color / 2; + } skeleton.skinText[where + 1] = 0; skeleton.skinText[where + 2] = 0; } else if (wolfbloodText[(i * texdetailint - offsetx) * 512 * 3 + (j * texdetailint - offsety) * 3 + 0] <= 160 + 4 && wolfbloodText[(i * texdetailint - offsetx) * 512 * 3 + (j * texdetailint - offsety) * 3 + 0] >= 160 - 4) { color = Random() % 85 + 170; where = i * skeleton.skinsize * 3 + j * 3; - if (skeleton.skinText[where + 0] > color / 2) + if (skeleton.skinText[where + 0] > color / 2) { skeleton.skinText[where + 0] = color / 2; + } skeleton.skinText[where + 1] = 0; skeleton.skinText[where + 2] = 0; } } } + } skeleton.drawmodel.textureptr.bind(); DoMipmaps(); @@ -1147,18 +1324,23 @@ bool Person::DoBloodBigWhere(float howmuch, int which, XYZ where) bleedx = coordsx * 512; bleedy /= realtexdetail; bleedx /= realtexdetail; - if (bleedx < 0) + if (bleedx < 0) { bleedx = 0; - if (bleedy < 0) + } + if (bleedy < 0) { bleedy = 0; - if (bleedx > skeleton.skinsize - 1) + } + if (bleedx > skeleton.skinsize - 1) { bleedx = skeleton.skinsize - 1; - if (bleedy > skeleton.skinsize - 1) + } + if (bleedy > skeleton.skinsize - 1) { bleedy = skeleton.skinsize - 1; + } direction = abs(Random() % 2) * 2 - 1; } - if (whichtri == -1) + if (whichtri == -1) { return 0; + } } bleeding = howmuch + (float)abs(Random() % 100) / 200 - .25; deathbleeding += bleeding; @@ -1168,35 +1350,29 @@ bool Person::DoBloodBigWhere(float howmuch, int which, XYZ where) if (abs(Random() % 2) == 0) { aitype = gethelptype; lastseentime = 12; - } else + } else { aitype = attacktypecutoff; + } ally = 0; } - if (bleeding > 2) + if (bleeding > 2) { bleeding = 2; + } return 1; } - - /* EFFECT * guessing this performs a reversal */ void Person::Reverse() { - if (!((victim->aitype == playercontrolled - || hostiletime > 1 - || staggerdelay <= 0) - && victim->animTarget != jumpupanim - && victim->animTarget != jumpdownanim - && (!Tutorial::active || cananger) - && hostile)) + if (!((victim->aitype == playercontrolled || hostiletime > 1 || staggerdelay <= 0) && victim->animTarget != jumpupanim && victim->animTarget != jumpdownanim && (!Tutorial::active || cananger) && hostile)) { return; + } - if (normaldotproduct (victim->facing, victim->coords - coords) > 0 - && (victim->id != 0 || difficulty >= 2) - && (creature != wolftype || victim->creature == wolftype)) + if (normaldotproduct(victim->facing, victim->coords - coords) > 0 && (victim->id != 0 || difficulty >= 2) && (creature != wolftype || victim->creature == wolftype)) { return; + } if (animTarget == sweepanim) { animTarget = sweepreversedanim; @@ -1226,14 +1402,16 @@ void Person::Reverse() if (victim->weaponactive != -1) { victim->throwtogglekeydown = 1; XYZ tempVelocity = victim->velocity * .2; - if (tempVelocity.x == 0) + 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]; - if (victim->weaponstuck == victim->num_weapons) + if (victim->weaponstuck == victim->num_weapons) { victim->weaponstuck = 0; + } } victim->weaponactive = -1; @@ -1251,14 +1429,16 @@ void Person::Reverse() if (victim->weaponactive != -1) { victim->throwtogglekeydown = 1; XYZ tempVelocity = victim->velocity * .2; - if (tempVelocity.x == 0) + 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]; - if (victim->weaponstuck == victim->num_weapons) + if (victim->weaponstuck == victim->num_weapons) { victim->weaponstuck = 0; + } } victim->weaponactive = -1; @@ -1275,14 +1455,16 @@ void Person::Reverse() if (victim->weaponactive != -1) { victim->throwtogglekeydown = 1; XYZ tempVelocity = victim->velocity * .2; - if (tempVelocity.x == 0) + 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]; - if (victim->weaponstuck == victim->num_weapons) + if (victim->weaponstuck == victim->num_weapons) { victim->weaponstuck = 0; + } } victim->weaponactive = -1; @@ -1299,14 +1481,16 @@ void Person::Reverse() if (victim->weaponactive != -1) { victim->throwtogglekeydown = 1; XYZ tempVelocity = victim->velocity * .2; - if (tempVelocity.x == 0) + 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]; - if (victim->weaponstuck == victim->num_weapons) + if (victim->weaponstuck == victim->num_weapons) { victim->weaponstuck = 0; + } } victim->weaponactive = -1; @@ -1360,10 +1544,12 @@ void Person::Reverse() if (abs(Random() % 20) == 0 || weapons[victim->weaponids[victim->weaponactive]].getType() == knife) { if (victim->weaponactive != -1) { if (weapons[victim->weaponids[0]].getType() == staff || weapons[weaponids[0]].getType() == staff) { - if (weapons[victim->weaponids[0]].getType() == staff) + if (weapons[victim->weaponids[0]].getType() == staff) { weapons[victim->weaponids[0]].damage += .2 + float(abs(Random() % 100) - 50) / 250; - if (weapons[weaponids[0]].getType() == staff) + } + if (weapons[weaponids[0]].getType() == staff) { weapons[weaponids[0]].damage += .2 + float(abs(Random() % 100) - 50) / 250; + } emit_sound_at(swordstaffsound, victim->coords); } else { emit_sound_at(metalhitsound, victim->coords); @@ -1382,8 +1568,9 @@ void Person::Reverse() victim->num_weapons--; if (victim->num_weapons) { victim->weaponids[0] = victim->weaponids[num_weapons]; - if (victim->weaponstuck == victim->num_weapons) + if (victim->weaponstuck == victim->num_weapons) { victim->weaponstuck = 0; + } } victim->weaponactive = -1; for (unsigned i = 0; i < Person::players.size(); i++) { @@ -1394,10 +1581,12 @@ void Person::Reverse() if (abs(Random() % 20) == 0) { if (weaponactive != -1) { if (weapons[victim->weaponids[0]].getType() == staff || weapons[weaponids[0]].getType() == staff) { - if (weapons[victim->weaponids[0]].getType() == staff) + if (weapons[victim->weaponids[0]].getType() == staff) { weapons[victim->weaponids[0]].damage += .2 + float(abs(Random() % 100) - 50) / 250; - if (weapons[weaponids[0]].getType() == staff) + } + if (weapons[weaponids[0]].getType() == staff) { weapons[weaponids[0]].damage += .2 + float(abs(Random() % 100) - 50) / 250; + } emit_sound_at(swordstaffsound, coords); } else { @@ -1418,18 +1607,17 @@ void Person::Reverse() num_weapons--; if (num_weapons) { weaponids[0] = weaponids[num_weapons]; - if (weaponstuck == num_weapons) + if (weaponstuck == num_weapons) { weaponstuck = 0; + } } weaponactive = -1; for (unsigned i = 0; i < Person::players.size(); i++) { Person::players[i]->wentforweapon = 0; } - - } } - if (hasvictim) + if (hasvictim) { if (animTarget == knifeslashstartanim || animTarget == swordslashanim || animTarget == staffhitanim || animTarget == staffspinhitanim) { if ((animTarget != staffhitanim && animTarget != staffspinhitanim) || distsq(&coords, &victim->coords) > .2) { victim->animTarget = dodgebackanim; @@ -1441,8 +1629,9 @@ void Person::Reverse() Normalise(&rotatetarget); victim->targetyaw = -asin(0 - rotatetarget.x); victim->targetyaw *= 360 / 6.28; - if (rotatetarget.z < 0) + if (rotatetarget.z < 0) { victim->targetyaw = 180 - victim->targetyaw; + } victim->targettilt2 = -asin(rotatetarget.y) * 360 / 6.28; //*-70; @@ -1459,8 +1648,9 @@ void Person::Reverse() Normalise(&rotatetarget); victim->targetyaw = -asin(0 - rotatetarget.x); victim->targetyaw *= 360 / 6.28; - if (rotatetarget.z < 0) + if (rotatetarget.z < 0) { victim->targetyaw = 180 - victim->targetyaw; + } victim->targettilt2 = -asin(rotatetarget.y) * 360 / 6.28; //*-70; @@ -1469,6 +1659,7 @@ void Person::Reverse() victim->lastattack = victim->animTarget; } } + } velocity = 0; victim->velocity = 0; @@ -1483,8 +1674,9 @@ void Person::Reverse() } } - if (victim->id == 0 && Animation::animations[victim->animTarget].attack == reversal) + if (victim->id == 0 && Animation::animations[victim->animTarget].attack == reversal) { numreversals++; + } } /* EFFECT @@ -1511,10 +1703,12 @@ void Person::DoDamage(float howmuch) superpermanentdamage += howmuch / 4 / power; } // visual effects - if (permanentdamage > damagetolerance / 2 && permanentdamage - howmuch < damagetolerance / 2 && Random() % 2) + if (permanentdamage > damagetolerance / 2 && permanentdamage - howmuch < damagetolerance / 2 && Random() % 2) { DoBlood(1, 255); - if ((permanentdamage > damagetolerance * .8 && Random() % 2 && !deathbleeding) || spurt) + } + if ((permanentdamage > damagetolerance * .8 && Random() % 2 && !deathbleeding) || spurt) { DoBlood(1, 255); + } spurt = 0; if (id == 0) { camerashake += howmuch / 100; @@ -1527,14 +1721,16 @@ void Person::DoDamage(float howmuch) } // cancel attack? - if (aitype == passivetype && damage < damagetolerance && ((!Tutorial::active || cananger) && hostile)) + if (aitype == passivetype && damage < damagetolerance && ((!Tutorial::active || cananger) && hostile)) { aitype = attacktypecutoff; + } if (!Tutorial::active && aitype != playercontrolled && damage < damagetolerance && damage > damagetolerance * 2 / 3 && creature == rabbittype) { if (abs(Random() % 2) == 0) { aitype = gethelptype; lastseentime = 12; - } else + } else { aitype = attacktypecutoff; + } ally = 0; } @@ -1576,17 +1772,21 @@ void Person::DoDamage(float howmuch) if (creature == wolftype) { int i = abs(Random() % 2); - if (i == 0) + if (i == 0) { whichsound = snarlsound; - if (i == 1) + } + if (i == 1) { whichsound = snarl2sound; + } } if (creature == rabbittype) { int i = abs(Random() % 2); - if (i == 0) + if (i == 0) { whichsound = rabbitpainsound; - if (i == 1 && damage > damagetolerance) + } + if (i == 1 && damage > damagetolerance) { whichsound = rabbitpain1sound; + } } if (whichsound != -1) { @@ -1613,51 +1813,68 @@ void Person::DoHead() targetheadyaw = (float)((int)((0 - yaw - targetheadyaw + 180) * 100) % 36000) / 100; targetheadpitch = (float)((int)(targetheadpitch * 100) % 36000) / 100; - while (targetheadyaw > 180)targetheadyaw -= 360; - while (targetheadyaw < -180)targetheadyaw += 360; + while (targetheadyaw > 180) { + targetheadyaw -= 360; + } + while (targetheadyaw < -180) { + targetheadyaw += 360; + } - if (targetheadyaw > 160) + if (targetheadyaw > 160) { targetheadpitch = targetheadpitch * -1; - if (targetheadyaw < -160) + } + if (targetheadyaw < -160) { targetheadpitch = targetheadpitch * -1; - if (targetheadyaw > 160) + } + if (targetheadyaw > 160) { targetheadyaw = targetheadyaw - 180; - if (targetheadyaw < -160) + } + if (targetheadyaw < -160) { targetheadyaw = targetheadyaw + 180; + } - if (targetheadpitch > 120) + if (targetheadpitch > 120) { targetheadpitch = 120; - if (targetheadpitch < -120) + } + if (targetheadpitch < -120) { targetheadpitch = -120; - if (targetheadyaw > 120) + } + if (targetheadyaw > 120) { targetheadyaw = 120; - if (targetheadyaw < -120) + } + if (targetheadyaw < -120) { targetheadyaw = -120; + } - if (!isIdle()) + if (!isIdle()) { targetheadpitch = 0; + } if (isIdle()) { - if (targetheadyaw > 80) + if (targetheadyaw > 80) { targetheadyaw = 80; - if (targetheadyaw < -80) + } + if (targetheadyaw < -80) { targetheadyaw = -80; - if (targetheadpitch > 50) + } + if (targetheadpitch > 50) { targetheadpitch = 50; - if (targetheadpitch < -50) + } + if (targetheadpitch < -50) { targetheadpitch = -50; + } } - if (abs(headyaw - targetheadyaw) < multiplier * lookspeed) + if (abs(headyaw - targetheadyaw) < multiplier * lookspeed) { headyaw = targetheadyaw; - else if (headyaw > targetheadyaw) { + } else if (headyaw > targetheadyaw) { headyaw -= multiplier * lookspeed; } else if (headyaw < targetheadyaw) { headyaw += multiplier * lookspeed; } - if (abs(headpitch - targetheadpitch) < multiplier * lookspeed / 2) + if (abs(headpitch - targetheadpitch) < multiplier * lookspeed / 2) { headpitch = targetheadpitch; - else if (headpitch > targetheadpitch) { + } else if (headpitch > targetheadpitch) { headpitch -= multiplier * lookspeed / 2; } else if (headpitch < targetheadpitch) { headpitch += multiplier * lookspeed / 2; @@ -1699,13 +1916,15 @@ void Person::DoHead() void Person::RagDoll(bool checkcollision) { static XYZ change; - static int l, i; + static int i; static float speed; if (!skeleton.free) { - if (id == 0) + if (id == 0) { numfalls++; - if (id == 0 && isFlip()) + } + if (id == 0 && isFlip()) { numflipfail++; + } escapednum = 0; @@ -1723,20 +1942,38 @@ void Person::RagDoll(bool checkcollision) freefall = 1; skeleton.freefall = 1; - if (!isnormal(velocity.x)) velocity.x = 0; - if (!isnormal(velocity.y)) velocity.y = 0; - if (!isnormal(velocity.z)) velocity.z = 0; - if (!isnormal(yaw)) yaw = 0; - if (!isnormal(coords.x)) coords = 0; - if (!isnormal(tilt)) tilt = 0; - if (!isnormal(tilt2)) tilt2 = 0; + if (!isnormal(velocity.x)) { + velocity.x = 0; + } + if (!isnormal(velocity.y)) { + velocity.y = 0; + } + if (!isnormal(velocity.z)) { + velocity.z = 0; + } + if (!isnormal(yaw)) { + yaw = 0; + } + if (!isnormal(coords.x)) { + coords = 0; + } + if (!isnormal(tilt)) { + tilt = 0; + } + if (!isnormal(tilt2)) { + tilt2 = 0; + } for (unsigned 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); - 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 = coords; + 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 = coords; + } skeleton.joints[i].position.y += .1; skeleton.joints[i].oldposition = skeleton.joints[i].position; skeleton.joints[i].realoldposition = skeleton.joints[i].position * scale + coords; @@ -1758,16 +1995,18 @@ void Person::RagDoll(bool checkcollision) if (currentFrame().speed > targetFrame().speed) { speed = currentFrame().speed * 2; } - if (transspeed) + if (transspeed) { speed = transspeed * 2; + } speed *= speedmult; for (unsigned 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) + 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((targetFrame().joints[i].position - currentFrame().joints[i].position) * speed, 0, 0, tilt), tilt2, 0, 0), 0, yaw, 0); - else + } 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; @@ -1799,16 +2038,15 @@ void Person::RagDoll(bool checkcollision) whichpatchx = coords.x / (terrain.size / subdivision * terrain.scale); whichpatchz = coords.z / (terrain.size / subdivision * terrain.scale); - if (terrain.patchobjectnum[whichpatchx][whichpatchz]) - for (l = 0; l < terrain.patchobjectnum[whichpatchx][whichpatchz]; l++) { - i = terrain.patchobjects[whichpatchx][whichpatchz][l]; - lowpoint = coords; - lowpoint.y += 1; - if (SphereCheck(&lowpoint, 3, &colpoint, &Object::objects[i]->position, &Object::objects[i]->yaw, &Object::objects[i]->model) != -1) { - coords.x = lowpoint.x; - coords.z = lowpoint.z; - } + for (unsigned int l = 0; l < terrain.patchobjects[whichpatchx][whichpatchz].size(); l++) { + i = terrain.patchobjects[whichpatchx][whichpatchz][l]; + lowpoint = coords; + lowpoint.y += 1; + if (SphereCheck(&lowpoint, 3, &colpoint, &Object::objects[i]->position, &Object::objects[i]->yaw, &Object::objects[i]->model) != -1) { + coords.x = lowpoint.x; + coords.z = lowpoint.z; } + } } yaw = 0; @@ -1828,8 +2066,9 @@ void Person::RagDoll(bool checkcollision) num_weapons--; if (num_weapons) { weaponids[0] = weaponids[num_weapons]; - if (weaponstuck == num_weapons) + if (weaponstuck == num_weapons) { weaponstuck = 0; + } } weaponactive = -1; for (unsigned i = 0; i < Person::players.size(); i++) { @@ -1845,8 +2084,6 @@ void Person::RagDoll(bool checkcollision) } } - - /* EFFECT */ void Person::FootLand(bodypart whichfoot, float opacity) @@ -1861,12 +2098,14 @@ void Person::FootLand(bodypart whichfoot, float opacity) if (opacity > 1) { footvel = 0; footpoint = DoRotation(jointPos(whichfoot), 0, yaw, 0) * scale + coords; - if (distsq(&footpoint, &viewer)) + if (distsq(&footpoint, &viewer)) { Sprite::MakeSprite(cloudsprite, footpoint, footvel, 1, 1, 1, .5, .2 * opacity); + } } else if (onterrain && terrain.getOpacity(coords.x, coords.z) < .2) { footvel = velocity / 5; - if (footvel.y < .8) + if (footvel.y < .8) { footvel.y = .8; + } footpoint = DoRotation(jointPos(whichfoot), 0, yaw, 0) * scale + coords; footpoint.y = terrain.getHeight(footpoint.x, footpoint.z); terrainlight = terrain.getLighting(footpoint.x, footpoint.z); @@ -1887,8 +2126,9 @@ void Person::FootLand(bodypart whichfoot, float opacity) } } else if (isLanding() || (animTarget == jumpupanim) || isLandhard()) { footvel = velocity / 5; - if (footvel.y < .8) + if (footvel.y < .8) { footvel.y = .8; + } footpoint = DoRotation(jointPos(whichfoot), 0, yaw, 0) * scale + coords; if (distsq(&footpoint, &viewer) < viewdistance * viewdistance / 4) { Sprite::MakeSprite(cloudsprite, footpoint, footvel * .6, 1, 1, 1, .5, .2 * opacity); @@ -1912,7 +2152,7 @@ void Person::Puff(int whichlabel) /* EFFECT * I think I added this in an attempt to clean up code */ -void Person::setAnimation(int animation) +void Person::setTargetAnimation(int animation) { animTarget = animation; frameTarget = 0; @@ -1928,67 +2168,72 @@ void Person::DoAnimations() if (!skeleton.free) { static float oldtarget; - if (isIdle() && animCurrent != getIdle()) + if (isIdle() && animCurrent != getIdle()) { normalsupdatedelay = 0; + } if (animTarget == tempanim || animCurrent == tempanim) { Animation::animations[tempanim] = tempanimation; } if (animTarget == jumpupanim || animTarget == jumpdownanim || isFlip()) { float gLoc[3]; - float vel[3]; gLoc[0] = coords.x; gLoc[1] = coords.y; gLoc[2] = coords.z; - vel[0] = velocity.x; - vel[1] = velocity.y; - vel[2] = velocity.z; if (id == 0) { - OPENAL_3D_SetAttributes(channels[whooshsound], gLoc, vel); + OPENAL_3D_SetAttributes(channels[whooshsound], gLoc); OPENAL_SetVolume(channels[whooshsound], 64 * findLength(&velocity) / 5); } - if (((velocity.y < -15) || (crouchkeydown && velocity.y < -8)) && abs(velocity.y) * 4 > fast_sqrt(velocity.x * velocity.x * velocity.z * velocity.z)) + if (((velocity.y < -15) || (crouchkeydown && velocity.y < -8)) && abs(velocity.y) * 4 > fast_sqrt(velocity.x * velocity.x * velocity.z * velocity.z)) { landhard = 1; - if (!crouchkeydown && velocity.y >= -15) + } + if (!crouchkeydown && velocity.y >= -15) { landhard = 0; + } } - if ((animCurrent == jumpupanim || animTarget == jumpdownanim)/*&&velocity.y<40*/ && !isFlip() && (!isLanding() && !isLandhard()) && ((crouchkeydown && !crouchtogglekeydown))) { + if ((animCurrent == jumpupanim || animTarget == jumpdownanim) /*&&velocity.y<40*/ && !isFlip() && (!isLanding() && !isLandhard()) && ((crouchkeydown && !crouchtogglekeydown))) { XYZ targfacing; targfacing = 0; targfacing.z = 1; targfacing = DoRotation(targfacing, 0, targetyaw, 0); - if (normaldotproduct(targfacing, velocity) >= -.3) + if (normaldotproduct(targfacing, velocity) >= -.3) { animTarget = flipanim; - else + } else { animTarget = backflipanim; + } crouchtogglekeydown = 1; frameTarget = 0; target = 0; - if (id == 0) + if (id == 0) { numflipped++; + } } - if (Animation::animations[animTarget].attack != reversed) + if (Animation::animations[animTarget].attack != reversed) { feint = 0; + } if (!crouchkeydown || (isLanding() || isLandhard()) || (wasLanding() || wasLandhard())) { crouchtogglekeydown = 0; - if (aitype == playercontrolled) + if (aitype == playercontrolled) { feint = 0; + } } else { - if (!crouchtogglekeydown && Animation::animations[animTarget].attack == reversed && aitype == playercontrolled && (escapednum < 2 || reversaltrain)) + if (!crouchtogglekeydown && Animation::animations[animTarget].attack == reversed && aitype == playercontrolled && (escapednum < 2 || reversaltrain)) { feint = 1; - if (!isFlip()) + } + if (!isFlip()) { crouchtogglekeydown = 1; + } } - if (Animation::animations[animTarget].attack || animCurrent == getupfrombackanim || animCurrent == getupfromfrontanim) { - if (detail) + if (detail) { normalsupdatedelay = 0; + } } if (target >= 1) { @@ -2000,19 +2245,22 @@ void Person::DoAnimations() } if (animTarget == rabbittacklinganim && frameTarget == 1) { - if (victim->aitype == attacktypecutoff && victim->stunned <= 0 && victim->surprised <= 0 && victim->id != 0) + if (victim->aitype == attacktypecutoff && victim->stunned <= 0 && victim->surprised <= 0 && victim->id != 0) { Reverse(); + } if (animTarget == rabbittacklinganim && frameTarget == 1 && !victim->isCrouch() && victim->animTarget != backhandspringanim) { - if (normaldotproduct(victim->facing, facing) > 0) + if (normaldotproduct(victim->facing, facing) > 0) { victim->animTarget = rabbittackledbackanim; - else + } else { victim->animTarget = rabbittackledfrontanim; + } victim->frameTarget = 2; victim->target = 0; victim->yaw = yaw; victim->targetyaw = yaw; - if (victim->aitype == gethelptype) + if (victim->aitype == gethelptype) { victim->DoDamage(victim->damagetolerance - victim->damage); + } //victim->DoDamage(30); if (creature == wolftype) { DoBloodBig(0, 255); @@ -2027,10 +2275,11 @@ void Person::DoAnimations() 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) + if (weaponactive == -1) { weaponactive = 0; - else if (weaponactive == 0) + } else if (weaponactive == 0) { weaponactive = -1; + } if (weaponactive == -1) { emit_sound_at(knifesheathesound, coords); @@ -2042,47 +2291,54 @@ void Person::DoAnimations() drawtogglekeydown = 1; } //Footstep sounds - if (!Tutorial::active || id == 0) + if (!Tutorial::active || id == 0) { if ((targetFrame().label && (targetFrame().label < 5 || targetFrame().label == 8))) { int whichsound = -1; if (onterrain) { if (terrain.getOpacity(coords.x, coords.z) < .2) { - if (targetFrame().label == 1) + if (targetFrame().label == 1) { whichsound = footstepsound; - else + } else { whichsound = footstepsound2; - if (targetFrame().label == 1) + } + if (targetFrame().label == 1) { FootLand(leftfoot, 1); - if (targetFrame().label == 2) + } + if (targetFrame().label == 2) { FootLand(rightfoot, 1); + } if (targetFrame().label == 3 && isRun()) { FootLand(rightfoot, 1); FootLand(leftfoot, 1); } - } if (terrain.getOpacity(coords.x, coords.z) >= .2) { - if (targetFrame().label == 1) + if (targetFrame().label == 1) { whichsound = footstepsound3; - else + } else { whichsound = footstepsound4; + } } } if (!onterrain) { - if (targetFrame().label == 1) + if (targetFrame().label == 1) { whichsound = footstepsound3; - else + } else { whichsound = footstepsound4; + } } 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 (r == 0) { whichsound = lowwhooshsound; - if (r == 1) + } + if (r == 1) { whichsound = midwhooshsound; - if (r == 2) + } + if (r == 2) { whichsound = highwhooshsound; + } } if (Animation::animations[animTarget].attack == neutral) { whichsound = movewhooshsound; @@ -2113,27 +2369,44 @@ void Person::DoAnimations() } } } + } //Combat sounds - if (!Tutorial::active || id == 0) - if (speechdelay <= 0) - if (animTarget != crouchstabanim && animTarget != swordgroundstabanim && animTarget != staffgroundsmashanim) + if (!Tutorial::active || id == 0) { + if (speechdelay <= 0) { + if (animTarget != crouchstabanim && animTarget != swordgroundstabanim && animTarget != staffgroundsmashanim) { if ((targetFrame().label && (targetFrame().label < 5 || targetFrame().label == 8))) { int whichsound = -1; if (targetFrame().label == 4 && aitype != playercontrolled) { if (Animation::animations[animTarget].attack != neutral) { unsigned r = abs(Random() % 4); if (creature == rabbittype) { - if (r == 0) whichsound = rabbitattacksound; - if (r == 1) whichsound = rabbitattack2sound; - if (r == 2) whichsound = rabbitattack3sound; - if (r == 3) whichsound = rabbitattack4sound; + if (r == 0) { + whichsound = rabbitattacksound; + } + if (r == 1) { + whichsound = rabbitattack2sound; + } + if (r == 2) { + whichsound = rabbitattack3sound; + } + if (r == 3) { + whichsound = rabbitattack4sound; + } } if (creature == wolftype) { - if (r == 0) whichsound = barksound; - if (r == 1) whichsound = bark2sound; - if (r == 2) whichsound = bark3sound; - if (r == 3) whichsound = barkgrowlsound; + if (r == 0) { + whichsound = barksound; + } + if (r == 1) { + whichsound = bark2sound; + } + if (r == 2) { + whichsound = bark3sound; + } + if (r == 3) { + whichsound = barkgrowlsound; + } } speechdelay = .3; } @@ -2143,8 +2416,9 @@ void Person::DoAnimations() emit_sound_at(whichsound, coords); } } - - + } + } + } if ((!wasLanding() && !wasLandhard()) && animCurrent != getIdle() && (isLanding() || isLandhard())) { FootLand(leftfoot, 1); @@ -2159,7 +2433,7 @@ void Person::DoAnimations() if (animTarget == removeknifeanim && Animation::animations[animTarget].frames[frameCurrent].label == 5) { for (unsigned i = 0; i < weapons.size(); i++) { - if (weapons[i].owner == -1) + if (weapons[i].owner == -1) { if (distsqflat(&coords, &weapons[i].position) < 4 && weaponactive == -1) { if (distsq(&coords, &weapons[i].position) >= 1) { if (weapons[i].getType() != staff) { @@ -2169,27 +2443,33 @@ void Person::DoAnimations() takeWeapon(i); } } + } } } if (animTarget == crouchremoveknifeanim && Animation::animations[animTarget].frames[frameCurrent].label == 5) { for (unsigned i = 0; i < weapons.size(); i++) { bool willwork = true; - if (weapons[i].owner != -1) - if (Person::players[weapons[i].owner]->weaponstuck != -1) - if (Person::players[weapons[i].owner]->weaponids[Person::players[weapons[i].owner]->weaponstuck] == int(i)) - if (Person::players[weapons[i].owner]->num_weapons > 1) + if (weapons[i].owner != -1) { + if (Person::players[weapons[i].owner]->weaponstuck != -1) { + if (Person::players[weapons[i].owner]->weaponids[Person::players[weapons[i].owner]->weaponstuck] == int(i)) { + if (Person::players[weapons[i].owner]->num_weapons > 1) { willwork = 0; - if ((weapons[i].owner == -1) || (hasvictim && (weapons[i].owner == int(victim->id)) && victim->skeleton.free)) + } + } + } + } + if ((weapons[i].owner == -1) || (hasvictim && (weapons[i].owner == int(victim->id)) && victim->skeleton.free)) { if (willwork && distsqflat(&coords, &weapons[i].position) < 3 && weaponactive == -1) { if (distsq(&coords, &weapons[i].position) < 1 || hasvictim) { bool fleshstuck = false; - if (weapons[i].owner != -1) + if (weapons[i].owner != -1) { if (victim->weaponstuck != -1) { if (victim->weaponids[victim->weaponstuck] == int(i)) { fleshstuck = true; } } + } if (fleshstuck) { emit_sound_at(fleshstabremovesound, coords, 128.); } else { @@ -2199,10 +2479,11 @@ void Person::DoAnimations() } if (weapons[i].owner != -1) { victim = Person::players[weapons[i].owner]; - if (victim->num_weapons == 1) + if (victim->num_weapons == 1) { victim->num_weapons = 0; - else + } else { victim->num_weapons = 1; + } //victim->weaponactive=-1; victim->skeleton.longdead = 0; @@ -2223,18 +2504,21 @@ void Person::DoAnimations() footpoint = weapons[i].position; if (victim->weaponstuck != -1) { if (victim->weaponids[victim->weaponstuck] == int(i)) { - if (bloodtoggle) + if (bloodtoggle) { Sprite::MakeSprite(cloudimpactsprite, footpoint, footvel, 1, 0, 0, .8, .3); + } weapons[i].bloody = 2; weapons[i].blooddrip = 5; victim->weaponstuck = -1; } } if (victim->num_weapons > 0) { - if (victim->weaponstuck != 0 && victim->weaponstuck != -1) + if (victim->weaponstuck != 0 && victim->weaponstuck != -1) { victim->weaponstuck = 0; - if (victim->weaponids[0] == int(i)) + } + if (victim->weaponids[0] == int(i)) { victim->weaponids[0] = victim->weaponids[victim->num_weapons]; + } } victim->jointVel(abdomen) += relative * 6; @@ -2245,13 +2529,14 @@ void Person::DoAnimations() takeWeapon(i); } } + } } } if (animCurrent == drawleftanim && Animation::animations[animTarget].frames[frameCurrent].label == 5) { - if (weaponactive == -1) + if (weaponactive == -1) { weaponactive = 0; - else if (weaponactive == 0) { + } else if (weaponactive == 0) { weaponactive = -1; if (num_weapons == 2) { int buffer; @@ -2268,30 +2553,36 @@ void Person::DoAnimations() } } - if ((animCurrent == walljumprightkickanim && animTarget == walljumprightkickanim) || (animCurrent == walljumpleftkickanim && animTarget == walljumpleftkickanim)) { XYZ rotatetarget = DoRotation(skeleton.forward, 0, yaw, 0); Normalise(&rotatetarget); targetyaw = -asin(0 - rotatetarget.x); targetyaw *= 360 / 6.28; - if (rotatetarget.z < 0) + if (rotatetarget.z < 0) { targetyaw = 180 - targetyaw; + } - if (animTarget == walljumprightkickanim) + if (animTarget == walljumprightkickanim) { targetyaw += 40; - if (animTarget == walljumpleftkickanim) + } + if (animTarget == walljumpleftkickanim) { targetyaw -= 40; + } } bool dojumpattack; dojumpattack = 0; - if ((animTarget == rabbitrunninganim || animTarget == wolfrunninganim) && frameTarget == 3 && (jumpkeydown || attackkeydown || id != 0)) + if ((animTarget == rabbitrunninganim || animTarget == wolfrunninganim) && frameTarget == 3 && (jumpkeydown || attackkeydown || id != 0)) { dojumpattack = 1; - if (hasvictim) - if (distsq(&victim->coords, &/*Person::players[i]->*/coords) < 5 && victim->aitype == gethelptype && (attackkeydown) && !victim->skeleton.free && victim->isRun() && victim->runninghowlong >= 1) + } + if (hasvictim) { + if (distsq(&victim->coords, &/*Person::players[i]->*/ coords) < 5 && victim->aitype == gethelptype && (attackkeydown) && !victim->skeleton.free && victim->isRun() && victim->runninghowlong >= 1) { dojumpattack = 1; - if (!hostile) + } + } + if (!hostile) { dojumpattack = 0; + } if (dojumpattack) { if ((animTarget == rabbitrunninganim || animTarget == wolfrunninganim) && id == 0) { animTarget = rabbittackleanim; @@ -2308,13 +2599,14 @@ void Person::DoAnimations() Normalise(&targetloc); targetloc += coords; for (unsigned i = 0; i < Person::players.size(); i++) { - if (i != id) + if (i != id) { if (distsq(&targetloc, &Person::players[i]->coords) < closestdist || closestdist == 0) { closestdist = distsq(&targetloc, &Person::players[i]->coords); closestid = i; } + } } - if (closestid != -1) + if (closestid != -1) { if (closestdist < 5 && !Person::players[closestid]->dead && Animation::animations[Person::players[closestid]->animTarget].height != lowheight && Person::players[closestid]->animTarget != backhandspringanim) { hasvictim = 1; victim = Person::players[closestid]; @@ -2329,19 +2621,22 @@ void Person::DoAnimations() Normalise(&rotatetarget); targetyaw = -asin(0 - rotatetarget.x); targetyaw *= 360 / 6.28; - if (rotatetarget.z < 0) + if (rotatetarget.z < 0) { targetyaw = 180 - targetyaw; + } } if (animTarget != rabbitrunninganim) { emit_sound_at(jumpsound, coords, 128.); } } + } } //Move impacts float damagemult = 1 * power; - if (creature == wolftype) + if (creature == wolftype) { damagemult = 2.5 * power; + } if (hasvictim) { damagemult /= victim->damagetolerance / 200; } @@ -2349,13 +2644,15 @@ void Person::DoAnimations() if (animTarget == spinkickanim && Animation::animations[animTarget].frames[frameCurrent].label == 5) { if (distsq(&coords, &victim->coords) < (scale * 5) * (scale * 5) * 3 && Animation::animations[victim->animTarget].height != lowheight) { escapednum = 0; - if (id == 0) + if (id == 0) { camerashake += .4; + } if (Random() % 2 || creature == wolftype) { victim->spurt = 1; DoBlood(.2, 250); - if (creature == wolftype) + if (creature == wolftype) { DoBloodBig(0, 250); + } } if (!Tutorial::active) { emit_sound_at(heavyimpactsound, victim->coords, 128.); @@ -2385,12 +2682,14 @@ void Person::DoAnimations() if (animTarget == wolfslapanim && Animation::animations[animTarget].frames[frameCurrent].label == 5) { if (distsq(&coords, &victim->coords) < (scale * 5) * (scale * 5) * 3 && Animation::animations[victim->animTarget].height != lowheight) { escapednum = 0; - if (id == 0) + if (id == 0) { camerashake += .4; + } if (Random() % 2 || creature == wolftype) { victim->spurt = 1; - if (creature == wolftype) + if (creature == wolftype) { DoBloodBig(0, 235); + } } emit_sound_at(whooshhitsound, victim->coords); if (creature == wolftype) { @@ -2418,8 +2717,9 @@ void Person::DoAnimations() if (animTarget == walljumprightkickanim && Animation::animations[animTarget].frames[frameCurrent].label == 5) { if (distsq(&coords, &victim->coords) < (scale * 5) * (scale * 5) * 3 && Animation::animations[victim->animTarget].height != lowheight) { escapednum = 0; - if (id == 0) + if (id == 0) { camerashake += .4; + } victim->spurt = 1; DoBlood(.2, 250); if (!Tutorial::active) { @@ -2443,18 +2743,20 @@ void Person::DoAnimations() victim->Puff(head); victim->DoDamage(damagemult * 150 / victim->protectionhead); - if (victim->damage > victim->damagetolerance) + if (victim->damage > victim->damagetolerance) { award_bonus(id, style); - else + } else { SolidHitBonus(id); + } } } if (animTarget == walljumpleftkickanim && Animation::animations[animTarget].frames[frameCurrent].label == 5) { if (distsq(&coords, &victim->coords) < (scale * 5) * (scale * 5) * 3 && Animation::animations[victim->animTarget].height != lowheight) { escapednum = 0; - if (id == 0) + if (id == 0) { camerashake += .4; + } victim->spurt = 1; DoBlood(.2, 250); if (!Tutorial::active) { @@ -2478,18 +2780,20 @@ void Person::DoAnimations() victim->Puff(head); victim->DoDamage(damagemult * 150 / victim->protectionhead); - if (victim->damage > victim->damagetolerance) + if (victim->damage > victim->damagetolerance) { award_bonus(id, style); - else + } else { SolidHitBonus(id); + } } } if (animTarget == blockhighleftstrikeanim && Animation::animations[animTarget].frames[frameCurrent].label == 5) { if (distsq(&coords, &victim->coords) < (scale * 5) * (scale * 5) * 3 && Animation::animations[victim->animTarget].height != lowheight) { escapednum = 0; - if (id == 0) + if (id == 0) { camerashake += .4; + } if (Random() % 2) { victim->spurt = 1; DoBlood(.2, 235); @@ -2512,8 +2816,9 @@ void Person::DoAnimations() if (animTarget == killanim && Animation::animations[animTarget].frames[frameCurrent].label == 8) { if (distsq(&coords, &victim->coords) < (scale * 5) * (scale * 5) * 3 && victim->dead) { escapednum = 0; - if (id == 0) + if (id == 0) { camerashake += .2; + } emit_sound_at(whooshhitsound, victim->coords, 128.); victim->skeleton.longdead = 0; @@ -2546,8 +2851,9 @@ void Person::DoAnimations() if (animTarget == killanim && Animation::animations[animTarget].frames[frameCurrent].label == 5) { if (distsq(&coords, &victim->coords) < (scale * 5) * (scale * 5) * 9 && victim->dead) { escapednum = 0; - if (id == 0) + if (id == 0) { camerashake += .4; + } if (!Tutorial::active) { emit_sound_at(heavyimpactsound, coords, 128.); } @@ -2571,8 +2877,9 @@ void Person::DoAnimations() if (animTarget == dropkickanim && Animation::animations[animTarget].frames[frameCurrent].label == 7) { if (distsq(&coords, &victim->coords) < (scale * 5) * (scale * 5) * 9 && victim->skeleton.free) { escapednum = 0; - if (id == 0) + if (id == 0) { camerashake += .4; + } if (!Tutorial::active) { emit_sound_at(thudsound, coords); } @@ -2595,25 +2902,27 @@ void Person::DoAnimations() for (unsigned i = 0; i < victim->skeleton.joints.size(); i++) { victim->skeleton.joints[i].velocity += relative * damagemult * 20; } - if (!victim->dead) + if (!victim->dead) { SolidHitBonus(id); + } victim->Puff(abdomen); victim->DoDamage(damagemult * 20 / victim->protectionhigh); victim->jointVel(abdomen) += relative * damagemult * 200; staggerdelay = .5; - if (!victim->dead) + if (!victim->dead) { staggerdelay = 1.2; - - + } } } if ((animTarget == crouchstabanim || animTarget == swordgroundstabanim) && Animation::animations[animTarget].frames[frameCurrent].label == 5) { - if (hasvictim) - if (!victim->skeleton.free) + if (hasvictim) { + if (!victim->skeleton.free) { hasvictim = 0; + } + } if (!hasvictim) { terrain.MakeDecal(blooddecalfast, (weapons[weaponids[weaponactive]].tippoint * .8 + weapons[weaponids[weaponactive]].position * .2), .08, .6, Random() % 360); @@ -2629,8 +2938,9 @@ void Person::DoAnimations() if (weapons[weaponids[weaponactive]].getType() == knife) { where = (weapons[weaponids[weaponactive]].tippoint * .6 + weapons[weaponids[weaponactive]].position * .4); where -= victim->coords; - if (!victim->skeleton.free) + if (!victim->skeleton.free) { where = DoRotation(where, 0, -victim->yaw, 0); + } //where=scale; startpoint = where; startpoint.y += 100; @@ -2640,25 +2950,29 @@ void Person::DoAnimations() if (weapons[weaponids[weaponactive]].getType() == sword) { where = weapons[weaponids[weaponactive]].position; where -= victim->coords; - if (!victim->skeleton.free) + if (!victim->skeleton.free) { where = DoRotation(where, 0, -victim->yaw, 0); + } startpoint = where; where = weapons[weaponids[weaponactive]].tippoint; where -= victim->coords; - if (!victim->skeleton.free) + if (!victim->skeleton.free) { where = DoRotation(where, 0, -victim->yaw, 0); + } endpoint = where; } if (weapons[weaponids[weaponactive]].getType() == staff) { where = weapons[weaponids[weaponactive]].position; where -= victim->coords; - if (!victim->skeleton.free) + if (!victim->skeleton.free) { where = DoRotation(where, 0, -victim->yaw, 0); + } startpoint = where; where = weapons[weaponids[weaponactive]].tippoint; where -= victim->coords; - if (!victim->skeleton.free) + if (!victim->skeleton.free) { where = DoRotation(where, 0, -victim->yaw, 0); + } endpoint = where; } movepoint = 0; @@ -2668,11 +2982,13 @@ void Person::DoAnimations() if (whichtri != -1) { if (victim->dead != 2) { victim->DoDamage(abs((victim->damagetolerance - victim->permanentdamage) * 2)); - if (!victim->dead) + if (!victim->dead) { award_bonus(id, FinishedBonus); + } } - if (bloodtoggle) + if (bloodtoggle) { weapons[weaponids[weaponactive]].bloody = 2; + } victim->skeleton.longdead = 0; victim->skeleton.free = 1; @@ -2684,7 +3000,6 @@ void Person::DoAnimations() //victim->skeleton.joints[i].velocity=0; } emit_sound_at(fleshstabsound, coords, 128); - } if (whichtri != -1 || weapons[weaponids[weaponactive]].bloody) { weapons[weaponids[weaponactive]].blooddrip += 5; @@ -2718,13 +3033,15 @@ void Person::DoAnimations() where = weapons[weaponids[weaponactive]].position; where -= victim->coords; - if (!victim->skeleton.free) + if (!victim->skeleton.free) { where = DoRotation(where, 0, -victim->yaw, 0); + } startpoint = where; where = weapons[weaponids[weaponactive]].tippoint; where -= victim->coords; - if (!victim->skeleton.free) + if (!victim->skeleton.free) { where = DoRotation(where, 0, -victim->yaw, 0); + } endpoint = where; movepoint = 0; @@ -2743,13 +3060,15 @@ void Person::DoAnimations() where = weapons[weaponids[weaponactive]].position; where -= victim->coords; - if (!victim->skeleton.free) + if (!victim->skeleton.free) { where = DoRotation(where, 0, -victim->yaw, 0); + } startpoint = where; where = weapons[weaponids[weaponactive]].tippoint; where -= victim->coords; - if (!victim->skeleton.free) + if (!victim->skeleton.free) { where = DoRotation(where, 0, -victim->yaw, 0); + } endpoint = where; movepoint = 0; @@ -2779,8 +3098,9 @@ void Person::DoAnimations() relative.y = 10; Normalise(&relative); //victim->Puff(abdomen); - if (bloodtoggle) + if (bloodtoggle) { Sprite::MakeSprite(cloudimpactsprite, footpoint, footvel, 1, 0, 0, .8, .3); + } if (victim->bloodloss < victim->damagetolerance) { victim->bloodloss += 1000; @@ -2800,8 +3120,9 @@ void Person::DoAnimations() if (animTarget == upunchanim && Animation::animations[animTarget].frames[frameCurrent].label == 5) { if (distsq(&coords, &victim->coords) < (scale * 5) * (scale * 5) * 3) { escapednum = 0; - if (id == 0) + if (id == 0) { camerashake += .4; + } if (Random() % 2) { victim->spurt = 1; DoBlood(.2, 235); @@ -2834,12 +3155,12 @@ void Person::DoAnimations() } } - if (animTarget == winduppunchanim && Animation::animations[animTarget].frames[frameCurrent].label == 5) { if (distsq(&coords, &victim->coords) < (scale * 5) * (scale * 5) * 2) { escapednum = 0; - if (id == 0) + if (id == 0) { camerashake += .4; + } if (victim->damage <= victim->damagetolerance - 60 && normaldotproduct(victim->facing, victim->coords - coords) < (scale * 5) * (scale * 5) * 0 && Animation::animations[victim->animTarget].height != lowheight) { if (!Tutorial::active) { emit_sound_at(thudsound, victim->coords); @@ -2854,8 +3175,9 @@ void Person::DoAnimations() } } - if (victim->damage > victim->damagetolerance - 60 || normaldotproduct(victim->facing, victim->coords - coords) > 0 || Animation::animations[victim->animTarget].height == lowheight) + if (victim->damage > victim->damagetolerance - 60 || normaldotproduct(victim->facing, victim->coords - coords) > 0 || Animation::animations[victim->animTarget].height == lowheight) { victim->RagDoll(0); + } XYZ relative; relative = victim->coords - coords; relative.y = 0; @@ -2882,8 +3204,9 @@ void Person::DoAnimations() if (animTarget == blockhighleftanim && Animation::animations[animTarget].frames[frameCurrent].label == 5) { if (distsq(&coords, &victim->coords) < (scale * 5) * (scale * 5) * 4) { - if (victim->id == 0) + if (victim->id == 0) { camerashake += .4; + } emit_sound_at(landsound2, victim->coords); Puff(righthand); @@ -2892,15 +3215,18 @@ void Person::DoAnimations() if (animTarget == swordslashparryanim && Animation::animations[animTarget].frames[frameCurrent].label == 5) { if (distsq(&coords, &victim->coords) < (scale * 5) * (scale * 5) * 4) { - if (victim->id == 0) + if (victim->id == 0) { camerashake += .4; + } if (weaponactive != -1) { if (weapons[victim->weaponids[0]].getType() == staff || weapons[weaponids[0]].getType() == staff) { - if (weapons[victim->weaponids[0]].getType() == staff) + if (weapons[victim->weaponids[0]].getType() == staff) { weapons[victim->weaponids[0]].damage += .2 + float(abs(Random() % 100) - 50) / 250; - if (weapons[weaponids[0]].getType() == staff) + } + if (weapons[weaponids[0]].getType() == staff) { weapons[weaponids[0]].damage += .2 + float(abs(Random() % 100) - 50) / 250; + } emit_sound_at(swordstaffsound, victim->coords); } else { @@ -2928,8 +3254,8 @@ void Person::DoAnimations() } if (animTarget == knifeslashstartanim && Animation::animations[animTarget].frames[frameCurrent].label == 5) { - if (hasvictim) - if (distsq(&coords, &victim->coords) < (scale * 5) * (scale * 5) * 4.5 &&/*Animation::animations[victim->animTarget].height!=lowheight&&*/victim->animTarget != dodgebackanim && victim->animTarget != rollanim) { + if (hasvictim) { + if (distsq(&coords, &victim->coords) < (scale * 5) * (scale * 5) * 4.5 && /*Animation::animations[victim->animTarget].height!=lowheight&&*/ victim->animTarget != dodgebackanim && victim->animTarget != rollanim) { escapednum = 0; if (!Tutorial::active) { victim->DoBloodBig(1.5 / victim->armorhigh, 225); @@ -2950,8 +3276,9 @@ void Person::DoAnimations() } victim->lowreversaldelay = 0; victim->highreversaldelay = 0; - if (aitype != playercontrolled) + if (aitype != playercontrolled) { weaponmissdelay = .6; + } if (!Tutorial::active) { if (bloodtoggle && !weapons[weaponids[weaponactive]].bloody) { @@ -2981,6 +3308,7 @@ void Person::DoAnimations() } victim->DoDamage(damagemult * 0); } + } } if (animTarget == swordslashanim && Animation::animations[animTarget].frames[frameCurrent].label == 5 && victim->animTarget != rollanim) { if (distsq(&coords, &victim->coords) < (scale * 5) * (scale * 5) * 6.5 && victim->animTarget != dodgebackanim) { @@ -2988,10 +3316,11 @@ void Person::DoAnimations() award_bonus(id, Slashbonus); escapednum = 0; if (!Tutorial::active) { - if (normaldotproduct(victim->facing, victim->coords - coords) < 0) + if (normaldotproduct(victim->facing, victim->coords - coords) < 0) { victim->DoBloodBig(2 / victim->armorhigh, 190); - else + } else { victim->DoBloodBig(2 / victim->armorhigh, 185); + } victim->deathbleeding = 1; emit_sound_at(swordslicesound, victim->coords); victim->frameTarget = 0; @@ -3028,10 +3357,12 @@ void Person::DoAnimations() } else { if (victim->weaponactive != -1) { if (weapons[victim->weaponids[0]].getType() == staff || weapons[weaponids[0]].getType() == staff) { - if (weapons[victim->weaponids[0]].getType() == staff) + if (weapons[victim->weaponids[0]].getType() == staff) { weapons[victim->weaponids[0]].damage += .2 + float(abs(Random() % 100) - 50) / 250; - if (weapons[weaponids[0]].getType() == staff) + } + if (weapons[weaponids[0]].getType() == staff) { weapons[weaponids[0]].damage += .2 + float(abs(Random() % 100) - 50) / 250; + } emit_sound_at(swordstaffsound, victim->coords); } else { @@ -3039,7 +3370,6 @@ void Person::DoAnimations() } } - XYZ aim; victim->Puff(righthand); victim->target = 0; @@ -3053,14 +3383,14 @@ void Person::DoAnimations() victim->num_weapons--; if (victim->num_weapons) { victim->weaponids[0] = victim->weaponids[num_weapons]; - if (victim->weaponstuck == victim->num_weapons) + if (victim->weaponstuck == victim->num_weapons) { victim->weaponstuck = 0; + } } victim->weaponactive = -1; for (unsigned i = 0; i < Person::players.size(); i++) { Person::players[i]->wentforweapon = 0; } - } } } @@ -3070,8 +3400,9 @@ void Person::DoAnimations() if (!Tutorial::active) { weapons[weaponids[0]].damage += .4 + float(abs(Random() % 100) - 50) / 250; escapednum = 0; - if (id == 0) + if (id == 0) { camerashake += .4; + } if (Random() % 2 || creature == wolftype) { victim->spurt = 1; } @@ -3104,8 +3435,9 @@ void Person::DoAnimations() if (!Tutorial::active) { weapons[weaponids[0]].damage += .6 + float(abs(Random() % 100) - 50) / 250; escapednum = 0; - if (id == 0) + if (id == 0) { camerashake += .4; + } if (Random() % 2 || creature == wolftype) { victim->spurt = 1; } @@ -3135,10 +3467,12 @@ void Person::DoAnimations() if (distsq(&coords, &victim->coords) < (scale * 5) * (scale * 5) * 6.5) { escapednum = 0; if (!Tutorial::active) { - if (!victim->dead) + if (!victim->dead) { weapons[weaponids[0]].damage += .4 + float(abs(Random() % 100) - 50) / 500; - if (id == 0) + } + if (id == 0) { camerashake += .4; + } if (Random() % 2 || creature == wolftype) { victim->spurt = 1; } @@ -3184,8 +3518,9 @@ void Person::DoAnimations() if (animTarget == lowkickanim && Animation::animations[animTarget].frames[frameCurrent].label == 5) { if (distsq(&coords, &victim->coords) < (scale * 5) * (scale * 5) * 3 && Animation::animations[victim->animTarget].height != highheight) { escapednum = 0; - if (id == 0) + if (id == 0) { camerashake += .4; + } XYZ relative; relative = victim->coords - coords; relative.y = 0; @@ -3208,16 +3543,18 @@ void Person::DoAnimations() } victim->Puff(head); victim->DoDamage(damagemult * 100 / victim->protectionhead); - if (victim->howactive == typesleeping) + if (victim->howactive == typesleeping) { victim->DoDamage(damagemult * 150 / victim->protectionhead); + } if (creature == wolftype) { emit_sound_at(clawslicesound, victim->coords, 128.); victim->spurt = 1; victim->DoBloodBig(2 / victim->armorhead, 175); } } else { - if (victim->damage >= victim->damagetolerance) + if (victim->damage >= victim->damagetolerance) { victim->RagDoll(0); + } for (unsigned i = 0; i < victim->skeleton.joints.size(); i++) { victim->skeleton.joints[i].velocity += relative * damagemult * 10; } @@ -3237,7 +3574,6 @@ void Person::DoAnimations() victim->DoBloodBig(2 / victim->armorhigh, 170); } } - } } @@ -3246,8 +3582,9 @@ void Person::DoAnimations() (distsq(&coords, &victim->coords) < (scale * 5) * (scale * 5) * 3) && (victim != this->shared_from_this())) { escapednum = 0; - if (id == 0) + if (id == 0) { camerashake += .2; + } if (!Tutorial::active) { emit_sound_at(landsound2, victim->coords, 128.); } @@ -3265,22 +3602,25 @@ void Person::DoAnimations() relative = DoRotation(relative, 0, -90, 0); relative.y += .1; for (unsigned 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) + 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; + } } victim->Puff(rightankle); victim->Puff(leftankle); victim->DoDamage(damagemult * 40 / victim->protectionlow); } else { - if (victim->damage >= victim->damagetolerance) + if (victim->damage >= victim->damagetolerance) { victim->RagDoll(0); + } for (unsigned i = 0; i < victim->skeleton.joints.size(); i++) { victim->skeleton.joints[i].velocity += relative * damagemult * 10; } relative = DoRotation(relative, 0, -90, 0); for (unsigned 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) + if (victim->skeleton.joints[i].label == leftfoot || victim->skeleton.joints[i].label == rightfoot || victim->skeleton.joints[i].label == leftankle || victim->skeleton.joints[i].label == rightankle) { victim->skeleton.joints[i].velocity += relative * damagemult * 80; + } } victim->jointVel(abdomen) += relative * damagemult * 200; victim->frameTarget = 0; @@ -3295,15 +3635,15 @@ void Person::DoAnimations() } SolidHitBonus(id); - } } } if (Animation::animations[animTarget].attack == reversal && (!victim->feint || (victim->lastattack == victim->lastattack2 && victim->lastattack2 == victim->lastattack3 && Random() % 2) || animTarget == knifefollowanim)) { if (animTarget == spinkickreversalanim && Animation::animations[animTarget].frames[frameCurrent].label == 7) { escapednum = 0; - if (id == 0) + if (id == 0) { camerashake += .4; + } if (Random() % 2) { victim->spurt = 1; DoBlood(.2, 230); @@ -3346,8 +3686,9 @@ void Person::DoAnimations() if (animTarget == staffhitreversalanim && Animation::animations[animTarget].frames[frameCurrent].label == 5) { escapednum = 0; - if (id == 0) + if (id == 0) { camerashake += .4; + } if (Random() % 2) { victim->spurt = 1; DoBlood(.2, 230); @@ -3368,8 +3709,9 @@ void Person::DoAnimations() if (animTarget == staffspinhitreversalanim && Animation::animations[animTarget].frames[frameCurrent].label == 7) { escapednum = 0; - if (id == 0) + if (id == 0) { camerashake += .4; + } if (Random() % 2) { victim->spurt = 1; DoBlood(.2, 230); @@ -3422,17 +3764,21 @@ void Person::DoAnimations() bool doslice; doslice = 0; - if (weaponactive != -1 || creature == wolftype) + if (weaponactive != -1 || creature == wolftype) { doslice = 1; - if (creature == rabbittype && weaponactive != -1) - if (weapons[weaponids[0]].getType() == staff) + } + if (creature == rabbittype && weaponactive != -1) { + if (weapons[weaponids[0]].getType() == staff) { doslice = 0; + } + } if (doslice) { if (weaponactive != -1) { victim->DoBloodBig(2 / victim->armorhigh, 225); emit_sound_at(knifeslicesound, victim->coords); - if (bloodtoggle && !weapons[weaponids[weaponactive]].bloody) + if (bloodtoggle && !weapons[weaponids[weaponactive]].bloody) { weapons[weaponids[weaponactive]].bloody = 1; + } weapons[weaponids[weaponactive]].blooddrip += 3; } if (weaponactive == -1 && creature == wolftype) { @@ -3443,8 +3789,6 @@ void Person::DoAnimations() } } - - if (animTarget == swordslashreversalanim && Animation::animations[animTarget].frames[frameCurrent].label == 7) { escapednum = 0; victim->RagDoll(1); @@ -3470,8 +3814,9 @@ void Person::DoAnimations() if (hasvictim && animTarget == knifeslashreversalanim && Animation::animations[animTarget].frames[frameCurrent].label == 7) { escapednum = 0; - if (id == 0) + if (id == 0) { camerashake += .4; + } if (Random() % 2) { victim->spurt = 1; DoBlood(.2, 230); @@ -3503,8 +3848,9 @@ void Person::DoAnimations() relative = facing * -1; relative.y = -3; Normalise(&relative); - if (victim->id == 0) + if (victim->id == 0) { relative /= 30; + } for (unsigned i = 0; i < victim->skeleton.joints.size(); i++) { victim->skeleton.joints[i].velocity += relative * damagemult * 40; } @@ -3512,17 +3858,21 @@ void Person::DoAnimations() victim->permanentdamage = victim->damagetolerance - 1; bool doslice; doslice = 0; - if (weaponactive != -1 || creature == wolftype) + if (weaponactive != -1 || creature == wolftype) { doslice = 1; - if (creature == rabbittype && weaponactive != -1) - if (weapons[weaponids[0]].getType() == staff) + } + if (creature == rabbittype && weaponactive != -1) { + if (weapons[weaponids[0]].getType() == staff) { doslice = 0; + } + } if (doslice) { if (weaponactive != -1) { victim->DoBloodBig(200, 225); emit_sound_at(knifeslicesound, victim->coords); - if (bloodtoggle) + if (bloodtoggle) { weapons[weaponids[weaponactive]].bloody = 2; + } weapons[weaponids[weaponactive]].blooddrip += 5; } @@ -3538,14 +3888,16 @@ void Person::DoAnimations() if (hasvictim && (animTarget == knifefollowanim || animTarget == knifesneakattackanim) && Animation::animations[animTarget].frames[frameCurrent].label == 5) { if (weaponactive != -1 && victim->bloodloss < victim->damagetolerance) { escapednum = 0; - if (animTarget == knifefollowanim) + if (animTarget == knifefollowanim) { victim->DoBloodBig(200, 210); + } if (animTarget == knifesneakattackanim) { XYZ footvel, footpoint; footvel = 0; footpoint = weapons[weaponids[0]].tippoint; - if (bloodtoggle) + if (bloodtoggle) { Sprite::MakeSprite(cloudimpactsprite, footpoint, footvel, 1, 0, 0, .9, .3); + } footvel = (weapons[weaponids[0]].tippoint - weapons[weaponids[0]].position); Sprite::MakeSprite(bloodsprite, footpoint, DoRotation(footvel * 7, (float)(Random() % 20), (float)(Random() % 20), 0), 1, 1, 1, .05, .9); Sprite::MakeSprite(bloodsprite, footpoint, DoRotation(footvel * 3, (float)(Random() % 20), (float)(Random() % 20), 0), 1, 1, 1, .05, .9); @@ -3559,20 +3911,21 @@ void Person::DoAnimations() XYZ footvel, footpoint; footvel = 0; footpoint = weapons[weaponids[0]].tippoint; - if (bloodtoggle) + if (bloodtoggle) { Sprite::MakeSprite(cloudimpactsprite, footpoint, footvel, 1, 0, 0, .9, .3); + } footvel = (weapons[weaponids[0]].tippoint - weapons[weaponids[0]].position) * -1; Sprite::MakeSprite(bloodsprite, footpoint, DoRotation(footvel * 7, (float)(Random() % 20), (float)(Random() % 20), 0), 1, 1, 1, .05, .9); Sprite::MakeSprite(bloodsprite, footpoint, DoRotation(footvel * 3, (float)(Random() % 20), (float)(Random() % 20), 0), 1, 1, 1, .05, .9); Sprite::MakeSprite(bloodflamesprite, footpoint, footvel * 5, 1, 1, 1, .2, 1); Sprite::MakeSprite(bloodflamesprite, footpoint, footvel * 2, 1, 1, 1, .2, 1); - } victim->bloodloss += 10000; victim->velocity = 0; emit_sound_at(fleshstabsound, victim->coords); - if (bloodtoggle) + if (bloodtoggle) { weapons[weaponids[weaponactive]].bloody = 2; + } weapons[weaponids[weaponactive]].blooddrip += 5; } } @@ -3591,15 +3944,17 @@ void Person::DoAnimations() } if (weaponactive != -1 && Animation::animations[victim->animTarget].attack != reversal) { emit_sound_at(fleshstabremovesound, victim->coords); - if (bloodtoggle) + if (bloodtoggle) { weapons[weaponids[weaponactive]].bloody = 2; + } weapons[weaponids[weaponactive]].blooddrip += 5; XYZ footvel, footpoint; footvel = 0; footpoint = weapons[weaponids[0]].tippoint; - if (bloodtoggle) + if (bloodtoggle) { Sprite::MakeSprite(cloudimpactsprite, footpoint, footvel, 1, 0, 0, .9, .3); + } footvel = (weapons[weaponids[0]].tippoint - weapons[weaponids[0]].position) * -1; Sprite::MakeSprite(bloodsprite, footpoint, DoRotation(footvel * 7, (float)(Random() % 20), (float)(Random() % 20), 0), 1, 1, 1, .05, .9); Sprite::MakeSprite(bloodsprite, footpoint, DoRotation(footvel * 3, (float)(Random() % 20), (float)(Random() % 20), 0), 1, 1, 1, .05, .9); @@ -3617,8 +3972,9 @@ void Person::DoAnimations() XYZ footvel, footpoint; footvel = 0; footpoint = (weapons[weaponids[0]].tippoint + weapons[weaponids[0]].position) / 2; - if (bloodtoggle) + if (bloodtoggle) { Sprite::MakeSprite(cloudimpactsprite, footpoint, footvel, 1, 0, 0, .9, .3); + } footvel = (weapons[weaponids[0]].tippoint - weapons[weaponids[0]].position); Sprite::MakeSprite(bloodsprite, footpoint, DoRotation(footvel * 7, (float)(Random() % 20), (float)(Random() % 20), 0), 1, 1, 1, .05, .9); Sprite::MakeSprite(bloodsprite, footpoint, DoRotation(footvel * 3, (float)(Random() % 20), (float)(Random() % 20), 0), 1, 1, 1, .05, .9); @@ -3629,8 +3985,9 @@ void Person::DoAnimations() victim->bloodloss += 10000; victim->velocity = 0; emit_sound_at(fleshstabsound, victim->coords); - if (bloodtoggle) + if (bloodtoggle) { weapons[weaponids[weaponactive]].bloody = 2; + } weapons[weaponids[weaponactive]].blooddrip += 5; } } @@ -3643,15 +4000,17 @@ void Person::DoAnimations() } if (weaponactive != -1) { emit_sound_at(fleshstabremovesound, victim->coords); - if (bloodtoggle) + if (bloodtoggle) { weapons[weaponids[weaponactive]].bloody = 2; + } weapons[weaponids[weaponactive]].blooddrip += 5; XYZ footvel, footpoint; footvel = 0; footpoint = weapons[weaponids[0]].tippoint; - if (bloodtoggle) + if (bloodtoggle) { Sprite::MakeSprite(cloudimpactsprite, footpoint, footvel, 1, 0, 0, .9, .3); + } footvel = (weapons[weaponids[0]].tippoint - weapons[weaponids[0]].position) * -1; Sprite::MakeSprite(bloodsprite, footpoint, DoRotation(footvel * 7, (float)(Random() % 20), (float)(Random() % 20), 0), 1, 1, 1, .05, .9); Sprite::MakeSprite(bloodsprite, footpoint, DoRotation(footvel * 3, (float)(Random() % 20), (float)(Random() % 20), 0), 1, 1, 1, .05, .9); @@ -3662,8 +4021,9 @@ void Person::DoAnimations() if (animTarget == sweepreversalanim && Animation::animations[animTarget].frames[frameCurrent].label == 7) { escapednum = 0; - if (id == 0) + if (id == 0) { camerashake += .4; + } if (Random() % 2) { victim->spurt = 1; DoBlood(.2, 240); @@ -3675,17 +4035,21 @@ void Person::DoAnimations() } bool doslice; doslice = 0; - if (weaponactive != -1 || creature == wolftype) + if (weaponactive != -1 || creature == wolftype) { doslice = 1; - if (creature == rabbittype && weaponactive != -1) - if (weapons[weaponids[0]].getType() == staff) + } + if (creature == rabbittype && weaponactive != -1) { + if (weapons[weaponids[0]].getType() == staff) { doslice = 0; + } + } if (doslice) { if (weaponactive != -1) { victim->DoBloodBig(2 / victim->armorhead, 225); emit_sound_at(knifeslicesound, victim->coords); - if (bloodtoggle && !weapons[weaponids[weaponactive]].bloody) + if (bloodtoggle && !weapons[weaponids[weaponactive]].bloody) { weapons[weaponids[weaponactive]].bloody = 1; + } weapons[weaponids[weaponactive]].blooddrip += 3; } if (weaponactive == -1 && creature == wolftype) { @@ -3710,8 +4074,9 @@ void Person::DoAnimations() victim->skeleton.joints[i].velocity += relative * damagemult * 20; } victim->jointVel(head) += relative * damagemult * 200; - if (victim->damage < victim->damagetolerance - 100) + if (victim->damage < victim->damagetolerance - 100) { victim->velocity = relative * 200; + } victim->DoDamage(damagemult * 100 / victim->protectionhead); victim->velocity = 0; } @@ -3732,13 +4097,13 @@ void Person::DoAnimations() victim->jointVel(head) += relative * damagemult * 200; } - if (hasvictim && (animTarget == spinkickreversalanim || animTarget == sweepreversalanim || animTarget == rabbitkickreversalanim || animTarget == upunchreversalanim || animTarget == jumpreversalanim || animTarget == swordslashreversalanim || animTarget == knifeslashreversalanim || animTarget == rabbittacklereversal || animTarget == wolftacklereversal || animTarget == staffhitreversalanim || animTarget == staffspinhitreversalanim)) + if (hasvictim && (animTarget == spinkickreversalanim || animTarget == sweepreversalanim || animTarget == rabbitkickreversalanim || animTarget == upunchreversalanim || animTarget == jumpreversalanim || animTarget == swordslashreversalanim || animTarget == knifeslashreversalanim || animTarget == rabbittacklereversal || animTarget == wolftacklereversal || animTarget == staffhitreversalanim || animTarget == staffspinhitreversalanim)) { if (victim->damage > victim->damagetolerance && bonus != reverseko) { award_bonus(id, reverseko); } + } } - //Animation end if (frameTarget > int(Animation::animations[animCurrent].frames.size()) - 1) { frameTarget = 0; @@ -3778,9 +4143,9 @@ void Person::DoAnimations() if (animCurrent == crouchdrawrightanim) { animTarget = getCrouch(); } - if (weaponactive == -1) + if (weaponactive == -1) { weaponactive = 0; - else if (weaponactive == 0) { + } else if (weaponactive == 0) { weaponactive = -1; if (num_weapons == 2) { int buffer; @@ -3815,8 +4180,9 @@ void Person::DoAnimations() animTarget = getCrouch(); frameTarget = 1; coords += facing * .1; - if (!isnormal(coords.x)) + if (!isnormal(coords.x)) { coords = oldcoords; + } oldcoords = coords; targetoffset = 0; currentoffset = 0; @@ -3838,7 +4204,7 @@ void Person::DoAnimations() int closest = -1; float closestdist = -1; float distance; - if (Person::players.size() > 1) + if (Person::players.size() > 1) { for (unsigned i = 0; i < Person::players.size(); i++) { if (id != i && Person::players[i]->coords.y < coords.y && !Person::players[i]->skeleton.free) { distance = distsq(&Person::players[i]->coords, &coords); @@ -3848,6 +4214,7 @@ void Person::DoAnimations() } } } + } if (closestdist > 0 && closest >= 0 && closestdist < 16) { victim = Person::players[closest]; animTarget = walljumprightkickanim; @@ -3856,8 +4223,9 @@ void Person::DoAnimations() Normalise(&rotatetarget); yaw = -asin(0 - rotatetarget.x); yaw *= 360 / 6.28; - if (rotatetarget.z < 0) + if (rotatetarget.z < 0) { yaw = 180 - yaw; + } targettilt2 = -asin(rotatetarget.y) * 360 / 6.28; velocity = (victim->coords - coords) * 4; velocity.y += 2; @@ -3869,8 +4237,9 @@ void Person::DoAnimations() frameTarget = 3; velocity = facing * -8; velocity.y = 4; - if (id == 0) + if (id == 0) { resume_stream(whooshsound); + } } if (animTarget == walljumprightanim) { animTarget = rightflipanim; @@ -3888,15 +4257,16 @@ void Person::DoAnimations() velocity = facing * 8; velocity.y = 4; } - if (id == 0) + if (id == 0) { resume_stream(whooshsound); + } } if (animTarget == walljumpleftanim) { if (attackkeydown) { int closest = -1; float closestdist = -1; float distance; - if (Person::players.size() > 1) + if (Person::players.size() > 1) { for (unsigned i = 0; i < Person::players.size(); i++) { if (id != i && Person::players[i]->coords.y < coords.y && !Person::players[i]->skeleton.free) { distance = distsq(&Person::players[i]->coords, &coords); @@ -3906,6 +4276,7 @@ void Person::DoAnimations() } } } + } if (closestdist > 0 && closest >= 0 && closestdist < 16) { victim = Person::players[closest]; animTarget = walljumpleftkickanim; @@ -3914,8 +4285,9 @@ void Person::DoAnimations() Normalise(&rotatetarget); yaw = -asin(0 - rotatetarget.x); yaw *= 360 / 6.28; - if (rotatetarget.z < 0) + if (rotatetarget.z < 0) { yaw = 180 - yaw; + } targettilt2 = -asin(rotatetarget.y) * 360 / 6.28; velocity = (victim->coords - coords) * 4; velocity.y += 2; @@ -3930,8 +4302,9 @@ void Person::DoAnimations() velocity = DoRotation(facing, 0, -30, 0) * -8; velocity.y = 4; } - if (id == 0) + if (id == 0) { resume_stream(whooshsound); + } } if (animTarget == sneakattackanim) { animCurrent = getCrouch(); @@ -3945,16 +4318,18 @@ void Person::DoAnimations() transspeed = 1000000; targetheadyaw += 180; coords -= facing * .7; - if (onterrain) + if (onterrain) { coords.y = terrain.getHeight(coords.x, coords.z); + } lastfeint = 0; } if (animTarget == knifesneakattackanim || animTarget == swordsneakattackanim) { animTarget = getIdle(); frameTarget = 0; - if (onterrain) + if (onterrain) { coords.y = terrain.getHeight(coords.x, coords.z); + } lastfeint = 0; } @@ -3971,13 +4346,14 @@ void Person::DoAnimations() tilt2 *= -1; transspeed = 1000000; targetheadyaw += 180; - if (!isnormal(coords.x)) + if (!isnormal(coords.x)) { coords = oldcoords; - if (animCurrent == spinkickreversalanim || animCurrent == swordslashreversalanim) + } + if (animCurrent == spinkickreversalanim || animCurrent == swordslashreversalanim) { oldcoords = coords + facing * .5; - else if (animCurrent == sweepreversalanim) + } else if (animCurrent == sweepreversalanim) { oldcoords = coords + facing * 1.1; - else if (animCurrent == upunchreversalanim) { + } else if (animCurrent == upunchreversalanim) { oldcoords = coords + facing * 1.5; targetyaw += 180; yaw += 180; @@ -3998,10 +4374,11 @@ void Person::DoAnimations() targettilt2 = 0; tilt2 = 0; } - if (onterrain) + if (onterrain) { oldcoords.y = terrain.getHeight(oldcoords.x, oldcoords.z); - else + } else { oldcoords.y = ycoords; + } currentoffset = coords - oldcoords; targetoffset = 0; coords = oldcoords; @@ -4015,8 +4392,9 @@ void Person::DoAnimations() } if (Animation::animations[animTarget].attack == reversed) { escapednum++; - if (animTarget == sweepreversedanim) + if (animTarget == sweepreversedanim) { targetyaw += 90; + } animTarget = backhandspringanim; frameTarget = 2; emit_sound_at(landsound, coords, 128); @@ -4041,10 +4419,12 @@ void Person::DoAnimations() if (wasFlip()) { animTarget = jumpdownanim; } - if (wasLanding()) + if (wasLanding()) { animTarget = getIdle(); - if (wasLandhard()) + } + if (wasLandhard()) { animTarget = getIdle(); + } if (animCurrent == spinkickanim || animCurrent == getupfrombackanim || animCurrent == getupfromfrontanim || animCurrent == lowkickanim) { animTarget = getIdle(); oldcoords = coords; @@ -4052,8 +4432,9 @@ void Person::DoAnimations() coords.y = oldcoords.y; //coords+=DoRotation(Animation::animations[animCurrent].offset,0,yaw,0)*scale; targetoffset.y = coords.y; - if (onterrain) + if (onterrain) { targetoffset.y = terrain.getHeight(coords.x, coords.z); + } currentoffset = DoRotation(Animation::animations[animCurrent].offset * -1, 0, yaw, 0) * scale; currentoffset.y -= (coords.y - targetoffset.y); coords.y = targetoffset.y; @@ -4069,11 +4450,14 @@ void Person::DoAnimations() targetyaw = yaw; bool hasstaff; hasstaff = 0; - if (num_weapons > 0) - if (weapons[0].getType() == staff) + if (num_weapons > 0) { + if (weapons[0].getType() == staff) { hasstaff = 1; - if (!hasstaff) + } + } + if (!hasstaff) { DoDamage(35); + } RagDoll(0); lastfeint = 0; rabbitkickragdoll = 1; @@ -4091,8 +4475,9 @@ void Person::DoAnimations() escapednum++; animTarget = rollanim; coords += facing; - if (id == 0) + if (id == 0) { pause_sound(whooshsound); + } } lastfeint = 0; } @@ -4115,8 +4500,9 @@ void Person::DoAnimations() escapednum++; animTarget = rollanim; coords += facing * 2; - if (id == 0) + if (id == 0) { pause_sound(whooshsound); + } } lastfeint = 0; } @@ -4136,14 +4522,16 @@ void Person::DoAnimations() lastfeint = 0; } if (animCurrent == spinkickanim && victim->skeleton.free) { - if (creature == rabbittype) + if (creature == rabbittype) { animTarget = fightidleanim; + } } } target = 0; - if (isIdle() && !wasIdle()) + if (isIdle() && !wasIdle()) { normalsupdatedelay = 0; + } if (animCurrent == jumpupanim && velocity.y < 0 && !isFlip()) { animTarget = jumpdownanim; @@ -4153,32 +4541,38 @@ void Person::DoAnimations() oldtarget = target; if (!transspeed && Animation::animations[animTarget].attack != 2 && Animation::animations[animTarget].attack != 3) { if (!isRun() || !wasRun()) { - if (targetFrame().speed > currentFrame().speed) + if (targetFrame().speed > currentFrame().speed) { target += multiplier * targetFrame().speed * speed * 2; - if (targetFrame().speed <= currentFrame().speed) + } + if (targetFrame().speed <= currentFrame().speed) { target += multiplier * currentFrame().speed * speed * 2; + } } if (isRun() && wasRun()) { float tempspeed; tempspeed = velspeed; - if (tempspeed < 10 * speedmult) + if (tempspeed < 10 * speedmult) { tempspeed = 10 * speedmult; + } /* FIXME - mixed of target and current here, is that intended? */ target += multiplier * Animation::animations[animTarget].frames[frameCurrent].speed * speed * 1.7 * tempspeed / (speed * 45 * scale); } - } else if (transspeed) + } else if (transspeed) { target += multiplier * transspeed * speed * 2; - else { + } else { if (!isRun() || !wasRun()) { - if (targetFrame().speed > currentFrame().speed) + if (targetFrame().speed > currentFrame().speed) { target += multiplier * targetFrame().speed * 2; - if (targetFrame().speed <= currentFrame().speed) + } + if (targetFrame().speed <= currentFrame().speed) { target += multiplier * currentFrame().speed * 2; + } } } - if (animCurrent != animTarget) + if (animCurrent != animTarget) { target = (target + oldtarget) / 2; + } if (target > 1) { frameCurrent = frameTarget; @@ -4210,12 +4604,15 @@ void Person::DoAnimations() } for (unsigned i = 0; i < skeleton.muscles.size(); i++) { if (skeleton.muscles[i].visible) { - if (isnormal((float)((int)(skeleton.muscles[i].rotate1 * 100) % 36000) / 100)) + if (isnormal((float)((int)(skeleton.muscles[i].rotate1 * 100) % 36000) / 100)) { skeleton.muscles[i].oldrotate1 = (float)((int)(skeleton.muscles[i].rotate1 * 100) % 36000) / 100; - if (isnormal((float)((int)(skeleton.muscles[i].rotate2 * 100) % 36000) / 100)) + } + if (isnormal((float)((int)(skeleton.muscles[i].rotate2 * 100) % 36000) / 100)) { skeleton.muscles[i].oldrotate2 = (float)((int)(skeleton.muscles[i].rotate2 * 100) % 36000) / 100; - if (isnormal((float)((int)(skeleton.muscles[i].rotate3 * 100) % 36000) / 100)) + } + if (isnormal((float)((int)(skeleton.muscles[i].rotate3 * 100) % 36000) / 100)) { skeleton.muscles[i].oldrotate3 = (float)((int)(skeleton.muscles[i].rotate3 * 100) % 36000) / 100; + } } } @@ -4233,18 +4630,33 @@ void Person::DoAnimations() } for (unsigned i = 0; i < skeleton.muscles.size(); i++) { if (skeleton.muscles[i].visible) { - if (isnormal((float)((int)(skeleton.muscles[i].rotate1 * 100) % 36000) / 100)) + 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 (isnormal((float)((int)(skeleton.muscles[i].rotate2 * 100) % 36000) / 100)) + } + if (isnormal((float)((int)(skeleton.muscles[i].rotate2 * 100) % 36000) / 100)) { skeleton.muscles[i].newrotate2 = (float)((int)(skeleton.muscles[i].rotate2 * 100) % 36000) / 100; - if (isnormal((float)((int)(skeleton.muscles[i].rotate3 * 100) % 36000) / 100)) + } + if (isnormal((float)((int)(skeleton.muscles[i].rotate3 * 100) % 36000) / 100)) { skeleton.muscles[i].newrotate3 = (float)((int)(skeleton.muscles[i].rotate3 * 100) % 36000) / 100; - if (skeleton.muscles[i].newrotate3 > skeleton.muscles[i].oldrotate3 + 180) skeleton.muscles[i].newrotate3 -= 360; - if (skeleton.muscles[i].newrotate3 < skeleton.muscles[i].oldrotate3 - 180) skeleton.muscles[i].newrotate3 += 360; - if (skeleton.muscles[i].newrotate2 > skeleton.muscles[i].oldrotate2 + 180) skeleton.muscles[i].newrotate2 -= 360; - if (skeleton.muscles[i].newrotate2 < skeleton.muscles[i].oldrotate2 - 180) skeleton.muscles[i].newrotate2 += 360; - if (skeleton.muscles[i].newrotate1 > skeleton.muscles[i].oldrotate1 + 180) skeleton.muscles[i].newrotate1 -= 360; - if (skeleton.muscles[i].newrotate1 < skeleton.muscles[i].oldrotate1 - 180) skeleton.muscles[i].newrotate1 += 360; + } + if (skeleton.muscles[i].newrotate3 > skeleton.muscles[i].oldrotate3 + 180) { + skeleton.muscles[i].newrotate3 -= 360; + } + if (skeleton.muscles[i].newrotate3 < skeleton.muscles[i].oldrotate3 - 180) { + skeleton.muscles[i].newrotate3 += 360; + } + if (skeleton.muscles[i].newrotate2 > skeleton.muscles[i].oldrotate2 + 180) { + skeleton.muscles[i].newrotate2 -= 360; + } + if (skeleton.muscles[i].newrotate2 < skeleton.muscles[i].oldrotate2 - 180) { + skeleton.muscles[i].newrotate2 += 360; + } + if (skeleton.muscles[i].newrotate1 > skeleton.muscles[i].oldrotate1 + 180) { + skeleton.muscles[i].newrotate1 -= 360; + } + if (skeleton.muscles[i].newrotate1 < skeleton.muscles[i].oldrotate1 - 180) { + skeleton.muscles[i].newrotate1 += 360; + } } } } @@ -4255,22 +4667,23 @@ void Person::DoAnimations() oldframeCurrent = frameCurrent; for (unsigned 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); + 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 (unsigned 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); - skeleton.muscles[i].rotate3 = skeleton.muscles[i].oldrotate3 * (1 - target) + skeleton.muscles[i].newrotate3 * (target); + 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; + skeleton.muscles[i].rotate3 = skeleton.muscles[i].oldrotate3 * (1 - target) + skeleton.muscles[i].newrotate3 * target; } } } if (isLanding() && landhard) { - if (id == 0) + if (id == 0) { camerashake += .4; + } animTarget = getLandhard(); frameTarget = 0; target = 0; @@ -4290,7 +4703,6 @@ void Person::DoStuff() static XYZ flatfacing; static XYZ flatvelocity; static float flatvelspeed; - static int i, l; static int bloodsize; static int startx, starty, endx, endy; static GLubyte color; @@ -4305,23 +4717,29 @@ void Person::DoStuff() } crouchkeydowntime += multiplier; - if (!crouchkeydown) + if (!crouchkeydown) { crouchkeydowntime = 0; + } jumpkeydowntime += multiplier; - if (!jumpkeydown && skeleton.free) + if (!jumpkeydown && skeleton.free) { jumpkeydowntime = 0; + } - if (hostile || damage > 0 || bloodloss > 0) + if (hostile || damage > 0 || bloodloss > 0) { immobile = 0; + } - if (isIdle() || isRun()) + if (isIdle() || isRun()) { targetoffset = 0; + } - if (num_weapons == 1 && weaponactive != -1) + if (num_weapons == 1 && weaponactive != -1) { weaponstuck = -1; + } - if (id == 0) + if (id == 0) { blooddimamount -= multiplier * .3; + } speechdelay -= multiplier; texupdatedelay -= multiplier; interestdelay -= multiplier; @@ -4332,17 +4750,20 @@ void Person::DoStuff() hasvictim = 0; } - if (id == 0) + if (id == 0) { speed = 1.1 * speedmult; - else + } else { speed = 1.0 * speedmult; - if (!skeleton.free) + } + if (!skeleton.free) { rabbitkickragdoll = 0; + } speed *= speedmult; - if (id != 0 && (creature == rabbittype || difficulty != 2)) + if (id != 0 && (creature == rabbittype || difficulty != 2)) { superruntoggle = 0; + } if (id != 0 && creature == wolftype && difficulty == 2) { superruntoggle = 0; if (aitype != passivetype) { @@ -4351,8 +4772,9 @@ void Person::DoStuff() superruntoggle = 0; } } - if (scale < 0.2) + if (scale < 0.2) { superruntoggle = 0; + } if (animTarget == wolfrunninganim && !superruntoggle) { animTarget = getRun(); frameTarget = 0; @@ -4367,22 +4789,19 @@ void Person::DoStuff() if (onfire) { burnt += multiplier; deathbleeding = 1; - if (burnt > .6) + if (burnt > .6) { burnt = .6; + } OPENAL_SetVolume(channels[stream_firesound], 256 + 256 * findLength(&velocity) / 3); if (animTarget == jumpupanim || animTarget == jumpdownanim || isFlip()) { float gLoc[3]; - float vel[3]; gLoc[0] = coords.x; gLoc[1] = coords.y; gLoc[2] = coords.z; - vel[0] = velocity.x; - vel[1] = velocity.y; - vel[2] = velocity.z; if (id == 0) { - OPENAL_3D_SetAttributes(channels[whooshsound], gLoc, vel); + OPENAL_3D_SetAttributes(channels[whooshsound], gLoc); OPENAL_SetVolume(channels[whooshsound], 64 * findLength(&velocity) / 5); } } @@ -4417,8 +4836,9 @@ void Person::DoStuff() bleeding -= multiplier * .3; if (bloodtoggle == 2) { skeleton.drawmodel.textureptr.bind(); - if ((bleeding <= 0) && (detail != 2)) + if ((bleeding <= 0) && (detail != 2)) { DoMipmaps(); + } } } @@ -4432,12 +4852,12 @@ void Person::DoStuff() if (skeleton.free) { bloodvel -= DoRotation(skeleton.forward * 10 * scale, ((float)(Random() % 100)) / 40, ((float)(Random() % 100)) / 40, 0); bloodvel += DoRotation(jointVel(head), ((float)(Random() % 100)) / 40, yaw + ((float)(Random() % 100)) / 40, 0) * scale; - Sprite::MakeSprite(bloodsprite, (jointPos(neck) + (jointPos(neck) - jointPos(head)) / 5)*scale + coords, bloodvel, 1, 1, 1, .05, .9); + Sprite::MakeSprite(bloodsprite, (jointPos(neck) + (jointPos(neck) - jointPos(head)) / 5) * scale + coords, bloodvel, 1, 1, 1, .05, .9); } 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); + Sprite::MakeSprite(bloodsprite, DoRotation(jointPos(neck) + (jointPos(neck) - jointPos(head)) / 5, 0, yaw, 0) * scale + coords, bloodvel, 1, 1, 1, .05, .9); } neckspurtparticledelay = .05; } @@ -4447,10 +4867,11 @@ void Person::DoStuff() } if (deathbleeding > 0 && dead != 2) { - if (deathbleeding < 5) + if (deathbleeding < 5) { bleeddelay -= deathbleeding * multiplier / 4; - else + } else { bleeddelay -= 5 * multiplier / 4; + } if (bleeddelay < 0 && bloodtoggle) { bleeddelay = 1; XYZ bloodvel; @@ -4461,14 +4882,15 @@ void Person::DoStuff() Sprite::MakeSprite(bloodsprite, jointPos(abdomen) * scale + coords, bloodvel, 1, 1, 1, .05, 1); } 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); + 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 (deathbleeding < 0) + if (deathbleeding < 0) { deathbleeding = 0; + } if (bloodloss > damagetolerance && Animation::animations[animTarget].attack == neutral) { if (weaponactive != -1) { weapons[weaponids[0]].drop(velocity * scale * -.3, velocity * scale); @@ -4476,8 +4898,9 @@ void Person::DoStuff() num_weapons--; if (num_weapons) { weaponids[0] = weaponids[num_weapons]; - if (weaponstuck == num_weapons) + if (weaponstuck == num_weapons) { weaponstuck = 0; + } } weaponactive = -1; for (unsigned i = 0; i < Person::players.size(); i++) { @@ -4535,17 +4958,20 @@ void Person::DoStuff() endy = skeleton.skinsize - 1; bleeding = 0; } - if (endx < startx) + if (endx < startx) { endx = startx; - if (endy < starty) + } + if (endy < starty) { endy = starty; + } - for (i = startx; i < endx; i++) { + for (int i = startx; i < endx; i++) { for (int j = starty; j < endy; j++) { if (Random() % 2 == 0) { color = Random() % 85 + 170; - if (skeleton.skinText[i * skeleton.skinsize * 3 + j * 3 + 0] > color / 2) + if (skeleton.skinText[i * skeleton.skinsize * 3 + j * 3 + 0] > color / 2) { skeleton.skinText[i * skeleton.skinsize * 3 + j * 3 + 0] = color / 2; + } skeleton.skinText[i * skeleton.skinsize * 3 + j * 3 + 1] = 0; skeleton.skinText[i * skeleton.skinsize * 3 + j * 3 + 2] = 0; } @@ -4558,16 +4984,18 @@ void Person::DoStuff() if (skeleton.free) { bleedx += 4 * direction / realtexdetail; - if (detail == 2) + if (detail == 2) { bleedy += (abs(Random() % 3) - 1) * 2 / realtexdetail; - else + } else { bleedy += (abs(Random() % 3) - 1) * 4 / realtexdetail; + } } else { bleedy -= 4 / realtexdetail; - if (detail == 2) + if (detail == 2) { bleedx += (abs(Random() % 3) - 1) * 2 / realtexdetail; - else + } else { bleedx += (abs(Random() % 3) - 1) * 4 / realtexdetail; + } } } @@ -4669,8 +5097,9 @@ void Person::DoStuff() footvel = DoRotation(skeleton.specialforward[0], 0, yaw, 0) * -1; footpoint = DoRotation((jointPos(head) + jointPos(neck)) / 2, 0, yaw, 0) * scale + coords; } - if (animTarget == sleepanim) + if (animTarget == sleepanim) { footvel = DoRotation(footvel, 0, 90, 0); + } Sprite::MakeSprite(breathsprite, footpoint + footvel * .2, footvel * .4, 1, 1, 1, .4, .3); } } @@ -4711,7 +5140,9 @@ void Person::DoStuff() righthandmorphness = 0; targetrighthandmorphness = 1; righthandmorphend = 1; - if (Random() % 2 == 0)twitchdelay3 = (float)(abs(Random() % 40)) / 5; + if (Random() % 2 == 0) { + twitchdelay3 = (float)(abs(Random() % 40)) / 5; + } } if (righthandmorphstart == 1 && righthandmorphend == 1) { righthandmorphness = 0; @@ -4736,10 +5167,11 @@ void Person::DoStuff() } if (!dead) { if (creature == rabbittype) { - if (howactive < typesleeping) + if (howactive < typesleeping) { twitchdelay2 -= multiplier * 1.5; - else + } else { twitchdelay2 -= multiplier * 0.5; + } if (howactive <= typesleeping) { if (tailmorphstart == 0 && tailmorphend == 0 && twitchdelay2 <= 0) { tailmorphness = 0; @@ -4763,20 +5195,22 @@ void Person::DoStuff() } if (creature == wolftype) { twitchdelay2 -= multiplier * 1.5; - if (tailmorphend != 0) + if (tailmorphend != 0) { if ((isRun() || animTarget == jumpupanim || animTarget == jumpdownanim || animTarget == backflipanim) && !skeleton.free) { tailmorphness = 0; targettailmorphness = 1; tailmorphend = 0; twitchdelay2 = .1; } - if (tailmorphend != 5) + } + if (tailmorphend != 5) { if (animTarget == flipanim || animTarget == frontflipanim || animTarget == rollanim || skeleton.free) { tailmorphness = 0; targettailmorphness = 1; tailmorphend = 5; twitchdelay2 = .1; } + } if (twitchdelay2 <= 0) { if (((tailmorphstart == 0 && tailmorphend == 0) || (tailmorphstart == 5 && tailmorphend == 5))) { tailmorphness = 0; @@ -4806,68 +5240,74 @@ void Person::DoStuff() } } - if (dead != 1) + if (dead != 1) { unconscioustime = 0; + } if (dead == 1 || howactive == typesleeping) { unconscioustime += multiplier; //If unconscious, close eyes and mouth - if (righthandmorphend != 0) + if (righthandmorphend != 0) { righthandmorphness = 0; + } righthandmorphend = 0; targetrighthandmorphness = 1; - if (lefthandmorphend != 0) + if (lefthandmorphend != 0) { lefthandmorphness = 0; + } lefthandmorphend = 0; targetlefthandmorphness = 1; - if (headmorphend != 3 && headmorphend != 5) + if (headmorphend != 3 && headmorphend != 5) { headmorphness = 0; + } headmorphend = 3; targetheadmorphness = 1; } - if (howactive > typesleeping) { XYZ headpoint; headpoint = coords; if (bloodtoggle && !bled) { terrain.MakeDecal(blooddecalslow, headpoint, .8, .5, 0); - } - if (bloodtoggle && !bled) - for (l = 0; l < terrain.patchobjectnum[whichpatchx][whichpatchz]; l++) { - int j = terrain.patchobjects[whichpatchx][whichpatchz][l]; + for (unsigned int l = 0; l < terrain.patchobjects[whichpatchx][whichpatchz].size(); l++) { + unsigned int j = terrain.patchobjects[whichpatchx][whichpatchz][l]; XYZ point = DoRotation(headpoint - Object::objects[j]->position, 0, -Object::objects[j]->yaw, 0); float size = .8; float opacity = .6; float yaw = 0; Object::objects[j]->model.MakeDecal(blooddecalslow, &point, &size, &opacity, &yaw); } + } bled = 1; } if (dead == 2 || howactive > typesleeping) { //If dead, open mouth and hands - if (righthandmorphend != 0) + if (righthandmorphend != 0) { righthandmorphness = 0; + } righthandmorphend = 0; targetrighthandmorphness = 1; - if (lefthandmorphend != 0) + if (lefthandmorphend != 0) { lefthandmorphness = 0; + } lefthandmorphend = 0; targetlefthandmorphness = 1; - if (headmorphend != 2) + if (headmorphend != 2) { headmorphness = 0; + } headmorphend = 2; targetheadmorphness = 1; } if (stunned > 0 && !dead && headmorphend != 2) { - if (headmorphend != 4) + if (headmorphend != 4) { headmorphness = 0; + } headmorphend = 4; targetheadmorphness = 1; } @@ -4889,8 +5329,9 @@ void Person::DoStuff() num_weapons--; if (num_weapons) { weaponids[0] = weaponids[num_weapons]; - if (weaponstuck == num_weapons) + if (weaponstuck == num_weapons) { weaponstuck = 0; + } } weaponactive = -1; for (unsigned i = 0; i < Person::players.size(); i++) { @@ -4898,8 +5339,6 @@ void Person::DoStuff() } } - - if ((id == 0 || distsq(&coords, &viewer) < 50) && autoslomo) { slomo = 1; slomodelay = .2; @@ -4908,20 +5347,22 @@ void Person::DoStuff() damage += 20; } - if (!dead) + if (!dead) { damage -= multiplier * 13; - if (!dead) permanentdamage -= multiplier * 4; - if (isIdle() || isCrouch()) { - if (!dead) + if (isIdle() || isCrouch()) { permanentdamage -= multiplier * 4; + } } - if (damage < 0) + if (damage < 0) { damage = 0; - if (permanentdamage < 0) + } + if (permanentdamage < 0) { permanentdamage = 0; - if (superpermanentdamage < 0) + } + if (superpermanentdamage < 0) { superpermanentdamage = 0; + } if (permanentdamage < superpermanentdamage) { permanentdamage = superpermanentdamage; } @@ -4945,8 +5386,9 @@ void Person::DoStuff() num_weapons--; if (num_weapons) { weaponids[0] = weaponids[num_weapons]; - if (weaponstuck == num_weapons) + if (weaponstuck == num_weapons) { weaponstuck = 0; + } } weaponactive = -1; for (unsigned i = 0; i < Person::players.size(); i++) { @@ -4960,8 +5402,9 @@ void Person::DoStuff() award_bonus(0, Wolfbonus); } - if (unconscioustime < .1 && (bonus != spinecrusher || bonustime > 1) && (bonus != FinishedBonus || bonustime > 1) && bloodloss < damagetolerance) + if (unconscioustime < .1 && (bonus != spinecrusher || bonustime > 1) && (bonus != FinishedBonus || bonustime > 1) && bloodloss < damagetolerance) { award_bonus(id, touchofdeath); + } if (id != 0 && unconscioustime > .1) { numafterkill++; } @@ -4974,24 +5417,28 @@ void Person::DoStuff() } if (skeleton.free == 1) { - if (id == 0) + if (id == 0) { pause_sound(whooshsound); + } if (!dead) { //If knocked over, open hands and close mouth - if (righthandmorphend != 0) + if (righthandmorphend != 0) { righthandmorphness = 0; + } righthandmorphend = 0; targetrighthandmorphness = 1; - if (lefthandmorphend != 0) + if (lefthandmorphend != 0) { lefthandmorphness = 0; + } lefthandmorphend = 0; targetlefthandmorphness = 1; if (headmorphend != 3 && headmorphend != 5 && headmorphstart != 3 && headmorphstart != 5) { - if (headmorphend != 0) + if (headmorphend != 0) { headmorphness = 0; + } headmorphend = 0; targetheadmorphness = 1; } @@ -5000,8 +5447,9 @@ void Person::DoStuff() skeleton.DoGravity(&scale); float damageamount; damageamount = skeleton.DoConstraints(&coords, &scale) * 5; - if (damage > damagetolerance - damageamount && !dead && (bonus != spinecrusher || bonustime > 1) && (bonus != style || bonustime > 1) && (bonus != cannon || bonustime > 1)) + if (damage > damagetolerance - damageamount && !dead && (bonus != spinecrusher || bonustime > 1) && (bonus != style || bonustime > 1) && (bonus != cannon || bonustime > 1)) { award_bonus(id, deepimpact); + } DoDamage(damageamount / ((protectionhigh + protectionhead + protectionlow) / 3)); XYZ average; @@ -5032,8 +5480,9 @@ void Person::DoStuff() skeleton.longdead += (2000 - findLength(&average)) * multiplier + multiplier; if (skeleton.longdead > 2000) { if (skeleton.longdead > 6000) { - if (id == 0) + if (id == 0) { pause_sound(whooshsound); + } skeleton.free = 3; DrawSkeleton(); skeleton.free = 2; @@ -5044,35 +5493,34 @@ void Person::DoStuff() DoBlood(1, 255); if (bloodtoggle && !bled) { terrain.MakeDecal(blooddecal, headpoint, .2 * 1.2, .5, 0); - } - if (bloodtoggle && !bled) - for (l = 0; l < terrain.patchobjectnum[whichpatchx][whichpatchz]; l++) { - int j = terrain.patchobjects[whichpatchx][whichpatchz][l]; + for (unsigned int l = 0; l < terrain.patchobjects[whichpatchx][whichpatchz].size(); l++) { + unsigned int j = terrain.patchobjects[whichpatchx][whichpatchz][l]; XYZ point = DoRotation(headpoint - Object::objects[j]->position, 0, -Object::objects[j]->yaw, 0); float size = .2 * 1.2; float opacity = .6; float yaw = 0; Object::objects[j]->model.MakeDecal(blooddecal, &point, &size, &opacity, &yaw); } + } bled = 1; } if (dead == 2 && bloodloss >= damagetolerance) { XYZ headpoint; headpoint = (jointPos(abdomen) + jointPos(neck)) / 2 * scale + coords; - if (bleeding <= 0) + if (bleeding <= 0) { DoBlood(1, 255); + } if (bloodtoggle && !bled) { terrain.MakeDecal(blooddecalslow, headpoint, .8, .5, 0); - } - if (bloodtoggle && !bled) - for (l = 0; l < terrain.patchobjectnum[whichpatchx][whichpatchz]; l++) { - int j = terrain.patchobjects[whichpatchx][whichpatchz][l]; + for (unsigned int l = 0; l < terrain.patchobjects[whichpatchx][whichpatchz].size(); l++) { + unsigned int j = terrain.patchobjects[whichpatchx][whichpatchz][l]; XYZ point = DoRotation(headpoint - Object::objects[j]->position, 0, -Object::objects[j]->yaw, 0); float size = .8; float opacity = .6; float yaw = 0; Object::objects[j]->model.MakeDecal(blooddecalslow, &point, &size, &opacity, &yaw); } + } bled = 1; } } @@ -5084,16 +5532,19 @@ void Person::DoStuff() startpoint = coords; endpoint = coords; endpoint.y -= .7; - if (terrain.lineTerrain(startpoint, endpoint, &colpoint) != -1) + if (terrain.lineTerrain(startpoint, endpoint, &colpoint) != -1) { canrecover = 0; - if (velocity.y < -30) + } + if (velocity.y < -30) { canrecover = 0; - for (i = 0; i < Object::objects.size(); i++) { + } + for (unsigned int i = 0; i < Object::objects.size(); i++) { if (Object::objects[i]->type != treeleavestype && Object::objects[i]->type != bushtype && Object::objects[i]->type != firetype) { colviewer = startpoint; coltarget = endpoint; - if (Object::objects[i]->model.LineCheck(&colviewer, &coltarget, &colpoint, &Object::objects[i]->position, &Object::objects[i]->yaw) != -1) + if (Object::objects[i]->model.LineCheck(&colviewer, &coltarget, &colpoint, &Object::objects[i]->position, &Object::objects[i]->yaw) != -1) { canrecover = 0; + } } } if (canrecover) { @@ -5118,8 +5569,9 @@ void Person::DoStuff() targetyaw = -asin(0 - terrainnormal.x); targetyaw *= 360 / 6.28; - if (terrainnormal.z < 0) + if (terrainnormal.z < 0) { targetyaw = 180 - targetyaw; + } yaw = targetyaw; frameTarget = 0; @@ -5143,8 +5595,9 @@ void Person::DoStuff() if (findLength(&average) < 10 && !dead && skeleton.free) { skeleton.longdead += (2000 - findLength(&average)) * multiplier + multiplier; if (skeleton.longdead > (damage + 500) * 1.5) { - if (id == 0) + if (id == 0) { pause_sound(whooshsound); + } skeleton.free = 0; velocity = 0; XYZ middle; @@ -5167,13 +5620,13 @@ void Person::DoStuff() targetyaw = -asin(0 - terrainnormal.x); targetyaw *= 360 / 6.28; - if (terrainnormal.z < 0) + if (terrainnormal.z < 0) { targetyaw = 180 - targetyaw; + } yaw = targetyaw; targettilt2 = asin(terrainnormal.y) * 180 / 3.14 * -1; - if (skeleton.forward.y < 0) { animTarget = getupfrombackanim; frameTarget = 0; @@ -5194,35 +5647,42 @@ void Person::DoStuff() if (id == 0) { if (rightkeydown) { targetyaw -= 90; - if (forwardkeydown) + if (forwardkeydown) { targetyaw += 45; - if (backkeydown) + } + if (backkeydown) { targetyaw -= 45; + } } if (leftkeydown) { targetyaw += 90; - if (forwardkeydown) + if (forwardkeydown) { targetyaw -= 45; - if (backkeydown) + } + if (backkeydown) { targetyaw += 45; + } } if (backkeydown) { - if ( !leftkeydown && !rightkeydown) + if (!leftkeydown && !rightkeydown) { targetyaw += 180; + } } targetyaw += 180; } } - if (abs(targettilt2) > 50) + if (abs(targettilt2) > 50) { targettilt2 = 0; + } animCurrent = tempanim; frameCurrent = 0; target = 0; tilt2 = targettilt2; - if (middle.y > 0 && animTarget != rollanim) + if (middle.y > 0 && animTarget != rollanim) { targetoffset.y = middle.y + 1; + } for (unsigned i = 0; i < skeleton.joints.size(); i++) { tempanimation.frames[0].joints[i].position = skeleton.joints[i].position; @@ -5233,9 +5693,11 @@ void Person::DoStuff() bool hasstaff; hasstaff = 0; - if (num_weapons > 0) - if (weapons[0].getType() == staff) + if (num_weapons > 0) { + if (weapons[0].getType() == staff) { hasstaff = 1; + } + } if (!skeleton.freefall && freefall && ((jumpkeydown && jumpkeydowntime < .2) || (hasstaff && rabbitkickragdoll)) && !dead) { if (velocity.y > -30) { XYZ tempvelocity; @@ -5243,8 +5705,9 @@ void Person::DoStuff() Normalise(&tempvelocity); targetyaw = -asin(0 - tempvelocity.x); targetyaw *= 360 / 6.28; - if (velocity.z < 0) + if (velocity.z < 0) { targetyaw = 180 - targetyaw; + } //targetyaw+=180; skeleton.free = 0; @@ -5273,16 +5736,16 @@ void Person::DoStuff() targettilt2 = 0; } } - if (skeleton.freefall == 0) + if (skeleton.freefall == 0) { freefall = 0; - + } } - if (aitype != passivetype || skeleton.free == 1) - if (findLengthfast(&velocity) > .1) - for (i = 0; i < Object::objects.size(); i++) { - if (Object::objects[i]->type == firetype) - if (distsqflat(&coords, &Object::objects[i]->position) < Object::objects[i]->scale*Object::objects[i]->scale * 12 && distsq(&coords, &Object::objects[i]->position) < Object::objects[i]->scale*Object::objects[i]->scale * 49) { + if (aitype != passivetype || skeleton.free == 1) { + if (findLengthfast(&velocity) > .1) { + for (unsigned int i = 0; i < Object::objects.size(); i++) { + if (Object::objects[i]->type == firetype) { + if (distsqflat(&coords, &Object::objects[i]->position) < Object::objects[i]->scale * Object::objects[i]->scale * 12 && distsq(&coords, &Object::objects[i]->position) < Object::objects[i]->scale * Object::objects[i]->scale * 49) { if (onfire) { if (!Object::objects[i]->onfire) { emit_sound_at(firestartsound, Object::objects[i]->position); @@ -5295,8 +5758,9 @@ void Person::DoStuff() } } } - if (Object::objects[i]->type == bushtype) - if (distsqflat(&coords, &Object::objects[i]->position) < Object::objects[i]->scale*Object::objects[i]->scale * 12 && distsq(&coords, &Object::objects[i]->position) < Object::objects[i]->scale*Object::objects[i]->scale * 49) { + } + if (Object::objects[i]->type == bushtype) { + if (distsqflat(&coords, &Object::objects[i]->position) < Object::objects[i]->scale * Object::objects[i]->scale * 12 && distsq(&coords, &Object::objects[i]->position) < Object::objects[i]->scale * Object::objects[i]->scale * 49) { if (onfire) { if (!Object::objects[i]->onfire) { emit_sound_at(firestartsound, Object::objects[i]->position); @@ -5320,12 +5784,14 @@ void Person::DoStuff() } int howmany = 0; - if (environment == grassyenvironment) + if (environment == grassyenvironment) { howmany = findLength(&velocity) * 4; - if (environment == snowyenvironment) + } + if (environment == snowyenvironment) { howmany = findLength(&velocity) * 2; - if (detail == 2) - if (environment != desertenvironment) + } + if (detail == 2) { + if (environment != desertenvironment) { for (int j = 0; j < howmany; j++) { tempvel.x = float(abs(Random() % 100) - 50) / 20; tempvel.y = float(abs(Random() % 100) - 50) / 20; @@ -5338,9 +5804,11 @@ void Person::DoStuff() Sprite::MakeSprite(splintersprite, pos, tempvel * .5 + velocity * float(abs(Random() % 100)) / 100, 165 / 255 + float(abs(Random() % 100) - 50) / 400, 0, 0, .2 + float(abs(Random() % 100) - 50) / 1300, 1); Sprite::setLastSpriteSpecial(1); } + } + } howmany = findLength(&velocity) * 4; - if (detail == 2) - if (environment == snowyenvironment) + if (detail == 2) { + if (environment == snowyenvironment) { for (int j = 0; j < howmany; j++) { tempvel.x = float(abs(Random() % 100) - 50) / 20; tempvel.y = float(abs(Random() % 100) - 50) / 20; @@ -5353,22 +5821,25 @@ void Person::DoStuff() Sprite::MakeSprite(splintersprite, pos, tempvel * .3 + velocity * float(abs(Random() % 100)) / 100 / 2, 1, 1, 1, .1, 1); Sprite::setLastSpriteSpecial(2); } + } + } } Object::objects[i]->rotx += velocity.x * multiplier * 6; Object::objects[i]->roty += velocity.z * multiplier * 6; Object::objects[i]->messedwith = .5; } + } XYZ tempcoord; if (Object::objects[i]->type == treeleavestype && environment != desertenvironment) { - if (Object::objects[i]->pitch == 0) + if (Object::objects[i]->pitch == 0) { tempcoord = coords; - else { + } else { tempcoord = coords - Object::objects[i]->position; tempcoord = DoRotation(tempcoord, 0, -Object::objects[i]->yaw, 0); tempcoord = DoRotation(tempcoord, -Object::objects[i]->pitch, 0, 0); tempcoord += Object::objects[i]->position; } - if (distsqflat(&tempcoord, &Object::objects[i]->position) < Object::objects[i]->scale*Object::objects[i]->scale * 8 && distsq(&tempcoord, &Object::objects[i]->position) < Object::objects[i]->scale*Object::objects[i]->scale * 300 && tempcoord.y > Object::objects[i]->position.y + 3 * Object::objects[i]->scale) { + if (distsqflat(&tempcoord, &Object::objects[i]->position) < Object::objects[i]->scale * Object::objects[i]->scale * 8 && distsq(&tempcoord, &Object::objects[i]->position) < Object::objects[i]->scale * Object::objects[i]->scale * 300 && tempcoord.y > Object::objects[i]->position.y + 3 * Object::objects[i]->scale) { if (Object::objects[i]->messedwith <= 0) { XYZ tempvel; XYZ pos; @@ -5380,12 +5851,14 @@ void Person::DoStuff() } int howmany = 0; - if (environment == grassyenvironment) + if (environment == grassyenvironment) { howmany = findLength(&velocity) * 4; - if (environment == snowyenvironment) + } + if (environment == snowyenvironment) { howmany = findLength(&velocity) * 2; - if (detail == 2) - if (environment != desertenvironment) + } + if (detail == 2) { + if (environment != desertenvironment) { for (int j = 0; j < howmany; j++) { tempvel.x = float(abs(Random() % 100) - 50) / 20; tempvel.y = float(abs(Random() % 100) - 50) / 20; @@ -5399,9 +5872,11 @@ void Person::DoStuff() Sprite::MakeSprite(splintersprite, pos, tempvel * .5 + velocity * float(abs(Random() % 100)) / 100, 165 / 255 + float(abs(Random() % 100) - 50) / 400, 0, 0, .2 + float(abs(Random() % 100) - 50) / 1300, 1); Sprite::setLastSpriteSpecial(1); } + } + } howmany = findLength(&velocity) * 4; - if (detail == 2) - if (environment == snowyenvironment) + if (detail == 2) { + if (environment == snowyenvironment) { for (int j = 0; j < howmany; j++) { tempvel.x = float(abs(Random() % 100) - 50) / 20; tempvel.y = float(abs(Random() % 100) - 50) / 20; @@ -5415,37 +5890,49 @@ void Person::DoStuff() Sprite::MakeSprite(splintersprite, pos, tempvel * .3 + velocity * float(abs(Random() % 100)) / 100 / 2, 1, 1, 1, .1, 1); Sprite::setLastSpriteSpecial(2); } + } + } } Object::objects[i]->messedwith = .5; } } } + } + } if (!skeleton.free) { bool play; play = 0; - if ((stunned > 0 || surprised > 0) && Person::players.size() > 2 && aitype != passivetype) + if ((stunned > 0 || surprised > 0) && Person::players.size() > 2 && aitype != passivetype) { play = 1; - if (hasvictim) - if (aitype != passivetype && victim->skeleton.free && !victim->dead) + } + if (hasvictim) { + if (aitype != passivetype && victim->skeleton.free && !victim->dead) { play = 1; - if (Tutorial::active && id != 0) + } + } + if (Tutorial::active && id != 0) { play = 0; + } if (play && aitype != playercontrolled) { int whichsound = -1; - i = abs(Random() % 4); if (speechdelay <= 0) { + unsigned int i = abs(Random() % 4); if (creature == rabbittype) { - if (i == 0) + if (i == 0) { whichsound = rabbitchitter; - if (i == 1) + } + if (i == 1) { whichsound = rabbitchitter2; + } } if (creature == wolftype) { - if (i == 0) + if (i == 0) { whichsound = growlsound; - if (i == 1) + } + if (i == 1) { whichsound = growl2sound; + } } } speechdelay = .3; @@ -5455,15 +5942,19 @@ void Person::DoStuff() } } - if (animTarget == staggerbackhighanim) + if (animTarget == staggerbackhighanim) { staggerdelay = 1; - if (animTarget == staggerbackhardanim) + } + if (animTarget == staggerbackhardanim) { staggerdelay = 1; + } staggerdelay -= multiplier; - if (animTarget != crouchstabanim && animTarget != swordgroundstabanim && animTarget != staffgroundsmashanim) + if (animTarget != crouchstabanim && animTarget != swordgroundstabanim && animTarget != staffgroundsmashanim) { hasvictim = 1; - if (velocity.y < -30 && animTarget == jumpdownanim) + } + if (velocity.y < -30 && animTarget == jumpdownanim) { RagDoll(0); + } if (animCurrent != getIdle() && wasIdle() && animTarget != getIdle() && isIdle()) { animTarget = getIdle(); frameTarget = 0; @@ -5551,45 +6042,45 @@ void Person::DoStuff() } if (animTarget == spinkickanim || - animTarget == staffspinhitreversalanim || - animTarget == staffspinhitreversedanim || - animTarget == staffhitreversalanim || - animTarget == staffhitreversedanim || - animTarget == hurtidleanim || - animTarget == winduppunchanim || - animTarget == swordslashreversalanim || - animTarget == swordslashreversedanim || - animTarget == knifeslashreversalanim || - animTarget == knifeslashreversedanim || - animTarget == knifethrowanim || - animTarget == knifefollowanim || - animTarget == knifefollowedanim || - animTarget == killanim || - animTarget == dropkickanim || - animTarget == upunchanim || - animTarget == knifeslashstartanim || - animTarget == swordslashanim || - animTarget == staffhitanim || - animTarget == staffspinhitanim || - animTarget == staffgroundsmashanim || - animTarget == spinkickreversalanim || - animTarget == sweepreversalanim || - animTarget == lowkickanim || - animTarget == sweepreversedanim || - animTarget == rabbitkickreversalanim || - animTarget == rabbitkickreversedanim || - animTarget == jumpreversalanim || - animTarget == jumpreversedanim) { + animTarget == staffspinhitreversalanim || + animTarget == staffspinhitreversedanim || + animTarget == staffhitreversalanim || + animTarget == staffhitreversedanim || + animTarget == hurtidleanim || + animTarget == winduppunchanim || + animTarget == swordslashreversalanim || + animTarget == swordslashreversedanim || + animTarget == knifeslashreversalanim || + animTarget == knifeslashreversedanim || + animTarget == knifethrowanim || + animTarget == knifefollowanim || + animTarget == knifefollowedanim || + animTarget == killanim || + animTarget == dropkickanim || + animTarget == upunchanim || + animTarget == knifeslashstartanim || + animTarget == swordslashanim || + animTarget == staffhitanim || + animTarget == staffspinhitanim || + animTarget == staffgroundsmashanim || + animTarget == spinkickreversalanim || + animTarget == sweepreversalanim || + animTarget == lowkickanim || + animTarget == sweepreversedanim || + animTarget == rabbitkickreversalanim || + animTarget == rabbitkickreversedanim || + animTarget == jumpreversalanim || + animTarget == jumpreversedanim) { //close hands and yell if (righthandmorphend != 1 && - righthandmorphness == targetrighthandmorphness) { + righthandmorphness == targetrighthandmorphness) { righthandmorphness = 0; righthandmorphend = 1; targetrighthandmorphness = 1; } if (lefthandmorphend != 1 && - lefthandmorphness == targetlefthandmorphness) { + lefthandmorphness == targetlefthandmorphness) { lefthandmorphness = 0; lefthandmorphend = 1; targetlefthandmorphness = 1; @@ -5612,7 +6103,7 @@ void Person::DoStuff() } } - if (!dead && animTarget != hurtidleanim) + if (!dead && animTarget != hurtidleanim) { if (behind || animTarget == killanim || animTarget == knifethrowanim || animTarget == knifefollowanim || animTarget == spinkickreversalanim || animTarget == rabbitkickreversedanim || animTarget == jumpreversedanim) { if (headmorphend != 4 || headmorphness == targetheadmorphness) { headmorphend = 4; @@ -5620,6 +6111,7 @@ void Person::DoStuff() targetheadmorphness = 1; } } + } if (weaponactive != -1) { if (weapons[weaponids[weaponactive]].getType() != staff) { @@ -5636,8 +6128,9 @@ void Person::DoStuff() terrainnormal = terrain.getNormal(coords.x, coords.z); if (Animation::animations[animTarget].attack != reversal) { - if (!isnormal(coords.x)) + if (!isnormal(coords.x)) { coords = oldcoords; + } oldcoords = coords; } @@ -5650,47 +6143,57 @@ void Person::DoStuff() Normalise(&facing); if (isRun() || - animTarget == sneakanim || animTarget == rollanim || animTarget == walkanim) { - if (onterrain) + animTarget == sneakanim || animTarget == rollanim || animTarget == walkanim) { + if (onterrain) { targettilt2 = -facing.y * 20; - else + } else { targettilt2 = 0; + } } onterrain = 0; - if (!isRun() && !Animation::animations[animTarget].attack && animTarget != getupfromfrontanim && animTarget != getupfrombackanim && animTarget != sneakanim) + if (!isRun() && !Animation::animations[animTarget].attack && animTarget != getupfromfrontanim && animTarget != getupfrombackanim && animTarget != sneakanim) { targettilt2 = 0; + } if (animTarget == jumpupanim || animTarget == jumpdownanim || isFlip()) { flatvelocity = velocity; flatvelocity.y = 0; flatvelspeed = findLength(&flatvelocity); targettilt = flatvelspeed * fast_sqrt(abs(velocity.y) * .7) * normaldotproduct(DoRotation(flatfacing, 0, -90, 0), flatvelocity); targettilt2 = flatvelspeed * fast_sqrt(abs(velocity.y) * .7) * normaldotproduct(flatfacing, flatvelocity); - if (velocity.y < 0) + if (velocity.y < 0) { targettilt2 *= -1; - if (velocity.y < 0) + } + if (velocity.y < 0) { targettilt *= -1; - if (targettilt > 25) + } + if (targettilt > 25) { targettilt = 25; - if (targettilt < -25) + } + if (targettilt < -25) { targettilt = -25; + } } - if (targettilt2 > 45) + if (targettilt2 > 45) { targettilt2 = 45; - if (targettilt2 < -45) + } + if (targettilt2 < -45) { targettilt2 = -45; - if (abs(tilt2 - targettilt2) < multiplier * 400) + } + if (abs(tilt2 - targettilt2) < multiplier * 400) { tilt2 = targettilt2; - else if (tilt2 > targettilt2) { + } else if (tilt2 > targettilt2) { tilt2 -= multiplier * 400; } else if (tilt2 < targettilt2) { tilt2 += multiplier * 400; } if (!Animation::animations[animTarget].attack && animTarget != getupfrombackanim && animTarget != getupfromfrontanim) { - if (tilt2 > 25) + if (tilt2 > 25) { tilt2 = 25; - if (tilt2 < -25) + } + if (tilt2 < -25) { tilt2 = -25; + } } if (!isnormal(targettilt) && targettilt) { @@ -5726,8 +6229,9 @@ void Person::DoStuff() velocity.y += gravity * multiplier * 20; ReflectVector(&velocity, terrain.getNormal(coords.x, coords.z)); velspeed = findLength(&velocity); - if (velspeed < speed * 30 * scale) + if (velspeed < speed * 30 * scale) { velspeed = speed * 30 * scale; + } velocity = flatfacing * velspeed; } } else if (isRun()) { @@ -5795,7 +6299,6 @@ void Person::DoStuff() velocity = flatfacing * velspeed; } - if ((animTarget == bounceidleanim || animCurrent == hurtidleanim) && (animCurrent == fightidleanim || animCurrent == knifefightidleanim)) { velocity -= facing * multiplier * speed * 700 * scale; velspeed = findLength(&velocity); @@ -5866,17 +6369,18 @@ void Person::DoStuff() velspeed = findLength(&velocity); } - if (animTarget == jumpupanim || animTarget == jumpdownanim || isFlip()) { velocity.y += gravity * multiplier; } - if (animTarget != climbanim && animTarget != hanganim && !isWallJump()) + if (animTarget != climbanim && animTarget != hanganim && !isWallJump()) { coords += velocity * multiplier; + } if (coords.y < terrain.getHeight(coords.x, coords.z) && (animTarget == jumpdownanim || animTarget == jumpupanim || isFlip())) { - if (isFlip() && targetFrame().label == 7) + if (isFlip() && targetFrame().label == 7) { RagDoll(0); + } if (animTarget == jumpupanim) { jumppower = -4; @@ -5892,7 +6396,9 @@ void Person::DoStuff() } if (animTarget == jumpdownanim || isFlip()) { - if (isFlip())jumppower = -4; + if (isFlip()) { + jumppower = -4; + } animTarget = getLanding(); emit_sound_at(landsound, coords, 128.); @@ -5902,21 +6408,22 @@ void Person::DoStuff() } } - if (animTarget != jumpupanim && animTarget != jumpdownanim && !isFlip() && animTarget != climbanim && animTarget != hanganim && !isWallJump()) + if (animTarget != jumpupanim && animTarget != jumpdownanim && !isFlip() && animTarget != climbanim && animTarget != hanganim && !isWallJump()) { coords.y += gravity * multiplier * 2; + } if (animTarget != jumpupanim && animTarget != jumpdownanim && !isFlip() && coords.y < terrain.getHeight(coords.x, coords.z)) { coords.y = terrain.getHeight(coords.x, coords.z); onterrain = 1; } - 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) { velocity = 0; - } else + } else { velocity -= velocity / velspeed * multiplier * 300 * scale; + } if (velspeed > 5 && (isLanding() || isLandhard())) { skiddingdelay += multiplier; if (skiddelay <= 0) { @@ -5924,17 +6431,13 @@ void Person::DoStuff() FootLand(rightfoot, .5); skiddelay = .02; } - } else + } else { skiddingdelay = 0; + } } if (isLandhard()) { velspeed = findLength(&velocity); - velocity.y = 0; - if (velspeed < multiplier * 600 * scale) { - velocity = 0; - } else - velocity -= velocity / velspeed * multiplier * 600 * scale; velocity = 0; if (velspeed > 5 && (isLanding() || isLandhard())) { skiddingdelay += multiplier; @@ -5943,12 +6446,14 @@ void Person::DoStuff() FootLand(rightfoot, .5); skiddelay = .02; } - } else + } else { skiddingdelay = 0; + } } - if (skiddingdelay < 0) + if (skiddingdelay < 0) { skiddingdelay += multiplier; + } if (skiddingdelay > .02 && !forwardkeydown && !backkeydown && !leftkeydown && !rightkeydown && !jumpkeydown && isLanding() && !landhard) { skiddingdelay = -1; if (!onterrain || environment == grassyenvironment) { @@ -5963,8 +6468,9 @@ void Person::DoStuff() Normalise(&terrainnormal); targetyaw = -asin(0 - terrainnormal.x); targetyaw *= 360 / 6.28; - if (terrainnormal.z < 0) + if (terrainnormal.z < 0) { targetyaw = 180 - targetyaw; + } targettilt2 = -asin(terrainnormal.y) * 360 / 6.28; //*-70; } @@ -5992,11 +6498,10 @@ void Person::DoStuff() } } - /* EFFECT * inverse kinematics helper function */ -void IKHelper(Person *p, float interp) +void IKHelper(Person* p, float interp) { XYZ point, change, change2; float heightleft, heightright; @@ -6056,12 +6561,15 @@ int Person::DrawSkeleton() XYZ terrainlight; float terrainheight; float distance; - if (!isnormal(yaw)) + if (!isnormal(yaw)) { yaw = 0; - if (!isnormal(tilt)) + } + if (!isnormal(tilt)) { tilt = 0; - if (!isnormal(tilt2)) + } + if (!isnormal(tilt2)) { tilt2 = 0; + } oldplayerdetail = playerdetail; playerdetail = 0; if (distsq(&viewer, &coords) < viewdistance * viewdistance / 32 && detail == 2) { @@ -6073,8 +6581,9 @@ int Person::DrawSkeleton() if (distsq(&viewer, &coords) < viewdistance * viewdistance / 256 && (detail != 1 && detail != 2)) { playerdetail = 1; } - if (id == 0) + if (id == 0) { playerdetail = 1; + } if (playerdetail != oldplayerdetail) { updatedelay = 0; normalsupdatedelay = 0; @@ -6091,7 +6600,7 @@ int Person::DrawSkeleton() } static XYZ mid; static float M[16]; - static int i, k; + static int k; static int weaponattachmuscle; static int weaponrotatemuscle; static XYZ weaponpoint; @@ -6099,51 +6608,53 @@ int Person::DrawSkeleton() if ((dead != 2 || skeleton.free != 2) && updatedelay <= 0) { if (!isSleeping() && !isSitting()) { // TODO: give these meaningful names - const bool cond1 = (isIdle() || isCrouch() || isLanding() || isLandhard() - || animTarget == drawrightanim || animTarget == drawleftanim || animTarget == crouchdrawrightanim); - const bool cond2 = (wasIdle() || wasCrouch() || wasLanding() || wasLandhard() - || animCurrent == drawrightanim || animCurrent == drawleftanim || animCurrent == crouchdrawrightanim); + const bool cond1 = (isIdle() || isCrouch() || isLanding() || isLandhard() || animTarget == drawrightanim || animTarget == drawleftanim || animTarget == crouchdrawrightanim); + const bool cond2 = (wasIdle() || wasCrouch() || wasLanding() || wasLandhard() || animCurrent == drawrightanim || animCurrent == drawleftanim || animCurrent == crouchdrawrightanim); if (onterrain && (cond1 && cond2) && !skeleton.free) { IKHelper(this, 1); - if (creature == wolftype) + if (creature == wolftype) { IKHelper(this, 1); + } } if (onterrain && (cond1 && !cond2) && !skeleton.free) { IKHelper(this, target); - if (creature == wolftype) + if (creature == wolftype) { IKHelper(this, target); + } } if (onterrain && (!cond1 && cond2) && !skeleton.free) { IKHelper(this, 1 - target); - if (creature == wolftype) + if (creature == wolftype) { IKHelper(this, 1 - target); + } } } - 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())) + 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 { + } else { targetheadyaw = -targetyaw; targetheadpitch = 0; - if (Animation::animations[animTarget].attack == 3) + if (Animation::animations[animTarget].attack == 3) { targetheadyaw += 180; + } } - for (i = 0; i < skeleton.drawmodel.vertexNum; i++) { + for (int i = 0; i < skeleton.drawmodel.vertexNum; i++) { skeleton.drawmodel.vertex[i] = 0; skeleton.drawmodel.vertex[i].y = 999; } - for (i = 0; i < skeleton.drawmodellow.vertexNum; i++) { + for (int i = 0; i < skeleton.drawmodellow.vertexNum; i++) { skeleton.drawmodellow.vertex[i] = 0; skeleton.drawmodellow.vertex[i].y = 999; } - for (i = 0; i < skeleton.drawmodelclothes.vertexNum; i++) { + for (int i = 0; i < skeleton.drawmodelclothes.vertexNum; i++) { skeleton.drawmodelclothes.vertex[i] = 0; skeleton.drawmodelclothes.vertex[i].y = 999; } - for (unsigned i = 0; i < skeleton.muscles.size(); i++) { + for (unsigned 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; @@ -6178,17 +6689,19 @@ int Person::DrawSkeleton() start = tailmorphstart; endthing = tailmorphend; } - if (calcrot) + if (calcrot) { skeleton.FindRotationMuscle(i, animTarget); + } mid = (skeleton.muscles[i].parent1->position + skeleton.muscles[i].parent2->position) / 2; glMatrixMode(GL_MODELVIEW); glPushMatrix(); glLoadIdentity(); - if (!skeleton.free) + if (!skeleton.free) { glRotatef(tilt2, 1, 0, 0); - if (!skeleton.free) + } + if (!skeleton.free) { glRotatef(tilt, 0, 0, 1); - + } glTranslatef(mid.x, mid.y, mid.z); @@ -6203,26 +6716,30 @@ int Person::DrawSkeleton() if (playerdetail || skeleton.free == 3) { for (unsigned 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]]; + 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); glPushMatrix(); - if (p1 == abdomen || p2 == abdomen) + if (p1 == abdomen || p2 == abdomen) { glTranslatef((v0.x * (1 - morphness) + v1.x * morphness) * proportionbody.x, (v0.y * (1 - morphness) + v1.y * morphness) * proportionbody.y, (v0.z * (1 - morphness) + v1.z * morphness) * proportionbody.z); - if (p1 == lefthand || p1 == righthand || p1 == leftwrist || p1 == rightwrist || p1 == leftelbow || p1 == rightelbow || p2 == leftelbow || p2 == rightelbow) + } + if (p1 == lefthand || p1 == righthand || p1 == leftwrist || p1 == rightwrist || p1 == leftelbow || p1 == rightelbow || p2 == leftelbow || p2 == rightelbow) { glTranslatef((v0.x * (1 - morphness) + v1.x * morphness) * proportionarms.x, (v0.y * (1 - morphness) + v1.y * morphness) * proportionarms.y, (v0.z * (1 - morphness) + v1.z * morphness) * proportionarms.z); - if (p1 == leftfoot || p1 == rightfoot || p1 == leftankle || p1 == rightankle || p1 == leftknee || p1 == rightknee || p2 == leftknee || p2 == rightknee) + } + if (p1 == leftfoot || p1 == rightfoot || p1 == leftankle || p1 == rightankle || p1 == leftknee || p1 == rightknee || p2 == leftknee || p2 == rightknee) { glTranslatef((v0.x * (1 - morphness) + v1.x * morphness) * proportionlegs.x, (v0.y * (1 - morphness) + v1.y * morphness) * proportionlegs.y, (v0.z * (1 - morphness) + v1.z * morphness) * proportionlegs.z); - if (p1 == head || p2 == head) + } + if (p1 == head || p2 == head) { glTranslatef((v0.x * (1 - morphness) + v1.x * morphness) * proportionhead.x, (v0.y * (1 - morphness) + v1.y * morphness) * proportionhead.y, (v0.z * (1 - morphness) + v1.z * morphness) * proportionhead.z); + } glGetFloatv(GL_MODELVIEW_MATRIX, M); skeleton.drawmodel.vertex[skeleton.muscles[i].vertices[j]].x = M[12] * scale; skeleton.drawmodel.vertex[skeleton.muscles[i].vertices[j]].y = M[13] * scale; @@ -6232,25 +6749,29 @@ int Person::DrawSkeleton() } if (!playerdetail || skeleton.free == 3) { for (unsigned j = 0; j < skeleton.muscles[i].verticeslow.size(); j++) { - XYZ &v0 = skeleton.modellow.vertex[skeleton.muscles[i].verticeslow[j]]; + XYZ& v0 = skeleton.modellow.vertex[skeleton.muscles[i].verticeslow[j]]; glMatrixMode(GL_MODELVIEW); glPushMatrix(); - if (p1 == abdomen || p2 == abdomen) + if (p1 == abdomen || p2 == abdomen) { glTranslatef(v0.x * proportionbody.x, v0.y * proportionbody.y, v0.z * proportionbody.z); - if (p1 == lefthand || p1 == righthand || p1 == leftwrist || p1 == rightwrist || p1 == leftelbow || p1 == rightelbow || p2 == leftelbow || p2 == rightelbow) + } + if (p1 == lefthand || p1 == righthand || p1 == leftwrist || p1 == rightwrist || p1 == leftelbow || p1 == rightelbow || p2 == leftelbow || p2 == rightelbow) { glTranslatef(v0.x * proportionarms.x, v0.y * proportionarms.y, v0.z * proportionarms.z); - if (p1 == leftfoot || p1 == rightfoot || p1 == leftankle || p1 == rightankle || p1 == leftknee || p1 == rightknee || p2 == leftknee || p2 == rightknee) + } + if (p1 == leftfoot || p1 == rightfoot || p1 == leftankle || p1 == rightankle || p1 == leftknee || p1 == rightknee || p2 == leftknee || p2 == rightknee) { glTranslatef(v0.x * proportionlegs.x, v0.y * proportionlegs.y, v0.z * proportionlegs.z); - if (p1 == head || p2 == head) + } + if (p1 == head || p2 == head) { glTranslatef(v0.x * proportionhead.x, v0.y * proportionhead.y, v0.z * proportionhead.z); + } glGetFloatv(GL_MODELVIEW_MATRIX, M); skeleton.drawmodellow.vertex[skeleton.muscles[i].verticeslow[j]].x = M[12] * scale; @@ -6267,10 +6788,12 @@ int Person::DrawSkeleton() glMatrixMode(GL_MODELVIEW); glPushMatrix(); glLoadIdentity(); - if (!skeleton.free) + if (!skeleton.free) { glRotatef(tilt2, 1, 0, 0); - if (!skeleton.free) + } + if (!skeleton.free) { glRotatef(tilt, 0, 0, 1); + } glTranslatef(mid.x, mid.y, mid.z); skeleton.muscles[i].lastrotate1 = skeleton.muscles[i].rotate1; glRotatef(-skeleton.muscles[i].lastrotate1 + 90, 0, 1, 0); @@ -6282,25 +6805,29 @@ int Person::DrawSkeleton() glRotatef(-skeleton.muscles[i].lastrotate3, 0, 1, 0); for (unsigned j = 0; j < skeleton.muscles[i].verticesclothes.size(); j++) { - XYZ &v0 = skeleton.modelclothes.vertex[skeleton.muscles[i].verticesclothes[j]]; + XYZ& v0 = skeleton.modelclothes.vertex[skeleton.muscles[i].verticesclothes[j]]; glMatrixMode(GL_MODELVIEW); glPushMatrix(); - if (p1 == abdomen || p2 == abdomen) + if (p1 == abdomen || p2 == abdomen) { glTranslatef(v0.x * proportionbody.x, v0.y * proportionbody.y, v0.z * proportionbody.z); - if (p1 == lefthand || p1 == righthand || p1 == leftwrist || p1 == rightwrist || p1 == leftelbow || p1 == rightelbow || p2 == leftelbow || p2 == rightelbow) + } + if (p1 == lefthand || p1 == righthand || p1 == leftwrist || p1 == rightwrist || p1 == leftelbow || p1 == rightelbow || p2 == leftelbow || p2 == rightelbow) { glTranslatef(v0.x * proportionarms.x, v0.y * proportionarms.y, v0.z * proportionarms.z); - if (p1 == leftfoot || p1 == rightfoot || p1 == leftankle || p1 == rightankle || p1 == leftknee || p1 == rightknee || p2 == leftknee || p2 == rightknee) + } + if (p1 == leftfoot || p1 == rightfoot || p1 == leftankle || p1 == rightankle || p1 == leftknee || p1 == rightknee || p2 == leftknee || p2 == rightknee) { glTranslatef(v0.x * proportionlegs.x, v0.y * proportionlegs.y, v0.z * proportionlegs.z); - if (p1 == head || p2 == head) + } + if (p1 == head || p2 == head) { glTranslatef(v0.x * proportionhead.x, v0.y * proportionhead.y, v0.z * proportionhead.z); + } glGetFloatv(GL_MODELVIEW_MATRIX, M); skeleton.drawmodelclothes.vertex[skeleton.muscles[i].verticesclothes[j]].x = M[12] * scale; skeleton.drawmodelclothes.vertex[skeleton.muscles[i].verticesclothes[j]].y = M[13] * scale; @@ -6313,17 +6840,22 @@ int Person::DrawSkeleton() } if (skeleton.free != 2 && (skeleton.free == 1 || skeleton.free == 3 || id == 0 || (normalsupdatedelay <= 0) || animTarget == getupfromfrontanim || animTarget == getupfrombackanim || animCurrent == getupfromfrontanim || animCurrent == getupfrombackanim)) { normalsupdatedelay = 1; - if (playerdetail || skeleton.free == 3) + if (playerdetail || skeleton.free == 3) { skeleton.drawmodel.CalculateNormals(0); - if (!playerdetail || skeleton.free == 3) + } + if (!playerdetail || skeleton.free == 3) { skeleton.drawmodellow.CalculateNormals(0); - if (skeleton.clothes) + } + if (skeleton.clothes) { skeleton.drawmodelclothes.CalculateNormals(0); + } } else { - if (playerdetail || skeleton.free == 3) + if (playerdetail || skeleton.free == 3) { skeleton.drawmodel.UpdateVertexArrayNoTexNoNorm(); - if (!playerdetail || skeleton.free == 3) + } + if (!playerdetail || skeleton.free == 3) { skeleton.drawmodellow.UpdateVertexArrayNoTexNoNorm(); + } if (skeleton.clothes) { skeleton.drawmodelclothes.UpdateVertexArrayNoTexNoNorm(); } @@ -6331,14 +6863,18 @@ int Person::DrawSkeleton() } framemult = .01; updatedelaychange = -framemult * 4 * (45 - findDistance(&viewer, &coords) * 1); - if (updatedelaychange > -realmultiplier * 30) + if (updatedelaychange > -realmultiplier * 30) { updatedelaychange = -realmultiplier * 30; - if (updatedelaychange > -framemult * 4) + } + if (updatedelaychange > -framemult * 4) { updatedelaychange = -framemult * 4; - if (skeleton.free == 1) + } + if (skeleton.free == 1) { updatedelaychange *= 6; - if (id == 0) + } + if (id == 0) { updatedelaychange *= 8; + } updatedelay += updatedelaychange; glMatrixMode(GL_MODELVIEW); @@ -6354,19 +6890,20 @@ int Person::DrawSkeleton() glDisable(GL_LIGHTING); glDisable(GL_TEXTURE_2D); glBegin(GL_POINTS); - if (playerdetail) - for (i = 0; i < skeleton.drawmodel.vertexNum; i++) { - XYZ &v0 = skeleton.drawmodel.vertex[i]; + if (playerdetail) { + for (int i = 0; i < skeleton.drawmodel.vertexNum; i++) { + XYZ& v0 = skeleton.drawmodel.vertex[i]; glVertex3f(v0.x, v0.y, v0.z); } + } glEnd(); glBegin(GL_LINES); - if (playerdetail) - for (i = 0; i < skeleton.drawmodel.TriangleNum; i++) { - XYZ &v0 = skeleton.drawmodel.vertex[skeleton.drawmodel.Triangles[i].vertex[0]]; - XYZ &v1 = skeleton.drawmodel.vertex[skeleton.drawmodel.Triangles[i].vertex[1]]; - XYZ &v2 = skeleton.drawmodel.vertex[skeleton.drawmodel.Triangles[i].vertex[2]]; + if (playerdetail) { + for (unsigned int i = 0; i < skeleton.drawmodel.Triangles.size(); i++) { + const XYZ& v0 = skeleton.drawmodel.getTriangleVertex(i, 0); + const XYZ& v1 = skeleton.drawmodel.getTriangleVertex(i, 1); + const XYZ& v2 = skeleton.drawmodel.getTriangleVertex(i, 2); glVertex3f(v0.x, v0.y, v0.z); glVertex3f(v1.x, v1.y, v1.z); glVertex3f(v1.x, v1.y, v1.z); @@ -6374,6 +6911,7 @@ int Person::DrawSkeleton() glVertex3f(v2.x, v2.y, v2.z); glVertex3f(v0.x, v0.y, v0.z); } + } glEnd(); } @@ -6381,14 +6919,17 @@ int Person::DrawSkeleton() terrainlight = terrain.getLighting(coords.x, coords.z); distance = distsq(&viewer, &coords); distance = (viewdistance * viewdistance - (distance - (viewdistance * viewdistance * fadestart)) * (1 / (1 - fadestart))) / viewdistance / viewdistance; - if (distance > 1) + if (distance > 1) { distance = 1; + } if (distance > 0) { terrainheight = (coords.y - terrain.getHeight(coords.x, coords.z)) / 3 + 1; - if (terrainheight < 1) + if (terrainheight < 1) { terrainheight = 1; - if (terrainheight > 1.7) + } + if (terrainheight > 1.7) { terrainheight = 1.7; + } glColor4f((1 - (1 - terrainlight.x) / terrainheight) - burnt, (1 - (1 - terrainlight.y) / terrainheight) - burnt, (1 - (1 - terrainlight.z) / terrainheight) - burnt, distance); glDisable(GL_BLEND); @@ -6406,11 +6947,12 @@ int Person::DrawSkeleton() glDepthMask(0); glEnable(GL_LIGHTING); glEnable(GL_BLEND); - if (canattack && cananger) + if (canattack && cananger) { if (Animation::animations[animTarget].attack == normalattack || Animation::animations[animTarget].attack == reversed) { glDisable(GL_TEXTURE_2D); glColor4f(1, 0, 0, 0.8); } + } glMatrixMode(GL_TEXTURE); glPushMatrix(); glTranslatef(0, -smoketex, 0); @@ -6418,20 +6960,22 @@ int Person::DrawSkeleton() } if (playerdetail) { if (!showpoints) { - if (Tutorial::active && (id != 0)) + if (Tutorial::active && (id != 0)) { skeleton.drawmodel.drawdifftex(Sprite::cloudimpacttexture); - else + } else { skeleton.drawmodel.draw(); + } } } if (!playerdetail) { - if (Tutorial::active && (id != 0)) + if (Tutorial::active && (id != 0)) { skeleton.drawmodellow.drawdifftex(Sprite::cloudimpacttexture); - else + } else { skeleton.drawmodellow.drawdifftex(skeleton.drawmodel.textureptr); + } } - if (!(Animation::animations[animTarget].attack == normalattack || Animation::animations[animTarget].attack == reversed)) + if (!(Animation::animations[animTarget].attack == normalattack || Animation::animations[animTarget].attack == reversed)) { if (Tutorial::active && id != 0) { glPopMatrix(); glMatrixMode(GL_MODELVIEW); @@ -6440,31 +6984,34 @@ int Person::DrawSkeleton() glDepthMask(0); glEnable(GL_LIGHTING); glEnable(GL_BLEND); - if (canattack && cananger) + if (canattack && cananger) { if (Animation::animations[animTarget].attack == normalattack || Animation::animations[animTarget].attack == reversed) { glDisable(GL_TEXTURE_2D); glColor4f(1, 0, 0, 0.8); } + } glMatrixMode(GL_TEXTURE); glPushMatrix(); glTranslatef(0, -smoketex * .6, 0); glTranslatef(smoketex * .6, 0, 0); if (playerdetail) { if (!showpoints) { - if (Tutorial::active && (id != 0)) + if (Tutorial::active && (id != 0)) { skeleton.drawmodel.drawdifftex(Sprite::cloudimpacttexture); - else + } else { skeleton.drawmodel.draw(); + } } } if (!playerdetail) { - if (Tutorial::active && (id != 0)) + if (Tutorial::active && (id != 0)) { skeleton.drawmodellow.drawdifftex(Sprite::cloudimpacttexture); - else + } else { skeleton.drawmodellow.drawdifftex(skeleton.drawmodel.textureptr); + } } } - + } if (Tutorial::active && id != 0) { glPopMatrix(); @@ -6474,10 +7021,12 @@ int Person::DrawSkeleton() if (skeleton.clothes) { glDepthMask(0); glEnable(GL_BLEND); - if (!immediate) + if (!immediate) { skeleton.drawmodelclothes.draw(); - if (immediate) + } + if (immediate) { skeleton.drawmodelclothes.drawimmediate(); + } glDepthMask(1); } } @@ -6485,7 +7034,7 @@ int Person::DrawSkeleton() if (num_weapons > 0) { for (k = 0; k < num_weapons; k++) { - i = weaponids[k]; + int i = weaponids[k]; if (weaponactive == k) { if (weapons[i].getType() != staff) { for (unsigned j = 0; j < skeleton.muscles.size(); j++) { @@ -6499,8 +7048,9 @@ int Person::DrawSkeleton() } } weaponpoint = (skeleton.muscles[weaponattachmuscle].parent1->position + skeleton.muscles[weaponattachmuscle].parent2->position) / 2; - if (creature == wolftype) + if (creature == wolftype) { weaponpoint = (jointPos(rightwrist) * .7 + jointPos(righthand) * .3); + } } if (weapons[i].getType() == staff) { for (unsigned j = 0; j < skeleton.muscles.size(); j++) { @@ -6521,17 +7071,21 @@ int Person::DrawSkeleton() vec2 = (jointPos(rightwrist) - jointPos(rightshoulder)); CrossProduct(&vec1, &vec2, &tempnormthing); Normalise(&tempnormthing); - if (animTarget != staffhitanim && animCurrent != staffhitanim && animTarget != staffgroundsmashanim && animCurrent != staffgroundsmashanim && animTarget != staffspinhitanim && animCurrent != staffspinhitanim) + if (animTarget != staffhitanim && animCurrent != staffhitanim && animTarget != staffgroundsmashanim && animCurrent != staffgroundsmashanim && animTarget != staffspinhitanim && animCurrent != staffspinhitanim) { weaponpoint += tempnormthing * .1 - skeleton.specialforward[1] * .3 + (jointPos(rightwrist) - jointPos(rightelbow)); + } } } if (weaponactive != k && weaponstuck != k) { - if (weapons[i].getType() == knife) + if (weapons[i].getType() == knife) { weaponpoint = jointPos(abdomen) + (jointPos(righthip) - jointPos(lefthip)) * .1 + (jointPos(rightshoulder) - jointPos(leftshoulder)) * .35; - if (weapons[i].getType() == sword) + } + if (weapons[i].getType() == sword) { weaponpoint = jointPos(abdomen) + (jointPos(lefthip) - jointPos(righthip)) * .09 + (jointPos(leftshoulder) - jointPos(rightshoulder)) * .33; - if (weapons[i].getType() == staff) + } + if (weapons[i].getType() == staff) { weaponpoint = jointPos(abdomen) + (jointPos(lefthip) - jointPos(righthip)) * .09 + (jointPos(leftshoulder) - jointPos(rightshoulder)) * .33; + } for (unsigned 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; @@ -6539,10 +7093,11 @@ int Person::DrawSkeleton() } } if (weaponstuck == k) { - if (weaponstuckwhere == 0) + if (weaponstuckwhere == 0) { weaponpoint = jointPos(abdomen) * .5 + jointPos(neck) * .5 - skeleton.forward * .8; - else + } else { weaponpoint = jointPos(abdomen) * .5 + jointPos(neck) * .5 + skeleton.forward * .8; + } for (unsigned 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; @@ -6589,8 +7144,9 @@ int Person::DrawSkeleton() weapons[i].rotation3 = 0; weapons[i].smallrotation = -90; weapons[i].smallrotation2 = 0; - if (temppoint1.x > temppoint2.x) + if (temppoint1.x > temppoint2.x) { weapons[i].rotation1 = 360 - weapons[i].rotation1; + } } if ((animCurrent == knifeslashreversalanim && animTarget == knifeslashreversalanim) || (animCurrent == knifeslashreversedanim && animTarget == knifeslashreversedanim)) { XYZ temppoint1, temppoint2; @@ -6608,8 +7164,9 @@ int Person::DrawSkeleton() weapons[i].rotation3 = 0; weapons[i].smallrotation = 90; weapons[i].smallrotation2 = 0; - if (temppoint1.x > temppoint2.x) + if (temppoint1.x > temppoint2.x) { weapons[i].rotation1 = 360 - weapons[i].rotation1; + } } if (animTarget == knifethrowanim) { weapons[i].smallrotation = 90; @@ -6652,8 +7209,9 @@ int Person::DrawSkeleton() weapons[i].rotation3 = 0; weapons[i].smallrotation = 90; weapons[i].smallrotation2 = 0; - if (temppoint1.x > temppoint2.x) + if (temppoint1.x > temppoint2.x) { weapons[i].rotation1 = 360 - weapons[i].rotation1; + } } } if (weapons[i].getType() == staff) { @@ -6675,8 +7233,9 @@ int Person::DrawSkeleton() weapons[i].rotation3 = 0; weapons[i].smallrotation = 90; weapons[i].smallrotation2 = 0; - if (temppoint1.x > temppoint2.x) + if (temppoint1.x > temppoint2.x) { weapons[i].rotation1 = 360 - weapons[i].rotation1; + } } } } @@ -6695,10 +7254,11 @@ int Person::DrawSkeleton() } } if (weaponstuck == k) { - if (weaponstuckwhere == 0) + if (weaponstuckwhere == 0) { weapons[i].smallrotation = 180; - else + } else { weapons[i].smallrotation = 0; + } weapons[i].smallrotation2 = 10; } } @@ -6706,24 +7266,26 @@ int Person::DrawSkeleton() } calcrot = 0; - if (skeleton.free) + if (skeleton.free) { calcrot = 1; - if (Animation::animations[animTarget].attack || isRun() || animTarget == staggerbackhardanim || isFlip() || animTarget == climbanim || animTarget == sneakanim || animTarget == rollanim || animTarget == walkanim || animTarget == backhandspringanim || isWallJump()) + } + if (Animation::animations[animTarget].attack || isRun() || animTarget == staggerbackhardanim || isFlip() || animTarget == climbanim || animTarget == sneakanim || animTarget == rollanim || animTarget == walkanim || animTarget == backhandspringanim || isWallJump()) { calcrot = 1; - if (animCurrent != animTarget) + } + if (animCurrent != animTarget) { calcrot = 1; - if (skeleton.free == 2) + } + if (skeleton.free == 2) { calcrot = 0; + } return 0; } - /* FUNCTION? */ -int Person::SphereCheck(XYZ *p1, float radius, XYZ *p, XYZ *move, float *rotate, Model *model) +int Person::SphereCheck(XYZ* p1, float radius, XYZ* p, XYZ* move, float* rotate, Model* model) { - static int i, j; static float distance; static float olddistance; static int intersecting; @@ -6737,41 +7299,48 @@ int Person::SphereCheck(XYZ *p1, float radius, XYZ *p, XYZ *move, float *rotate, oldp1 = *p1; *p1 = *p1 - *move; - if (distsq(p1, &model->boundingspherecenter) > radius * radius + model->boundingsphereradius * model->boundingsphereradius) + if (distsq(p1, &model->boundingspherecenter) > radius * radius + model->boundingsphereradius * model->boundingsphereradius) { return -1; - if (*rotate) + } + if (*rotate) { *p1 = DoRotation(*p1, 0, -*rotate, 0); - for (i = 0; i < 4; i++) { - for (j = 0; j < model->TriangleNum; j++) { - if (model->facenormals[j].y <= slopethreshold) { + } + for (int i = 0; i < 4; i++) { + for (unsigned int j = 0; j < model->Triangles.size(); j++) { + if (model->Triangles[j].facenormal.y <= slopethreshold) { intersecting = 0; - distance = abs((model->facenormals[j].x * p1->x) + (model->facenormals[j].y * p1->y) + (model->facenormals[j].z * p1->z) - ((model->facenormals[j].x * model->vertex[model->Triangles[j].vertex[0]].x) + (model->facenormals[j].y * model->vertex[model->Triangles[j].vertex[0]].y) + (model->facenormals[j].z * model->vertex[model->Triangles[j].vertex[0]].z))); + distance = abs((model->Triangles[j].facenormal.x * p1->x) + (model->Triangles[j].facenormal.y * p1->y) + (model->Triangles[j].facenormal.z * p1->z) - ((model->Triangles[j].facenormal.x * model->vertex[model->Triangles[j].vertex[0]].x) + (model->Triangles[j].facenormal.y * model->vertex[model->Triangles[j].vertex[0]].y) + (model->Triangles[j].facenormal.z * model->vertex[model->Triangles[j].vertex[0]].z))); if (distance < radius) { - point = *p1 - model->facenormals[j] * distance; - if (PointInTriangle( &point, model->facenormals[j], &model->vertex[model->Triangles[j].vertex[0]], &model->vertex[model->Triangles[j].vertex[1]], &model->vertex[model->Triangles[j].vertex[2]])) + point = *p1 - model->Triangles[j].facenormal * distance; + if (PointInTriangle(&point, model->Triangles[j].facenormal, &model->vertex[model->Triangles[j].vertex[0]], &model->vertex[model->Triangles[j].vertex[1]], &model->vertex[model->Triangles[j].vertex[2]])) { intersecting = 1; - if (!intersecting) + } + if (!intersecting) { intersecting = sphere_line_intersection(&model->vertex[model->Triangles[j].vertex[0]], &model->vertex[model->Triangles[j].vertex[1]], p1, &radius); - if (!intersecting) + } + if (!intersecting) { intersecting = sphere_line_intersection(&model->vertex[model->Triangles[j].vertex[1]], &model->vertex[model->Triangles[j].vertex[2]], p1, &radius); - if (!intersecting) + } + if (!intersecting) { intersecting = sphere_line_intersection(&model->vertex[model->Triangles[j].vertex[0]], &model->vertex[model->Triangles[j].vertex[2]], p1, &radius); + } end = *p1 - point; - if (dotproduct(&model->facenormals[j], &end) > 0 && intersecting) { + if (dotproduct(&model->Triangles[j].facenormal, &end) > 0 && intersecting) { start = *p1; end = *p1; end.y -= radius; - 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)) { + 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->Triangles[j].facenormal, &point)) { p1->y = point.y + radius; if ((animTarget == jumpdownanim || isFlip())) { - if (isFlip() && (frameTarget < 5 || targetFrame().label == 7 || targetFrame().label == 4)) + if (isFlip() && (frameTarget < 5 || targetFrame().label == 7 || targetFrame().label == 4)) { RagDoll(0); + } if (animTarget == jumpupanim) { jumppower = -4; @@ -6787,8 +7356,9 @@ int Person::SphereCheck(XYZ *p1, float radius, XYZ *p, XYZ *move, float *rotate, } if ((animTarget == jumpdownanim || isFlip()) && !wasLanding() && !wasLandhard()) { - if (isFlip()) + if (isFlip()) { jumppower = -4; + } animTarget = getLanding(); emit_sound_at(landsound, coords, 128.); @@ -6807,39 +7377,39 @@ int Person::SphereCheck(XYZ *p1, float radius, XYZ *p, XYZ *move, float *rotate, } } } - for (j = 0; j < model->TriangleNum; j++) { - if (model->facenormals[j].y > slopethreshold) { + for (unsigned int j = 0; j < model->Triangles.size(); j++) { + if (model->Triangles[j].facenormal.y > slopethreshold) { intersecting = 0; start = *p1; start.y -= radius / 4; - XYZ &v0 = model->vertex[model->Triangles[j].vertex[0]]; - XYZ &v1 = model->vertex[model->Triangles[j].vertex[1]]; - XYZ &v2 = model->vertex[model->Triangles[j].vertex[2]]; - distance = abs((model->facenormals[j].x * start.x) - + (model->facenormals[j].y * start.y) - + (model->facenormals[j].z * start.z) - - ((model->facenormals[j].x * v0.x) - + (model->facenormals[j].y * v0.y) - + (model->facenormals[j].z * v0.z))); + XYZ& v0 = model->vertex[model->Triangles[j].vertex[0]]; + XYZ& v1 = model->vertex[model->Triangles[j].vertex[1]]; + XYZ& v2 = model->vertex[model->Triangles[j].vertex[2]]; + distance = abs((model->Triangles[j].facenormal.x * start.x) + (model->Triangles[j].facenormal.y * start.y) + (model->Triangles[j].facenormal.z * start.z) - ((model->Triangles[j].facenormal.x * v0.x) + (model->Triangles[j].facenormal.y * v0.y) + (model->Triangles[j].facenormal.z * v0.z))); if (distance < radius * .5) { - point = start - model->facenormals[j] * distance; - if (PointInTriangle( &point, model->facenormals[j], &v0, &v1, &v2)) + point = start - model->Triangles[j].facenormal * distance; + if (PointInTriangle(&point, model->Triangles[j].facenormal, &v0, &v1, &v2)) { intersecting = 1; - if (!intersecting) + } + if (!intersecting) { intersecting = sphere_line_intersection(v0.x, v0.y, v0.z, v1.x, v1.y, v1.z, p1->x, p1->y, p1->z, radius / 2); - if (!intersecting) + } + if (!intersecting) { intersecting = sphere_line_intersection(v1.x, v1.y, v1.z, v2.x, v2.y, v2.z, p1->x, p1->y, p1->z, radius / 2); - if (!intersecting) + } + if (!intersecting) { intersecting = sphere_line_intersection(v0.x, v0.y, v0.z, v2.x, v2.y, v2.z, p1->x, p1->y, p1->z, radius / 2); + } end = *p1 - point; - if (dotproduct(&model->facenormals[j], &end) > 0 && intersecting) { + if (dotproduct(&model->Triangles[j].facenormal, &end) > 0 && intersecting) { if ((animTarget == jumpdownanim || animTarget == jumpupanim || isFlip())) { start = velocity; - velocity -= DoRotation(model->facenormals[j], 0, *rotate, 0) * findLength(&velocity) * abs(normaldotproduct(velocity, DoRotation(model->facenormals[j], 0, *rotate, 0))); //(distance-radius*.5)/multiplier; - if (findLengthfast(&start) < findLengthfast(&velocity)) + velocity -= DoRotation(model->Triangles[j].facenormal, 0, *rotate, 0) * findLength(&velocity) * abs(normaldotproduct(velocity, DoRotation(model->Triangles[j].facenormal, 0, *rotate, 0))); //(distance-radius*.5)/multiplier; + if (findLengthfast(&start) < findLengthfast(&velocity)) { velocity = start; + } } - *p1 += model->facenormals[j] * (distance - radius * .5); + *p1 += model->Triangles[j].facenormal * (distance - radius * .5); } } if ((distance < olddistance || firstintersecting == -1) && intersecting) { @@ -6850,23 +7420,25 @@ int Person::SphereCheck(XYZ *p1, float radius, XYZ *p, XYZ *move, float *rotate, } } } - if (*rotate) + if (*rotate) { *p = DoRotation(*p, 0, *rotate, 0); + } *p = *p + *move; - if (*rotate) + if (*rotate) { *p1 = DoRotation(*p1, 0, *rotate, 0); + } *p1 += *move; return firstintersecting; } int findPathDist(int start, int end) { - int smallestcount, connected; + int connected; int closest; - smallestcount = 1000; + unsigned int smallestcount = 1000; for (char i = 0; i < 50; i++) { - unsigned count = 0; + unsigned int count = 0; int last = start; int last2 = -1; int last3 = -1; @@ -6876,19 +7448,27 @@ int findPathDist(int start, int end) for (int j = 0; j < Game::numpathpoints; j++) { if (j != last && j != last2 && j != last3 && j != last4) { connected = 0; - if (Game::numpathpointconnect[j]) + if (Game::numpathpointconnect[j]) { for (int k = 0; k < Game::numpathpointconnect[j]; k++) { - if (Game::pathpointconnect[j][k] == last)connected = 1; + if (Game::pathpointconnect[j][k] == last) { + connected = 1; + } } - if (!connected) - if (Game::numpathpointconnect[last]) + } + if (!connected) { + if (Game::numpathpointconnect[last]) { for (int k = 0; k < Game::numpathpointconnect[last]; k++) { - if (Game::pathpointconnect[last][k] == j)connected = 1; + if (Game::pathpointconnect[last][k] == j) { + connected = 1; + } } - if (connected) + } + } + if (connected) { if (closest == -1 || Random() % 2 == 0) { closest = j; } + } } } last4 = last3; @@ -6897,8 +7477,9 @@ int findPathDist(int start, int end) last = closest; count++; } - if (count < smallestcount) + if (count < smallestcount) { smallestcount = count; + } } return smallestcount; } @@ -6942,30 +7523,46 @@ bool Person::addClothes(const int& clothesId) float tintg = clothestintg[clothesId]; float tintb = clothestintb[clothesId]; - if (tintr > 1) tintr = 1; - if (tintg > 1) tintg = 1; - if (tintb > 1) tintb = 1; + if (tintr > 1) { + tintr = 1; + } + if (tintg > 1) { + tintg = 1; + } + if (tintb > 1) { + tintb = 1; + } - if (tintr < 0) tintr = 0; - if (tintg < 0) tintg = 0; - if (tintb < 0) tintb = 0; + if (tintr < 0) { + tintr = 0; + } + if (tintg < 0) { + tintg = 0; + } + if (tintb < 0) { + tintb = 0; + } int bytesPerPixel = texture.bpp / 8; int tempnum = 0; alphanum = 255; for (int i = 0; i < (int)(texture.sizeY * texture.sizeX * bytesPerPixel); i++) { - if (bytesPerPixel == 3) + if (bytesPerPixel == 3) { alphanum = 255; - else if ((i + 1) % 4 == 0) + } else if ((i + 1) % 4 == 0) { alphanum = texture.data[i]; + } if ((i + 1) % 4 || bytesPerPixel == 3) { - if ((i % 4) == 0) + if ((i % 4) == 0) { texture.data[i] *= tintr; - if ((i % 4) == 1) + } + if ((i % 4) == 1) { texture.data[i] *= tintg; - if ((i % 4) == 2) + } + if ((i % 4) == 2) { texture.data[i] *= tintb; + } array[tempnum] = (float)array[tempnum] * (1 - alphanum / 255) + (float)texture.data[i] * (alphanum / 255); tempnum++; } @@ -6981,20 +7578,22 @@ void Person::doAI() if (aitype != playercontrolled && !Dialog::inDialog()) { jumpclimb = 0; //disable movement in editor - if (Game::editorenabled) + if (Game::editorenabled) { stunned = 1; + } pause = 0; if (distsqflat(&Person::players[0]->coords, &coords) < 30 && - Person::players[0]->coords.y > coords.y + 2 && - !Person::players[0]->onterrain) + Person::players[0]->coords.y > coords.y + 2 && + !Person::players[0]->onterrain) { pause = 1; + } //pathfinding if (aitype == pathfindtype) { if (finalpathfindpoint == -1) { float closestdistance; - float tempdist; + float tempdist = 0.0f; int closest; XYZ colpoint; closest = -1; @@ -7010,63 +7609,73 @@ void Person::doAI() for (int j = 0; j < Game::numpathpoints; j++) { for (int k = 0; k < Game::numpathpointconnect[j]; k++) { DistancePointLine(&finalfinaltarget, &Game::pathpoint[j], &Game::pathpoint[Game::pathpointconnect[j][k]], &tempdist, &colpoint); - if (sq(tempdist) < closestdistance) + if (sq(tempdist) < closestdistance) { if (findDistance(&colpoint, &Game::pathpoint[j]) + findDistance(&colpoint, &Game::pathpoint[Game::pathpointconnect[j][k]]) < - findDistance(&Game::pathpoint[j], &Game::pathpoint[Game::pathpointconnect[j][k]]) + .1) { + findDistance(&Game::pathpoint[j], &Game::pathpoint[Game::pathpointconnect[j][k]]) + .1) { closestdistance = sq(tempdist); closest = j; finaltarget = colpoint; } + } } } finalpathfindpoint = closest; - } if (targetpathfindpoint == -1) { float closestdistance; - float tempdist; + float tempdist = 0.0f; int closest; XYZ colpoint; closest = -1; closestdistance = -1; if (lastpathfindpoint == -1) { for (int j = 0; j < Game::numpathpoints; j++) { - if (j != lastpathfindpoint) + if (j != lastpathfindpoint) { if (closest == -1 || (distsq(&coords, &Game::pathpoint[j]) < closestdistance)) { closestdistance = distsq(&coords, &Game::pathpoint[j]); closest = j; } + } } targetpathfindpoint = closest; - for (int j = 0; j < Game::numpathpoints; j++) - if (j != lastpathfindpoint) + for (int j = 0; j < Game::numpathpoints; j++) { + if (j != lastpathfindpoint) { for (int k = 0; k < Game::numpathpointconnect[j]; k++) { - DistancePointLine(&coords, &Game::pathpoint[j], &Game::pathpoint[Game::pathpointconnect[j][k]], &tempdist, &colpoint ); + DistancePointLine(&coords, &Game::pathpoint[j], &Game::pathpoint[Game::pathpointconnect[j][k]], &tempdist, &colpoint); if (sq(tempdist) < closestdistance) { if (findDistance(&colpoint, &Game::pathpoint[j]) + findDistance(&colpoint, &Game::pathpoint[Game::pathpointconnect[j][k]]) < - findDistance(&Game::pathpoint[j], &Game::pathpoint[Game::pathpointconnect[j][k]]) + .1) { + findDistance(&Game::pathpoint[j], &Game::pathpoint[Game::pathpointconnect[j][k]]) + .1) { closestdistance = sq(tempdist); closest = j; } } } + } + } targetpathfindpoint = closest; } else { - for (int j = 0; j < Game::numpathpoints; j++) + for (int j = 0; j < Game::numpathpoints; j++) { if (j != lastpathfindpoint && - j != lastpathfindpoint2 && - j != lastpathfindpoint3 && - j != lastpathfindpoint4) { + j != lastpathfindpoint2 && + j != lastpathfindpoint3 && + j != lastpathfindpoint4) { bool connected = 0; - if (Game::numpathpointconnect[j]) - for (int k = 0; k < Game::numpathpointconnect[j]; k++) - if (Game::pathpointconnect[j][k] == lastpathfindpoint) + if (Game::numpathpointconnect[j]) { + for (int k = 0; k < Game::numpathpointconnect[j]; k++) { + if (Game::pathpointconnect[j][k] == lastpathfindpoint) { connected = 1; - if (!connected) - if (Game::numpathpointconnect[lastpathfindpoint]) - for (int k = 0; k < Game::numpathpointconnect[lastpathfindpoint]; k++) - if (Game::pathpointconnect[lastpathfindpoint][k] == j) + } + } + } + if (!connected) { + if (Game::numpathpointconnect[lastpathfindpoint]) { + for (int k = 0; k < Game::numpathpointconnect[lastpathfindpoint]; k++) { + if (Game::pathpointconnect[lastpathfindpoint][k] == j) { connected = 1; + } + } + } + } if (connected) { tempdist = findPathDist(j, finalpathfindpoint); if (closest == -1 || tempdist < closestdistance) { @@ -7075,6 +7684,7 @@ void Person::doAI() } } } + } targetpathfindpoint = closest; } } @@ -7089,18 +7699,21 @@ void Person::doAI() lastpathfindpoint3 = lastpathfindpoint2; lastpathfindpoint2 = lastpathfindpoint; lastpathfindpoint = targetpathfindpoint; - if (lastpathfindpoint2 == -1) + if (lastpathfindpoint2 == -1) { lastpathfindpoint2 = lastpathfindpoint; - if (lastpathfindpoint3 == -1) + } + if (lastpathfindpoint3 == -1) { lastpathfindpoint3 = lastpathfindpoint2; - if (lastpathfindpoint4 == -1) + } + if (lastpathfindpoint4 == -1) { lastpathfindpoint4 = lastpathfindpoint3; + } targetpathfindpoint = -1; } - if ( distsqflat(&coords, &finalfinaltarget) < - distsqflat(&coords, &finaltarget) || - distsqflat(&coords, &finaltarget) < .6 * sq(scale * 5) || - lastpathfindpoint == finalpathfindpoint) { + if (distsqflat(&coords, &finalfinaltarget) < + distsqflat(&coords, &finaltarget) || + distsqflat(&coords, &finaltarget) < .6 * sq(scale * 5) || + lastpathfindpoint == finalpathfindpoint) { aitype = passivetype; } @@ -7112,68 +7725,78 @@ void Person::doAI() attackkeydown = 0; throwkeydown = 0; - if (avoidcollided > .8 && !jumpkeydown && collided < .8) + if (avoidcollided > .8 && !jumpkeydown && collided < .8) { targetyaw += 90 * (whichdirection * 2 - 1); + } - if (collided < 1 || animTarget != jumpupanim) + if (collided < 1 || animTarget != jumpupanim) { jumpkeydown = 0; - if ((collided > .8 && jumppower >= 5)) + } + if ((collided > .8 && jumppower >= 5)) { jumpkeydown = 1; + } if ((!Tutorial::active || cananger) && - hostile && - !Person::players[0]->dead && - distsq(&coords, &Person::players[0]->coords) < 400 && - occluded < 25) { + hostile && + !Person::players[0]->dead && + distsq(&coords, &Person::players[0]->coords) < 400 && + occluded < 25) { if (distsq(&coords, &Person::players[0]->coords) < 12 && - Animation::animations[Person::players[0]->animTarget].height != lowheight && - !Game::editorenabled && - (Person::players[0]->coords.y < coords.y + 5 || Person::players[0]->onterrain)) + Animation::animations[Person::players[0]->animTarget].height != lowheight && + !Game::editorenabled && + (Person::players[0]->coords.y < coords.y + 5 || Person::players[0]->onterrain)) { aitype = attacktypecutoff; + } if (distsq(&coords, &Person::players[0]->coords) < 30 && - Animation::animations[Person::players[0]->animTarget].height == highheight && - !Game::editorenabled) + Animation::animations[Person::players[0]->animTarget].height == highheight && + !Game::editorenabled) { aitype = attacktypecutoff; + } if (losupdatedelay < 0 && !Game::editorenabled && occluded < 2) { losupdatedelay = .2; - for (unsigned j = 0; j < Person::players.size(); j++) - if (j == 0 || Person::players[j]->skeleton.free || Person::players[j]->aitype != passivetype) - if (abs(Random() % 2) || Animation::animations[Person::players[j]->animTarget].height != lowheight || j != 0) - if (distsq(&coords, &Person::players[j]->coords) < 400) - if (normaldotproduct(facing, Person::players[j]->coords - coords) > 0) - if (Person::players[j]->coords.y < coords.y + 5 || Person::players[j]->onterrain) - if (!Person::players[j]->isWallJump() && -1 == Object::checkcollide( - DoRotation(jointPos(head), 0, yaw, 0) - *scale + coords, - DoRotation(Person::players[j]->jointPos(head), 0, Person::players[j]->yaw, 0) - *Person::players[j]->scale + Person::players[j]->coords) || - (Person::players[j]->animTarget == hanganim && - normaldotproduct(Person::players[j]->facing, coords - Person::players[j]->coords) < 0)) { + for (unsigned j = 0; j < Person::players.size(); j++) { + if (j == 0 || Person::players[j]->skeleton.free || Person::players[j]->aitype != passivetype) { + if (abs(Random() % 2) || Animation::animations[Person::players[j]->animTarget].height != lowheight || j != 0) { + if (distsq(&coords, &Person::players[j]->coords) < 400) { + if (normaldotproduct(facing, Person::players[j]->coords - coords) > 0) { + if (Person::players[j]->coords.y < coords.y + 5 || Person::players[j]->onterrain) { + if (!Person::players[j]->isWallJump() && -1 == Object::checkcollide(DoRotation(jointPos(head), 0, yaw, 0) * scale + coords, DoRotation(Person::players[j]->jointPos(head), 0, Person::players[j]->yaw, 0) * Person::players[j]->scale + Person::players[j]->coords) || + (Person::players[j]->animTarget == hanganim && + normaldotproduct(Person::players[j]->facing, coords - Person::players[j]->coords) < 0)) { aitype = searchtype; lastchecktime = 12; lastseen = Person::players[j]->coords; lastseentime = 12; } + } + } + } + } + } + } } } - if (aitype == attacktypecutoff && Game::musictype != 2) + if (aitype == attacktypecutoff && Game::musictype != 2) { if (creature != wolftype) { stunned = .6; surprised = .6; } + } } - if (aitype != passivetype && Game::leveltime > .5) + if (aitype != passivetype && Game::leveltime > .5) { howactive = typeactive; + } if (aitype == passivetype) { aiupdatedelay -= multiplier; losupdatedelay -= multiplier; lastseentime += multiplier; pausetime -= multiplier; - if (lastseentime > 1) + if (lastseentime > 1) { lastseentime = 1; + } if (aiupdatedelay < 0) { if (numwaypoints > 1 && howactive == typeactive && pausetime <= 0) { @@ -7182,19 +7805,21 @@ void Person::doAI() aiupdatedelay = .05; if (distsqflat(&coords, &waypoints[waypoint]) < 1) { - if (waypointtype[waypoint] == wppause) + if (waypointtype[waypoint] == wppause) { pausetime = 4; + } waypoint++; - if (waypoint > numwaypoints - 1) + if (waypoint > numwaypoints - 1) { waypoint = 0; - + } } } - if (numwaypoints > 1 && howactive == typeactive && pausetime <= 0) + if (numwaypoints > 1 && howactive == typeactive && pausetime <= 0) { forwardkeydown = 1; - else + } else { forwardkeydown = 0; + } leftkeydown = 0; backkeydown = 0; rightkeydown = 0; @@ -7203,57 +7828,64 @@ void Person::doAI() throwkeydown = 0; if (avoidcollided > .8 && !jumpkeydown && collided < .8) { - if (!avoidsomething) + if (!avoidsomething) { targetyaw += 90 * (whichdirection * 2 - 1); - else { + } else { XYZ leftpos, rightpos; float leftdist, rightdist; leftpos = coords + DoRotation(facing, 0, 90, 0); rightpos = coords - DoRotation(facing, 0, 90, 0); leftdist = distsq(&leftpos, &avoidwhere); rightdist = distsq(&rightpos, &avoidwhere); - if (leftdist < rightdist) + if (leftdist < rightdist) { targetyaw += 90; - else + } else { targetyaw -= 90; + } } } } - if (collided < 1 || animTarget != jumpupanim) + if (collided < 1 || animTarget != jumpupanim) { jumpkeydown = 0; - if ((collided > .8 && jumppower >= 5)) + } + if ((collided > .8 && jumppower >= 5)) { jumpkeydown = 1; - + } //hearing sounds if (!Game::editorenabled) { - if (howactive <= typesleeping) - if (numenvsounds > 0 && (!Tutorial::active || cananger) && hostile) + if (howactive <= typesleeping) { + if (numenvsounds > 0 && (!Tutorial::active || cananger) && hostile) { for (int j = 0; j < numenvsounds; j++) { float vol = howactive == typesleeping ? envsoundvol[j] - 14 : envsoundvol[j]; - if (vol > 0 && distsq(&coords, &envsound[j]) < - 2 * (vol + vol * (creature == rabbittype) * 3)) + if (vol > 0 && distsq(&coords, &envsound[j]) < 2 * (vol + vol * (creature == rabbittype) * 3)) { aitype = attacktypecutoff; + } } + } + } if (aitype != passivetype) { - if (howactive == typesleeping) - setAnimation(getupfromfrontanim); + if (howactive == typesleeping) { + setTargetAnimation(getupfromfrontanim); + } howactive = typeactive; } } if (howactive < typesleeping && - ((!Tutorial::active || cananger) && hostile) && - !Person::players[0]->dead && - distsq(&coords, &Person::players[0]->coords) < 400 && - occluded < 25) { + ((!Tutorial::active || cananger) && hostile) && + !Person::players[0]->dead && + distsq(&coords, &Person::players[0]->coords) < 400 && + occluded < 25) { if (distsq(&coords, &Person::players[0]->coords) < 12 && - Animation::animations[Person::players[0]->animTarget].height != lowheight && !Game::editorenabled) + Animation::animations[Person::players[0]->animTarget].height != lowheight && !Game::editorenabled) { aitype = attacktypecutoff; + } if (distsq(&coords, &Person::players[0]->coords) < 30 && - Animation::animations[Person::players[0]->animTarget].height == highheight && !Game::editorenabled) + Animation::animations[Person::players[0]->animTarget].height == highheight && !Game::editorenabled) { aitype = attacktypecutoff; + } //wolf smell if (creature == wolftype) { @@ -7262,19 +7894,24 @@ void Person::doAI() if (j == 0 || (Person::players[j]->dead && Person::players[j]->bloodloss > 0)) { float smelldistance = 50; if (j == 0 && Person::players[j]->num_weapons > 0) { - if (weapons[Person::players[j]->weaponids[0]].bloody) + if (weapons[Person::players[j]->weaponids[0]].bloody) { smelldistance = 100; - if (Person::players[j]->num_weapons == 2) - if (weapons[Person::players[j]->weaponids[1]].bloody) + } + if (Person::players[j]->num_weapons == 2) { + if (weapons[Person::players[j]->weaponids[1]].bloody) { smelldistance = 100; + } + } } - if (j != 0) + if (j != 0) { smelldistance = 100; + } windsmell = windvector; Normalise(&windsmell); windsmell = windsmell * 2 + Person::players[j]->coords; - if (distsq(&coords, &windsmell) < smelldistance && !Game::editorenabled) + if (distsq(&coords, &windsmell) < smelldistance && !Game::editorenabled) { aitype = attacktypecutoff; + } } } } @@ -7283,23 +7920,29 @@ void Person::doAI() losupdatedelay = .2; for (unsigned j = 0; j < Person::players.size(); j++) { if (j == 0 || Person::players[j]->skeleton.free || Person::players[j]->aitype != passivetype) { - if (abs(Random() % 2) || Animation::animations[Person::players[j]->animTarget].height != lowheight || j != 0) - if (distsq(&coords, &Person::players[j]->coords) < 400) - if (normaldotproduct(facing, Person::players[j]->coords - coords) > 0) + if (abs(Random() % 2) || Animation::animations[Person::players[j]->animTarget].height != lowheight || j != 0) { + if (distsq(&coords, &Person::players[j]->coords) < 400) { + if (normaldotproduct(facing, Person::players[j]->coords - coords) > 0) { if ((-1 == Object::checkcollide( - DoRotation(jointPos(head), 0, yaw, 0)* - scale + coords, - DoRotation(Person::players[j]->jointPos(head), 0, Person::players[j]->yaw, 0)* - Person::players[j]->scale + Person::players[j]->coords) && - !Person::players[j]->isWallJump()) || - (Person::players[j]->animTarget == hanganim && - normaldotproduct(Person::players[j]->facing, coords - Person::players[j]->coords) < 0)) { + DoRotation(jointPos(head), 0, yaw, 0) * + scale + + coords, + DoRotation(Person::players[j]->jointPos(head), 0, Person::players[j]->yaw, 0) * + Person::players[j]->scale + + Person::players[j]->coords) && + !Person::players[j]->isWallJump()) || + (Person::players[j]->animTarget == hanganim && + normaldotproduct(Person::players[j]->facing, coords - Person::players[j]->coords) < 0)) { lastseentime -= .2; - if (j == 0 && Animation::animations[Person::players[j]->animTarget].height == lowheight) + if (j == 0 && Animation::animations[Person::players[j]->animTarget].height == lowheight) { lastseentime -= .4; - else + } else { lastseentime -= .6; + } } + } + } + } if (lastseentime <= 0) { aitype = searchtype; lastchecktime = 12; @@ -7329,8 +7972,9 @@ void Person::doAI() if (aitype == searchtype) { aiupdatedelay -= multiplier; losupdatedelay -= multiplier; - if (!pause) + if (!pause) { lastseentime -= multiplier; + } lastchecktime -= multiplier; if (isRun() && !onground) { @@ -7340,11 +7984,12 @@ void Person::doAI() XYZ test = coords + facing; test.y -= 10; j = Object::checkcollide(test2, test, laststanding); - if (j == -1) + if (j == -1) { j = Object::checkcollide(test2, test); + } if (j == -1) { velocity = 0; - setAnimation(getStop()); + setTargetAnimation(getStop()); targetyaw += 180; stunned = .5; //aitype=passivetype; @@ -7356,8 +8001,9 @@ void Person::doAI() lastpathfindpoint2 = -1; lastpathfindpoint3 = -1; lastpathfindpoint4 = -1; - } else + } else { laststanding = j; + } } } //check out last seen location @@ -7383,55 +8029,60 @@ void Person::doAI() throwkeydown = 0; if (avoidcollided > .8 && !jumpkeydown && collided < .8) { - if (!avoidsomething) + if (!avoidsomething) { targetyaw += 90 * (whichdirection * 2 - 1); - else { + } else { XYZ leftpos, rightpos; float leftdist, rightdist; leftpos = coords + DoRotation(facing, 0, 90, 0); rightpos = coords - DoRotation(facing, 0, 90, 0); leftdist = distsq(&leftpos, &avoidwhere); rightdist = distsq(&rightpos, &avoidwhere); - if (leftdist < rightdist) + if (leftdist < rightdist) { targetyaw += 90; - else + } else { targetyaw -= 90; + } } } } - if (collided < 1 || animTarget != jumpupanim) + if (collided < 1 || animTarget != jumpupanim) { jumpkeydown = 0; - if ((collided > .8 && jumppower >= 5)) + } + if ((collided > .8 && jumppower >= 5)) { jumpkeydown = 1; + } - if (numenvsounds > 0 && ((!Tutorial::active || cananger) && hostile)) + if (numenvsounds > 0 && ((!Tutorial::active || cananger) && hostile)) { for (int k = 0; k < numenvsounds; k++) { if (distsq(&coords, &envsound[k]) < 2 * (envsoundvol[k] + envsoundvol[k] * (creature == rabbittype) * 3)) { aitype = attacktypecutoff; } } + } if (!Person::players[0]->dead && - losupdatedelay < 0 && - !Game::editorenabled && - occluded < 2 && - ((!Tutorial::active || cananger) && hostile)) { + losupdatedelay < 0 && + !Game::editorenabled && + occluded < 2 && + ((!Tutorial::active || cananger) && hostile)) { losupdatedelay = .2; if (distsq(&coords, &Person::players[0]->coords) < 4 && Animation::animations[animTarget].height != lowheight) { aitype = attacktypecutoff; lastseentime = 1; } - if (abs(Random() % 2) || Animation::animations[animTarget].height != lowheight) + if (abs(Random() % 2) || Animation::animations[animTarget].height != lowheight) { //TODO: factor out canSeePlayer() - if (distsq(&coords, &Person::players[0]->coords) < 400) - if (normaldotproduct(facing, Person::players[0]->coords - coords) > 0) + if (distsq(&coords, &Person::players[0]->coords) < 400) { + if (normaldotproduct(facing, Person::players[0]->coords - coords) > 0) { if ((Object::checkcollide( - DoRotation(jointPos(head), 0, yaw, 0)* - scale + coords, - DoRotation(Person::players[0]->jointPos(head), 0, Person::players[0]->yaw, 0)* - Person::players[0]->scale + Person::players[0]->coords) == -1) || - (Person::players[0]->animTarget == hanganim && normaldotproduct( - Person::players[0]->facing, coords - Person::players[0]->coords) < 0)) { + DoRotation(jointPos(head), 0, yaw, 0) * + scale + + coords, + DoRotation(Person::players[0]->jointPos(head), 0, Person::players[0]->yaw, 0) * + Person::players[0]->scale + + Person::players[0]->coords) == -1) || + (Person::players[0]->animTarget == hanganim && normaldotproduct(Person::players[0]->facing, coords - Person::players[0]->coords) < 0)) { /* //TODO: changed j to 0 on a whim, make sure this is correct (Person::players[j]->animTarget==hanganim&&normaldotproduct( Person::players[j]->facing,coords-Person::players[j]->coords)<0) @@ -7439,6 +8090,9 @@ void Person::doAI() aitype = attacktypecutoff; lastseentime = 1; } + } + } + } } //player escaped if (lastseentime < 0) { @@ -7455,8 +8109,9 @@ void Person::doAI() } } - if (aitype != gethelptype) + if (aitype != gethelptype) { runninghowlong = 0; + } //get help from buddies if (aitype == gethelptype) { @@ -7473,15 +8128,14 @@ void Person::doAI() float closestdist = -1; for (unsigned k = 0; k < Person::players.size(); k++) { if ((k != id) && (k != 0) && !Person::players[k]->dead && - (Person::players[k]->howactive < typedead1) && - !Person::players[k]->skeleton.free && - (Person::players[k]->aitype == passivetype)) { + (Person::players[k]->howactive < typedead1) && + !Person::players[k]->skeleton.free && + (Person::players[k]->aitype == passivetype)) { float distance = distsq(&coords, &Person::players[k]->coords); if (closestdist == -1 || distance < closestdist) { closestdist = distance; closest = k; } - closest = k; } } if (closest != -1) { @@ -7493,21 +8147,21 @@ void Person::doAI() lastseentime = 12; } - lastchecktime = 12; XYZ facing = coords; XYZ flatfacing = Person::players[ally]->coords; facing.y += jointPos(head).y * scale; flatfacing.y += Person::players[ally]->jointPos(head).y * Person::players[ally]->scale; - if (-1 != Object::checkcollide(facing, flatfacing)) + if (-1 != Object::checkcollide(facing, flatfacing)) { lastseentime -= .1; + } //no available ally, run back to player if (ally <= 0 || - Person::players[ally]->skeleton.free || - Person::players[ally]->aitype != passivetype || - lastseentime <= 0) { + Person::players[ally]->skeleton.free || + Person::players[ally]->aitype != passivetype || + lastseentime <= 0) { aitype = searchtype; lastseentime = 12; } @@ -7531,19 +8185,20 @@ void Person::doAI() } if (avoidcollided > .8 && !jumpkeydown && collided < .8) { - if (!avoidsomething) + if (!avoidsomething) { targetyaw += 90 * (whichdirection * 2 - 1); - else { + } else { XYZ leftpos, rightpos; float leftdist, rightdist; leftpos = coords + DoRotation(facing, 0, 90, 0); rightpos = coords - DoRotation(facing, 0, 90, 0); leftdist = distsq(&leftpos, &avoidwhere); rightdist = distsq(&rightpos, &avoidwhere); - if (leftdist < rightdist) + if (leftdist < rightdist) { targetyaw += 90; - else + } else { targetyaw -= 90; + } } } } @@ -7554,10 +8209,12 @@ void Person::doAI() crouchkeydown = 0; attackkeydown = 0; } - if (collided < 1 || animTarget != jumpupanim) + if (collided < 1 || animTarget != jumpupanim) { jumpkeydown = 0; - if (collided > .8 && jumppower >= 5) + } + if (collided > .8 && jumppower >= 5) { jumpkeydown = 1; + } } //retreiving a weapon on the ground @@ -7572,32 +8229,34 @@ void Person::doAI() if (ally < 0) { int closest = -1; float closestdist = -1; - for (unsigned k = 0; k < weapons.size(); k++) + for (unsigned k = 0; k < weapons.size(); k++) { if (weapons[k].owner == -1) { float distance = distsq(&coords, &weapons[k].position); if (closestdist == -1 || distance < closestdist) { closestdist = distance; closest = k; } - closest = k; } - if (closest != -1) + } + if (closest != -1) { ally = closest; - else + } else { ally = -1; + } } lastseentime = 12; - if (!Person::players[0]->dead && ((!Tutorial::active || cananger) && hostile)) + if (!Person::players[0]->dead && ((!Tutorial::active || cananger) && hostile)) { if (ally < 0 || weaponactive != -1 || lastchecktime <= 0) { aitype = attacktypecutoff; lastseentime = 1; } - if (!Person::players[0]->dead) + } + if (!Person::players[0]->dead) { if (ally >= 0) { if (weapons[ally].owner != -1 || - distsq(&coords, &weapons[ally].position) > 16) { + distsq(&coords, &weapons[ally].position) > 16) { aitype = attacktypecutoff; lastseentime = 1; } @@ -7607,24 +8266,25 @@ void Person::doAI() aiupdatedelay = .05; forwardkeydown = 1; - if (avoidcollided > .8 && !jumpkeydown && collided < .8) { - if (!avoidsomething) + if (!avoidsomething) { targetyaw += 90 * (whichdirection * 2 - 1); - else { + } else { XYZ leftpos, rightpos; float leftdist, rightdist; leftpos = coords + DoRotation(facing, 0, 90, 0); rightpos = coords - DoRotation(facing, 0, 90, 0); leftdist = distsq(&leftpos, &avoidwhere); rightdist = distsq(&rightpos, &avoidwhere); - if (leftdist < rightdist) + if (leftdist < rightdist) { targetyaw += 90; - else + } else { targetyaw -= 90; + } } } } + } leftkeydown = 0; backkeydown = 0; @@ -7633,59 +8293,68 @@ void Person::doAI() throwkeydown = 1; crouchkeydown = 0; if (animTarget != crouchremoveknifeanim && - animTarget != removeknifeanim) + animTarget != removeknifeanim) { throwtogglekeydown = 0; + } drawkeydown = 0; } - if (collided < 1 || animTarget != jumpupanim) + if (collided < 1 || animTarget != jumpupanim) { jumpkeydown = 0; - if ((collided > .8 && jumppower >= 5)) + } + if ((collided > .8 && jumppower >= 5)) { jumpkeydown = 1; + } } if (aitype == attacktypecutoff) { aiupdatedelay -= multiplier; //dodge or reverse rabbit kicks, knife throws, flips - if (damage < damagetolerance * 2 / 3) + if (damage < damagetolerance * 2 / 3) { if ((Person::players[0]->animTarget == rabbitkickanim || - Person::players[0]->animTarget == knifethrowanim || - (Person::players[0]->isFlip() && - normaldotproduct(Person::players[0]->facing, Person::players[0]->coords - coords) < 0)) && - !Person::players[0]->skeleton.free && - (aiupdatedelay < .1)) { + Person::players[0]->animTarget == knifethrowanim || + (Person::players[0]->isFlip() && + normaldotproduct(Person::players[0]->facing, Person::players[0]->coords - coords) < 0)) && + !Person::players[0]->skeleton.free && + (aiupdatedelay < .1)) { attackkeydown = 0; - if (isIdle()) + if (isIdle()) { crouchkeydown = 1; + } if (Person::players[0]->animTarget != rabbitkickanim && Person::players[0]->weaponactive != -1) { if (weapons[Person::players[0]->weaponids[0]].getType() == knife) { if (isIdle() || isCrouch() || isRun() || isFlip()) { - if (abs(Random() % 2) == 0) - setAnimation(backhandspringanim); - else - setAnimation(rollanim); + if (abs(Random() % 2) == 0) { + setTargetAnimation(backhandspringanim); + } else { + setTargetAnimation(rollanim); + } targetyaw += 90 * (abs(Random() % 2) * 2 - 1); wentforweapon = 0; } - if (animTarget == jumpupanim || animTarget == jumpdownanim) - setAnimation(flipanim); + if (animTarget == jumpupanim || animTarget == jumpdownanim) { + setTargetAnimation(flipanim); + } } } forwardkeydown = 0; aiupdatedelay = .02; } + } //get confused by flips if (Person::players[0]->isFlip() && - !Person::players[0]->skeleton.free && - Person::players[0]->animTarget != walljumprightkickanim && - Person::players[0]->animTarget != walljumpleftkickanim) { - if (distsq(&Person::players[0]->coords, &coords) < 25) - if ((1 - damage / damagetolerance) > .5) + !Person::players[0]->skeleton.free && + Person::players[0]->animTarget != walljumprightkickanim && + Person::players[0]->animTarget != walljumpleftkickanim) { + if (distsq(&Person::players[0]->coords, &coords) < 25) { + if ((1 - damage / damagetolerance) > .5) { stunned = 1; + } + } } //go for weapon on the ground - if (wentforweapon < 3) - for (unsigned k = 0; k < weapons.size(); k++) - if (creature != wolftype) + if (wentforweapon < 3) { + for (unsigned k = 0; k < weapons.size(); k++) { + if (creature != wolftype) { if (num_weapons == 0 && weapons[k].owner == -1 && weapons[k].velocity.x == 0 && @@ -7698,31 +8367,37 @@ void Person::doAI() ally = -1; } } + } + } + } //dodge/reverse walljump kicks - if (damage < damagetolerance / 2) - if (Animation::animations[animTarget].height != highheight) + if (damage < damagetolerance / 2) { + if (Animation::animations[animTarget].height != highheight) { if (damage < damagetolerance * .5 && - ((Person::players[0]->animTarget == walljumprightkickanim || - Person::players[0]->animTarget == walljumpleftkickanim) && - ((aiupdatedelay < .15 && - difficulty == 2) || - (aiupdatedelay < .08 && - difficulty != 2)))) { + ((Person::players[0]->animTarget == walljumprightkickanim || + Person::players[0]->animTarget == walljumpleftkickanim) && + ((aiupdatedelay < .15 && + difficulty == 2) || + (aiupdatedelay < .08 && + difficulty != 2)))) { crouchkeydown = 1; } + } + } //walked off a ledge (?) - if (isRun() && !onground) + if (isRun() && !onground) { if (coords.y > terrain.getHeight(coords.x, coords.z) + 10) { XYZ test2 = coords + facing; test2.y += 5; XYZ test = coords + facing; test.y -= 10; j = Object::checkcollide(test2, test, laststanding); - if (j == -1) + if (j == -1) { j = Object::checkcollide(test2, test); + } if (j == -1) { velocity = 0; - setAnimation(getStop()); + setTargetAnimation(getStop()); targetyaw += 180; stunned = .5; aitype = pathfindtype; @@ -7733,13 +8408,15 @@ void Person::doAI() lastpathfindpoint2 = -1; lastpathfindpoint3 = -1; lastpathfindpoint4 = -1; - } else + } else { laststanding = j; + } } + } //lose sight of player in the air (?) if (Person::players[0]->coords.y > coords.y + 5 && - Animation::animations[Person::players[0]->animTarget].height != highheight && - !Person::players[0]->onterrain) { + Animation::animations[Person::players[0]->animTarget].height != highheight && + !Person::players[0]->onterrain) { aitype = pathfindtype; finalfinaltarget = waypoints[waypoint]; finalpathfindpoint = -1; @@ -7751,43 +8428,48 @@ void Person::doAI() } //it's time to think (?) if (aiupdatedelay < 0 && - !Animation::animations[animTarget].attack && - animTarget != staggerbackhighanim && - animTarget != staggerbackhardanim && - animTarget != backhandspringanim && - animTarget != dodgebackanim) { + !Animation::animations[animTarget].attack && + animTarget != staggerbackhighanim && + animTarget != staggerbackhardanim && + animTarget != backhandspringanim && + animTarget != dodgebackanim) { //draw weapon - if (weaponactive == -1 && num_weapons > 0) + if (weaponactive == -1 && num_weapons > 0) { drawkeydown = Random() % 2; - else + } else { drawkeydown = 0; + } rabbitkickenabled = Random() % 2; //chase player XYZ rotatetarget = Person::players[0]->coords + Person::players[0]->velocity; XYZ targetpoint = Person::players[0]->coords; - if (distsq(&Person::players[0]->coords, &coords) < - distsq(&rotatetarget, &coords)) + float vellength = findLength(&velocity); + if (vellength != 0 && + distsq(&Person::players[0]->coords, &coords) < distsq(&rotatetarget, &coords)) { targetpoint += Person::players[0]->velocity * - findDistance(&Person::players[0]->coords, &coords) / findLength(&velocity); + findDistance(&Person::players[0]->coords, &coords) / vellength; + } targetyaw = roughDirectionTo(coords, targetpoint); lookyaw = targetyaw; aiupdatedelay = .2 + fabs((float)(Random() % 100) / 1000); - if (distsq(&coords, &Person::players[0]->coords) > 5 && (Person::players[0]->weaponactive == -1 || weaponactive != -1)) + if (distsq(&coords, &Person::players[0]->coords) > 5 && (Person::players[0]->weaponactive == -1 || weaponactive != -1)) { forwardkeydown = 1; - else if ((distsq(&coords, &Person::players[0]->coords) > 16 || - distsq(&coords, &Person::players[0]->coords) < 9) && - Person::players[0]->weaponactive != -1) + } else if ((distsq(&coords, &Person::players[0]->coords) > 16 || + distsq(&coords, &Person::players[0]->coords) < 9) && + Person::players[0]->weaponactive != -1) { forwardkeydown = 1; - else if (Random() % 6 == 0 || (creature == wolftype && Random() % 3 == 0)) + } else if (Random() % 6 == 0 || (creature == wolftype && Random() % 3 == 0)) { forwardkeydown = 1; - else + } else { forwardkeydown = 0; + } //chill out around the corpse if (Person::players[0]->dead) { forwardkeydown = 0; - if (Random() % 10 == 0) + if (Random() % 10 == 0) { forwardkeydown = 1; + } if (Random() % 100 == 0) { aitype = pathfindtype; finalfinaltarget = waypoints[waypoint]; @@ -7805,49 +8487,52 @@ void Person::doAI() crouchkeydown = 0; throwkeydown = 0; - if (avoidcollided > .8 && !jumpkeydown && collided < .8) + if (avoidcollided > .8 && !jumpkeydown && collided < .8) { targetyaw += 90 * (whichdirection * 2 - 1); + } //attack!!! - if (Random() % 2 == 0 || weaponactive != -1 || creature == wolftype) + if (Random() % 2 == 0 || weaponactive != -1 || creature == wolftype) { attackkeydown = 1; - else + } else { attackkeydown = 0; - if (isRun() && Random() % 6 && distsq(&coords, &Person::players[0]->coords) > 7) + } + if (isRun() && Random() % 6 && distsq(&coords, &Person::players[0]->coords) > 7) { attackkeydown = 0; + } //TODO: wat if (aitype != playercontrolled && - (isIdle() || - isCrouch() || - isRun())) { + (isIdle() || + isCrouch() || + isRun())) { int target = -2; - for (unsigned j = 0; j < Person::players.size(); j++) + for (unsigned j = 0; j < Person::players.size(); j++) { if (j != id && !Person::players[j]->skeleton.free && - Person::players[j]->hasvictim && - (Tutorial::active && reversaltrain || - Random() % 2 == 0 && difficulty == 2 || - Random() % 4 == 0 && difficulty == 1 || - Random() % 8 == 0 && difficulty == 0 || - Person::players[j]->lastattack2 == Person::players[j]->animTarget && + Person::players[j]->hasvictim && + (Tutorial::active && reversaltrain || + Random() % 2 == 0 && difficulty == 2 || + Random() % 4 == 0 && difficulty == 1 || + Random() % 8 == 0 && difficulty == 0 || + Person::players[j]->lastattack2 == Person::players[j]->animTarget && Person::players[j]->lastattack3 == Person::players[j]->animTarget && (Random() % 2 == 0 || difficulty == 2) || - (isIdle() || isRun()) && + (isIdle() || isRun()) && Person::players[j]->weaponactive != -1 || - Person::players[j]->animTarget == swordslashanim && + Person::players[j]->animTarget == swordslashanim && weaponactive != -1 || - Person::players[j]->animTarget == staffhitanim || - Person::players[j]->animTarget == staffspinhitanim)) + Person::players[j]->animTarget == staffhitanim || + Person::players[j]->animTarget == staffspinhitanim)) { if (distsq(&Person::players[j]->coords, &Person::players[j]->victim->coords) < 4 && - Person::players[j]->victim == Person::players[id] && - (Person::players[j]->animTarget == sweepanim || - Person::players[j]->animTarget == spinkickanim || - Person::players[j]->animTarget == staffhitanim || - Person::players[j]->animTarget == staffspinhitanim || - Person::players[j]->animTarget == winduppunchanim || - Person::players[j]->animTarget == upunchanim || - Person::players[j]->animTarget == wolfslapanim || - Person::players[j]->animTarget == knifeslashstartanim || - Person::players[j]->animTarget == swordslashanim && + Person::players[j]->victim == Person::players[id] && + (Person::players[j]->animTarget == sweepanim || + Person::players[j]->animTarget == spinkickanim || + Person::players[j]->animTarget == staffhitanim || + Person::players[j]->animTarget == staffspinhitanim || + Person::players[j]->animTarget == winduppunchanim || + Person::players[j]->animTarget == upunchanim || + Person::players[j]->animTarget == wolfslapanim || + Person::players[j]->animTarget == knifeslashstartanim || + Person::players[j]->animTarget == swordslashanim && (distsq(&Person::players[j]->coords, &coords) < 2 || weaponactive != -1))) { if (target >= 0) { @@ -7856,66 +8541,81 @@ void Person::doAI() target = j; } } - if (target >= 0) + } + } + if (target >= 0) { Person::players[target]->Reverse(); + } } - if (collided < 1) + if (collided < 1) { jumpkeydown = 0; + } if (collided > .8 && jumppower >= 5 || - distsq(&coords, &Person::players[0]->coords) > 400 && + distsq(&coords, &Person::players[0]->coords) > 400 && onterrain && - creature == rabbittype) + creature == rabbittype) { jumpkeydown = 1; + } //TODO: why are we controlling the human? - if (normaldotproduct(facing, Person::players[0]->coords - coords) > 0) + if (normaldotproduct(facing, Person::players[0]->coords - coords) > 0) { Person::players[0]->jumpkeydown = 0; + } if (Person::players[0]->animTarget == jumpdownanim && - distsq(&Person::players[0]->coords, &coords) < 40) + distsq(&Person::players[0]->coords, &coords) < 40) { crouchkeydown = 1; - if (jumpkeydown) + } + if (jumpkeydown) { attackkeydown = 0; + } - if (Tutorial::active) - if (!canattack) + if (Tutorial::active) { + if (!canattack) { attackkeydown = 0; - + } + } XYZ facing = coords; XYZ flatfacing = Person::players[0]->coords; facing.y += jointPos(head).y * scale; flatfacing.y += Person::players[0]->jointPos(head).y * Person::players[0]->scale; - if (occluded >= 2) + if (occluded >= 2) { if (-1 != Object::checkcollide(facing, flatfacing)) { - if (!pause) + if (!pause) { lastseentime -= .2; + } if (lastseentime <= 0 && - (creature != wolftype || - weaponstuck == -1)) { + (creature != wolftype || + weaponstuck == -1)) { aitype = searchtype; lastchecktime = 12; lastseen = Person::players[0]->coords; lastseentime = 12; } - } else + } else { lastseentime = 1; + } + } } } if (Animation::animations[Person::players[0]->animTarget].height == highheight && - (aitype == attacktypecutoff || - aitype == searchtype)) + (aitype == attacktypecutoff || + aitype == searchtype)) { if (Person::players[0]->coords.y > terrain.getHeight(Person::players[0]->coords.x, Person::players[0]->coords.z) + 10) { XYZ test = Person::players[0]->coords; test.y -= 40; - if (-1 == Object::checkcollide(Person::players[0]->coords, test)) + if (-1 == Object::checkcollide(Person::players[0]->coords, test)) { stunned = 1; + } } + } //stunned if (aitype == passivetype && !(numwaypoints > 1) || - stunned > 0 || - pause && damage > superpermanentdamage) { - if (pause) + stunned > 0 || + pause && damage > superpermanentdamage) { + if (pause) { lastseentime = 1; + } targetyaw = yaw; forwardkeydown = 0; leftkeydown = 0; @@ -7927,7 +8627,6 @@ void Person::doAI() throwkeydown = 0; } - XYZ facing; facing = 0; facing.z = -1;