+ switch (tutorialstage) {
+ case 1:
+ tutorialmaxtime = 5;
+ break;
+ case 2:
+ tutorialmaxtime = 2;
+ break;
+ case 3:
+ tutorialmaxtime = 600;
+ break;
+ case 4:
+ tutorialmaxtime = 1000;
+ break;
+ case 5:
+ tutorialmaxtime = 600;
+ break;
+ case 6:
+ tutorialmaxtime = 600;
+ break;
+ case 7:
+ tutorialmaxtime = 600;
+ break;
+ case 8:
+ tutorialmaxtime = 600;
+ break;
+ case 9:
+ tutorialmaxtime = 600;
+ break;
+ case 10:
+ tutorialmaxtime = 2;
+ break;
+ case 11:
+ tutorialmaxtime = 1000;
+ break;
+ case 12:
+ tutorialmaxtime = 1000;
+ break;
+ case 13:
+ tutorialmaxtime = 2;
+ break;
+ case 14: {
+ tutorialmaxtime = 3;
+
+ XYZ temp, temp2;
+
+ temp.x = 1011;
+ temp.y = 84;
+ temp.z = 491;
+ temp2.x = 1025;
+ temp2.y = 75;
+ temp2.z = 447;
+
+ Person::players[1]->coords = (temp + temp2) / 2;
+
+ emit_sound_at(fireendsound, Person::players[1]->coords);
+
+ for (int i = 0; i < Person::players[1]->skeleton.num_joints; i++) {
+ if (Random() % 2 == 0) {
+ if (!Person::players[1]->skeleton.free)
+ temp2 = (Person::players[1]->coords - Person::players[1]->oldcoords) / multiplier / 2; //velocity/2;
+ if (Person::players[1]->skeleton.free)
+ temp2 = Person::players[1]->skeleton.joints[i].velocity * Person::players[1]->scale / 2;
+ if (!Person::players[1]->skeleton.free)
+ temp = DoRotation(DoRotation(DoRotation(Person::players[1]->skeleton.joints[i].position, 0, 0, Person::players[1]->tilt), Person::players[1]->tilt2, 0, 0), 0, Person::players[1]->yaw, 0) * Person::players[1]->scale + Person::players[1]->coords;
+ if (Person::players[1]->skeleton.free)
+ temp = Person::players[1]->skeleton.joints[i].position * Person::players[1]->scale + Person::players[1]->coords;
+ Sprite::MakeSprite(breathsprite, temp, temp2, 1, 1, 1, .6 + (float)abs(Random() % 100) / 200 - .25, 1);
+ }
+ }
+ }
+ break;
+ case 15:
+ tutorialmaxtime = 500;
+ break;
+ case 16:
+ tutorialmaxtime = 500;
+ break;
+ case 17:
+ tutorialmaxtime = 500;
+ break;
+ case 18:
+ tutorialmaxtime = 500;
+ break;
+ case 19:
+ tutorialstage = 20;
+ //tutorialmaxtime=500;
+ break;
+ case 20:
+ tutorialmaxtime = 500;
+ break;
+ case 21:
+ tutorialmaxtime = 500;
+ if (bonus == cannon) {
+ bonus = Slicebonus;
+ againbonus = 1;
+ } else
+ againbonus = 0;
+ break;
+ case 22:
+ tutorialmaxtime = 500;
+ break;
+ case 23:
+ tutorialmaxtime = 500;
+ break;
+ case 24:
+ tutorialmaxtime = 500;
+ break;
+ case 25:
+ tutorialmaxtime = 500;
+ break;
+ case 26:
+ tutorialmaxtime = 2;
+ break;
+ case 27:
+ tutorialmaxtime = 4;
+ reversaltrain = 1;
+ cananger = 1;
+ Person::players[1]->aitype = attacktypecutoff;
+ break;
+ case 28:
+ tutorialmaxtime = 400;
+ break;
+ case 29:
+ tutorialmaxtime = 400;
+ Person::players[0]->escapednum = 0;
+ break;
+ case 30:
+ tutorialmaxtime = 4;
+ reversaltrain = 0;
+ cananger = 0;
+ Person::players[1]->aitype = passivetype;
+ break;
+ case 31:
+ tutorialmaxtime = 13;
+ break;
+ case 32:
+ tutorialmaxtime = 8;
+ break;
+ case 33:
+ tutorialmaxtime = 400;
+ cananger = 1;
+ canattack = 1;
+ Person::players[1]->aitype = attacktypecutoff;
+ break;
+ case 34:
+ tutorialmaxtime = 400;
+ break;
+ case 35:
+ tutorialmaxtime = 400;
+ break;
+ case 36:
+ tutorialmaxtime = 2;
+ reversaltrain = 0;
+ cananger = 0;
+ Person::players[1]->aitype = passivetype;
+ break;
+ case 37:
+ damagedealt = 0;
+ damagetaken = 0;
+ tutorialmaxtime = 50;
+ cananger = 1;
+ canattack = 1;
+ Person::players[1]->aitype = attacktypecutoff;
+ break;
+ case 38:
+ tutorialmaxtime = 4;
+ canattack = 0;
+ cananger = 0;
+ Person::players[1]->aitype = passivetype;
+ break;
+ case 39: {
+ XYZ temp, temp2;
+
+ temp.x = 1011;
+ temp.y = 84;
+ temp.z = 491;
+ temp2.x = 1025;
+ temp2.y = 75;
+ temp2.z = 447;
+
+ Weapon w(knife, -1);
+ w.position = (temp + temp2) / 2;
+ w.tippoint = (temp + temp2) / 2;
+
+ w.velocity = 0.1;
+ w.tipvelocity = 0.1;
+ w.missed = 1;
+ w.hitsomething = 0;
+ w.freetime = 0;
+ w.firstfree = 1;
+ w.physics = 1;
+
+ weapons.push_back(w);
+ }
+ break;
+ case 40:
+ tutorialmaxtime = 300;
+ break;
+ case 41:
+ tutorialmaxtime = 300;
+ break;
+ case 42:
+ tutorialmaxtime = 8;
+ break;
+ case 43:
+ tutorialmaxtime = 300;
+ break;
+ case 44:
+ weapons[0].owner = 1;
+ Person::players[0]->weaponactive = -1;
+ Person::players[0]->num_weapons = 0;
+ Person::players[1]->weaponactive = 0;
+ Person::players[1]->num_weapons = 1;
+ Person::players[1]->weaponids[0] = 0;
+
+ cananger = 1;
+ canattack = 1;
+ Person::players[1]->aitype = attacktypecutoff;
+
+ tutorialmaxtime = 300;
+ break;
+ case 45:
+ weapons[0].owner = 1;
+ Person::players[0]->weaponactive = -1;
+ Person::players[0]->num_weapons = 0;
+ Person::players[1]->weaponactive = 0;
+ Person::players[1]->num_weapons = 1;
+ Person::players[1]->weaponids[0] = 0;
+
+ tutorialmaxtime = 300;
+ break;
+ case 46:
+ weapons[0].owner = 1;
+ Person::players[0]->weaponactive = -1;
+ Person::players[0]->num_weapons = 0;
+ Person::players[1]->weaponactive = 0;
+ Person::players[1]->num_weapons = 1;
+ Person::players[1]->weaponids[0] = 0;
+
+ weapons[0].setType(sword);
+
+ tutorialmaxtime = 300;
+ break;
+ case 47: {
+ tutorialmaxtime = 10;
+
+ XYZ temp, temp2;
+
+ temp.x = 1011;
+ temp.y = 84;
+ temp.z = 491;
+ temp2.x = 1025;
+ temp2.y = 75;
+ temp2.z = 447;
+
+ Weapon w(sword, -1);
+ w.position = (temp + temp2) / 2;
+ w.tippoint = (temp + temp2) / 2;
+
+ w.velocity = 0.1;
+ w.tipvelocity = 0.1;
+ w.missed = 1;
+ w.hitsomething = 0;
+ w.freetime = 0;
+ w.firstfree = 1;
+ w.physics = 1;
+
+ weapons.push_back(w);
+
+ weapons[0].owner = 1;
+ weapons[1].owner = 0;
+ Person::players[0]->weaponactive = 0;
+ Person::players[0]->num_weapons = 1;
+ Person::players[0]->weaponids[0] = 1;
+ Person::players[1]->weaponactive = 0;
+ Person::players[1]->num_weapons = 1;
+ Person::players[1]->weaponids[0] = 0;
+
+ }
+ break;
+ case 48:
+ canattack = 0;
+ cananger = 0;
+ Person::players[1]->aitype = passivetype;
+
+ tutorialmaxtime = 15;
+
+ weapons[0].owner = 1;
+ weapons[1].owner = 0;
+ Person::players[0]->weaponactive = 0;
+ Person::players[0]->num_weapons = 1;
+ Person::players[0]->weaponids[0] = 1;
+ Person::players[1]->weaponactive = 0;
+ Person::players[1]->num_weapons = 1;
+ Person::players[1]->weaponids[0] = 0;
+
+ if (Person::players[0]->weaponactive != -1)
+ weapons[Person::players[0]->weaponids[Person::players[0]->weaponactive]].setType(staff);
+ else
+ weapons[0].setType(staff);
+ break;
+ case 49:
+ canattack = 0;
+ cananger = 0;
+ Person::players[1]->aitype = passivetype;
+
+ tutorialmaxtime = 200;
+
+ weapons[1].position = 1000;
+ weapons[1].tippoint = 1000;
+
+ weapons[0].setType(knife);
+
+ weapons[0].owner = 0;
+ Person::players[1]->weaponactive = -1;
+ Person::players[1]->num_weapons = 0;
+ Person::players[0]->weaponactive = 0;
+ Person::players[0]->num_weapons = 1;
+ Person::players[0]->weaponids[0] = 0;
+
+ break;
+ case 50: {
+ tutorialmaxtime = 8;
+
+ XYZ temp, temp2;
+ emit_sound_at(fireendsound, Person::players[1]->coords);
+
+ for (int i = 0; i < Person::players[1]->skeleton.num_joints; i++) {
+ if (Random() % 2 == 0) {
+ if (!Person::players[1]->skeleton.free)
+ temp2 = (Person::players[1]->coords - Person::players[1]->oldcoords) / multiplier / 2; //velocity/2;
+ if (Person::players[1]->skeleton.free)
+ temp2 = Person::players[1]->skeleton.joints[i].velocity * Person::players[1]->scale / 2;
+ if (!Person::players[1]->skeleton.free)
+ temp = DoRotation(DoRotation(DoRotation(Person::players[1]->skeleton.joints[i].position, 0, 0, Person::players[1]->tilt), Person::players[1]->tilt2, 0, 0), 0, Person::players[1]->yaw, 0) * Person::players[1]->scale + Person::players[1]->coords;
+ if (Person::players[1]->skeleton.free)
+ temp = Person::players[1]->skeleton.joints[i].position * Person::players[1]->scale + Person::players[1]->coords;
+ Sprite::MakeSprite(breathsprite, temp, temp2, 1, 1, 1, .6 + (float)abs(Random() % 100) / 200 - .25, 1);
+ }
+ }
+
+ Person::players[1]->num_weapons = 0;
+ Person::players[1]->weaponstuck = -1;
+ Person::players[1]->weaponactive = -1;
+
+ weapons.clear();
+ }
+ break;
+ case 51:
+ tutorialmaxtime = 80000;
+ break;
+ default:
+ break;
+ }
+ if (tutorialstage <= 51)
+ tutorialstagetime = 0;
+ }
+
+ //Tutorial success
+ if (tutorialstagetime < tutorialmaxtime - 3) {
+ switch (tutorialstage) {
+ case 3:
+ if (deltah || deltav)
+ tutorialsuccess += multiplier;
+ break;
+ case 4:
+ if (Person::players[0]->forwardkeydown || Person::players[0]->backkeydown || Person::players[0]->leftkeydown || Person::players[0]->rightkeydown)
+ tutorialsuccess += multiplier;
+ break;
+ case 5:
+ if (Person::players[0]->jumpkeydown)
+ tutorialsuccess = 1;
+ break;
+ case 6:
+ if (Person::players[0]->isCrouch())
+ tutorialsuccess = 1;
+ break;
+ case 7:
+ if (Person::players[0]->animTarget == rollanim)
+ tutorialsuccess = 1;
+ break;
+ case 8:
+ if (Person::players[0]->animTarget == sneakanim)
+ tutorialsuccess += multiplier;
+ break;
+ case 9:
+ if (Person::players[0]->animTarget == rabbitrunninganim || Person::players[0]->animTarget == wolfrunninganim)
+ tutorialsuccess += multiplier;
+ break;
+ case 11:
+ if (Person::players[0]->isWallJump())
+ tutorialsuccess = 1;
+ break;
+ case 12:
+ if (Person::players[0]->animTarget == flipanim)
+ tutorialsuccess = 1;
+ break;
+ case 15:
+ if (Person::players[0]->animTarget == upunchanim || Person::players[0]->animTarget == winduppunchanim)
+ tutorialsuccess = 1;
+ break;
+ case 16:
+ if (Person::players[0]->animTarget == winduppunchanim)
+ tutorialsuccess = 1;
+ break;
+ case 17:
+ if (Person::players[0]->animTarget == spinkickanim)
+ tutorialsuccess = 1;
+ break;
+ case 18:
+ if (Person::players[0]->animTarget == sweepanim)
+ tutorialsuccess = 1;
+ break;
+ case 19:
+ if (Person::players[0]->animTarget == dropkickanim)
+ tutorialsuccess = 1;
+ break;
+ case 20:
+ if (Person::players[0]->animTarget == rabbitkickanim)
+ tutorialsuccess = 1;
+ break;
+ case 21:
+ if (bonus == cannon)
+ tutorialsuccess = 1;
+ break;
+ case 22:
+ if (bonus == spinecrusher)
+ tutorialsuccess = 1;
+ break;
+ case 23:
+ if (Person::players[0]->animTarget == walljumprightkickanim || Person::players[0]->animTarget == walljumpleftkickanim)
+ tutorialsuccess = 1;
+ break;
+ case 24:
+ if (Person::players[0]->animTarget == rabbittacklinganim)
+ tutorialsuccess = 1;
+ break;
+ case 25:
+ if (Person::players[0]->animTarget == backhandspringanim)
+ tutorialsuccess = 1;
+ break;
+ case 28:
+ if (animation[Person::players[0]->animTarget].attack == reversed && Person::players[0]->feint)
+ tutorialsuccess = 1;
+ break;
+ case 29:
+ if (Person::players[0]->escapednum == 2) {
+ tutorialsuccess = 1;
+ reversaltrain = 0;
+ cananger = 0;
+ Person::players[1]->aitype = passivetype;
+ }
+ break;
+ case 33:
+ if (animation[Person::players[0]->animTarget].attack == reversal)
+ tutorialsuccess = 1;
+ break;
+ case 34:
+ if (animation[Person::players[0]->animTarget].attack == reversal)
+ tutorialsuccess = 1;
+ break;
+ case 35:
+ if (animation[Person::players[0]->animTarget].attack == reversal) {
+ tutorialsuccess = 1;
+ reversaltrain = 0;
+ cananger = 0;
+ Person::players[1]->aitype = passivetype;
+ }
+ break;
+ case 40:
+ if (Person::players[0]->num_weapons > 0)
+ tutorialsuccess = 1;
+ break;
+ case 41:
+ if (Person::players[0]->weaponactive == -1 && Person::players[0]->num_weapons > 0)
+ tutorialsuccess = 1;
+ break;
+ case 43:
+ if (Person::players[0]->animTarget == knifeslashstartanim)
+ tutorialsuccess = 1;
+ break;
+ case 44:
+ if (animation[Person::players[0]->animTarget].attack == reversal)
+ tutorialsuccess = 1;
+ break;
+ case 45:
+ if (animation[Person::players[0]->animTarget].attack == reversal)
+ tutorialsuccess = 1;
+ break;
+ case 46:
+ if (animation[Person::players[0]->animTarget].attack == reversal)
+ tutorialsuccess = 1;
+ break;
+ case 49:
+ if (Person::players[1]->weaponstuck != -1)
+ tutorialsuccess = 1;
+ break;
+ default:
+ break;
+ }
+ if (tutorialsuccess >= 1)
+ tutorialstagetime = tutorialmaxtime - 3;
+
+
+ if (tutorialstagetime == tutorialmaxtime - 3) {
+ emit_sound_np(consolesuccesssound);
+ }
+
+ if (tutorialsuccess >= 1) {
+ if (tutorialstage == 34 || tutorialstage == 35)
+ tutorialstagetime = tutorialmaxtime - 1;
+ }
+ }
+
+ if (tutorialstage < 14 || tutorialstage >= 50) {
+ Person::players[1]->coords.y = 300;
+ Person::players[1]->velocity = 0;
+ }
+}
+
+void doDebugKeys()
+{
+ float headprop, bodyprop, armprop, legprop;
+ if (debugmode) {
+ if (Input::isKeyPressed(SDLK_h)) {
+ Person::players[0]->damagetolerance = 200000;
+ Person::players[0]->damage = 0;
+ Person::players[0]->burnt = 0;
+ Person::players[0]->permanentdamage = 0;
+ Person::players[0]->superpermanentdamage = 0;
+ }
+
+ if (Input::isKeyPressed(SDLK_j)) {
+ environment++;
+ if (environment > 2)
+ environment = 0;
+ Setenvironment(environment);
+ }
+
+ if (Input::isKeyPressed(SDLK_c)) {
+ cameramode = 1 - cameramode;
+ }
+
+ if (Input::isKeyPressed(SDLK_x) && !Input::isKeyDown(SDLK_LSHIFT)) {
+ if (Person::players[0]->num_weapons > 0) {
+ if (weapons[Person::players[0]->weaponids[0]].getType() == sword)
+ weapons[Person::players[0]->weaponids[0]].setType(staff);
+ else if (weapons[Person::players[0]->weaponids[0]].getType() == staff)
+ weapons[Person::players[0]->weaponids[0]].setType(knife);
+ else
+ weapons[Person::players[0]->weaponids[0]].setType(sword);
+ }
+ }
+
+ if (Input::isKeyPressed(SDLK_x) && Input::isKeyDown(SDLK_LSHIFT)) {
+ int closest = findClosestPlayer();
+ if (closest >= 0) {
+ if (Person::players[closest]->num_weapons) {
+ if (weapons[Person::players[closest]->weaponids[0]].getType() == sword)
+ weapons[Person::players[closest]->weaponids[0]].setType(staff);
+ else if (weapons[Person::players[closest]->weaponids[0]].getType() == staff)
+ weapons[Person::players[closest]->weaponids[0]].setType(knife);
+ else
+ weapons[Person::players[closest]->weaponids[0]].setType(sword);
+ }
+ if (!Person::players[closest]->num_weapons) {
+ Person::players[closest]->weaponids[0] = weapons.size();
+
+ weapons.push_back(Weapon(knife, closest));
+
+ Person::players[closest]->num_weapons = 1;
+ }
+ }
+ }
+
+ if (Input::isKeyDown(SDLK_u)) {
+ int closest = findClosestPlayer();
+ if (closest >= 0) {
+ Person::players[closest]->yaw += multiplier * 50;
+ Person::players[closest]->targetyaw = Person::players[closest]->yaw;
+ }
+ }
+
+
+ if (Input::isKeyPressed(SDLK_o) && !Input::isKeyDown(SDLK_LSHIFT)) {
+ int closest = findClosestPlayer();
+ if (Input::isKeyDown(SDLK_LCTRL))
+ closest = 0;
+
+ if (closest >= 0) {
+ Person::players[closest]->whichskin++;
+ if (Person::players[closest]->whichskin > 9)
+ Person::players[closest]->whichskin = 0;
+ if (Person::players[closest]->whichskin > 2 && Person::players[closest]->creature == wolftype)
+ Person::players[closest]->whichskin = 0;
+
+ Person::players[closest]->skeleton.drawmodel.textureptr.load(creatureskin[Person::players[closest]->creature][Person::players[closest]->whichskin], 1,
+ &Person::players[closest]->skeleton.skinText[0], &Person::players[closest]->skeleton.skinsize);
+ }
+
+ if (Person::players[closest]->numclothes) {
+ for (int i = 0; i < Person::players[closest]->numclothes; i++) {
+ tintr = Person::players[closest]->clothestintr[i];
+ tintg = Person::players[closest]->clothestintg[i];
+ tintb = Person::players[closest]->clothestintb[i];
+ AddClothes((char *)Person::players[closest]->clothes[i], &Person::players[closest]->skeleton.skinText[0]);
+ }
+ Person::players[closest]->DoMipmaps();
+ }
+ }
+
+ if (Input::isKeyPressed(SDLK_o) && Input::isKeyDown(SDLK_LSHIFT)) {
+ int closest = findClosestPlayer();
+ if (closest >= 0) {
+ if (Person::players[closest]->creature == wolftype) {
+ headprop = Person::players[closest]->proportionhead.x / 1.1;
+ bodyprop = Person::players[closest]->proportionbody.x / 1.1;
+ armprop = Person::players[closest]->proportionarms.x / 1.1;
+ legprop = Person::players[closest]->proportionlegs.x / 1.1;
+ }
+
+ if (Person::players[closest]->creature == rabbittype) {
+ headprop = Person::players[closest]->proportionhead.x / 1.2;
+ bodyprop = Person::players[closest]->proportionbody.x / 1.05;
+ armprop = Person::players[closest]->proportionarms.x / 1.00;
+ legprop = Person::players[closest]->proportionlegs.x / 1.1;
+ }
+
+
+ if (Person::players[closest]->creature == rabbittype) {
+ Person::players[closest]->skeleton.id = closest;
+ Person::players[closest]->skeleton.Load((char *)":Data:Skeleton:Basic Figure Wolf", (char *)":Data:Skeleton:Basic Figure Wolf Low", (char *)":Data:Skeleton:Rabbitbelt", (char *)":Data:Models:Wolf.solid", (char *)":Data:Models:Wolf2.solid", (char *)":Data:Models:Wolf3.solid", (char *)":Data:Models:Wolf4.solid", (char *)":Data:Models:Wolf5.solid", (char *)":Data:Models:Wolf6.solid", (char *)":Data:Models:Wolf7.solid", (char *)":Data:Models:Wolflow.solid", (char *)":Data:Models:Belt.solid", 0);
+ Person::players[closest]->skeleton.drawmodel.textureptr.load(":Data:Textures:Wolf.jpg", 1, &Person::players[closest]->skeleton.skinText[closest], &Person::players[closest]->skeleton.skinsize);
+ Person::players[closest]->whichskin = 0;
+ Person::players[closest]->creature = wolftype;
+
+ Person::players[closest]->proportionhead = 1.1;
+ Person::players[closest]->proportionbody = 1.1;
+ Person::players[closest]->proportionarms = 1.1;
+ Person::players[closest]->proportionlegs = 1.1;
+ Person::players[closest]->proportionlegs.y = 1.1;
+ Person::players[closest]->scale = .23 * 5 * Person::players[0]->scale;
+
+ Person::players[closest]->damagetolerance = 300;
+ } else {
+ Person::players[closest]->skeleton.id = closest;
+ Person::players[closest]->skeleton.Load((char *)":Data:Skeleton:Basic Figure", (char *)":Data:Skeleton:Basic Figurelow", (char *)":Data:Skeleton:Rabbitbelt", (char *)":Data:Models:Body.solid", (char *)":Data:Models:Body2.solid", (char *)":Data:Models:Body3.solid", (char *)":Data:Models:Body4.solid", (char *)":Data:Models:Body5.solid", (char *)":Data:Models:Body6.solid", (char *)":Data:Models:Body7.solid", (char *)":Data:Models:Bodylow.solid", (char *)":Data:Models:Belt.solid", 1);
+ Person::players[closest]->skeleton.drawmodel.textureptr.load(":Data:Textures:Fur3.jpg", 1, &Person::players[closest]->skeleton.skinText[0], &Person::players[closest]->skeleton.skinsize);
+ Person::players[closest]->whichskin = 0;
+ Person::players[closest]->creature = rabbittype;
+
+ Person::players[closest]->proportionhead = 1.2;
+ Person::players[closest]->proportionbody = 1.05;
+ Person::players[closest]->proportionarms = 1.00;
+ Person::players[closest]->proportionlegs = 1.1;
+ Person::players[closest]->proportionlegs.y = 1.05;
+ Person::players[closest]->scale = .2 * 5 * Person::players[0]->scale;
+
+ Person::players[closest]->damagetolerance = 200;
+ }
+
+ if (Person::players[closest]->creature == wolftype) {
+ Person::players[closest]->proportionhead = 1.1 * headprop;
+ Person::players[closest]->proportionbody = 1.1 * bodyprop;
+ Person::players[closest]->proportionarms = 1.1 * armprop;
+ Person::players[closest]->proportionlegs = 1.1 * legprop;
+ }
+
+ if (Person::players[closest]->creature == rabbittype) {
+ Person::players[closest]->proportionhead = 1.2 * headprop;
+ Person::players[closest]->proportionbody = 1.05 * bodyprop;
+ Person::players[closest]->proportionarms = 1.00 * armprop;
+ Person::players[closest]->proportionlegs = 1.1 * legprop;
+ Person::players[closest]->proportionlegs.y = 1.05 * legprop;
+ }
+
+ }
+ }
+
+ if (Input::isKeyPressed(SDLK_b) && !Input::isKeyDown(SDLK_LSHIFT)) {
+ slomo = 1 - slomo;
+ slomodelay = 1000;
+ }
+
+
+ if (((Input::isKeyPressed(SDLK_i) && !Input::isKeyDown(SDLK_LSHIFT)))) {
+ int closest = -1;
+ float closestdist = std::numeric_limits<float>::max();
+
+ for (int i = 1; i < numplayers; i++) {
+ float distance = distsq(&Person::players[i]->coords, &Person::players[0]->coords);
+ if (!Person::players[i]->headless)
+ if (distance < closestdist) {
+ closestdist = distance;
+ closest = i;
+ }
+ }
+
+ XYZ flatfacing2, flatvelocity2;
+ XYZ blah;
+ if (closest != -1 && distsq(&Person::players[closest]->coords, &Person::players[0]->coords) < 144) {
+ blah = Person::players[closest]->coords;
+ XYZ headspurtdirection;
+ //int i = Person::players[closest]->skeleton.jointlabels[head];
+ Joint& headjoint = Person::players[closest]->joint(head);
+ for (int k = 0; k < Person::players[closest]->skeleton.num_joints; k++) {
+ if (!Person::players[closest]->skeleton.free)
+ flatvelocity2 = Person::players[closest]->velocity;
+ if (Person::players[closest]->skeleton.free)
+ flatvelocity2 = headjoint.velocity;
+ if (!Person::players[closest]->skeleton.free)
+ flatfacing2 = DoRotation(DoRotation(DoRotation(headjoint.position, 0, 0, Person::players[closest]->tilt), Person::players[closest]->tilt2, 0, 0), 0, Person::players[closest]->yaw, 0) * Person::players[closest]->scale + Person::players[closest]->coords;
+ if (Person::players[closest]->skeleton.free)
+ flatfacing2 = headjoint.position * Person::players[closest]->scale + Person::players[closest]->coords;
+ flatvelocity2.x += (float)(abs(Random() % 100) - 50) / 10;
+ flatvelocity2.y += (float)(abs(Random() % 100) - 50) / 10;
+ flatvelocity2.z += (float)(abs(Random() % 100) - 50) / 10;
+ headspurtdirection = headjoint.position - Person::players[closest]->jointPos(neck);