X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;f=Source%2FGameTick.cpp;h=e1851c65da2fc128daeb616d95c0142d4268beb5;hb=b37c82db3e3baee0425f35e2183c8ccff6e9ebe7;hp=b216545a8f4dcd732d770c75449f2a32458132f0;hpb=84199f8777017744bf9e2a039ae625850dab624e;p=lugaru.git diff --git a/Source/GameTick.cpp b/Source/GameTick.cpp index b216545..e1851c6 100644 --- a/Source/GameTick.cpp +++ b/Source/GameTick.cpp @@ -3,22 +3,23 @@ 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 +#define _USE_MATH_DEFINES + #if PLATFORM_UNIX #include #include @@ -27,8 +28,10 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include #endif + #include #include +#include #include #include "Game.h" #include "openal_wrapper.h" @@ -37,8 +40,10 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "Animation.h" #include "Awards.h" #include "Menu.h" +#include "ConsoleCmds.h" #include +#include using namespace std; using namespace Game; @@ -95,7 +100,6 @@ extern float usermousesensitivity; extern bool ismotionblur; extern bool showdamagebar; // (des)activate the damage bar extern bool decals; -extern float tintr, tintg, tintb; extern bool skyboxtexture; extern float skyboxr; extern float skyboxg; @@ -141,12 +145,7 @@ extern bool winfreeze; extern bool campaign; - - -void Loadlevel(int which); -void Loadlevel(const char *name); - - +extern void toggleFullscreen(); class CampaignLevel { @@ -200,7 +199,7 @@ public: is >> mapname; is.ignore(256, ':'); is >> description; - for (unsigned pos = description.find('_'); pos != string::npos; pos = description.find('_', pos)) { + for (size_t pos = description.find('_'); pos != string::npos; pos = description.find('_', pos)) { description.replace(pos, 1, 1, ' '); } is.ignore(256, ':'); @@ -224,7 +223,6 @@ public: } }; -int indemo = 0; bool won = false; int entername = 0; vector campaignlevels; @@ -241,9 +239,7 @@ float musicvolume[4] = {}; float oldmusicvolume[4] = {}; int musicselected = 0; - - -static const char *rabbitskin[] = { +const char *rabbitskin[] = { ":Data:Textures:Fur3.jpg", ":Data:Textures:Fur.jpg", ":Data:Textures:Fur2.jpg", @@ -256,43 +252,17 @@ static const char *rabbitskin[] = { ":Data:Textures:WB2.jpg" }; -static const char *wolfskin[] = { +const char *wolfskin[] = { ":Data:Textures:Wolf.jpg", ":Data:Textures:Darkwolf.jpg", ":Data:Textures:Snowwolf.jpg" }; +const char **creatureskin[] = {rabbitskin, wolfskin}; + #define STATIC_ASSERT(x) extern int s_a_dummy[2 * (!!(x)) - 1]; STATIC_ASSERT (rabbittype == 0 && wolftype == 1) -static const char **creatureskin[] = {rabbitskin, wolfskin}; - -/* Return true if PFX is a prefix of STR (case-insensitive). */ -static bool stripfx(const char *str, const char *pfx) -{ - return !strncasecmp(str, pfx, strlen(pfx)); -} - -static const char *cmd_names[] = { -#define DECLARE_COMMAND(cmd) #cmd, -#include "ConsoleCmds.h" -#undef DECLARE_COMMAND -}; - -typedef void (*console_handler)(const char *args); - -#define DECLARE_COMMAND(cmd) static void ch_##cmd(const char *args); -#include "ConsoleCmds.h" -#undef DECLARE_COMMAND - -static console_handler cmd_handlers[] = { -#define DECLARE_COMMAND(cmd) ch_##cmd, -#include "ConsoleCmds.h" -#undef DECLARE_COMMAND -}; - - - // utility functions // TODO: this is slightly incorrect @@ -331,7 +301,7 @@ inline float stepTowardf(float from, float to, float by) return from + by; } -void playdialogueboxsound() +void Game::playdialogueboxsound() { XYZ temppos; temppos = Person::players[participantfocus[whichdialogue][indialogue]]->coords; @@ -413,14 +383,14 @@ void playdialogueboxsound() // ================================================================ -bool AddClothes(const char *fileName, GLubyte *array) +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); + opened = upload_image(fileNamep, 1); float alphanum; //Is it valid? @@ -442,7 +412,6 @@ bool AddClothes(const char *fileName, GLubyte *array) alphanum = 255; else if ((i + 1) % 4 == 0) alphanum = texture.data[i]; - //alphanum/=2; if ((i + 1) % 4 || bytesPerPixel == 3) { if ((i % 4) == 0) texture.data[i] *= tintr; @@ -454,244 +423,18 @@ bool AddClothes(const char *fileName, GLubyte *array) tempnum++; } } - } else + return 1; + } else { return 0; - return 1; -} - - - -static void ch_quit(const char *args) -{ - tryquit = 1; -} - -static void ch_map(const char *args) -{ - Loadlevel(args); - whichlevel = -2; - campaign = 0; -} - -static void ch_save(const char *args) -{ - char buf[64]; - snprintf(buf, 63, ":Data:Maps:%s", args); - - int mapvers = 12; - - FILE *tfile; - tfile = fopen( ConvertFileName(buf), "wb" ); - fpackf(tfile, "Bi", mapvers); - fpackf(tfile, "Bi", maptype); - fpackf(tfile, "Bi", hostile); - fpackf(tfile, "Bf Bf", viewdistance, fadestart); - fpackf(tfile, "Bb Bf Bf Bf", skyboxtexture, skyboxr, skyboxg, skyboxb); - fpackf(tfile, "Bf Bf Bf", skyboxlightr, skyboxlightg, skyboxlightb); - fpackf(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 (Person::players[0]->num_weapons > 0 && Person::players[0]->num_weapons < 5) - for (int j = 0; j < Person::players[0]->num_weapons; j++) - fpackf(tfile, "Bi", weapons[Person::players[0]->weaponids[j]].getType()); - - fpackf(tfile, "Bf Bf Bf", Person::players[0]->armorhead, Person::players[0]->armorhigh, Person::players[0]->armorlow); - fpackf(tfile, "Bf Bf Bf", Person::players[0]->protectionhead, Person::players[0]->protectionhigh, Person::players[0]->protectionlow); - fpackf(tfile, "Bf Bf Bf", Person::players[0]->metalhead, Person::players[0]->metalhigh, Person::players[0]->metallow); - fpackf(tfile, "Bf Bf", Person::players[0]->power, Person::players[0]->speedmult); - - fpackf(tfile, "Bi", Person::players[0]->numclothes); - - fpackf(tfile, "Bi Bi", Person::players[0]->whichskin, Person::players[0]->creature); - - fpackf(tfile, "Bi", numdialogues); - - for (int k = 0; k < numdialogues; k++) { - fpackf(tfile, "Bi", numdialogueboxes[k]); - fpackf(tfile, "Bi", dialoguetype[k]); - for (int l = 0; l < 10; l++) { - fpackf(tfile, "Bf Bf Bf", participantlocation[k][l].x, participantlocation[k][l].y, participantlocation[k][l].z); - fpackf(tfile, "Bf", participantyaw[k][l]); - } - for (int l = 0; l < numdialogueboxes[k]; l++) { - fpackf(tfile, "Bi", dialogueboxlocation[k][l]); - fpackf(tfile, "Bf", dialogueboxcolor[k][l][0]); - fpackf(tfile, "Bf", dialogueboxcolor[k][l][1]); - fpackf(tfile, "Bf", dialogueboxcolor[k][l][2]); - fpackf(tfile, "Bi", dialogueboxsound[k][l]); - - int templength = strlen(dialoguetext[k][l]); - fpackf(tfile, "Bi", (templength)); - for (int m = 0; m < templength; m++) { - fpackf(tfile, "Bb", dialoguetext[k][l][m]); - if (dialoguetext[k][l][m] == '\0') - break; - } - - templength = strlen(dialoguename[k][l]); - fpackf(tfile, "Bi", templength); - for (int m = 0; m < templength; m++) { - fpackf(tfile, "Bb", dialoguename[k][l][m]); - if (dialoguename[k][l][m] == '\0') - break; - } - - fpackf(tfile, "Bf Bf Bf", dialoguecamera[k][l].x, dialoguecamera[k][l].y, dialoguecamera[k][l].z); - fpackf(tfile, "Bi", participantfocus[k][l]); - fpackf(tfile, "Bi", participantaction[k][l]); - - for (int m = 0; m < 10; m++) - fpackf(tfile, "Bf Bf Bf", participantfacing[k][l][m].x, participantfacing[k][l][m].y, participantfacing[k][l][m].z); - - fpackf(tfile, "Bf Bf", dialoguecamerayaw[k][l], dialoguecamerapitch[k][l]); - } - } - - for (int k = 0; k < Person::players[0]->numclothes; k++) { - int templength = strlen(Person::players[0]->clothes[k]); - fpackf(tfile, "Bi", templength); - for (int l = 0; l < templength; l++) - fpackf(tfile, "Bb", Person::players[0]->clothes[k][l]); - fpackf(tfile, "Bf Bf Bf", Person::players[0]->clothestintr[k], Person::players[0]->clothestintg[k], Person::players[0]->clothestintb[k]); - } - - fpackf(tfile, "Bi", environment); - - fpackf(tfile, "Bi", objects.numobjects); - - for (int k = 0; k < objects.numobjects; k++) - fpackf(tfile, "Bi Bf Bf Bf Bf Bf Bf", objects.type[k], objects.yaw[k], objects.pitch[k], - objects.position[k].x, objects.position[k].y, objects.position[k].z, objects.scale[k]); - - fpackf(tfile, "Bi", numhotspots); - for (int i = 0; i < numhotspots; i++) { - fpackf(tfile, "Bi Bf Bf Bf Bf", hotspottype[i], hotspotsize[i], hotspot[i].x, hotspot[i].y, hotspot[i].z); - int templength = strlen(hotspottext[i]); - fpackf(tfile, "Bi", templength); - for (int l = 0; l < templength; l++) - fpackf(tfile, "Bb", hotspottext[i][l]); - } - - fpackf(tfile, "Bi", Person::players.size()); - if (Person::players.size() > maxplayers) { - cout << "Warning: this level contains more players than allowed" << endl; - } - for (int 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); - if (Person::players[j]->num_weapons < 5) - for (int k = 0; k < Person::players[j]->num_weapons; k++) - fpackf(tfile, "Bi", weapons[Person::players[j]->weaponids[k]].getType()); - if (Person::players[j]->numwaypoints < 30) { - fpackf(tfile, "Bi", Person::players[j]->numwaypoints); - for (int k = 0; k < Person::players[j]->numwaypoints; k++) { - fpackf(tfile, "Bf", Person::players[j]->waypoints[k].x); - fpackf(tfile, "Bf", Person::players[j]->waypoints[k].y); - fpackf(tfile, "Bf", Person::players[j]->waypoints[k].z); - fpackf(tfile, "Bi", Person::players[j]->waypointtype[k]); - } - fpackf(tfile, "Bi", Person::players[j]->waypoint); - } else { - Person::players[j]->numwaypoints = 0; - Person::players[j]->waypoint = 0; - fpackf(tfile, "Bi Bi Bi", Person::players[j]->numwaypoints, Person::players[j]->waypoint, Person::players[j]->waypoint); - } - - fpackf(tfile, "Bf Bf Bf", Person::players[j]->armorhead, Person::players[j]->armorhigh, Person::players[j]->armorlow); - fpackf(tfile, "Bf Bf Bf", Person::players[j]->protectionhead, Person::players[j]->protectionhigh, Person::players[j]->protectionlow); - fpackf(tfile, "Bf Bf Bf", Person::players[j]->metalhead, Person::players[j]->metalhigh, Person::players[j]->metallow); - fpackf(tfile, "Bf Bf", Person::players[j]->power, Person::players[j]->speedmult); - - float headprop, bodyprop, armprop, legprop; - if (Person::players[j]->creature == wolftype) { - headprop = Person::players[j]->proportionhead.x / 1.1; - bodyprop = Person::players[j]->proportionbody.x / 1.1; - armprop = Person::players[j]->proportionarms.x / 1.1; - legprop = Person::players[j]->proportionlegs.x / 1.1; - } else if (Person::players[j]->creature == rabbittype) { - headprop = Person::players[j]->proportionhead.x / 1.2; - bodyprop = Person::players[j]->proportionbody.x / 1.05; - armprop = Person::players[j]->proportionarms.x / 1.00; - legprop = Person::players[j]->proportionlegs.x / 1.1; - } - - fpackf(tfile, "Bf Bf Bf Bf", headprop, bodyprop, armprop, legprop); - - fpackf(tfile, "Bi", Person::players[j]->numclothes); - if (Person::players[j]->numclothes) - for (int k = 0; k < Person::players[j]->numclothes; k++) { - int templength; - templength = strlen(Person::players[j]->clothes[k]); - fpackf(tfile, "Bi", templength); - for (int l = 0; l < templength; l++) - fpackf(tfile, "Bb", Person::players[j]->clothes[k][l]); - fpackf(tfile, "Bf Bf Bf", Person::players[j]->clothestintr[k], Person::players[j]->clothestintg[k], Person::players[j]->clothestintb[k]); - } - } - - fpackf(tfile, "Bi", numpathpoints); - for (int j = 0; j < numpathpoints; j++) { - fpackf(tfile, "Bf Bf Bf Bi", pathpoint[j].x, pathpoint[j].y, pathpoint[j].z, numpathpointconnect[j]); - for (int k = 0; k < numpathpointconnect[j]; k++) - fpackf(tfile, "Bi", pathpointconnect[j][k]); } - - fpackf(tfile, "Bf Bf Bf Bf", mapcenter.x, mapcenter.y, mapcenter.z, mapradius); - - fclose(tfile); -} - -static void ch_cellar(const char *args) -{ - Person::players[0]->skeleton.drawmodel.textureptr.load(":Data:Textures:Furdarko.jpg", 1, &Person::players[0]->skeleton.skinText[0], &Person::players[0]->skeleton.skinsize); -} - -static void ch_tint(const char *args) -{ - sscanf(args, "%f%f%f", &tintr, &tintg, &tintb); -} - -static void ch_tintr(const char *args) -{ - tintr = atof(args); } -static void ch_tintg(const char *args) -{ - tintg = atof(args); -} - -static void ch_tintb(const char *args) -{ - tintb = atof(args); -} - -static void ch_speed(const char *args) -{ - Person::players[0]->speedmult = atof(args); -} - -static void ch_strength(const char *args) -{ - Person::players[0]->power = atof(args); -} - -static void ch_power(const char *args) -{ - Person::players[0]->power = atof(args); -} - -static void ch_size(const char *args) -{ - Person::players[0]->scale = atof(args) * .2; -} - -static int findClosestPlayer() +int Game::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; @@ -716,588 +459,6 @@ static int findClosestObject() return closest; } -static void ch_sizenear(const char *args) -{ - int closest = findClosestPlayer(); - if (closest >= 0) - Person::players[closest]->scale = atof(args) * .2; -} - -static void set_proportion(int pnum, const char *args) -{ - float headprop, bodyprop, armprop, legprop; - - sscanf(args, "%f%f%f%f", &headprop, &bodyprop, &armprop, &legprop); - - if (Person::players[pnum]->creature == wolftype) { - Person::players[pnum]->proportionhead = 1.1 * headprop; - Person::players[pnum]->proportionbody = 1.1 * bodyprop; - Person::players[pnum]->proportionarms = 1.1 * armprop; - Person::players[pnum]->proportionlegs = 1.1 * legprop; - } else if (Person::players[pnum]->creature == rabbittype) { - Person::players[pnum]->proportionhead = 1.2 * headprop; - Person::players[pnum]->proportionbody = 1.05 * bodyprop; - Person::players[pnum]->proportionarms = 1.00 * armprop; - Person::players[pnum]->proportionlegs = 1.1 * legprop; - Person::players[pnum]->proportionlegs.y = 1.05 * legprop; - } -} - -static void ch_proportion(const char *args) -{ - set_proportion(0, args); -} - -static void ch_proportionnear(const char *args) -{ - int closest = findClosestPlayer(); - if (closest >= 0) - set_proportion(closest, args); -} - -static void set_protection(int pnum, const char *args) -{ - float head, high, low; - sscanf(args, "%f%f%f", &head, &high, &low); - - Person::players[pnum]->protectionhead = head; - Person::players[pnum]->protectionhigh = high; - Person::players[pnum]->protectionlow = low; -} - -static void ch_protection(const char *args) -{ - set_protection(0, args); -} - -static void ch_protectionnear(const char *args) -{ - int closest = findClosestPlayer(); - if (closest >= 0) - set_protection(closest, args); -} - -static void set_armor(int pnum, const char *args) -{ - float head, high, low; - sscanf(args, "%f%f%f", &head, &high, &low); - - Person::players[pnum]->armorhead = head; - Person::players[pnum]->armorhigh = high; - Person::players[pnum]->armorlow = low; -} - -static void ch_armor(const char *args) -{ - set_armor(0, args); -} - -static void ch_armornear(const char *args) -{ - int closest = findClosestPlayer(); - if (closest >= 0) - set_armor(closest, args); -} - -static void ch_protectionreset(const char *args) -{ - set_protection(0, "1 1 1"); - set_armor(0, "1 1 1"); -} - -static void set_metal(int pnum, const char *args) -{ - float head, high, low; - sscanf(args, "%f%f%f", &head, &high, &low); - - Person::players[pnum]->metalhead = head; - Person::players[pnum]->metalhigh = high; - Person::players[pnum]->metallow = low; -} - -static void ch_metal(const char *args) -{ - set_metal(0, args); -} - -static void set_noclothes(int pnum, const char *args) -{ - Person::players[pnum]->numclothes = 0; - Person::players[pnum]->skeleton.drawmodel.textureptr.load( - creatureskin[Person::players[pnum]->creature][Person::players[pnum]->whichskin], 1, - &Person::players[pnum]->skeleton.skinText[0], &Person::players[pnum]->skeleton.skinsize); -} - -static void ch_noclothes(const char *args) -{ - set_noclothes(0, args); -} - -static void ch_noclothesnear(const char *args) -{ - int closest = findClosestPlayer(); - if (closest >= 0) - set_noclothes(closest, args); -} - - -static void set_clothes(int pnum, const char *args) -{ - char buf[64]; - snprintf(buf, 63, ":Data:Textures:%s.png", args); - - if (!AddClothes(buf, &Person::players[pnum]->skeleton.skinText[pnum])) - return; - - Person::players[pnum]->DoMipmaps(); - strcpy(Person::players[pnum]->clothes[Person::players[pnum]->numclothes], buf); - Person::players[pnum]->clothestintr[Person::players[pnum]->numclothes] = tintr; - Person::players[pnum]->clothestintg[Person::players[pnum]->numclothes] = tintg; - Person::players[pnum]->clothestintb[Person::players[pnum]->numclothes] = tintb; - Person::players[pnum]->numclothes++; -} - -static void ch_clothes(const char *args) -{ - set_clothes(0, args); -} - -static void ch_clothesnear(const char *args) -{ - int closest = findClosestPlayer(); - if (closest >= 0) - set_clothes(closest, args); -} - -static void ch_belt(const char *args) -{ - Person::players[0]->skeleton.clothes = !Person::players[0]->skeleton.clothes; -} - - -static void ch_cellophane(const char *args) -{ - cellophane = !cellophane; - float mul = (cellophane ? 0 : 1); - - for (auto player : Person::players) { - player->proportionhead.z = player->proportionhead.x * mul; - player->proportionbody.z = player->proportionbody.x * mul; - player->proportionarms.z = player->proportionarms.x * mul; - player->proportionlegs.z = player->proportionlegs.x * mul; - } -} - -static void ch_funnybunny(const char *args) -{ - Person::players[0]->skeleton.id = 0; - Person::players[0]->skeleton.Load(":Data:Skeleton:Basic Figure", ":Data:Skeleton:Basic Figurelow", - ":Data:Skeleton:Rabbitbelt", ":Data:Models:Body.solid", - ":Data:Models:Body2.solid", ":Data:Models:Body3.solid", - ":Data:Models:Body4.solid", ":Data:Models:Body5.solid", - ":Data:Models:Body6.solid", ":Data:Models:Body7.solid", - ":Data:Models:Bodylow.solid", ":Data:Models:Belt.solid", 1); - Person::players[0]->skeleton.drawmodel.textureptr.load(":Data:Textures:fur3.jpg", 1, &Person::players[0]->skeleton.skinText[0], &Person::players[0]->skeleton.skinsize); - Person::players[0]->creature = rabbittype; - Person::players[0]->scale = .2; - Person::players[0]->headless = 0; - Person::players[0]->damagetolerance = 200; - set_proportion(0, "1 1 1 1"); -} - -static void ch_wolfie(const char *args) -{ - Person::players[0]->skeleton.id = 0; - Person::players[0]->skeleton.Load(":Data:Skeleton:Basic Figure Wolf", ":Data:Skeleton:Basic Figure Wolf Low", - ":Data:Skeleton:Rabbitbelt", ":Data:Models:Wolf.solid", - ":Data:Models:Wolf2.solid", ":Data:Models:Wolf3.solid", - ":Data:Models:Wolf4.solid", ":Data:Models:Wolf5.solid", - ":Data:Models:Wolf6.solid", ":Data:Models:Wolf7.solid", - ":Data:Models:Wolflow.solid", ":Data:Models:Belt.solid", 0); - Person::players[0]->skeleton.drawmodel.textureptr.load(":Data:Textures:Wolf.jpg", 1, &Person::players[0]->skeleton.skinText[0], &Person::players[0]->skeleton.skinsize); - Person::players[0]->creature = wolftype; - Person::players[0]->damagetolerance = 300; - set_proportion(0, "1 1 1 1"); -} - -static void ch_wolfieisgod(const char *args) -{ - ch_wolfie(args); -} - -static void ch_wolf(const char *args) -{ - Person::players[0]->skeleton.drawmodel.textureptr.load(":Data:Textures:Wolf.jpg", 1, &Person::players[0]->skeleton.skinText[0], &Person::players[0]->skeleton.skinsize); -} - -static void ch_snowwolf(const char *args) -{ - Person::players[0]->skeleton.drawmodel.textureptr.load(":Data:Textures:SnowWolf.jpg", 1, &Person::players[0]->skeleton.skinText[0], &Person::players[0]->skeleton.skinsize); -} - -static void ch_darkwolf(const char *args) -{ - Person::players[0]->skeleton.drawmodel.textureptr.load(":Data:Textures:DarkWolf.jpg", 1, &Person::players[0]->skeleton.skinText[0], &Person::players[0]->skeleton.skinsize); -} - -static void ch_lizardwolf(const char *args) -{ - Person::players[0]->skeleton.drawmodel.textureptr.load(":Data:Textures:Lizardwolf.jpg", 1, &Person::players[0]->skeleton.skinText[0], &Person::players[0]->skeleton.skinsize); -} - -static void ch_white(const char *args) -{ - Person::players[0]->skeleton.drawmodel.textureptr.load(":Data:Textures:fur.jpg", 1, &Person::players[0]->skeleton.skinText[0], &Person::players[0]->skeleton.skinsize); -} - -static void ch_brown(const char *args) -{ - Person::players[0]->skeleton.drawmodel.textureptr.load(":Data:Textures:fur3.jpg", 1, &Person::players[0]->skeleton.skinText[0], &Person::players[0]->skeleton.skinsize); -} - -static void ch_black(const char *args) -{ - Person::players[0]->skeleton.drawmodel.textureptr.load(":Data:Textures:fur2.jpg", 1, &Person::players[0]->skeleton.skinText[0], &Person::players[0]->skeleton.skinsize); -} - -static void ch_sizemin(const char *args) -{ - for (int i = 1; i < Person::players.size(); i++) - if (Person::players[i]->scale < 0.8 * 0.2) - Person::players[i]->scale = 0.8 * 0.2; -} - -static void ch_tutorial(const char *args) -{ - tutoriallevel = atoi(args); -} - -static void ch_hostile(const char *args) -{ - hostile = atoi(args); -} - -static void ch_indemo(const char *args) -{ - indemo = 1; - hotspot[numhotspots] = Person::players[0]->coords; - hotspotsize[numhotspots] = 0; - hotspottype[numhotspots] = -111; - strcpy(hotspottext[numhotspots], "mapname"); - numhotspots++; -} - -static void ch_notindemo(const char *args) -{ - indemo = 0; - numhotspots--; -} - -static void ch_type(const char *args) -{ - int n = sizeof(editortypenames) / sizeof(editortypenames[0]); - for (int i = 0; i < n; i++) - if (stripfx(args, editortypenames[i])) { - editoractive = i; - break; - } -} - -static void ch_path(const char *args) -{ - int n = sizeof(pathtypenames) / sizeof(pathtypenames[0]); - for (int i = 0; i < n; i++) - if (stripfx(args, pathtypenames[i])) { - editorpathtype = i; - break; - } -} - -static void ch_hs(const char *args) -{ - hotspot[numhotspots] = Person::players[0]->coords; - - float size; - int type, shift; - sscanf(args, "%f%d %n", &size, &type, &shift); - - hotspotsize[numhotspots] = size; - hotspottype[numhotspots] = type; - - strcpy(hotspottext[numhotspots], args + shift); - strcat(hotspottext[numhotspots], "\n"); - - numhotspots++; -} - -static void ch_dialogue(const char *args) -{ - int dlg; - char buf1[32], buf2[64]; - - sscanf(args, "%d %31s", &dlg, buf1); - snprintf(buf2, 63, ":Data:Dialogues:%s.txt", buf1); - - dialoguetype[numdialogues] = dlg; - - memset(dialoguetext[numdialogues], 0, sizeof(dialoguetext[numdialogues])); - memset(dialoguename[numdialogues], 0, sizeof(dialoguename[numdialogues])); - - ifstream ipstream(ConvertFileName(buf2)); - ipstream.ignore(256, ':'); - ipstream >> numdialogueboxes[numdialogues]; - for (int i = 0; i < numdialogueboxes[numdialogues]; i++) { - ipstream.ignore(256, ':'); - ipstream.ignore(256, ':'); - ipstream.ignore(256, ' '); - ipstream >> dialogueboxlocation[numdialogues][i]; - ipstream.ignore(256, ':'); - ipstream >> dialogueboxcolor[numdialogues][i][0]; - ipstream >> dialogueboxcolor[numdialogues][i][1]; - ipstream >> dialogueboxcolor[numdialogues][i][2]; - ipstream.ignore(256, ':'); - ipstream.getline(dialoguename[numdialogues][i], 64); - ipstream.ignore(256, ':'); - ipstream.ignore(256, ' '); - ipstream.getline(dialoguetext[numdialogues][i], 128); - for (int j = 0; j < 128; j++) { - if (dialoguetext[numdialogues][i][j] == '\\') - dialoguetext[numdialogues][i][j] = '\n'; - } - ipstream.ignore(256, ':'); - ipstream >> dialogueboxsound[numdialogues][i]; - } - - for (int i = 0; i < numdialogueboxes[numdialogues]; i++) { - for (int j = 0; j < Person::players.size(); j++) { - participantfacing[numdialogues][i][j] = Person::players[j]->facing; - } - } - ipstream.close(); - - directing = 1; - indialogue = 0; - whichdialogue = numdialogues; - - numdialogues++; -} - -static void ch_fixdialogue(const char *args) -{ - char buf1[32], buf2[64]; - int whichdi; - - sscanf(args, "%d %31s", &whichdi, buf1); - snprintf(buf2, 63, ":Data:Dialogues:%s.txt", buf1); - - memset(dialoguetext[whichdi], 0, sizeof(dialoguetext[whichdi])); - memset(dialoguename[whichdi], 0, sizeof(dialoguename[whichdi])); - - ifstream ipstream(ConvertFileName(buf2)); - ipstream.ignore(256, ':'); - ipstream >> numdialogueboxes[whichdi]; - for (int i = 0; i < numdialogueboxes[whichdi]; i++) { - ipstream.ignore(256, ':'); - ipstream.ignore(256, ':'); - ipstream.ignore(256, ' '); - ipstream >> dialogueboxlocation[whichdi][i]; - ipstream.ignore(256, ':'); - ipstream >> dialogueboxcolor[whichdi][i][0]; - ipstream >> dialogueboxcolor[whichdi][i][1]; - ipstream >> dialogueboxcolor[whichdi][i][2]; - ipstream.ignore(256, ':'); - ipstream.getline(dialoguename[whichdi][i], 64); - ipstream.ignore(256, ':'); - ipstream.ignore(256, ' '); - ipstream.getline(dialoguetext[whichdi][i], 128); - for (int j = 0; j < 128; j++) { - if (dialoguetext[whichdi][i][j] == '\\') - dialoguetext[whichdi][i][j] = '\n'; - } - ipstream.ignore(256, ':'); - ipstream >> dialogueboxsound[whichdi][i]; - } - - ipstream.close(); -} - -static void ch_fixtype(const char *args) -{ - int dlg; - sscanf(args, "%d", &dlg); - dialoguetype[0] = dlg; -} - -static void ch_fixrotation(const char *args) -{ - participantyaw[whichdialogue][participantfocus[whichdialogue][indialogue]] = Person::players[participantfocus[whichdialogue][indialogue]]->yaw; -} - -static void ch_ddialogue(const char *args) -{ - if (numdialogues) - numdialogues--; -} - -static void ch_dhs(const char *args) -{ - if (numhotspots) - numhotspots--; -} - -static void ch_immobile(const char *args) -{ - Person::players[0]->immobile = 1; -} - -static void ch_allimmobile(const char *args) -{ - for (int i = 1; i < Person::players.size(); i++) - Person::players[i]->immobile = 1; -} - -static void ch_mobile(const char *args) -{ - Person::players[0]->immobile = 0; -} - -static void ch_default(const char *args) -{ - Person::players[0]->armorhead = 1; - Person::players[0]->armorhigh = 1; - Person::players[0]->armorlow = 1; - Person::players[0]->protectionhead = 1; - Person::players[0]->protectionhigh = 1; - Person::players[0]->protectionlow = 1; - Person::players[0]->metalhead = 1; - Person::players[0]->metalhigh = 1; - Person::players[0]->metallow = 1; - Person::players[0]->power = 1; - Person::players[0]->speedmult = 1; - Person::players[0]->scale = 1; - - if (Person::players[0]->creature == wolftype) { - Person::players[0]->proportionhead = 1.1; - Person::players[0]->proportionbody = 1.1; - Person::players[0]->proportionarms = 1.1; - Person::players[0]->proportionlegs = 1.1; - } else if (Person::players[0]->creature == rabbittype) { - Person::players[0]->proportionhead = 1.2; - Person::players[0]->proportionbody = 1.05; - Person::players[0]->proportionarms = 1.00; - Person::players[0]->proportionlegs = 1.1; - Person::players[0]->proportionlegs.y = 1.05; - } - - Person::players[0]->numclothes = 0; - Person::players[0]->skeleton.drawmodel.textureptr.load( - creatureskin[Person::players[0]->creature][Person::players[0]->whichskin], 1, - &Person::players[0]->skeleton.skinText[0], &Person::players[0]->skeleton.skinsize); - - editoractive = typeactive; - Person::players[0]->immobile = 0; -} - -static void ch_play(const char *args) -{ - int dlg; - sscanf(args, "%d", &dlg); - whichdialogue = dlg; - - if (whichdialogue >= numdialogues) - return; - - for (int i = 0; i < numdialogueboxes[whichdialogue]; i++) { - Person::players[participantfocus[whichdialogue][i]]->coords = participantlocation[whichdialogue][participantfocus[whichdialogue][i]]; - Person::players[participantfocus[whichdialogue][i]]->yaw = participantyaw[whichdialogue][participantfocus[whichdialogue][i]]; - Person::players[participantfocus[whichdialogue][i]]->targetyaw = participantyaw[whichdialogue][participantfocus[whichdialogue][i]]; - Person::players[participantfocus[whichdialogue][i]]->velocity = 0; - Person::players[participantfocus[whichdialogue][i]]->animTarget = Person::players[participantfocus[whichdialogue][i]]->getIdle(); - Person::players[participantfocus[whichdialogue][i]]->frameTarget = 0; - } - - directing = 0; - indialogue = 0; - - playdialogueboxsound(); -} - -static void ch_mapkilleveryone(const char *args) -{ - maptype = mapkilleveryone; -} - -static void ch_mapkillmost(const char *args) -{ - maptype = mapkillmost; -} - -static void ch_mapkillsomeone(const char *args) -{ - maptype = mapkillsomeone; -} - -static void ch_mapgosomewhere(const char *args) -{ - maptype = mapgosomewhere; -} - -static void ch_viewdistance(const char *args) -{ - viewdistance = atof(args) * 100; -} - -static void ch_fadestart(const char *args) -{ - fadestart = atof(args); -} - -static void ch_slomo(const char *args) -{ - slomospeed = atof(args); - slomo = !slomo; - slomodelay = 1000; -} - -static void ch_slofreq(const char *args) -{ - slomofreq = atof(args); -} - -static void ch_skytint(const char *args) -{ - sscanf(args, "%f%f%f", &skyboxr, &skyboxg, &skyboxb); - - skyboxlightr = skyboxr; - skyboxlightg = skyboxg; - skyboxlightb = skyboxb; - - SetUpLighting(); - - terrain.DoShadows(); - objects.DoShadows(); -} - -static void ch_skylight(const char *args) -{ - sscanf(args, "%f%f%f", &skyboxlightr, &skyboxlightg, &skyboxlightb); - - SetUpLighting(); - - terrain.DoShadows(); - objects.DoShadows(); -} - -static void ch_skybox(const char *args) -{ - skyboxtexture = !skyboxtexture; - - SetUpLighting(); - - terrain.DoShadows(); - objects.DoShadows(); -} - static void cmd_dispatch(const string cmd) { int i, n_cmds = sizeof(cmd_names) / sizeof(cmd_names[0]); @@ -1315,18 +476,17 @@ static void cmd_dispatch(const string cmd) extern bool save_image(const char * fname); void Screenshot (void) { - char temp[1024]; + char filename[1024]; time_t t = time(NULL); struct tm *tme = localtime(&t); - sprintf(temp, "Screenshots/Screenshot_%04d_%02d_%02d--%02d_%02d_%02d.png", tme->tm_year + 1900, tme->tm_mon + 1, tme->tm_mday, tme->tm_hour, tme->tm_min, tme->tm_sec); + sprintf(filename, "Screenshots/Screenshot-%04d%02d%02d-%02d%02d%02d.png", + tme->tm_year + 1900, tme->tm_mon + 1, tme->tm_mday, tme->tm_hour, tme->tm_min, tme->tm_sec); #if defined(_WIN32) mkdir("Screenshots"); -#else - mkdir("Screenshots", S_IRWXU); #endif - save_image(temp); + save_image(filename); } void Game::SetUpLighting() @@ -1424,8 +584,6 @@ int Game::checkcollide(XYZ startpoint, XYZ endpoint) } } - //if(terrain.lineTerrain(startpoint,endpoint,&colpoint)!=-1)return 1000; - return -1; } @@ -1664,7 +822,7 @@ vector ListCampaigns() return campaignNames; } -void Loadlevel(int which) +void Game::Loadlevel(int which) { stealthloading = 0; whichlevel = which; @@ -1680,8 +838,9 @@ void Loadlevel(int which) Loadlevel("mapsave"); } -void Loadlevel(const char *name) +void Game::Loadlevel(const char *name) { + int indemo; // FIXME this should be removed int templength; float lamefloat; static const char *pfx = ":Data:Maps:"; @@ -1725,9 +884,6 @@ void Loadlevel(const char *name) int mapvers; FILE *tfile; - //~ char* buff=getcwd(NULL,0); - //~ cout << buff << " " << FixedFN << endl; - //~ free(buff); tfile = fopen( FixedFN, "rb" ); if (tfile) { pause_sound(stream_firesound); @@ -2142,7 +1298,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; @@ -2885,7 +2041,7 @@ void doDebugKeys() { float headprop, bodyprop, armprop, legprop; if (debugmode) { - if (Input::isKeyPressed(SDLK_h)) { + if (Input::isKeyPressed(SDL_SCANCODE_H)) { Person::players[0]->damagetolerance = 200000; Person::players[0]->damage = 0; Person::players[0]->burnt = 0; @@ -2893,18 +2049,18 @@ void doDebugKeys() Person::players[0]->superpermanentdamage = 0; } - if (Input::isKeyPressed(SDLK_j)) { + if (Input::isKeyPressed(SDL_SCANCODE_J)) { environment++; if (environment > 2) environment = 0; Setenvironment(environment); } - if (Input::isKeyPressed(SDLK_c)) { + if (Input::isKeyPressed(SDL_SCANCODE_C)) { cameramode = 1 - cameramode; } - if (Input::isKeyPressed(SDLK_x) && !Input::isKeyDown(SDLK_LSHIFT)) { + if (Input::isKeyPressed(SDL_SCANCODE_X) && !Input::isKeyDown(SDL_SCANCODE_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); @@ -2915,7 +2071,7 @@ void doDebugKeys() } } - if (Input::isKeyPressed(SDLK_x) && Input::isKeyDown(SDLK_LSHIFT)) { + if (Input::isKeyPressed(SDL_SCANCODE_X) && Input::isKeyDown(SDL_SCANCODE_LSHIFT)) { int closest = findClosestPlayer(); if (closest >= 0) { if (Person::players[closest]->num_weapons) { @@ -2936,7 +2092,7 @@ void doDebugKeys() } } - if (Input::isKeyDown(SDLK_u)) { + if (Input::isKeyDown(SDL_SCANCODE_U)) { int closest = findClosestPlayer(); if (closest >= 0) { Person::players[closest]->yaw += multiplier * 50; @@ -2945,9 +2101,9 @@ void doDebugKeys() } - if (Input::isKeyPressed(SDLK_o) && !Input::isKeyDown(SDLK_LSHIFT)) { + if (Input::isKeyPressed(SDL_SCANCODE_O) && !Input::isKeyDown(SDL_SCANCODE_LSHIFT)) { int closest = findClosestPlayer(); - if (Input::isKeyDown(SDLK_LCTRL)) + if (Input::isKeyDown(SDL_SCANCODE_LCTRL)) closest = 0; if (closest >= 0) { @@ -2972,7 +2128,7 @@ void doDebugKeys() } } - if (Input::isKeyPressed(SDLK_o) && Input::isKeyDown(SDLK_LSHIFT)) { + if (Input::isKeyPressed(SDL_SCANCODE_O) && Input::isKeyDown(SDL_SCANCODE_LSHIFT)) { int closest = findClosestPlayer(); if (closest >= 0) { if (Person::players[closest]->creature == wolftype) { @@ -3040,17 +2196,17 @@ void doDebugKeys() } } - if (Input::isKeyPressed(SDLK_b) && !Input::isKeyDown(SDLK_LSHIFT)) { + if (Input::isKeyPressed(SDL_SCANCODE_B) && !Input::isKeyDown(SDL_SCANCODE_LSHIFT)) { slomo = 1 - slomo; slomodelay = 1000; } - if (((Input::isKeyPressed(SDLK_i) && !Input::isKeyDown(SDLK_LSHIFT)))) { + if (((Input::isKeyPressed(SDL_SCANCODE_I) && !Input::isKeyDown(SDL_SCANCODE_LSHIFT)))) { 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) { @@ -3100,7 +2256,7 @@ void doDebugKeys() } } - if (((Input::isKeyPressed(SDLK_i) && Input::isKeyDown(SDLK_LSHIFT)))) { + if (((Input::isKeyPressed(SDL_SCANCODE_I) && Input::isKeyDown(SDL_SCANCODE_LSHIFT)))) { int closest = findClosestPlayer(); XYZ flatfacing2, flatvelocity2; XYZ blah; @@ -3175,8 +2331,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) @@ -3206,7 +2362,7 @@ void doDebugKeys() } } - if (Input::isKeyPressed(SDLK_f)) { + if (Input::isKeyPressed(SDL_SCANCODE_F)) { Person::players[0]->onfire = 1 - Person::players[0]->onfire; if (Person::players[0]->onfire) { Person::players[0]->CatchFire(); @@ -3217,16 +2373,13 @@ void doDebugKeys() } } - if (Input::isKeyPressed(SDLK_n) && !Input::isKeyDown(SDLK_LCTRL)) { - //if(!Person::players[0]->skeleton.free)Person::players[0]->damage+=500; + if (Input::isKeyPressed(SDL_SCANCODE_N) && !Input::isKeyDown(SDL_SCANCODE_LCTRL)) { Person::players[0]->RagDoll(0); - //Person::players[0]->spurt=1; - //Person::players[0]->DoDamage(1000); emit_sound_at(whooshsound, Person::players[0]->coords, 128.); } - if (Input::isKeyPressed(SDLK_n) && Input::isKeyDown(SDLK_LCTRL)) { + if (Input::isKeyPressed(SDL_SCANCODE_N) && Input::isKeyDown(SDL_SCANCODE_LCTRL)) { for (int i = 0; i < objects.numobjects; i++) { if (objects.type[i] == treeleavestype) { objects.scale[i] *= .9; @@ -3234,7 +2387,7 @@ void doDebugKeys() } } - if (Input::isKeyPressed(SDLK_m) && Input::isKeyDown(SDLK_LSHIFT)) { + if (Input::isKeyPressed(SDL_SCANCODE_M) && Input::isKeyDown(SDL_SCANCODE_LSHIFT)) { editorenabled = 1 - editorenabled; if (editorenabled) { Person::players[0]->damagetolerance = 100000; @@ -3249,7 +2402,7 @@ void doDebugKeys() } //skip level - if (whichlevel != -2 && Input::isKeyPressed(SDLK_k) && Input::isKeyDown(SDLK_LSHIFT) && !editorenabled) { + if (whichlevel != -2 && Input::isKeyPressed(SDL_SCANCODE_K) && Input::isKeyDown(SDL_SCANCODE_LSHIFT) && !editorenabled) { targetlevel++; if (targetlevel > numchallengelevels - 1) targetlevel = 0; @@ -3258,22 +2411,20 @@ void doDebugKeys() } if (editorenabled) { - if (Input::isKeyPressed(SDLK_DELETE) && Input::isKeyDown(SDLK_LSHIFT)) { + if (Input::isKeyPressed(SDL_SCANCODE_DELETE) && Input::isKeyDown(SDL_SCANCODE_LSHIFT)) { int closest = findClosestPlayer(); if (closest >= 0) { Person::players.erase(Person::players.begin()+closest); } } - if (Input::isKeyPressed(SDLK_DELETE) && Input::isKeyDown(SDLK_LCTRL)) { + if (Input::isKeyPressed(SDL_SCANCODE_DELETE) && Input::isKeyDown(SDL_SCANCODE_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 (Input::isKeyPressed(SDL_SCANCODE_M) && Input::isKeyDown(SDL_SCANCODE_LSHIFT)) { if (objects.numobjects < max_objects - 1) { XYZ boxcoords; boxcoords.x = Person::players[0]->coords.x; @@ -3298,7 +2449,7 @@ void doDebugKeys() } } - if (Input::isKeyPressed(SDLK_p) && Input::isKeyDown(SDLK_LSHIFT) && !Input::isKeyDown(SDLK_LCTRL)) { + if (Input::isKeyPressed(SDL_SCANCODE_P) && Input::isKeyDown(SDL_SCANCODE_LSHIFT) && !Input::isKeyDown(SDL_SCANCODE_LCTRL)) { Person::players.push_back(shared_ptr(new Person())); Person::players.back()->scale = .2 * 5 * Person::players[0]->scale; @@ -3435,7 +2586,7 @@ void doDebugKeys() Person::players.back()->loaded = 1; } - if (Input::isKeyPressed(SDLK_p) && Input::isKeyDown(SDLK_LSHIFT)) { + if (Input::isKeyPressed(SDL_SCANCODE_P) && Input::isKeyDown(SDL_SCANCODE_LSHIFT)) { if (Person::players.back()->numwaypoints < 90) { Person::players.back()->waypoints[Person::players.back()->numwaypoints] = Person::players[0]->coords; Person::players.back()->waypointtype[Person::players.back()->numwaypoints] = editorpathtype; @@ -3443,7 +2594,7 @@ void doDebugKeys() } } - if (Input::isKeyPressed(SDLK_p) && Input::isKeyDown(SDLK_LCTRL)) { + if (Input::isKeyPressed(SDL_SCANCODE_P) && Input::isKeyDown(SDL_SCANCODE_LCTRL)) { if (numpathpoints < 30) { bool connected, alreadyconnected; connected = 0; @@ -3475,17 +2626,17 @@ void doDebugKeys() } } - if (Input::isKeyPressed(SDLK_PERIOD)) { + if (Input::isKeyPressed(SDL_SCANCODE_PERIOD)) { pathpointselected++; if (pathpointselected >= numpathpoints) pathpointselected = -1; } - if (Input::isKeyPressed(SDLK_COMMA) && !Input::isKeyDown(SDLK_LSHIFT)) { + if (Input::isKeyPressed(SDL_SCANCODE_COMMA) && !Input::isKeyDown(SDL_SCANCODE_LSHIFT)) { pathpointselected--; if (pathpointselected <= -2) pathpointselected = numpathpoints - 1; } - if (Input::isKeyPressed(SDLK_COMMA) && Input::isKeyDown(SDLK_LSHIFT)) { + if (Input::isKeyPressed(SDL_SCANCODE_COMMA) && Input::isKeyDown(SDL_SCANCODE_LSHIFT)) { if (pathpointselected != -1) { numpathpoints--; pathpoint[pathpointselected] = pathpoint[numpathpoints]; @@ -3508,7 +2659,7 @@ void doDebugKeys() } } - if (Input::isKeyPressed(SDLK_LEFT) && Input::isKeyDown(SDLK_LSHIFT) && !Input::isKeyDown(SDLK_LCTRL)) { + if (Input::isKeyPressed(SDL_SCANCODE_LEFT) && Input::isKeyDown(SDL_SCANCODE_LSHIFT) && !Input::isKeyDown(SDL_SCANCODE_LCTRL)) { editortype--; if (editortype == treeleavestype || editortype == 10) editortype--; @@ -3516,7 +2667,7 @@ void doDebugKeys() editortype = firetype; } - if (Input::isKeyPressed(SDLK_RIGHT) && Input::isKeyDown(SDLK_LSHIFT) && !Input::isKeyDown(SDLK_LCTRL)) { + if (Input::isKeyPressed(SDL_SCANCODE_RIGHT) && Input::isKeyDown(SDL_SCANCODE_LSHIFT) && !Input::isKeyDown(SDL_SCANCODE_LCTRL)) { editortype++; if (editortype == treeleavestype || editortype == 10) editortype++; @@ -3524,44 +2675,44 @@ void doDebugKeys() editortype = 0; } - if (Input::isKeyDown(SDLK_LEFT) && !Input::isKeyDown(SDLK_LSHIFT) && !Input::isKeyDown(SDLK_LCTRL)) { + if (Input::isKeyDown(SDL_SCANCODE_LEFT) && !Input::isKeyDown(SDL_SCANCODE_LSHIFT) && !Input::isKeyDown(SDL_SCANCODE_LCTRL)) { editoryaw -= multiplier * 100; if (editoryaw < -.01) editoryaw = -.01; } - if (Input::isKeyDown(SDLK_RIGHT) && !Input::isKeyDown(SDLK_LSHIFT) && !Input::isKeyDown(SDLK_LCTRL)) { + if (Input::isKeyDown(SDL_SCANCODE_RIGHT) && !Input::isKeyDown(SDL_SCANCODE_LSHIFT) && !Input::isKeyDown(SDL_SCANCODE_LCTRL)) { editoryaw += multiplier * 100; } - if (Input::isKeyDown(SDLK_UP) && !Input::isKeyDown(SDLK_LCTRL)) { + if (Input::isKeyDown(SDL_SCANCODE_UP) && !Input::isKeyDown(SDL_SCANCODE_LCTRL)) { editorsize += multiplier; } - if (Input::isKeyDown(SDLK_DOWN) && !Input::isKeyDown(SDLK_LCTRL)) { + if (Input::isKeyDown(SDL_SCANCODE_DOWN) && !Input::isKeyDown(SDL_SCANCODE_LCTRL)) { editorsize -= multiplier; if (editorsize < .1) editorsize = .1; } - if (Input::isKeyPressed(SDLK_LEFT) && Input::isKeyDown(SDLK_LSHIFT) && Input::isKeyDown(SDLK_LCTRL)) { + if (Input::isKeyPressed(SDL_SCANCODE_LEFT) && Input::isKeyDown(SDL_SCANCODE_LSHIFT) && Input::isKeyDown(SDL_SCANCODE_LCTRL)) { mapradius -= multiplier * 10; } - if (Input::isKeyPressed(SDLK_RIGHT) && Input::isKeyDown(SDLK_LSHIFT) && Input::isKeyDown(SDLK_LCTRL)) { + if (Input::isKeyPressed(SDL_SCANCODE_RIGHT) && Input::isKeyDown(SDL_SCANCODE_LSHIFT) && Input::isKeyDown(SDL_SCANCODE_LCTRL)) { mapradius += multiplier * 10; } - if (Input::isKeyDown(SDLK_UP) && Input::isKeyDown(SDLK_LCTRL)) { + if (Input::isKeyDown(SDL_SCANCODE_UP) && Input::isKeyDown(SDL_SCANCODE_LCTRL)) { editorpitch += multiplier * 100; } - if (Input::isKeyDown(SDLK_DOWN) && Input::isKeyDown(SDLK_LCTRL)) { + if (Input::isKeyDown(SDL_SCANCODE_DOWN) && Input::isKeyDown(SDL_SCANCODE_LCTRL)) { editorpitch -= multiplier * 100; if (editorpitch < -.01) editorpitch = -.01; } - if (Input::isKeyPressed(SDLK_DELETE) && objects.numobjects && Input::isKeyDown(SDLK_LSHIFT)) { + if (Input::isKeyPressed(SDL_SCANCODE_DELETE) && objects.numobjects && Input::isKeyDown(SDL_SCANCODE_LSHIFT)) { int closest = findClosestObject(); if (closest >= 0) objects.DeleteObject(closest); @@ -3572,8 +2723,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 && @@ -3582,8 +2733,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 @@ -3592,7 +2743,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; @@ -3673,7 +2824,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() && @@ -3708,7 +2859,6 @@ void doAerialAcrobatics() Person::players[k]->yaw = stepTowardf(Person::players[k]->yaw, Person::players[k]->targetyaw, multiplier * Person::players[k]->turnspeed * 4); } - /*if(Person::players[k]->aitype!=passivetype||(distsq(&Person::players[k]->coords,&viewer)DoStuff(); if (Person::players[k]->immobile && k != 0) Person::players[k]->coords = Person::players[k]->realoldcoords; @@ -3884,7 +3034,7 @@ void doAerialAcrobatics() } } - if (tempcollide && (/*Person::players[k]->jumptogglekeydown*/1 == 1 || Person::players[k]->aitype != playercontrolled)) + if (tempcollide) for (int l = 0; l < terrain.patchobjectnum[Person::players[k]->whichpatchx][Person::players[k]->whichpatchz]; l++) { int i = terrain.patchobjects[Person::players[k]->whichpatchx][Person::players[k]->whichpatchz][l]; lowpoint = Person::players[k]->coords; @@ -3966,7 +3116,6 @@ void doAerialAcrobatics() if (j <= 6 || j <= 25 && Person::players[k]->animTarget == jumpdownanim) break; if (Person::players[k]->animTarget == jumpupanim || Person::players[k]->animTarget == jumpdownanim) { - lowpoint = DoRotation(objects.model[i].facenormals[whichhit], 0, objects.yaw[k], 0); lowpoint = Person::players[k]->coords; lowpoint.y += (float)j / 13; lowpointtarget = lowpoint + facing * 1.3; @@ -4074,7 +3223,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) && @@ -4087,7 +3236,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) { @@ -4105,7 +3254,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 || @@ -4144,7 +3293,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) @@ -4415,7 +3564,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) && @@ -4540,7 +3689,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) { @@ -4603,8 +3752,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 && @@ -4802,7 +3951,7 @@ void doPlayerCollisions() } } -void doAI(int i) +void doAI(unsigned i) { static bool connected; if (Person::players[i]->aitype != playercontrolled && indialogue == -1) { @@ -4962,7 +4111,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) @@ -5083,7 +4232,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) { @@ -5106,7 +4255,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) @@ -5296,7 +4445,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 && @@ -5396,7 +4545,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) { @@ -5483,7 +4632,7 @@ void doAI(int i) if (Person::players[0]->animTarget != rabbitkickanim && Person::players[0]->weaponactive != -1) { if (weapons[Person::players[0]->weaponids[0]].getType() == knife) { if (Person::players[i]->isIdle() || Person::players[i]->isCrouch() || Person::players[i]->isRun() || Person::players[i]->isFlip()) { - if (abs(Random() % 2 == 0)) + if (abs(Random() % 2) == 0) Person::players[i]->setAnimation(backhandspringanim); else Person::players[i]->setAnimation(rollanim); @@ -5508,7 +4657,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 && @@ -5645,7 +4794,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 || @@ -5789,6 +4938,7 @@ void updateSettingsMenu() else sprintf (sbuf, "Resolution: %d*%d (widescreen)", (int)newscreenwidth, (int)newscreenheight); Menu::setText(0, sbuf); + Menu::setText(14, fullscreen ? "Fullscreen: On" : "Fullscreen: Off"); if (newdetail == 0) Menu::setText(1, "Detail: Low"); if (newdetail == 1) Menu::setText(1, "Detail: Medium"); if (newdetail == 2) Menu::setText(1, "Detail: High"); @@ -5869,6 +5019,7 @@ void Game::LoadMenu() break; case 3: Menu::addButton( 0, "", 10 + 20, 440); + Menu::addButton(14, "", 10 + 400, 440); Menu::addButton( 1, "", 10 + 60, 405); Menu::addButton( 2, "", 10 + 70, 370); Menu::addButton( 3, "", 10 + 20 - 1000, 335 - 1000); @@ -6004,7 +5155,7 @@ void Game::LoadMenu() } } -extern SDL_Rect **resolutions; +extern set> resolutions; void MenuTick() { @@ -6025,9 +5176,8 @@ 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) { case 1: case 2: @@ -6076,40 +5226,17 @@ void MenuTick() break; case 3: fireSound(); - bool isCustomResolution, found; switch (selected) { case 0: - isCustomResolution = true; - found = false; - for (int i = 0; (!found) && (resolutions[i]); i++) { - if ((resolutions[i]->w == screenwidth) && (resolutions[i]->h == screenwidth)) - isCustomResolution = false; - - if ((resolutions[i]->w == newscreenwidth) && (resolutions[i]->h == newscreenheight)) { - i++; - if (resolutions[i] != NULL) { - newscreenwidth = (int) resolutions[i]->w; - newscreenheight = (int) resolutions[i]->h; - } else if (isCustomResolution) { - if ((screenwidth == newscreenwidth) && (screenheight == newscreenheight)) { - newscreenwidth = (int) resolutions[0]->w; - newscreenheight = (int) resolutions[0]->h; - } else { - newscreenwidth = screenwidth; - newscreenheight = screenheight; - } - } else { - newscreenwidth = (int) resolutions[0]->w; - newscreenheight = (int) resolutions[0]->h; - } - found = true; - } - } - - if (!found) { - newscreenwidth = (int) resolutions[0]->w; - newscreenheight = (int) resolutions[0]->h; + newscreenresolution = resolutions.find(make_pair(newscreenwidth, newscreenheight)); + /* Next one (end() + 1 is also end() so the ++ is safe even if it was not found) */ + newscreenresolution++; + if (newscreenresolution == resolutions.end()) { + /* It was the last one (or not found), go back to the beginning */ + newscreenresolution = resolutions.begin(); } + newscreenwidth = newscreenresolution->first; + newscreenheight = newscreenresolution->second; break; case 1: newdetail++; @@ -6181,6 +5308,9 @@ void MenuTick() case 13: showdamagebar = !showdamagebar; break; + case 14: + toggleFullscreen(); + break; } updateSettingsMenu(); break; @@ -6291,10 +5421,7 @@ void MenuTick() mainmenu = 5; else mainmenu = 1; - for (int j = 0; j < 255; j++) { - displaytext[0][j] = 0; - } - displaychars[0] = 0; + displaytext[0].clear(); displayselected = 0; entername = 0; } @@ -6368,7 +5495,7 @@ void MenuTick() } } - if (Input::isKeyDown(SDLK_q) && Input::isKeyDown(SDLK_LMETA)) { + if (Input::isKeyDown(SDL_SCANCODE_Q) && Input::isKeyDown(SDL_SCANCODE_LGUI)) { tryquit = 1; if (mainmenu == 3) { SaveSettings(); @@ -6378,9 +5505,9 @@ void MenuTick() OPENAL_SetFrequency(channels[stream_menutheme], 22050); if (entername) { - inputText(displaytext[0], &displayselected, &displaychars[0]); + inputText(displaytext[0], &displayselected); if (!waiting) { // the input as finished - if (displaychars[0]) { // with enter + if (!displaytext[0].empty()) { // with enter accountactive = Account::add(string(displaytext[0])); mainmenu = 8; @@ -6389,10 +5516,7 @@ void MenuTick() fireSound(firestartsound); - for (int i = 0; i < 255; i++) { - displaytext[0][i] = 0; - } - displaychars[0] = 0; + displaytext[0].clear(); displayselected = 0; } @@ -6430,8 +5554,8 @@ void Game::Tick() keyboardfrozen = false; Input::Tick(); - if (Input::isKeyPressed(SDLK_F6)) { - if (Input::isKeyDown(SDLK_LSHIFT)) + if (Input::isKeyPressed(SDL_SCANCODE_F6)) { + if (Input::isKeyDown(SDL_SCANCODE_LSHIFT)) stereoreverse = true; else stereoreverse = false; @@ -6442,16 +5566,16 @@ void Game::Tick() printf("Stereo unreversed\n"); } - if (Input::isKeyDown(SDLK_F7)) { - if (Input::isKeyDown(SDLK_LSHIFT)) + if (Input::isKeyDown(SDL_SCANCODE_F7)) { + if (Input::isKeyDown(SDL_SCANCODE_LSHIFT)) stereoseparation -= 0.001; else stereoseparation -= 0.010; printf("Stereo decreased increased to %f\n", stereoseparation); } - if (Input::isKeyDown(SDLK_F8)) { - if (Input::isKeyDown(SDLK_LSHIFT)) + if (Input::isKeyDown(SDL_SCANCODE_F8)) { + if (Input::isKeyDown(SDL_SCANCODE_LSHIFT)) stereoseparation += 0.001; else stereoseparation += 0.010; @@ -6459,7 +5583,7 @@ void Game::Tick() } - if (Input::isKeyPressed(SDLK_TAB) && tutoriallevel) { + if (Input::isKeyPressed(SDL_SCANCODE_TAB) && tutoriallevel) { if (tutorialstage != 51) tutorialstagetime = tutorialmaxtime; emit_sound_np(consolefailsound, 128.); @@ -6500,7 +5624,7 @@ void Game::Tick() LoadMenu(); } //escape key pressed - if (Input::isKeyPressed(SDLK_ESCAPE) && + if (Input::isKeyPressed(SDL_SCANCODE_ESCAPE) && (gameon || mainmenu == 0 || (mainmenu >= 3 && mainmenu != 8 && !(mainmenu == 7 && entername)))) { selected = -1; if (mainmenu == 0 && !winfreeze) @@ -6561,37 +5685,13 @@ void Game::Tick() leveltime += multiplier; //keys - if (Input::isKeyPressed(SDLK_v) && debugmode) { + if (Input::isKeyPressed(SDL_SCANCODE_V) && debugmode) { freeze = 1 - freeze; if (freeze) { OPENAL_SetFrequency(OPENAL_ALL, 0.001); } } - if (Input::isKeyPressed(chatkey) && !console && !chatting && debugmode) - chatting = 1; - - if (chatting) { - inputText(displaytext[0], &displayselected, &displaychars[0]); - if (!waiting) { - if (displaychars[0]) { - for (int j = 0; j < 255; j++) - displaytext[0][j] = 0; - displaychars[0] = 0; - displayselected = 0; - } - chatting = 0; - } - - displayblinkdelay -= multiplier; - if (displayblinkdelay <= 0) { - displayblinkdelay = .3; - displayblink = 1 - displayblink; - } - } - if (chatting) - keyboardfrozen = true; - if (Input::isKeyPressed(consolekey) && debugmode) { console = !console; if (console) { @@ -6604,20 +5704,15 @@ void Game::Tick() if (console) freeze = 1; - if (console && !Input::isKeyDown(SDLK_LMETA)) { - inputText(consoletext[0], &consoleselected, &consolechars[0]); + if (console && !Input::isKeyDown(SDL_SCANCODE_LGUI)) { + inputText(consoletext[0], &consoleselected); if (!waiting) { - if (consolechars[0] > 0) { - consoletext[0][consolechars[0]] = '\0'; + if (!consoletext[0].empty()) { cmd_dispatch(consoletext[0]); for (int k = 14; k >= 1; k--) { - for (int j = 0; j < 255; j++) - consoletext[k][j] = consoletext[k - 1][j]; - consolechars[k] = consolechars[k - 1]; + consoletext[k] = consoletext[k - 1]; } - for (int j = 0; j < 255; j++) - consoletext[0][j] = 0; - consolechars[0] = 0; + consoletext[0].clear(); consoleselected = 0; } } @@ -6631,7 +5726,7 @@ void Game::Tick() - if (Input::isKeyDown(SDLK_q) && Input::isKeyDown(SDLK_LMETA)) { + if (Input::isKeyDown(SDL_SCANCODE_Q) && Input::isKeyDown(SDL_SCANCODE_LGUI)) { tryquit = 1; if (mainmenu == 3) { SaveSettings(); @@ -6648,10 +5743,10 @@ void Game::Tick() else oldwinfreeze++; - if ((Input::isKeyPressed(jumpkey) || Input::isKeyPressed(SDLK_SPACE)) && !campaign) + if ((Input::isKeyPressed(jumpkey) || Input::isKeyPressed(SDL_SCANCODE_SPACE)) && !campaign) if (winfreeze) winfreeze = 0; - if ((Input::isKeyDown(SDLK_ESCAPE)) && !campaign && gameon) { + if ((Input::isKeyDown(SDL_SCANCODE_ESCAPE)) && !campaign && gameon) { if (console) { console = false; freeze = 0; @@ -6674,8 +5769,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; @@ -6736,7 +5832,6 @@ void Game::Tick() hotspotvisual[i] -= multiplier / 320; for (int i = 0; i < numhotspots; i++) { - //if(hotspottype[i]<=10) while (hotspotvisual[i] < 0) { hotspotsprite = 0; hotspotsprite.x = float(abs(Random() % 100000)) / 100000 * hotspotsize[i]; @@ -6864,29 +5959,29 @@ void Game::Tick() viewer.y += multiplier * 4; if (Input::isKeyDown(crouchkey)) viewer.y -= multiplier * 4; - if ( Input::isKeyPressed(SDLK_1) || - Input::isKeyPressed(SDLK_2) || - Input::isKeyPressed(SDLK_3) || - Input::isKeyPressed(SDLK_4) || - Input::isKeyPressed(SDLK_5) || - Input::isKeyPressed(SDLK_6) || - Input::isKeyPressed(SDLK_7) || - Input::isKeyPressed(SDLK_8) || - Input::isKeyPressed(SDLK_9) || - Input::isKeyPressed(SDLK_0) || - Input::isKeyPressed(SDLK_MINUS)) { + if ( Input::isKeyPressed(SDL_SCANCODE_1) || + Input::isKeyPressed(SDL_SCANCODE_2) || + Input::isKeyPressed(SDL_SCANCODE_3) || + Input::isKeyPressed(SDL_SCANCODE_4) || + Input::isKeyPressed(SDL_SCANCODE_5) || + Input::isKeyPressed(SDL_SCANCODE_6) || + Input::isKeyPressed(SDL_SCANCODE_7) || + Input::isKeyPressed(SDL_SCANCODE_8) || + Input::isKeyPressed(SDL_SCANCODE_9) || + Input::isKeyPressed(SDL_SCANCODE_0) || + Input::isKeyPressed(SDL_SCANCODE_MINUS)) { int whichend; - if (Input::isKeyPressed(SDLK_1)) whichend = 1; - if (Input::isKeyPressed(SDLK_2)) whichend = 2; - if (Input::isKeyPressed(SDLK_3)) whichend = 3; - if (Input::isKeyPressed(SDLK_4)) whichend = 4; - if (Input::isKeyPressed(SDLK_5)) whichend = 5; - if (Input::isKeyPressed(SDLK_6)) whichend = 6; - if (Input::isKeyPressed(SDLK_7)) whichend = 7; - if (Input::isKeyPressed(SDLK_8)) whichend = 8; - if (Input::isKeyPressed(SDLK_9)) whichend = 9; - if (Input::isKeyPressed(SDLK_0)) whichend = 0; - if (Input::isKeyPressed(SDLK_MINUS)) + if (Input::isKeyPressed(SDL_SCANCODE_1)) whichend = 1; + if (Input::isKeyPressed(SDL_SCANCODE_2)) whichend = 2; + if (Input::isKeyPressed(SDL_SCANCODE_3)) whichend = 3; + if (Input::isKeyPressed(SDL_SCANCODE_4)) whichend = 4; + if (Input::isKeyPressed(SDL_SCANCODE_5)) whichend = 5; + if (Input::isKeyPressed(SDL_SCANCODE_6)) whichend = 6; + if (Input::isKeyPressed(SDL_SCANCODE_7)) whichend = 7; + if (Input::isKeyPressed(SDL_SCANCODE_8)) whichend = 8; + if (Input::isKeyPressed(SDL_SCANCODE_9)) whichend = 9; + if (Input::isKeyPressed(SDL_SCANCODE_0)) whichend = 0; + if (Input::isKeyPressed(SDL_SCANCODE_MINUS)) whichend = -1; if (whichend != -1) { participantfocus[whichdialogue][indialogue] = whichend; @@ -6911,32 +6006,32 @@ 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]; } } //TODO: should these be KeyDown or KeyPressed? - if ( Input::isKeyDown(SDLK_KP1) || - Input::isKeyDown(SDLK_KP2) || - Input::isKeyDown(SDLK_KP3) || - Input::isKeyDown(SDLK_KP4) || - Input::isKeyDown(SDLK_KP5) || - Input::isKeyDown(SDLK_KP6) || - Input::isKeyDown(SDLK_KP7) || - Input::isKeyDown(SDLK_KP8) || - Input::isKeyDown(SDLK_KP9) || - Input::isKeyDown(SDLK_KP0)) { + if ( Input::isKeyDown(SDL_SCANCODE_KP_1) || + Input::isKeyDown(SDL_SCANCODE_KP_2) || + Input::isKeyDown(SDL_SCANCODE_KP_3) || + Input::isKeyDown(SDL_SCANCODE_KP_4) || + Input::isKeyDown(SDL_SCANCODE_KP_5) || + Input::isKeyDown(SDL_SCANCODE_KP_6) || + Input::isKeyDown(SDL_SCANCODE_KP_7) || + Input::isKeyDown(SDL_SCANCODE_KP_8) || + Input::isKeyDown(SDL_SCANCODE_KP_9) || + Input::isKeyDown(SDL_SCANCODE_KP_0)) { int whichend; - if (Input::isKeyDown(SDLK_KP1)) whichend = 1; - if (Input::isKeyDown(SDLK_KP2)) whichend = 2; - if (Input::isKeyDown(SDLK_KP3)) whichend = 3; - if (Input::isKeyDown(SDLK_KP4)) whichend = 4; - if (Input::isKeyDown(SDLK_KP5)) whichend = 5; - if (Input::isKeyDown(SDLK_KP6)) whichend = 6; - if (Input::isKeyDown(SDLK_KP7)) whichend = 7; - if (Input::isKeyDown(SDLK_KP8)) whichend = 8; - if (Input::isKeyDown(SDLK_KP9)) whichend = 9; - if (Input::isKeyDown(SDLK_KP0)) whichend = 0; + if (Input::isKeyDown(SDL_SCANCODE_KP_1)) whichend = 1; + if (Input::isKeyDown(SDL_SCANCODE_KP_2)) whichend = 2; + if (Input::isKeyDown(SDL_SCANCODE_KP_3)) whichend = 3; + if (Input::isKeyDown(SDL_SCANCODE_KP_4)) whichend = 4; + if (Input::isKeyDown(SDL_SCANCODE_KP_5)) whichend = 5; + if (Input::isKeyDown(SDL_SCANCODE_KP_6)) whichend = 6; + if (Input::isKeyDown(SDL_SCANCODE_KP_7)) whichend = 7; + if (Input::isKeyDown(SDL_SCANCODE_KP_8)) whichend = 8; + if (Input::isKeyDown(SDL_SCANCODE_KP_9)) whichend = 9; + if (Input::isKeyDown(SDL_SCANCODE_KP_0)) whichend = 0; participantfacing[whichdialogue][indialogue][whichend] = facing; } if (indialogue >= numdialogueboxes[whichdialogue]) { @@ -6952,17 +6047,17 @@ void Game::Tick() yaw = dialoguecamerayaw[whichdialogue][indialogue]; pitch = dialoguecamerapitch[whichdialogue][indialogue]; if (dialoguetime > 0.5) - if ( Input::isKeyPressed(SDLK_1) || - Input::isKeyPressed(SDLK_2) || - Input::isKeyPressed(SDLK_3) || - Input::isKeyPressed(SDLK_4) || - Input::isKeyPressed(SDLK_5) || - Input::isKeyPressed(SDLK_6) || - Input::isKeyPressed(SDLK_7) || - Input::isKeyPressed(SDLK_8) || - Input::isKeyPressed(SDLK_9) || - Input::isKeyPressed(SDLK_0) || - Input::isKeyPressed(SDLK_MINUS) || + if ( Input::isKeyPressed(SDL_SCANCODE_1) || + Input::isKeyPressed(SDL_SCANCODE_2) || + Input::isKeyPressed(SDL_SCANCODE_3) || + Input::isKeyPressed(SDL_SCANCODE_4) || + Input::isKeyPressed(SDL_SCANCODE_5) || + Input::isKeyPressed(SDL_SCANCODE_6) || + Input::isKeyPressed(SDL_SCANCODE_7) || + Input::isKeyPressed(SDL_SCANCODE_8) || + Input::isKeyPressed(SDL_SCANCODE_9) || + Input::isKeyPressed(SDL_SCANCODE_0) || + Input::isKeyPressed(SDL_SCANCODE_MINUS) || Input::isKeyPressed(attackkey)) { indialogue++; if (indialogue < numdialogueboxes[whichdialogue]) { @@ -6999,7 +6094,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; } } @@ -7038,11 +6133,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); @@ -7054,8 +6149,8 @@ void Game::Tick() static bool respawnkeydown; if (!editorenabled && (whichlevel != -2 && - (Input::isKeyDown(SDLK_z) && - Input::isKeyDown(SDLK_LMETA) && + (Input::isKeyDown(SDL_SCANCODE_Z) && + Input::isKeyDown(SDL_SCANCODE_LGUI) && debugmode) || (Input::isKeyDown(jumpkey) && !respawnkeydown && @@ -7076,7 +6171,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; @@ -7164,7 +6259,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) < @@ -7245,9 +6340,8 @@ void Game::Tick() Person::players[i]->animTarget == rollanim || Person::players[i]->animTarget == backhandspringanim || 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 && @@ -7272,7 +6366,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) @@ -7300,13 +6394,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) @@ -7330,7 +6424,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 && @@ -7437,7 +6531,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) @@ -7501,7 +6595,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; } } @@ -7598,14 +6692,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] && @@ -7649,7 +6743,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 && @@ -7839,7 +6933,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]) && @@ -7924,7 +7018,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; @@ -7961,7 +7055,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 +7193,7 @@ void Game::Tick() } } - if (Input::isKeyPressed(SDLK_F1)) + if (Input::isKeyPressed(SDL_SCANCODE_F1)) Screenshot(); } @@ -8145,7 +7239,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 || @@ -8262,7 +7356,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) @@ -8274,7 +7368,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; @@ -8449,7 +7543,7 @@ void Game::TickOnceAfter() } target.y += .1; } - if (Person::players[0]->skeleton.free != 2/*&&!autocam*/) { + if (Person::players[0]->skeleton.free != 2) { cameraspeed = 20; if (findLengthfast(&Person::players[0]->velocity) > 400) { cameraspeed = 20 + (findLength(&Person::players[0]->velocity) - 20) * .96; @@ -8497,55 +7591,8 @@ void Game::TickOnceAfter() cameraloc.y = terrain.getHeight(cameraloc.x, cameraloc.z); } } - /* - //what did autocam do? - if(Person::players[0]->skeleton.free!=2&&autocam){ - cameraspeed=20; - if(findLengthfast(&Person::players[0]->velocity)>400){ - cameraspeed=20+(findLength(&Person::players[0]->velocity)-20)*.96; - } - if(Person::players[0]->skeleton.free==0&&Person::players[0]->animTarget!=hanganim&&Person::players[0]->animTarget!=climbanim)target.y+=1.4; - cameradist+=multiplier*5; - if(cameradist>3.3)cameradist=3.3; - coltarget=target-cameraloc; - if(findLengthfast(&coltarget)1) - { - Normalise(&coltarget); - if(Person::players[0]->animTarget!=hanganim&&Person::players[0]->animTarget!=climbanim&&Person::players[0]->animCurrent!=climbanim&&Person::players[0]->currentoffset.x==0)cameraloc=cameraloc+coltarget*multiplier*cameraspeed; - else cameraloc=cameraloc+coltarget*multiplier*8; - } - if(editorenabled)cameraloc=target; - viewer=cameraloc; - colviewer=viewer; - coltarget=cameraloc; - objects.SphereCheckPossible(&colviewer, findDistance(&colviewer,&coltarget)); - if(terrain.patchobjectnum[Person::players[0]->whichpatchx][Person::players[0]->whichpatchz]) - for(int j=0;jwhichpatchx][Person::players[0]->whichpatchz];j++){ - int i=terrain.patchobjects[Person::players[0]->whichpatchx][Person::players[0]->whichpatchz][j]; - colviewer=viewer; - coltarget=cameraloc; - if(objects.model[i].LineCheckPossible(&colviewer,&coltarget,&col,&objects.position[i],&objects.yaw[i])!=-1)viewer=col; - } - if(terrain.patchobjectnum[Person::players[0]->whichpatchx][Person::players[0]->whichpatchz]) - for(int j=0;jwhichpatchx][Person::players[0]->whichpatchz];j++){ - int i=terrain.patchobjects[Person::players[0]->whichpatchx][Person::players[0]->whichpatchz][j]; - colviewer=viewer; - if(objects.model[i].SphereCheck(&colviewer,.15,&col,&objects.position[i],&objects.yaw[i])!=-1){ - viewer=colviewer; - } - } - cameradist=findDistance(&viewer,&target); - viewer.y=max((double)viewer.y,terrain.getHeight(viewer.x,viewer.z)+.6); - if(cameraloc.y .8) camerashake = .8; - //if(woozy>10)woozy=10; - //woozy+=multiplier; woozy += multiplier; if (Person::players[0]->dead) camerashake = 0; @@ -8553,12 +7600,10 @@ void Game::TickOnceAfter() woozy = 0; camerashake -= multiplier * 2; blackout -= multiplier * 2; - //if(Person::players[0]->isCrouch())woozy-=multiplier*8; if (camerashake < 0) camerashake = 0; if (blackout < 0) blackout = 0; - //if(woozy<0)woozy=0; if (camerashake) { viewer.x += (float)(Random() % 100) * .0005 * camerashake; viewer.y += (float)(Random() % 100) * .0005 * camerashake;