- }
-
- if (Input::isKeyPressed(SDLK_o) && Input::isKeyDown(SDLK_LSHIFT)) {
- int closest = findClosestPlayer();
- if (closest >= 0) {
- if (player[closest].creature == wolftype) {
- headprop = player[closest].proportionhead.x / 1.1;
- bodyprop = player[closest].proportionbody.x / 1.1;
- armprop = player[closest].proportionarms.x / 1.1;
- legprop = player[closest].proportionlegs.x / 1.1;
- }
-
- if (player[closest].creature == rabbittype) {
- headprop = player[closest].proportionhead.x / 1.2;
- bodyprop = player[closest].proportionbody.x / 1.05;
- armprop = player[closest].proportionarms.x / 1.00;
- legprop = player[closest].proportionlegs.x / 1.1;
- }
-
-
- if (player[closest].creature == rabbittype) {
- player[closest].skeleton.id = closest;
- player[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);
- player[closest].skeleton.drawmodel.textureptr.load(":Data:Textures:Wolf.jpg", 1, &player[closest].skeleton.skinText[closest], &player[closest].skeleton.skinsize);
- player[closest].whichskin = 0;
- player[closest].creature = wolftype;
-
- player[closest].proportionhead = 1.1;
- player[closest].proportionbody = 1.1;
- player[closest].proportionarms = 1.1;
- player[closest].proportionlegs = 1.1;
- player[closest].proportionlegs.y = 1.1;
- player[closest].scale = .23 * 5 * player[0].scale;
-
- player[closest].damagetolerance = 300;
- } else {
- player[closest].skeleton.id = closest;
- player[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);
- player[closest].skeleton.drawmodel.textureptr.load(":Data:Textures:Fur3.jpg", 1, &player[closest].skeleton.skinText[0], &player[closest].skeleton.skinsize);
- player[closest].whichskin = 0;
- player[closest].creature = rabbittype;
-
- player[closest].proportionhead = 1.2;
- player[closest].proportionbody = 1.05;
- player[closest].proportionarms = 1.00;
- player[closest].proportionlegs = 1.1;
- player[closest].proportionlegs.y = 1.05;
- player[closest].scale = .2 * 5 * player[0].scale;
-
- player[closest].damagetolerance = 200;
- }
-
- if (player[closest].creature == wolftype) {
- player[closest].proportionhead = 1.1 * headprop;
- player[closest].proportionbody = 1.1 * bodyprop;
- player[closest].proportionarms = 1.1 * armprop;
- player[closest].proportionlegs = 1.1 * legprop;
- }
-
- if (player[closest].creature == rabbittype) {
- player[closest].proportionhead = 1.2 * headprop;
- player[closest].proportionbody = 1.05 * bodyprop;
- player[closest].proportionarms = 1.00 * armprop;
- player[closest].proportionlegs = 1.1 * legprop;
- player[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(&player[i].coords, &player[0].coords);
- if (!player[i].headless)
- if (distance < closestdist) {
- closestdist = distance;
- closest = i;
- }
- }
-
- XYZ flatfacing2, flatvelocity2;
- XYZ blah;
- if (closest != -1 && distsq(&player[closest].coords, &player[0].coords) < 144) {
- blah = player[closest].coords;
- XYZ headspurtdirection;
- //int i = player[closest].skeleton.jointlabels[head];
- Joint& headjoint = player[closest].joint(head);
- for (int k = 0; k < player[closest].skeleton.num_joints; k++) {
- if (!player[closest].skeleton.free)
- flatvelocity2 = player[closest].velocity;
- if (player[closest].skeleton.free)
- flatvelocity2 = headjoint.velocity;
- if (!player[closest].skeleton.free)
- flatfacing2 = DoRotation(DoRotation(DoRotation(headjoint.position, 0, 0, player[closest].tilt), player[closest].tilt2, 0, 0), 0, player[closest].yaw, 0) * player[closest].scale + player[closest].coords;
- if (player[closest].skeleton.free)
- flatfacing2 = headjoint.position * player[closest].scale + player[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 - player[closest].jointPos(neck);
- Normalise(&headspurtdirection);
- Sprite::MakeSprite(bloodflamesprite, flatfacing2, flatvelocity2, 1, 1, 1, .6, 1);
- flatvelocity2 += headspurtdirection * 8;
- Sprite::MakeSprite(bloodsprite, flatfacing2, flatvelocity2 / 2, 1, 1, 1, .16, 1);
- }
- Sprite::MakeSprite(cloudsprite, flatfacing2, flatvelocity2 * 0, .6, 0, 0, 1, .5);
-
- emit_sound_at(splattersound, blah);
- emit_sound_at(breaksound2, blah, 100.);
-
- if (player[closest].skeleton.free == 2)player[closest].skeleton.free = 0;
- player[closest].RagDoll(0);
- player[closest].dead = 2;
- player[closest].headless = 1;
- player[closest].DoBloodBig(3, 165);
-
- camerashake += .3;
- }
- }
-
- if (((Input::isKeyPressed(SDLK_i) && Input::isKeyDown(SDLK_LSHIFT)))) {
- int closest = findClosestPlayer();
- XYZ flatfacing2, flatvelocity2;
- XYZ blah;
- if (closest >= 0 && distsq(&player[closest].coords, &player[0].coords) < 144) {
- blah = player[closest].coords;
- emit_sound_at(splattersound, blah);
- emit_sound_at(breaksound2, blah);
-
- for (int i = 0; i < player[closest].skeleton.num_joints; i++) {
- if (!player[closest].skeleton.free)flatvelocity2 = player[closest].velocity;
- if (player[closest].skeleton.free)flatvelocity2 = player[closest].skeleton.joints[i].velocity;
- if (!player[closest].skeleton.free)flatfacing2 = DoRotation(DoRotation(DoRotation(player[closest].skeleton.joints[i].position, 0, 0, player[closest].tilt), player[closest].tilt2, 0, 0), 0, player[closest].yaw, 0) * player[closest].scale + player[closest].coords;
- if (player[closest].skeleton.free)flatfacing2 = player[closest].skeleton.joints[i].position * player[closest].scale + player[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;
- Sprite::MakeSprite(bloodflamesprite, flatfacing2, flatvelocity2, 1, 1, 1, 3, 1);
- Sprite::MakeSprite(bloodsprite, flatfacing2, flatvelocity2, 1, 1, 1, .3, 1);
- Sprite::MakeSprite(cloudsprite, flatfacing2, flatvelocity2 * 0, .6, 0, 0, 1, .5);
- }
-
- for (int i = 0; i < player[closest].skeleton.num_joints; i++) {
- if (!player[closest].skeleton.free)flatvelocity2 = player[closest].velocity;
- if (player[closest].skeleton.free)flatvelocity2 = player[closest].skeleton.joints[i].velocity;
- if (!player[closest].skeleton.free)flatfacing2 = DoRotation(DoRotation(DoRotation(player[closest].skeleton.joints[i].position, 0, 0, player[closest].tilt), player[closest].tilt2, 0, 0), 0, player[closest].yaw, 0) * player[closest].scale + player[closest].coords;
- if (player[closest].skeleton.free)flatfacing2 = player[closest].skeleton.joints[i].position * player[closest].scale + player[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;
- Sprite::MakeSprite(bloodflamesprite, flatfacing2, flatvelocity2, 1, 1, 1, 3, 1);
- Sprite::MakeSprite(bloodsprite, flatfacing2, flatvelocity2, 1, 1, 1, .4, 1);
- }
-
- for (int i = 0; i < player[closest].skeleton.num_joints; i++) {
- if (!player[closest].skeleton.free)flatvelocity2 = player[closest].velocity;
- if (player[closest].skeleton.free)flatvelocity2 = player[closest].skeleton.joints[i].velocity;
- if (!player[closest].skeleton.free)flatfacing2 = DoRotation(DoRotation(DoRotation(player[closest].skeleton.joints[i].position, 0, 0, player[closest].tilt), player[closest].tilt2, 0, 0), 0, player[closest].yaw, 0) * player[closest].scale + player[closest].coords;
- if (player[closest].skeleton.free)flatfacing2 = player[closest].skeleton.joints[i].position * player[closest].scale + player[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;
- Sprite::MakeSprite(bloodflamesprite, flatfacing2, flatvelocity2 * 2, 1, 1, 1, 3, 1);
- Sprite::MakeSprite(bloodsprite, flatfacing2, flatvelocity2 * 2, 1, 1, 1, .4, 1);
- }
-
- for (int i = 0; i < player[closest].skeleton.num_joints; i++) {
- if (!player[closest].skeleton.free)flatvelocity2 = player[closest].velocity;
- if (player[closest].skeleton.free)flatvelocity2 = player[closest].skeleton.joints[i].velocity;
- if (!player[closest].skeleton.free)flatfacing2 = DoRotation(DoRotation(DoRotation(player[closest].skeleton.joints[i].position, 0, 0, player[closest].tilt), player[closest].tilt2, 0, 0), 0, player[closest].yaw, 0) * player[closest].scale + player[closest].coords;
- if (player[closest].skeleton.free)flatfacing2 = player[closest].skeleton.joints[i].position * player[closest].scale + player[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;
- Sprite::MakeSprite(bloodflamesprite, flatfacing2, flatvelocity2 * 2, 1, 1, 1, 3, 1);
- Sprite::MakeSprite(bloodsprite, flatfacing2, flatvelocity2 * 2, 1, 1, 1, .4, 1);
- }
-
- XYZ temppos;
- for (int j = 0; j < numplayers; j++) {
- if (j != closest) {
- if (distsq(&player[j].coords, &player[closest].coords) < 25) {
- player[j].DoDamage((25 - distsq(&player[j].coords, &player[closest].coords)) * 60);
- if (player[j].skeleton.free == 2)
- player[j].skeleton.free = 1;
- player[j].skeleton.longdead = 0;
- player[j].RagDoll(0);
- for (int i = 0; i < player[j].skeleton.num_joints; i++) {
- temppos = player[j].skeleton.joints[i].position + player[j].coords;
- if (distsq(&temppos, &player[closest].coords) < 25) {
- flatvelocity2 = temppos - player[closest].coords;
- Normalise(&flatvelocity2);
- player[j].skeleton.joints[i].velocity += flatvelocity2 * ((20 - distsq(&temppos, &player[closest].coords)) * 20);
- }
- }
- }
- }
- }
-
- player[closest].DoDamage(10000);
- player[closest].RagDoll(0);
- player[closest].dead = 2;
- player[closest].coords = 20;
- player[closest].skeleton.free = 2;
-
- camerashake += .6;
-
- }
- }
-
- if (Input::isKeyPressed(SDLK_f)) {
- player[0].onfire = 1 - player[0].onfire;
- if (player[0].onfire) {
- player[0].CatchFire();
- }
- if (!player[0].onfire) {
- emit_sound_at(fireendsound, player[0].coords);
- pause_sound(stream_firesound);
- }
- }
-
- if (Input::isKeyPressed(SDLK_n) && !Input::isKeyDown(SDLK_LCTRL)) {
- //if(!player[0].skeleton.free)player[0].damage+=500;
- player[0].RagDoll(0);
- //player[0].spurt=1;
- //player[0].DoDamage(1000);
-
- emit_sound_at(whooshsound, player[0].coords, 128.);
- }
-
- if (Input::isKeyPressed(SDLK_n) && Input::isKeyDown(SDLK_LCTRL)) {
- for (int i = 0; i < objects.numobjects; i++) {
- if (objects.type[i] == treeleavestype) {
- objects.scale[i] *= .9;
- }
- }
- }
-
- if (Input::isKeyPressed(SDLK_m) && Input::isKeyDown(SDLK_LSHIFT)) {
- editorenabled = 1 - editorenabled;
- if (editorenabled) {
- player[0].damagetolerance = 100000;
- } else {
- player[0].damagetolerance = 200;
- }
- player[0].damage = 0; // these lines were in both if and else, but I think they would better fit in the if
- player[0].permanentdamage = 0;
- player[0].superpermanentdamage = 0;
- player[0].bloodloss = 0;
- player[0].deathbleeding = 0;
- }
-
- //skip level
- if (whichlevel != -2 && Input::isKeyPressed(SDLK_k) && Input::isKeyDown(SDLK_LSHIFT) && !editorenabled) {
- targetlevel++;
- if (targetlevel > numchallengelevels - 1)
- targetlevel = 0;
- loading = 1;
- leveltime = 5;
- }
-
- if (editorenabled) {
- if (Input::isKeyPressed(SDLK_DELETE) && Input::isKeyDown(SDLK_LSHIFT)) {
- int closest = findClosestPlayer();
- if (closest >= 0) {
- //player[closest]=player[numplayers-1];
- //player[closest].skeleton=player[numplayers-1].skeleton;
- numplayers--;
- }
- }
-
- if (Input::isKeyPressed(SDLK_DELETE) && Input::isKeyDown(SDLK_LCTRL)) {
- int closest = findClosestObject();
- if (closest >= 0)
- objects.position[closest].y -= 500;
- }
-
- if (Input::isKeyPressed(SDLK_m) && Input::isKeyDown(SDLK_LSHIFT)) {
- //drawmode++;
- //if(drawmode>2)drawmode=0;
- if (objects.numobjects < max_objects - 1) {
- XYZ boxcoords;
- boxcoords.x = player[0].coords.x;
- boxcoords.z = player[0].coords.z;
- boxcoords.y = player[0].coords.y - 3;
- if (editortype == bushtype)boxcoords.y = player[0].coords.y - .5;
- if (editortype == firetype)boxcoords.y = player[0].coords.y - .5;
- //objects.MakeObject(abs(Random()%3),boxcoords,Random()%360);
- float temprotat, temprotat2;
- temprotat = editoryaw;
- temprotat2 = editorpitch;
- if (temprotat < 0 || editortype == bushtype)temprotat = Random() % 360;
- if (temprotat2 < 0)temprotat2 = Random() % 360;
-
- objects.MakeObject(editortype, boxcoords, (int)temprotat - ((int)temprotat) % 30, (int)temprotat2, editorsize);
- if (editortype == treetrunktype)
- objects.MakeObject(treeleavestype, boxcoords, Random() % 360 * (temprotat2 < 2) + (int)editoryaw - ((int)editoryaw) % 30, editorpitch, editorsize);
- }
- }
-
- if (Input::isKeyPressed(SDLK_p) && Input::isKeyDown(SDLK_LSHIFT) && !Input::isKeyDown(SDLK_LCTRL)) {
- if (numplayers < maxplayers - 1) {
- player[numplayers].scale = .2 * 5 * player[0].scale;
- player[numplayers].creature = rabbittype;
- player[numplayers].howactive = editoractive;
- player[numplayers].skeleton.id = numplayers;
- player[numplayers].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);
-
- //texsize=512*512*3/texdetail/texdetail;
- //if(!player[numplayers].loaded)player[numplayers].skeleton.skinText = new GLubyte[texsize];
- //player[numplayers].skeleton.skinText.resize(texsize);
-
- int k = abs(Random() % 2) + 1;
- if (k == 0) {
- player[numplayers].skeleton.drawmodel.textureptr.load(":Data:Textures:Fur3.jpg", 1, &player[numplayers].skeleton.skinText[0], &player[numplayers].skeleton.skinsize);
- player[numplayers].whichskin = 0;
- } else if (k == 1) {
- player[numplayers].skeleton.drawmodel.textureptr.load(":Data:Textures:Fur.jpg", 1, &player[numplayers].skeleton.skinText[0], &player[numplayers].skeleton.skinsize);
- player[numplayers].whichskin = 1;
- } else {
- player[numplayers].skeleton.drawmodel.textureptr.load(":Data:Textures:Fur2.jpg", 1, &player[numplayers].skeleton.skinText[0], &player[numplayers].skeleton.skinsize);
- player[numplayers].whichskin = 2;
- }
-
- player[numplayers].skeleton.drawmodelclothes.textureptr.load(":Data:Textures:Belt.png", 1, 1);
- player[numplayers].power = 1;
- player[numplayers].speedmult = 1;
- player[numplayers].animCurrent = bounceidleanim;
- player[numplayers].animTarget = bounceidleanim;
- player[numplayers].frameCurrent = 0;
- player[numplayers].frameTarget = 1;
- player[numplayers].target = 0;
- player[numplayers].bled = 0;
- player[numplayers].speed = 1 + (float)(Random() % 100) / 1000;
-
- player[numplayers].targetyaw = player[0].targetyaw;
- player[numplayers].yaw = player[0].yaw;
-
- player[numplayers].velocity = 0;
- player[numplayers].coords = player[0].coords;
- player[numplayers].oldcoords = player[numplayers].coords;
- player[numplayers].realoldcoords = player[numplayers].coords;
-
- player[numplayers].id = numplayers;
- player[numplayers].skeleton.id = numplayers;
- player[numplayers].updatedelay = 0;
- player[numplayers].normalsupdatedelay = 0;
-
- player[numplayers].aitype = passivetype;
-
- if (player[0].creature == wolftype) {
- headprop = player[0].proportionhead.x / 1.1;
- bodyprop = player[0].proportionbody.x / 1.1;
- armprop = player[0].proportionarms.x / 1.1;
- legprop = player[0].proportionlegs.x / 1.1;
- }
-
- if (player[0].creature == rabbittype) {
- headprop = player[0].proportionhead.x / 1.2;
- bodyprop = player[0].proportionbody.x / 1.05;
- armprop = player[0].proportionarms.x / 1.00;
- legprop = player[0].proportionlegs.x / 1.1;
- }
-
- if (player[numplayers].creature == wolftype) {
- player[numplayers].proportionhead = 1.1 * headprop;
- player[numplayers].proportionbody = 1.1 * bodyprop;
- player[numplayers].proportionarms = 1.1 * armprop;
- player[numplayers].proportionlegs = 1.1 * legprop;
- }
-
- if (player[numplayers].creature == rabbittype) {
- player[numplayers].proportionhead = 1.2 * headprop;
- player[numplayers].proportionbody = 1.05 * bodyprop;
- player[numplayers].proportionarms = 1.00 * armprop;
- player[numplayers].proportionlegs = 1.1 * legprop;
- player[numplayers].proportionlegs.y = 1.05 * legprop;
- }
-
- player[numplayers].headless = 0;
- player[numplayers].onfire = 0;
-
- if (cellophane) {
- player[numplayers].proportionhead.z = 0;
- player[numplayers].proportionbody.z = 0;
- player[numplayers].proportionarms.z = 0;
- player[numplayers].proportionlegs.z = 0;
- }
-
- player[numplayers].tempanimation.Load((char *)"Tempanim", 0, 0);
-
- player[numplayers].damagetolerance = 200;
-
- player[numplayers].protectionhead = player[0].protectionhead;
- player[numplayers].protectionhigh = player[0].protectionhigh;
- player[numplayers].protectionlow = player[0].protectionlow;
- player[numplayers].armorhead = player[0].armorhead;
- player[numplayers].armorhigh = player[0].armorhigh;
- player[numplayers].armorlow = player[0].armorlow;
- player[numplayers].metalhead = player[0].metalhead;
- player[numplayers].metalhigh = player[0].metalhigh;
- player[numplayers].metallow = player[0].metallow;
-
- player[numplayers].immobile = player[0].immobile;
-
- player[numplayers].numclothes = player[0].numclothes;
- if (player[numplayers].numclothes)
- for (int i = 0; i < player[numplayers].numclothes; i++) {
- strcpy(player[numplayers].clothes[i], player[0].clothes[i]);
- player[numplayers].clothestintr[i] = player[0].clothestintr[i];
- player[numplayers].clothestintg[i] = player[0].clothestintg[i];
- player[numplayers].clothestintb[i] = player[0].clothestintb[i];
- tintr = player[numplayers].clothestintr[i];
- tintg = player[numplayers].clothestintg[i];
- tintb = player[numplayers].clothestintb[i];
- AddClothes((char *)player[numplayers].clothes[i], &player[numplayers].skeleton.skinText[0]);
- }
- if (player[numplayers].numclothes) {
- player[numplayers].DoMipmaps();
- }
-
- player[numplayers].power = player[0].power;
- player[numplayers].speedmult = player[0].speedmult;
-
- player[numplayers].damage = 0;
- player[numplayers].permanentdamage = 0;
- player[numplayers].superpermanentdamage = 0;
- player[numplayers].deathbleeding = 0;
- player[numplayers].bleeding = 0;
- player[numplayers].numwaypoints = 0;
- player[numplayers].waypoint = 0;
- player[numplayers].jumppath = 0;
- player[numplayers].weaponstuck = -1;
- player[numplayers].weaponactive = -1;
- player[numplayers].num_weapons = 0;
- player[numplayers].bloodloss = 0;
- player[numplayers].dead = 0;
-
- player[numplayers].loaded = 1;
-
- numplayers++;
- }
- }
-
- if (Input::isKeyPressed(SDLK_p) && Input::isKeyDown(SDLK_LSHIFT)) {
- if (player[numplayers - 1].numwaypoints < 90) {
- player[numplayers - 1].waypoints[player[numplayers - 1].numwaypoints] = player[0].coords;
- player[numplayers - 1].waypointtype[player[numplayers - 1].numwaypoints] = editorpathtype;
- player[numplayers - 1].numwaypoints++;
- }
- }
-
- if (Input::isKeyPressed(SDLK_p) && Input::isKeyDown(SDLK_LCTRL)) {
- if (numpathpoints < 30) {
- bool connected, alreadyconnected;
- connected = 0;
- if (numpathpoints > 1)
- for (int i = 0; i < numpathpoints; i++) {
- if (distsq(&pathpoint[i], &player[0].coords) < .5 && i != pathpointselected && !connected) {
- alreadyconnected = 0;
- for (int j = 0; j < numpathpointconnect[pathpointselected]; j++) {
- if (pathpointconnect[pathpointselected][j] == i)alreadyconnected = 1;
- }
- if (!alreadyconnected) {
- numpathpointconnect[pathpointselected]++;
- connected = 1;
- pathpointconnect[pathpointselected][numpathpointconnect[pathpointselected] - 1] = i;
- }
- }
- }
- if (!connected) {
- numpathpoints++;
- pathpoint[numpathpoints - 1] = player[0].coords;
- numpathpointconnect[numpathpoints - 1] = 0;
- if (numpathpoints > 1 && pathpointselected != -1) {
- numpathpointconnect[pathpointselected]++;
- pathpointconnect[pathpointselected][numpathpointconnect[pathpointselected] - 1] = numpathpoints - 1;
- }
- pathpointselected = numpathpoints - 1;
- }
- }
- }
-
- if (Input::isKeyPressed(SDLK_PERIOD)) {
- pathpointselected++;
- if (pathpointselected >= numpathpoints)
- pathpointselected = -1;
- }
- if (Input::isKeyPressed(SDLK_COMMA) && !Input::isKeyDown(SDLK_LSHIFT)) {
- pathpointselected--;
- if (pathpointselected <= -2)
- pathpointselected = numpathpoints - 1;
- }
- if (Input::isKeyPressed(SDLK_COMMA) && Input::isKeyDown(SDLK_LSHIFT)) {
- if (pathpointselected != -1) {
- numpathpoints--;
- pathpoint[pathpointselected] = pathpoint[numpathpoints];
- numpathpointconnect[pathpointselected] = numpathpointconnect[numpathpoints];
- for (int i = 0; i < numpathpointconnect[pathpointselected]; i++) {
- pathpointconnect[pathpointselected][i] = pathpointconnect[numpathpoints][i];
- }
- for (int i = 0; i < numpathpoints; i++) {
- for (int j = 0; j < numpathpointconnect[i]; j++) {
- if (pathpointconnect[i][j] == pathpointselected) {
- pathpointconnect[i][j] = pathpointconnect[i][numpathpointconnect[i] - 1];
- numpathpointconnect[i]--;
- }
- if (pathpointconnect[i][j] == numpathpoints) {
- pathpointconnect[i][j] = pathpointselected;
- }
- }
- }
- pathpointselected = numpathpoints - 1;
- }
- }
-
- if (Input::isKeyPressed(SDLK_LEFT) && Input::isKeyDown(SDLK_LSHIFT) && !Input::isKeyDown(SDLK_LCTRL)) {
- editortype--;
- if (editortype == treeleavestype || editortype == 10)editortype--;
- if (editortype < 0)editortype = firetype;
- }
-
- if (Input::isKeyPressed(SDLK_RIGHT) && Input::isKeyDown(SDLK_LSHIFT) && !Input::isKeyDown(SDLK_LCTRL)) {
- editortype++;
- if (editortype == treeleavestype || editortype == 10)editortype++;
- if (editortype > firetype)editortype = 0;
- }
-
- if (Input::isKeyDown(SDLK_LEFT) && !Input::isKeyDown(SDLK_LSHIFT) && !Input::isKeyDown(SDLK_LCTRL)) {
- editoryaw -= multiplier * 100;
- if (editoryaw < -.01)editoryaw = -.01;
- }
-
- if (Input::isKeyDown(SDLK_RIGHT) && !Input::isKeyDown(SDLK_LSHIFT) && !Input::isKeyDown(SDLK_LCTRL)) {
- editoryaw += multiplier * 100;
- }
-
- if (Input::isKeyDown(SDLK_UP) && !Input::isKeyDown(SDLK_LCTRL)) {
- editorsize += multiplier;
- }
-
- if (Input::isKeyDown(SDLK_DOWN) && !Input::isKeyDown(SDLK_LCTRL)) {
- editorsize -= multiplier;
- if (editorsize < .1)editorsize = .1;
- }
-
-
- if (Input::isKeyPressed(SDLK_LEFT) && Input::isKeyDown(SDLK_LSHIFT) && Input::isKeyDown(SDLK_LCTRL)) {
- mapradius -= multiplier * 10;
- }
-
- if (Input::isKeyPressed(SDLK_RIGHT) && Input::isKeyDown(SDLK_LSHIFT) && Input::isKeyDown(SDLK_LCTRL)) {
- mapradius += multiplier * 10;
- }
- if (Input::isKeyDown(SDLK_UP) && Input::isKeyDown(SDLK_LCTRL)) {
- editorpitch += multiplier * 100;
- }
-
- if (Input::isKeyDown(SDLK_DOWN) && Input::isKeyDown(SDLK_LCTRL)) {
- editorpitch -= multiplier * 100;
- if (editorpitch < -.01)editorpitch = -.01;
- }
- if (Input::isKeyPressed(SDLK_DELETE) && objects.numobjects && Input::isKeyDown(SDLK_LSHIFT)) {
- int closest = findClosestObject();
- if (closest >= 0)
- objects.DeleteObject(closest);
- }
- }
- }
-}
-
-void doJumpReversals()
-{
- for (int k = 0; k < numplayers; k++)
- for (int i = k; i < numplayers; i++) {
- if (i == k)continue;
- if ( player[k].skeleton.free == 0 &&
- player[i].skeleton.oldfree == 0 &&
- (player[i].animTarget == jumpupanim ||
- player[k].animTarget == jumpupanim) &&
- (player[i].aitype == playercontrolled ||
- player[k].aitype == playercontrolled) &&
- (player[i].aitype == attacktypecutoff && player[i].stunned <= 0 ||
- player[k].aitype == attacktypecutoff && player[k].stunned <= 0)) {
- if ( distsq(&player[i].coords, &player[k].coords) < 10 * sq((player[i].scale + player[k].scale) * 2.5) &&
- distsqflat(&player[i].coords, &player[k].coords) < 2 * sq((player[i].scale + player[k].scale) * 2.5)) {
- //TODO: refactor two huge similar ifs
- if (player[i].animTarget == jumpupanim &&
- player[k].animTarget != getupfrombackanim &&
- player[k].animTarget != getupfromfrontanim &&
- animation[player[k].animTarget].height == middleheight &&
- normaldotproduct(player[i].velocity, player[k].coords - player[i].coords) < 0 &&
- (player[k].aitype == playercontrolled && player[k].attackkeydown ||
- player[k].aitype != playercontrolled)) {
- player[i].victim = &player[k];
- player[i].velocity = 0;
- player[i].animCurrent = jumpreversedanim;
- player[i].animTarget = jumpreversedanim;
- player[i].frameCurrent = 0;
- player[i].frameTarget = 1;
- player[i].targettilt2 = 0;
- player[k].victim = &player[i];
- player[k].velocity = 0;
- player[k].animCurrent = jumpreversalanim;
- player[k].animTarget = jumpreversalanim;
- player[k].frameCurrent = 0;
- player[k].frameTarget = 1;
- player[k].targettilt2 = 0;
- if (player[i].coords.y < player[k].coords.y + 1) {
- player[i].animCurrent = rabbitkickreversedanim;
- player[i].animTarget = rabbitkickreversedanim;
- player[i].frameCurrent = 1;
- player[i].frameTarget = 2;
- player[k].animCurrent = rabbitkickreversalanim;
- player[k].animTarget = rabbitkickreversalanim;
- player[k].frameCurrent = 1;
- player[k].frameTarget = 2;
- }
- player[i].target = 0;
- player[k].oldcoords = player[k].coords;
- player[i].coords = player[k].coords;
- player[k].targetyaw = player[i].targetyaw;
- player[k].yaw = player[i].targetyaw;
- if (player[k].aitype == attacktypecutoff)
- player[k].stunned = .5;
- }
- if (player[k].animTarget == jumpupanim &&
- player[i].animTarget != getupfrombackanim &&
- player[i].animTarget != getupfromfrontanim &&
- animation[player[i].animTarget].height == middleheight &&
- normaldotproduct(player[k].velocity, player[i].coords - player[k].coords) < 0 &&
- ((player[i].aitype == playercontrolled && player[i].attackkeydown) ||
- player[i].aitype != playercontrolled)) {
- player[k].victim = &player[i];
- player[k].velocity = 0;
- player[k].animCurrent = jumpreversedanim;
- player[k].animTarget = jumpreversedanim;
- player[k].frameCurrent = 0;
- player[k].frameTarget = 1;
- player[k].targettilt2 = 0;
- player[i].victim = &player[k];
- player[i].velocity = 0;
- player[i].animCurrent = jumpreversalanim;
- player[i].animTarget = jumpreversalanim;
- player[i].frameCurrent = 0;
- player[i].frameTarget = 1;
- player[i].targettilt2 = 0;
- if (player[k].coords.y < player[i].coords.y + 1) {
- player[k].animTarget = rabbitkickreversedanim;
- player[k].animCurrent = rabbitkickreversedanim;
- player[i].animCurrent = rabbitkickreversalanim;
- player[i].animTarget = rabbitkickreversalanim;
- player[k].frameCurrent = 1;
- player[k].frameTarget = 2;
- player[i].frameCurrent = 1;
- player[i].frameTarget = 2;
- }
- player[k].target = 0;
- player[i].oldcoords = player[i].coords;
- player[k].coords = player[i].coords;
- player[i].targetyaw = player[k].targetyaw;
- player[i].yaw = player[k].targetyaw;
- if (player[i].aitype == attacktypecutoff)
- player[i].stunned = .5;
- }
- }
- }
- }
-}
-
-void doAerialAcrobatics()
-{
- static XYZ facing, flatfacing;
- for (int k = 0; k < numplayers; k++) {
- player[k].turnspeed = 500;
-
- if ((player[k].isRun() &&
- ((player[k].targetyaw != rabbitrunninganim &&
- player[k].targetyaw != wolfrunninganim) ||
- player[k].frameTarget == 4)) ||
- player[k].animTarget == removeknifeanim ||
- player[k].animTarget == crouchremoveknifeanim ||
- player[k].animTarget == flipanim ||
- player[k].animTarget == fightsidestep ||
- player[k].animTarget == walkanim) {
- player[k].yaw = stepTowardf(player[k].yaw, player[k].targetyaw, multiplier * player[k].turnspeed);
- }
-
-
- if (player[k].isStop() ||
- player[k].isLanding() ||
- player[k].animTarget == staggerbackhighanim ||
- (player[k].animTarget == sneakanim && player[k].animCurrent == sneakanim) ||
- player[k].animTarget == staggerbackhardanim ||
- player[k].animTarget == backhandspringanim ||
- player[k].animTarget == dodgebackanim ||
- player[k].animTarget == rollanim ||
- (animation[player[k].animTarget].attack &&
- player[k].animTarget != rabbitkickanim &&
- (player[k].animTarget != crouchstabanim || player[k].hasvictim) &&
- (player[k].animTarget != swordgroundstabanim || player[k].hasvictim))) {
- player[k].yaw = stepTowardf(player[k].yaw, player[k].targetyaw, multiplier * player[k].turnspeed * 2);
- }
-
- if (player[k].animTarget == sneakanim && player[k].animCurrent != sneakanim) {
- player[k].yaw = stepTowardf(player[k].yaw, player[k].targetyaw, multiplier * player[k].turnspeed * 4);
- }
-
- /*if(player[k].aitype!=passivetype||(distsq(&player[k].coords,&viewer)<viewdistance*viewdistance))*/
- player[k].DoStuff();
- if (player[k].immobile && k != 0)
- player[k].coords = player[k].realoldcoords;
-
- //if player's position has changed (?)
- if (distsq(&player[k].coords, &player[k].realoldcoords) > 0 &&
- !player[k].skeleton.free &&
- player[k].animTarget != climbanim &&
- player[k].animTarget != hanganim) {
- XYZ lowpoint, lowpointtarget, lowpoint2, lowpointtarget2, lowpoint3, lowpointtarget3, lowpoint4, lowpointtarget4, lowpoint5, lowpointtarget5, lowpoint6, lowpointtarget6, lowpoint7, lowpointtarget7, colpoint, colpoint2;
- int whichhit;
- bool tempcollide = 0;
-
- if (player[k].collide < -.3)
- player[k].collide = -.3;
- if (player[k].collide > 1)
- player[k].collide = 1;
- player[k].collide -= multiplier * 30;