X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;f=Source%2FGameTick.cpp;h=685b4730ab952c17cf72bd8016d159777e558c1d;hb=cd043e3f9e26c2b3406b40a354c2840941e9db7f;hp=cf93da3d33f3dec49f422e46fe38dd3313011fc2;hpb=3f82bb3e804d1a6950bf71be8fe2ac008d1cb954;p=lugaru.git diff --git a/Source/GameTick.cpp b/Source/GameTick.cpp index cf93da3..685b473 100644 --- a/Source/GameTick.cpp +++ b/Source/GameTick.cpp @@ -3,20 +3,18 @@ Copyright (C) 2003, 2010 - Wolfire Games This file is part of Lugaru. -Lugaru is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. +Lugaru is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. -This program is distributed in the hope that it will be useful, +Lugaru is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -See the GNU General Public License for more details. +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +along with Lugaru. If not, see . */ // Enable full math definitions @@ -582,7 +580,7 @@ static void ch_save(const char *args) if (Person::players.size() > maxplayers) { cout << "Warning: this level contains more players than allowed" << endl; } - for (int j = 1; j < Person::players.size(); j++) { + for (unsigned j = 1; j < Person::players.size(); j++) { fpackf(tfile, "Bi Bi Bf Bf Bf Bi Bi Bf Bb Bf", Person::players[j]->whichskin, Person::players[j]->creature, Person::players[j]->coords.x, Person::players[j]->coords.y, Person::players[j]->coords.z, Person::players[j]->num_weapons, Person::players[j]->howactive, Person::players[j]->scale, Person::players[j]->immobile, Person::players[j]->yaw); @@ -698,7 +696,7 @@ static int findClosestPlayer() int closest = -1; float closestdist = std::numeric_limits::max(); - for (int i = 1; i < Person::players.size(); i++) { + for (unsigned i = 1; i < Person::players.size(); i++) { float distance = distsq(&Person::players[i]->coords, &Person::players[0]->coords); if (distance < closestdist) { closestdist = distance; @@ -969,7 +967,7 @@ static void ch_black(const char *args) static void ch_sizemin(const char *args) { - for (int i = 1; i < Person::players.size(); i++) + for (unsigned i = 1; i < Person::players.size(); i++) if (Person::players[i]->scale < 0.8 * 0.2) Person::players[i]->scale = 0.8 * 0.2; } @@ -1076,7 +1074,7 @@ static void ch_dialogue(const char *args) } for (int i = 0; i < numdialogueboxes[numdialogues]; i++) { - for (int j = 0; j < Person::players.size(); j++) { + for (unsigned j = 0; j < Person::players.size(); j++) { participantfacing[numdialogues][i][j] = Person::players[j]->facing; } } @@ -1159,7 +1157,7 @@ static void ch_immobile(const char *args) static void ch_allimmobile(const char *args) { - for (int i = 1; i < Person::players.size(); i++) + for (unsigned i = 1; i < Person::players.size(); i++) Person::players[i]->immobile = 1; } @@ -2148,7 +2146,7 @@ void Loadlevel(const char *name) fclose(tfile); - for (int i = 0; i < Person::players.size(); i++) { + for (unsigned i = 0; i < Person::players.size(); i++) { if (visibleloading) LoadingScreen(); Person::players[i]->burnt = 0; @@ -3056,7 +3054,7 @@ void doDebugKeys() int closest = -1; float closestdist = std::numeric_limits::max(); - for (int i = 1; i < Person::players.size(); i++) { + for (unsigned i = 1; i < Person::players.size(); i++) { float distance = distsq(&Person::players[i]->coords, &Person::players[0]->coords); if (!Person::players[i]->headless) if (distance < closestdist) { @@ -3181,8 +3179,8 @@ void doDebugKeys() } XYZ temppos; - for (int j = 0; j < Person::players.size(); j++) { - if (j != closest) { + for (unsigned j = 0; j < Person::players.size(); j++) { + if (int(j) != closest) { if (distsq(&Person::players[j]->coords, &Person::players[closest]->coords) < 25) { Person::players[j]->DoDamage((25 - distsq(&Person::players[j]->coords, &Person::players[closest]->coords)) * 60); if (Person::players[j]->skeleton.free == 2) @@ -3578,8 +3576,8 @@ void doDebugKeys() void doJumpReversals() { - for (int k = 0; k < Person::players.size(); k++) - for (int i = k; i < Person::players.size(); i++) { + for (unsigned k = 0; k < Person::players.size(); k++) + for (unsigned i = k; i < Person::players.size(); i++) { if (i == k) continue; if ( Person::players[k]->skeleton.free == 0 && @@ -3588,8 +3586,8 @@ void doJumpReversals() Person::players[k]->animTarget == jumpupanim) && (Person::players[i]->aitype == playercontrolled || Person::players[k]->aitype == playercontrolled) && - (Person::players[i]->aitype == attacktypecutoff && Person::players[i]->stunned <= 0 || - Person::players[k]->aitype == attacktypecutoff && Person::players[k]->stunned <= 0)) { + ((Person::players[i]->aitype == attacktypecutoff && Person::players[i]->stunned <= 0) || + (Person::players[k]->aitype == attacktypecutoff && Person::players[k]->stunned <= 0))) { if ( distsq(&Person::players[i]->coords, &Person::players[k]->coords) < 10 * sq((Person::players[i]->scale + Person::players[k]->scale) * 2.5) && distsqflat(&Person::players[i]->coords, &Person::players[k]->coords) < 2 * sq((Person::players[i]->scale + Person::players[k]->scale) * 2.5)) { //TODO: refactor two huge similar ifs @@ -3598,7 +3596,7 @@ void doJumpReversals() Person::players[k]->animTarget != getupfromfrontanim && animation[Person::players[k]->animTarget].height == middleheight && normaldotproduct(Person::players[i]->velocity, Person::players[k]->coords - Person::players[i]->coords) < 0 && - (Person::players[k]->aitype == playercontrolled && Person::players[k]->attackkeydown || + ((Person::players[k]->aitype == playercontrolled && Person::players[k]->attackkeydown) || Person::players[k]->aitype != playercontrolled)) { Person::players[i]->victim = Person::players[k]; Person::players[i]->velocity = 0; @@ -3679,7 +3677,7 @@ void doJumpReversals() void doAerialAcrobatics() { static XYZ facing, flatfacing; - for (int k = 0; k < Person::players.size(); k++) { + for (unsigned k = 0; k < Person::players.size(); k++) { Person::players[k]->turnspeed = 500; if ((Person::players[k]->isRun() && @@ -4080,7 +4078,7 @@ void doAttacks() if (Input::isKeyDown(attackkey) && !oldattackkey && !Person::players[0]->backkeydown) { - for (int k = 0; k < Person::players.size(); k++) { + for (unsigned k = 0; k < Person::players.size(); k++) { if ((Person::players[k]->animTarget == swordslashanim || Person::players[k]->animTarget == staffhitanim || Person::players[k]->animTarget == staffspinhitanim) && @@ -4093,7 +4091,7 @@ void doAttacks() if (!hostile || indialogue != -1) Person::players[0]->attackkeydown = 0; - for (int k = 0; k < Person::players.size(); k++) { + for (unsigned k = 0; k < Person::players.size(); k++) { if (indialogue != -1) Person::players[k]->attackkeydown = 0; if (Person::players[k]->animTarget != rabbitrunninganim && Person::players[k]->animTarget != wolfrunninganim) { @@ -4111,7 +4109,7 @@ void doAttacks() if (Person::players[k]->jumppower <= 1) { Person::players[k]->jumppower -= 2; } else { - for (int i = 0; i < Person::players.size(); i++) { + for (unsigned i = 0; i < Person::players.size(); i++) { if (i == k) continue; if (Person::players[i]->animTarget == swordslashanim || @@ -4150,7 +4148,7 @@ void doAttacks() //normal attacks (?) Person::players[k]->hasvictim = 0; if (Person::players.size() > 1) - for (int i = 0; i < Person::players.size(); i++) { + for (unsigned i = 0; i < Person::players.size(); i++) { if (i == k || !(k == 0 || i == 0)) continue; if (!Person::players[k]->hasvictim) @@ -4421,7 +4419,7 @@ void doAttacks() } const bool hasstaff = attackweapon == staff; if (k == 0 && Person::players.size() > 1) - for (int i = 0; i < Person::players.size(); i++) { + for (unsigned i = 0; i < Person::players.size(); i++) { if (i == k) continue; if ((playerrealattackkeydown || Person::players[i]->dead || !hasstaff) && @@ -4546,7 +4544,7 @@ void doAttacks() } if (!Person::players[k]->hasvictim) { //find victim - for (int i = 0; i < Person::players.size(); i++) { + for (unsigned i = 0; i < Person::players.size(); i++) { if (i == k || !(i == 0 || k == 0)) continue; if (!Person::players[i]->skeleton.free) { @@ -4609,8 +4607,8 @@ void doPlayerCollisions() static XYZ rotatetarget; static float collisionradius; if (Person::players.size() > 1) - for (int k = 0; k < Person::players.size(); k++) - for (int i = k + 1; i < Person::players.size(); i++) { + for (unsigned k = 0; k < Person::players.size(); k++) + for (unsigned i = k + 1; i < Person::players.size(); i++) { //neither player is part of a reversal if ((animation[Person::players[i]->animTarget].attack != reversed && animation[Person::players[i]->animTarget].attack != reversal && @@ -4808,7 +4806,7 @@ void doPlayerCollisions() } } -void doAI(int i) +void doAI(unsigned i) { static bool connected; if (Person::players[i]->aitype != playercontrolled && indialogue == -1) { @@ -4968,7 +4966,7 @@ void doAI(int i) if (Person::players[i]->losupdatedelay < 0 && !editorenabled && Person::players[i]->occluded < 2) { Person::players[i]->losupdatedelay = .2; - for (int j = 0; j < Person::players.size(); j++) + 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[Person::players[j]->animTarget].height != lowheight || j != 0) if (distsq(&Person::players[i]->coords, &Person::players[j]->coords) < 400) @@ -5089,7 +5087,7 @@ void doAI(int i) //wolf smell if (Person::players[i]->creature == wolftype) { XYZ windsmell; - for (int j = 0; j < Person::players.size(); j++) { + for (unsigned j = 0; j < Person::players.size(); j++) { if (j == 0 || (Person::players[j]->dead && Person::players[j]->bloodloss > 0)) { float smelldistance = 50; if (j == 0 && Person::players[j]->num_weapons > 0) { @@ -5112,7 +5110,7 @@ void doAI(int i) if (Person::players[i]->howactive < typesleeping && Person::players[i]->losupdatedelay < 0 && !editorenabled && Person::players[i]->occluded < 2) { Person::players[i]->losupdatedelay = .2; - for (int j = 0; j < Person::players.size(); j++) { + 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[Person::players[j]->animTarget].height != lowheight || j != 0) if (distsq(&Person::players[i]->coords, &Person::players[j]->coords) < 400) @@ -5302,7 +5300,7 @@ void doAI(int i) if (!Person::players[i]->ally) { int closest = -1; float closestdist = -1; - for (int k = 0; k < Person::players.size(); k++) { + for (unsigned k = 0; k < Person::players.size(); k++) { if (k != i && k != 0 && !Person::players[k]->dead && Person::players[k]->howactive < typedead1 && !Person::players[k]->skeleton.free && @@ -5402,7 +5400,7 @@ void doAI(int i) if (Person::players[i]->ally < 0) { int closest = -1; float closestdist = -1; - for (int k = 0; k < weapons.size(); k++) + for (unsigned k = 0; k < weapons.size(); k++) if (weapons[k].owner == -1) { float distance = distsq(&Person::players[i]->coords, &weapons[k].position); if (closestdist == -1 || distance < closestdist) { @@ -5514,7 +5512,7 @@ void doAI(int i) } //go for weapon on the ground if (Person::players[i]->wentforweapon < 3) - for (int k = 0; k < weapons.size(); k++) + for (unsigned k = 0; k < weapons.size(); k++) if (Person::players[i]->creature != wolftype) if (Person::players[i]->num_weapons == 0 && weapons[k].owner == -1 && @@ -5651,7 +5649,7 @@ void doAI(int i) Person::players[i]->isCrouch() || Person::players[i]->isRun())) { int target = -2; - for (int j = 0; j < Person::players.size(); j++) + for (unsigned j = 0; j < Person::players.size(); j++) if (j != i && !Person::players[j]->skeleton.free && Person::players[j]->hasvictim && (tutoriallevel == 1 && reversaltrain || @@ -6033,8 +6031,6 @@ void MenuTick() static int oldmainmenu = mainmenu; - char sbuf[256]; - if (Input::MouseClicked() && (selected >= 0)) { // handling of the left mouse clic in menus set>::iterator newscreenresolution; switch (mainmenu) { @@ -6628,8 +6624,9 @@ void Game::Tick() if (talkdelay <= 0 && indialogue == -1 && animation[Person::players[0]->animTarget].height != highheight) for (int i = 0; i < numdialogues; i++) { - int realdialoguetype; + unsigned realdialoguetype; bool special; + /* FIXME - Seems like modulo done with ifs */ if (dialoguetype[i] > 49) { realdialoguetype = dialoguetype[i] - 50; special = 1; @@ -6865,7 +6862,7 @@ void Game::Tick() } } - for (int j = 0; j < Person::players.size(); j++) { + for (unsigned j = 0; j < Person::players.size(); j++) { participantfacing[whichdialogue][indialogue][j] = participantfacing[whichdialogue][indialogue - 1][j]; } } @@ -6953,7 +6950,7 @@ void Game::Tick() } if (dialoguetype[whichdialogue] > 49 && dialoguetype[whichdialogue] < 60) { hostile = 1; - for (int i = 1; i < Person::players.size(); i++) { + for (unsigned i = 1; i < Person::players.size(); i++) { Person::players[i]->aitype = attacktypecutoff; } } @@ -6992,11 +6989,11 @@ void Game::Tick() doJumpReversals(); - for (int k = 0; k < Person::players.size(); k++) + for (unsigned k = 0; k < Person::players.size(); k++) if (k != 0 && Person::players[k]->immobile) Person::players[k]->coords = Person::players[k]->realoldcoords; - for (int k = 0; k < Person::players.size(); k++) { + for (unsigned k = 0; k < Person::players.size(); k++) { if (!isnormal(Person::players[k]->coords.x) || !isnormal(Person::players[k]->coords.y) || !isnormal(Person::players[k]->coords.z)) { if (!isnormal(Person::players[k]->coords.x) || !isnormal(Person::players[k]->coords.y) || !isnormal(Person::players[k]->coords.z)) { Person::players[k]->DoDamage(1000); @@ -7030,7 +7027,7 @@ void Game::Tick() static bool movekey; //? - for (int i = 0; i < Person::players.size(); i++) { + for (unsigned i = 0; i < Person::players.size(); i++) { static float oldtargetyaw; if (!Person::players[i]->skeleton.free) { oldtargetyaw = Person::players[i]->targetyaw; @@ -7118,7 +7115,7 @@ void Game::Tick() } //avoid flaming players - for (int j = 0; j < Person::players.size(); j++) + for (unsigned j = 0; j < Person::players.size(); j++) if (Person::players[j]->onfire) if (distsq(&Person::players[j]->coords, &Person::players[i]->coords) < sq(0.3) * 200) if ( distsq(&Person::players[i]->coords, &Person::players[j]->coords) < @@ -7201,7 +7198,7 @@ void Game::Tick() Person::players[i]->isFlip() || Person::players[i]->isFlip() || Person::players[i]->aitype != playercontrolled)) { - for (int j = 0; j < weapons.size(); j++) { + for (unsigned j = 0; j < weapons.size(); j++) { if ((weapons[j].velocity.x == 0 && weapons[j].velocity.y == 0 && weapons[j].velocity.z == 0 || Person::players[i]->aitype == playercontrolled) && weapons[j].owner == -1 && @@ -7226,7 +7223,7 @@ void Game::Tick() Person::players[i]->aitype == playercontrolled) && weapons[j].owner == -1 || Person::players[i]->victim && - weapons[j].owner == Person::players[i]->victim->id) + weapons[j].owner == int(Person::players[i]->victim->id)) if (distsqflat(&Person::players[i]->coords, &weapons[j].position) < 2 && Person::players[i]->weaponactive == -1) if (distsq(&Person::players[i]->coords, &weapons[j].position) < 1 || Person::players[i]->victim) { if (weapons[j].getType() != staff) @@ -7254,13 +7251,13 @@ void Game::Tick() Person::players[i]->throwtogglekeydown = 1; Person::players[i]->hasvictim = 0; - for (int k = 0; k < weapons.size(); k++) { + for (unsigned k = 0; k < weapons.size(); k++) { if (Person::players[i]->weaponactive == -1) if ((weapons[k].velocity.x == 0 && weapons[k].velocity.y == 0 && weapons[k].velocity.z == 0 || Person::players[i]->aitype == playercontrolled) && weapons[k].owner == -1 || Person::players[i]->victim && - weapons[k].owner == Person::players[i]->victim->id) + weapons[k].owner == int(Person::players[i]->victim->id)) if (distsqflat(&Person::players[i]->coords, &weapons[k].position) < 3 && Person::players[i]->weaponactive == -1) { if (weapons[k].getType() != staff) @@ -7284,7 +7281,7 @@ void Game::Tick() Person::players[i]->isIdle() || Person::players[i]->animTarget == rollanim || Person::players[i]->animTarget == backhandspringanim) { if (Person::players.size() > 1) - for (int j = 0; j < Person::players.size(); j++) { + for (unsigned j = 0; j < Person::players.size(); j++) { if (Person::players[i]->weaponactive == -1) if (j != i) if (Person::players[j]->num_weapons && @@ -7391,7 +7388,7 @@ void Game::Tick() Person::players[i]->animTarget == sneakanim || Person::players[i]->isFlip()) if (Person::players.size() > 1) - for (int j = 0; j < Person::players.size(); j++) { + for (unsigned j = 0; j < Person::players.size(); j++) { if (i != j) if (tutoriallevel != 1 || tutorialstage == 49) if (hostile) @@ -7455,7 +7452,7 @@ void Game::Tick() } Person::players[i]->weaponactive = -1; - for (int j = 0; j < Person::players.size(); j++) { + for (unsigned j = 0; j < Person::players.size(); j++) { Person::players[j]->wentforweapon = 0; } } @@ -7552,14 +7549,14 @@ void Game::Tick() if (i == 0) { Person::players[i]->superruntoggle = 1; if (Person::players.size() > 1) - for (int j = 0; j < Person::players.size(); j++) + for (unsigned j = 0; j < Person::players.size(); j++) if (j != i && !Person::players[j]->skeleton.free && Person::players[j]->aitype == passivetype) if (distsq(&Person::players[j]->coords, &Person::players[i]->coords) < 16) Person::players[i]->superruntoggle = 0; } if (Person::players.size() > 1) - for (int j = 0; j < Person::players.size(); j++) { + for (unsigned j = 0; j < Person::players.size(); j++) { if (j != i && !Person::players[j]->skeleton.free && Person::players[j]->victim && Person::players[i]->lowreversaldelay <= 0) { if (distsq(&Person::players[j]->coords, &Person::players[j]->victim->coords) < 3 && Person::players[j]->victim == Person::players[i] && @@ -7603,7 +7600,7 @@ void Game::Tick() target = -2; if (Person::players[i]->isCrouch()) { if (Person::players.size() > 1) - for (int j = 0; j < Person::players.size(); j++) { + for (unsigned j = 0; j < Person::players.size(); j++) { if (j != i && !Person::players[j]->skeleton.free && Person::players[j]->victim && @@ -7793,7 +7790,7 @@ void Game::Tick() //Dodge sweep? target = -2; if (Person::players.size() > 1) - for (int j = 0; j < Person::players.size(); j++) { + for (unsigned j = 0; j < Person::players.size(); j++) { if (j != i && !Person::players[j]->skeleton.free && Person::players[j]->victim) { if (distsq(&Person::players[j]->coords, &Person::players[j]->victim->coords) < 3 && (Person::players[j]->victim == Person::players[i]) && @@ -7878,7 +7875,7 @@ void Game::Tick() } //Rotation - for (int k = 0; k < Person::players.size(); k++) { + for (unsigned k = 0; k < Person::players.size(); k++) { if (fabs(Person::players[k]->yaw - Person::players[k]->targetyaw) > 180) { if (Person::players[k]->yaw > Person::players[k]->targetyaw) Person::players[k]->yaw -= 360; @@ -7915,7 +7912,7 @@ void Game::Tick() } //do animations - for (int k = 0; k < Person::players.size(); k++) { + for (unsigned k = 0; k < Person::players.size(); k++) { Person::players[k]->DoAnimations(); Person::players[k]->whichpatchx = Person::players[k]->coords.x / (terrain.size / subdivision * terrain.scale); Person::players[k]->whichpatchz = Person::players[k]->coords.z / (terrain.size / subdivision * terrain.scale); @@ -8099,7 +8096,7 @@ void Game::TickOnceAfter() realthreat = 0; musictype = leveltheme; - for (int i = 0; i < Person::players.size(); i++) { + for (unsigned i = 0; i < Person::players.size(); i++) { if ((Person::players[i]->aitype == attacktypecutoff || Person::players[i]->aitype == getweapontype || Person::players[i]->aitype == gethelptype || @@ -8216,7 +8213,7 @@ void Game::TickOnceAfter() winhotspot = true; int numalarmed = 0; - for (int i = 1; i < Person::players.size(); i++) + for (unsigned i = 1; i < Person::players.size(); i++) if (!Person::players[i]->dead && Person::players[i]->aitype == attacktypecutoff && Person::players[i]->surprised <= 0) numalarmed++; if (numalarmed > maxalarmed) @@ -8228,7 +8225,7 @@ void Game::TickOnceAfter() targetlevel = whichlevel; } alldead = true; - for (int i = 1; i < Person::players.size(); i++) { + for (unsigned i = 1; i < Person::players.size(); i++) { if (!Person::players[i]->dead && Person::players[i]->howactive < typedead1) { alldead = false; break;