X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;f=Source%2FGameTick.cpp;h=85514c32be90e4b7bedfa6af0a74dbc85edf77ad;hb=794f89c25569a9bf50f167689ca0faa3dcffc577;hp=e1851c65da2fc128daeb616d95c0142d4268beb5;hpb=b37c82db3e3baee0425f35e2183c8ccff6e9ebe7;p=lugaru.git diff --git a/Source/GameTick.cpp b/Source/GameTick.cpp index e1851c6..85514c3 100644 --- a/Source/GameTick.cpp +++ b/Source/GameTick.cpp @@ -1,5 +1,6 @@ /* Copyright (C) 2003, 2010 - Wolfire Games +Copyright (C) 2010-2016 - Lugaru contributors (see AUTHORS file) This file is part of Lugaru. @@ -84,8 +85,6 @@ extern bool ambientsound; extern bool mousejump; extern float viewdistance; extern bool freeze; -extern bool keyboardfrozen; -extern bool loadingstuff; extern XYZ windvector; extern bool debugmode; static int leveltheme; @@ -124,7 +123,6 @@ extern float damagedealt; extern int maptype; extern int editoractive; extern int editorpathtype; -extern TGAImageRec texture; extern float hostiletime; @@ -383,52 +381,6 @@ void Game::playdialogueboxsound() // ================================================================ -bool Game::AddClothes(const char *fileName, GLubyte *array) -{ - LOGFUNC; - //Load Image - unsigned char fileNamep[256]; - CopyCStringToPascal(fileName, fileNamep); - bool opened; - opened = upload_image(fileNamep, 1); - - float alphanum; - //Is it valid? - if (opened) { - 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; - - 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) - alphanum = 255; - else if ((i + 1) % 4 == 0) - alphanum = texture.data[i]; - if ((i + 1) % 4 || bytesPerPixel == 3) { - if ((i % 4) == 0) - texture.data[i] *= tintr; - if ((i % 4) == 1) - texture.data[i] *= tintg; - if ((i % 4) == 2) - texture.data[i] *= tintb; - array[tempnum] = (float)array[tempnum] * (1 - alphanum / 255) + (float)texture.data[i] * (alphanum / 255); - tempnum++; - } - } - return 1; - } else { - return 0; - } -} - int Game::findClosestPlayer() { int closest = -1; @@ -473,7 +425,7 @@ static void cmd_dispatch(const string cmd) } /********************> Tick() <*****/ -extern bool save_image(const char * fname); +extern bool save_screenshot(const char * fname); void Screenshot (void) { char filename[1024]; @@ -486,7 +438,7 @@ void Screenshot (void) mkdir("Screenshots"); #endif - save_image(filename); + save_screenshot(filename); } void Game::SetUpLighting() @@ -648,22 +600,18 @@ void Setenvironment(int which) if (ambientsound) emit_stream_np(stream_wind); - objects.treetextureptr.load(":Data:Textures:snowtree.png", 0, 1); - objects.bushtextureptr.load(":Data:Textures:bushsnow.png", 0, 1); - objects.rocktextureptr.load(":Data:Textures:bouldersnow.jpg", 1, 0); - objects.boxtextureptr.load(":Data:Textures:snowbox.jpg", 1, 0); + objects.treetextureptr.load(":Data:Textures:snowtree.png", 0); + objects.bushtextureptr.load(":Data:Textures:bushsnow.png", 0); + objects.rocktextureptr.load(":Data:Textures:bouldersnow.jpg", 1); + objects.boxtextureptr.load(":Data:Textures:snowbox.jpg", 1); footstepsound = footstepsn1; footstepsound2 = footstepsn2; footstepsound3 = footstepst1; footstepsound4 = footstepst2; - terraintexture.load(":Data:Textures:snow.jpg", 1, 0); - terraintexture2.load(":Data:Textures:rock.jpg", 1, 0); - - //LoadTexture(":Data:Textures:detailgrain.png",&terraintexture3,1); - - + terraintexture.load(":Data:Textures:snow.jpg", 1); + terraintexture2.load(":Data:Textures:rock.jpg", 1); temptexdetail = texdetail; @@ -683,10 +631,10 @@ void Setenvironment(int which) } else if (environment == desertenvironment) { windvector = 0; windvector.z = 2; - objects.treetextureptr.load(":Data:Textures:deserttree.png", 0, 1); - objects.bushtextureptr.load(":Data:Textures:bushdesert.png", 0, 1); - objects.rocktextureptr.load(":Data:Textures:boulderdesert.jpg", 1, 0); - objects.boxtextureptr.load(":Data:Textures:desertbox.jpg", 1, 0); + objects.treetextureptr.load(":Data:Textures:deserttree.png", 0); + objects.bushtextureptr.load(":Data:Textures:bushdesert.png", 0); + objects.rocktextureptr.load(":Data:Textures:boulderdesert.jpg", 1); + objects.boxtextureptr.load(":Data:Textures:desertbox.jpg", 1); if (ambientsound) @@ -697,11 +645,8 @@ void Setenvironment(int which) footstepsound3 = footstepsn1; footstepsound4 = footstepsn2; - terraintexture.load(":Data:Textures:sand.jpg", 1, 0); - terraintexture2.load(":Data:Textures:sandslope.jpg", 1, 0); - - //LoadTexture(":Data:Textures:detailgrain.png",&terraintexture3,1); - + terraintexture.load(":Data:Textures:sand.jpg", 1); + terraintexture2.load(":Data:Textures:sandslope.jpg", 1); temptexdetail = texdetail; @@ -721,10 +666,10 @@ void Setenvironment(int which) } else if (environment == grassyenvironment) { windvector = 0; windvector.z = 2; - objects.treetextureptr.load(":Data:Textures:tree.png", 0, 1); - objects.bushtextureptr.load(":Data:Textures:bush.png", 0, 1); - objects.rocktextureptr.load(":Data:Textures:boulder.jpg", 1, 0); - objects.boxtextureptr.load(":Data:Textures:grassbox.jpg", 1, 0); + objects.treetextureptr.load(":Data:Textures:tree.png", 0); + objects.bushtextureptr.load(":Data:Textures:bush.png", 0); + objects.rocktextureptr.load(":Data:Textures:boulder.jpg", 1); + objects.boxtextureptr.load(":Data:Textures:grassbox.jpg", 1); if (ambientsound) emit_stream_np(stream_wind, 100.); @@ -734,11 +679,8 @@ void Setenvironment(int which) footstepsound3 = footstepst1; footstepsound4 = footstepst2; - terraintexture.load(":Data:Textures:grassdirt.jpg", 1, 0); - terraintexture2.load(":Data:Textures:mossrock.jpg", 1, 0); - - //LoadTexture(":Data:Textures:detail.png",&terraintexture3,1); - + terraintexture.load(":Data:Textures:grassdirt.jpg", 1); + terraintexture2.load(":Data:Textures:mossrock.jpg", 1); temptexdetail = texdetail; @@ -789,9 +731,9 @@ void LoadCampaign() ifstream test(ConvertFileName((":Data:Textures:" + accountactive->getCurrentCampaign() + ":World.png").c_str())); if (test.good()) { - Mainmenuitems[7].load((":Data:Textures:" + accountactive->getCurrentCampaign() + ":World.png").c_str(), 0, 0); + Mainmenuitems[7].load((":Data:Textures:" + accountactive->getCurrentCampaign() + ":World.png").c_str(), 0); } else { - Mainmenuitems[7].load(":Data:Textures:World.png", 0, 0); + Mainmenuitems[7].load(":Data:Textures:World.png", 0); } if (accountactive->getCampaignChoicesMade() == 0) { @@ -846,8 +788,6 @@ void Game::Loadlevel(const char *name) static const char *pfx = ":Data:Maps:"; char *buf; - float headprop, legprop, armprop, bodyprop; - LOGFUNC; LOG(std::string("Loading level...") + name); @@ -873,7 +813,6 @@ void Game::Loadlevel(const char *name) tutorialstagetime = 0; tutorialmaxtime = 1; } - loadingstuff = 1; pause_sound(whooshsound); pause_sound(stream_firesound); @@ -971,6 +910,7 @@ void Game::Loadlevel(const char *name) } weapons.clear(); + Person::players.resize(1); funpackf(tfile, "Bi", &mapvers); if (mapvers >= 15) @@ -1010,7 +950,6 @@ void Game::Loadlevel(const char *name) funpackf(tfile, "Bf Bf Bf Bf Bf Bi", &Person::players[0]->coords.x, &Person::players[0]->coords.y, &Person::players[0]->coords.z, &Person::players[0]->yaw, &Person::players[0]->targetyaw, &Person::players[0]->num_weapons); if (stealthloading) funpackf(tfile, "Bf Bf Bf Bf Bf Bi", &lamefloat, &lamefloat, &lamefloat, &lamefloat, &lamefloat, &Person::players[0]->num_weapons); - Person::players[0]->originalcoords = Person::players[0]->coords; if (Person::players[0]->num_weapons > 0 && Person::players[0]->num_weapons < 5) for (int j = 0; j < Person::players[0]->num_weapons; j++) { Person::players[0]->weaponids[j] = weapons.size(); @@ -1087,8 +1026,9 @@ void Game::Loadlevel(const char *name) funpackf(tfile, "Bf Bf", &dialoguecamerayaw[k][l], &dialoguecamerapitch[k][l]); } } - } else + } else { numdialogues = 0; + } for (int k = 0; k < Person::players[0]->numclothes; k++) { funpackf(tfile, "Bi", &templength); @@ -1137,11 +1077,9 @@ void Game::Loadlevel(const char *name) float maxdistance = 0; float tempdist; - //~ int whichclosest; for (int i = 0; i < objects.numobjects; i++) { tempdist = distsq(&objects.center, &objects.position[i]); if (tempdist > maxdistance) { - //~ whichclosest=i; maxdistance = tempdist; } } @@ -1153,113 +1091,20 @@ void Game::Loadlevel(const char *name) int numplayers; funpackf(tfile, "Bi", &numplayers); - int howmanyremoved = 0; - bool removeanother = 0; if (numplayers > maxplayers) { cout << "Warning: this level contains more players than allowed" << endl; } - if (numplayers > 1) { - for (int i = 1; i < numplayers; i++) { - Person::players.push_back(shared_ptr(new Person())); - if (visibleloading) - LoadingScreen(); - removeanother = 0; - - funpackf(tfile, "Bi Bi Bf Bf Bf Bi", &Person::players[i - howmanyremoved]->whichskin, &Person::players[i - howmanyremoved]->creature, &Person::players[i - howmanyremoved]->coords.x, &Person::players[i - howmanyremoved]->coords.y, &Person::players[i - howmanyremoved]->coords.z, &Person::players[i - howmanyremoved]->num_weapons); - if (mapvers >= 5) - funpackf(tfile, "Bi", &Person::players[i - howmanyremoved]->howactive); - else - Person::players[i - howmanyremoved]->howactive = typeactive; - if (mapvers >= 3) - funpackf(tfile, "Bf", &Person::players[i - howmanyremoved]->scale); - else - Person::players[i - howmanyremoved]->scale = -1; - if (mapvers >= 11) - funpackf(tfile, "Bb", &Person::players[i - howmanyremoved]->immobile); - else - Person::players[i - howmanyremoved]->immobile = 0; - if (mapvers >= 12) - funpackf(tfile, "Bf", &Person::players[i - howmanyremoved]->yaw); - else - Person::players[i - howmanyremoved]->yaw = 0; - Person::players[i - howmanyremoved]->targetyaw = Person::players[i - howmanyremoved]->yaw; - if (Person::players[i - howmanyremoved]->num_weapons < 0 || Person::players[i - howmanyremoved]->num_weapons > 5) { - removeanother = 1; - howmanyremoved++; - } - if (!removeanother) { - if (Person::players[i - howmanyremoved]->num_weapons > 0 && Person::players[i - howmanyremoved]->num_weapons < 5) { - for (int j = 0; j < Person::players[i - howmanyremoved]->num_weapons; j++) { - Person::players[i - howmanyremoved]->weaponids[j] = weapons.size(); - int type; - funpackf(tfile, "Bi", &type); - weapons.push_back(Weapon(type, i)); - } - } - funpackf(tfile, "Bi", &Person::players[i - howmanyremoved]->numwaypoints); - //Person::players[i-howmanyremoved]->numwaypoints=10; - for (int j = 0; j < Person::players[i - howmanyremoved]->numwaypoints; j++) { - funpackf(tfile, "Bf", &Person::players[i - howmanyremoved]->waypoints[j].x); - funpackf(tfile, "Bf", &Person::players[i - howmanyremoved]->waypoints[j].y); - funpackf(tfile, "Bf", &Person::players[i - howmanyremoved]->waypoints[j].z); - if (mapvers >= 5) - funpackf(tfile, "Bi", &Person::players[i - howmanyremoved]->waypointtype[j]); - else - Person::players[i - howmanyremoved]->waypointtype[j] = wpkeepwalking; - } - - funpackf(tfile, "Bi", &Person::players[i - howmanyremoved]->waypoint); - if (Person::players[i - howmanyremoved]->waypoint > Person::players[i - howmanyremoved]->numwaypoints - 1) - Person::players[i - howmanyremoved]->waypoint = 0; - - funpackf(tfile, "Bf Bf Bf", &Person::players[i - howmanyremoved]->armorhead, &Person::players[i - howmanyremoved]->armorhigh, &Person::players[i - howmanyremoved]->armorlow); - funpackf(tfile, "Bf Bf Bf", &Person::players[i - howmanyremoved]->protectionhead, &Person::players[i - howmanyremoved]->protectionhigh, &Person::players[i - howmanyremoved]->protectionlow); - funpackf(tfile, "Bf Bf Bf", &Person::players[i - howmanyremoved]->metalhead, &Person::players[i - howmanyremoved]->metalhigh, &Person::players[i - howmanyremoved]->metallow); - funpackf(tfile, "Bf Bf", &Person::players[i - howmanyremoved]->power, &Person::players[i - howmanyremoved]->speedmult); - - if (mapvers >= 4) - funpackf(tfile, "Bf Bf Bf Bf", &headprop, &bodyprop, &armprop, &legprop); - else { - headprop = 1; - bodyprop = 1; - armprop = 1; - legprop = 1; - } - if (Person::players[i - howmanyremoved]->creature == wolftype) { - Person::players[i - howmanyremoved]->proportionhead = 1.1 * headprop; - Person::players[i - howmanyremoved]->proportionbody = 1.1 * bodyprop; - Person::players[i - howmanyremoved]->proportionarms = 1.1 * armprop; - Person::players[i - howmanyremoved]->proportionlegs = 1.1 * legprop; - } - - if (Person::players[i - howmanyremoved]->creature == rabbittype) { - Person::players[i - howmanyremoved]->proportionhead = 1.2 * headprop; - Person::players[i - howmanyremoved]->proportionbody = 1.05 * bodyprop; - Person::players[i - howmanyremoved]->proportionarms = 1.00 * armprop; - Person::players[i - howmanyremoved]->proportionlegs = 1.1 * legprop; - Person::players[i - howmanyremoved]->proportionlegs.y = 1.05 * legprop; - } - - funpackf(tfile, "Bi", &Person::players[i - howmanyremoved]->numclothes); - if (Person::players[i - howmanyremoved]->numclothes) { - for (int k = 0; k < Person::players[i - howmanyremoved]->numclothes; k++) { - int templength; - funpackf(tfile, "Bi", &templength); - for (int l = 0; l < templength; l++) - funpackf(tfile, "Bb", &Person::players[i - howmanyremoved]->clothes[k][l]); - Person::players[i - howmanyremoved]->clothes[k][templength] = '\0'; - funpackf(tfile, "Bf Bf Bf", &Person::players[i - howmanyremoved]->clothestintr[k], &Person::players[i - howmanyremoved]->clothestintg[k], &Person::players[i - howmanyremoved]->clothestintb[k]); - } - } - } + for (int i = 1; i < numplayers; i++) { + unsigned j = 1; + try { + Person::players.push_back(shared_ptr(new Person(tfile, mapvers, j))); + j++; + } catch (InvalidPersonException e) { } } if (visibleloading) LoadingScreen(); - numplayers -= howmanyremoved; - Person::players.resize(numplayers); - funpackf(tfile, "Bi", &numpathpoints); if (numpathpoints > 30 || numpathpoints < 0) numpathpoints = 0; @@ -1339,7 +1184,7 @@ void Game::Loadlevel(const char *name) (char *)":Data:Models:Body7.solid", (char *)":Data:Models:Bodylow.solid", (char *)":Data:Models:Belt.solid", 1); - Person::players[i]->skeleton.drawmodelclothes.textureptr.load(":Data:Textures:Belt.png", 1, 1); + Person::players[i]->skeleton.drawmodelclothes.textureptr.load(":Data:Textures:Belt.png", 1); } if (Person::players[i]->creature == wolftype) { Person::players[i]->skeleton.Load( @@ -1360,15 +1205,7 @@ void Game::Loadlevel(const char *name) Person::players[i]->skeleton.drawmodel.textureptr.load(creatureskin[Person::players[i]->creature][Person::players[i]->whichskin], 1, &Person::players[i]->skeleton.skinText[0], &Person::players[i]->skeleton.skinsize); - if (Person::players[i]->numclothes) { - for (int j = 0; j < Person::players[i]->numclothes; j++) { - tintr = Person::players[i]->clothestintr[j]; - tintg = Person::players[i]->clothestintg[j]; - tintb = Person::players[i]->clothestintb[j]; - AddClothes((char *)Person::players[i]->clothes[j], &Person::players[i]->skeleton.skinText[0]); - } - Person::players[i]->DoMipmaps(); - } + Person::players[i]->addClothes(); Person::players[i]->animCurrent = bounceidleanim; Person::players[i]->animTarget = bounceidleanim; @@ -1391,7 +1228,6 @@ void Game::Loadlevel(const char *name) Person::players[i]->normalsupdatedelay = 0; Person::players[i]->aitype = passivetype; - Person::players[i]->madskills = 0; if (i == 0) { Person::players[i]->proportionhead = 1.2; @@ -1503,7 +1339,6 @@ void Game::Loadlevel(const char *name) perror("Problem"); } leveltime = 0; - loadingstuff = 0; visibleloading = 0; } @@ -1602,7 +1437,6 @@ void doTutorial() break; case 19: tutorialstage = 20; - //tutorialmaxtime=500; break; case 20: tutorialmaxtime = 500; @@ -2057,7 +1891,7 @@ void doDebugKeys() } if (Input::isKeyPressed(SDL_SCANCODE_C)) { - cameramode = 1 - cameramode; + cameramode = !cameramode; } if (Input::isKeyPressed(SDL_SCANCODE_X) && !Input::isKeyDown(SDL_SCANCODE_LSHIFT)) { @@ -2117,15 +1951,7 @@ void doDebugKeys() &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(); - } + Person::players[closest]->addClothes(); } if (Input::isKeyPressed(SDL_SCANCODE_O) && Input::isKeyDown(SDL_SCANCODE_LSHIFT)) { @@ -2149,7 +1975,7 @@ void doDebugKeys() 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]->skeleton.drawmodel.textureptr.load(":Data:Textures:Wolf.jpg", 1, &Person::players[closest]->skeleton.skinText[0], &Person::players[closest]->skeleton.skinsize); Person::players[closest]->whichskin = 0; Person::players[closest]->creature = wolftype; @@ -2388,7 +2214,7 @@ void doDebugKeys() } if (Input::isKeyPressed(SDL_SCANCODE_M) && Input::isKeyDown(SDL_SCANCODE_LSHIFT)) { - editorenabled = 1 - editorenabled; + editorenabled = !editorenabled; if (editorenabled) { Person::players[0]->damagetolerance = 100000; } else { @@ -2470,7 +2296,7 @@ void doDebugKeys() Person::players.back()->whichskin = 2; } - Person::players.back()->skeleton.drawmodelclothes.textureptr.load(":Data:Textures:Belt.png", 1, 1); + Person::players.back()->skeleton.drawmodelclothes.textureptr.load(":Data:Textures:Belt.png", 1); Person::players.back()->power = 1; Person::players.back()->speedmult = 1; Person::players.back()->animCurrent = bounceidleanim; @@ -2551,20 +2377,13 @@ void doDebugKeys() Person::players.back()->immobile = Person::players[0]->immobile; Person::players.back()->numclothes = Person::players[0]->numclothes; - if (Person::players.back()->numclothes) - for (int i = 0; i < Person::players.back()->numclothes; i++) { - strcpy(Person::players.back()->clothes[i], Person::players[0]->clothes[i]); - Person::players.back()->clothestintr[i] = Person::players[0]->clothestintr[i]; - Person::players.back()->clothestintg[i] = Person::players[0]->clothestintg[i]; - Person::players.back()->clothestintb[i] = Person::players[0]->clothestintb[i]; - tintr = Person::players.back()->clothestintr[i]; - tintg = Person::players.back()->clothestintg[i]; - tintb = Person::players.back()->clothestintb[i]; - AddClothes((char *)Person::players.back()->clothes[i], &Person::players.back()->skeleton.skinText[0]); - } - if (Person::players.back()->numclothes) { - Person::players.back()->DoMipmaps(); + for (int i = 0; i < Person::players.back()->numclothes; i++) { + strcpy(Person::players.back()->clothes[i], Person::players[0]->clothes[i]); + Person::players.back()->clothestintr[i] = Person::players[0]->clothestintr[i]; + Person::players.back()->clothestintg[i] = Person::players[0]->clothestintg[i]; + Person::players.back()->clothestintb[i] = Person::players[0]->clothestintb[i]; } + Person::players.back()->addClothes(); Person::players.back()->power = Person::players[0]->power; Person::players.back()->speedmult = Person::players[0]->speedmult; @@ -2576,7 +2395,6 @@ void doDebugKeys() Person::players.back()->bleeding = 0; Person::players.back()->numwaypoints = 0; Person::players.back()->waypoint = 0; - Person::players.back()->jumppath = 0; Person::players.back()->weaponstuck = -1; Person::players.back()->weaponactive = -1; Person::players.back()->num_weapons = 0; @@ -3022,12 +2840,8 @@ void doAerialAcrobatics() Person::players[k]->animTarget = Person::players[k]->getLanding(); emit_sound_at(landsound, Person::players[k]->coords, 128.); if (k == 0) { - envsound[numenvsounds] = Person::players[k]->coords; - envsoundvol[numenvsounds] = 16; - envsoundlife[numenvsounds] = .4; - numenvsounds++; + addEnvSound(Person::players[k]->coords); } - } } } @@ -3199,7 +3013,6 @@ void doAerialAcrobatics() void doAttacks() { - static XYZ relative; static int randattack; static bool playerrealattackkeydown = 0; @@ -3468,8 +3281,7 @@ void doAttacks() !Person::players[i]->skeleton.free && Person::players[i]->animTarget != getupfrombackanim && Person::players[i]->animTarget != getupfromfrontanim && - (Person::players[i]->stunned > 0 && Person::players[k]->madskills || - Person::players[i]->surprised > 0 || + (Person::players[i]->surprised > 0 || Person::players[i]->aitype == passivetype || attackweapon && Person::players[i]->stunned > 0) && normaldotproduct(Person::players[i]->facing, Person::players[i]->coords - Person::players[k]->coords) > 0) { @@ -5495,13 +5307,6 @@ void MenuTick() } } - if (Input::isKeyDown(SDL_SCANCODE_Q) && Input::isKeyDown(SDL_SCANCODE_LGUI)) { - tryquit = 1; - if (mainmenu == 3) { - SaveSettings(); - } - } - OPENAL_SetFrequency(channels[stream_menutheme], 22050); if (entername) { @@ -5527,7 +5332,7 @@ void MenuTick() displayblinkdelay -= multiplier; if (displayblinkdelay <= 0) { displayblinkdelay = .3; - displayblink = 1 - displayblink; + displayblink = !displayblink; } } @@ -5551,7 +5356,6 @@ void Game::Tick() displaytime[i] += multiplier; } - keyboardfrozen = false; Input::Tick(); if (Input::isKeyPressed(SDL_SCANCODE_F6)) { @@ -5686,7 +5490,7 @@ void Game::Tick() //keys if (Input::isKeyPressed(SDL_SCANCODE_V) && debugmode) { - freeze = 1 - freeze; + freeze = !freeze; if (freeze) { OPENAL_SetFrequency(OPENAL_ALL, 0.001); } @@ -5720,16 +5524,7 @@ void Game::Tick() consoleblinkdelay -= multiplier; if (consoleblinkdelay <= 0) { consoleblinkdelay = .3; - consoleblink = 1 - consoleblink; - } - } - - - - if (Input::isKeyDown(SDL_SCANCODE_Q) && Input::isKeyDown(SDL_SCANCODE_LGUI)) { - tryquit = 1; - if (mainmenu == 3) { - SaveSettings(); + consoleblink = !consoleblink; } } @@ -6372,12 +6167,7 @@ void Game::Tick() if (weapons[j].getType() != staff) emit_sound_at(knifedrawsound, Person::players[i]->coords, 128.); - Person::players[i]->weaponactive = 0; - weapons[j].owner = Person::players[i]->id; - if (Person::players[i]->num_weapons > 0) - Person::players[i]->weaponids[Person::players[i]->num_weapons] = Person::players[i]->weaponids[0]; - Person::players[i]->num_weapons++; - Person::players[i]->weaponids[0] = j; + Person::players[i]->takeWeapon(j); } } } else if ((Person::players[i]->isIdle() || @@ -6406,12 +6196,7 @@ void Game::Tick() if (weapons[k].getType() != staff) emit_sound_at(knifedrawsound, Person::players[i]->coords, 128.); - Person::players[i]->weaponactive = 0; - weapons[k].owner = Person::players[i]->id; - if (Person::players[i]->num_weapons > 0) - Person::players[i]->weaponids[Person::players[i]->num_weapons] = Person::players[i]->weaponids[0]; - Person::players[i]->num_weapons++; - Person::players[i]->weaponids[0] = k; + Person::players[i]->takeWeapon(k); } } } @@ -6463,7 +6248,6 @@ void Game::Tick() if (fleshstuck) emit_sound_at(fleshstabremovesound, Person::players[i]->coords, 128.); - Person::players[i]->weaponactive = 0; if (weapons[k].owner != -1) { if (Person::players[i]->victim->num_weapons == 1) Person::players[i]->victim->num_weapons = 0; @@ -6511,12 +6295,7 @@ void Game::Tick() Person::players[i]->victim->jointVel(rightshoulder) += relative * 6; Person::players[i]->victim->jointVel(leftshoulder) += relative * 6; } - weapons[k].owner = i; - if (Person::players[i]->num_weapons > 0) { - Person::players[i]->weaponids[Person::players[i]->num_weapons] = Person::players[i]->weaponids[0]; - } - Person::players[i]->num_weapons++; - Person::players[i]->weaponids[0] = k; + Person::players[i]->takeWeapon(k); } } } @@ -6552,18 +6331,12 @@ void Game::Tick() Person::players[i]->throwtogglekeydown = 1; Person::players[i]->victim = Person::players[j]; XYZ aim; - weapons[Person::players[i]->weaponids[0]].owner = -1; aim = Person::players[i]->victim->coords + DoRotation(Person::players[i]->victim->jointPos(abdomen), 0, Person::players[i]->victim->yaw, 0) * Person::players[i]->victim->scale + Person::players[i]->victim->velocity * findDistance(&Person::players[i]->victim->coords, &Person::players[i]->coords) / 50 - (Person::players[i]->coords + DoRotation(Person::players[i]->jointPos(righthand), 0, Person::players[i]->yaw, 0) * Person::players[i]->scale); Normalise(&aim); aim = DoRotation(aim, (float)abs(Random() % 30) - 15, (float)abs(Random() % 30) - 15, 0); - weapons[Person::players[i]->weaponids[0]].velocity = aim * 50; - weapons[Person::players[i]->weaponids[0]].tipvelocity = aim * 50; - weapons[Person::players[i]->weaponids[0]].missed = 0; - weapons[Person::players[i]->weaponids[0]].freetime = 0; - weapons[Person::players[i]->weaponids[0]].firstfree = 1; - weapons[Person::players[i]->weaponids[0]].physics = 0; + weapons[Person::players[i]->weaponids[0]].thrown(aim * 50, false); Person::players[i]->num_weapons--; if (Person::players[i]->num_weapons) { Person::players[i]->weaponids[0] = Person::players[i]->weaponids[Person::players[i]->num_weapons]; @@ -6578,15 +6351,10 @@ void Game::Tick() if (Person::players[i]->weaponactive != -1 && Person::players[i]->aitype == playercontrolled) { if (Person::players[i]->isCrouch() || Person::players[i]->animTarget == sneakanim) { Person::players[i]->throwtogglekeydown = 1; - weapons[Person::players[i]->weaponids[0]].owner = -1; - weapons[Person::players[i]->weaponids[0]].velocity = Person::players[i]->velocity * .2; - if (weapons[Person::players[i]->weaponids[0]].velocity.x == 0) - weapons[Person::players[i]->weaponids[0]].velocity.x = .1; - weapons[Person::players[i]->weaponids[0]].tipvelocity = weapons[Person::players[i]->weaponids[0]].velocity; - weapons[Person::players[i]->weaponids[0]].missed = 1; - weapons[Person::players[i]->weaponids[0]].freetime = 0; - weapons[Person::players[i]->weaponids[0]].firstfree = 1; - weapons[Person::players[i]->weaponids[0]].physics = 1; + XYZ tempVelocity = Person::players[i]->velocity * .2; + if (tempVelocity.x == 0) + tempVelocity.x = .1; + weapons[Person::players[i]->weaponids[0]].drop(tempVelocity, tempVelocity, false); Person::players[i]->num_weapons--; if (Person::players[i]->num_weapons) { Person::players[i]->weaponids[0] = Person::players[i]->weaponids[Person::players[i]->num_weapons];