X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;f=Source%2FGameTick.cpp;h=122471a4d769c4bdd1766c10889b6f1e9c70b145;hb=1c7d28a2fc93699ab955ea66203d0c36bba9d977;hp=9ba0cf5eafc0d638cffaf2ce2aa119b0a73c1290;hpb=2ce8e2f8ac6921286ebd6b30362c35b38e935977;p=lugaru.git diff --git a/Source/GameTick.cpp b/Source/GameTick.cpp index 9ba0cf5..122471a 100644 --- a/Source/GameTick.cpp +++ b/Source/GameTick.cpp @@ -19,6 +19,9 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +// Enable full math definitions +#define _USE_MATH_DEFINES + #if PLATFORM_UNIX #include #include @@ -27,8 +30,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" @@ -200,7 +205,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, ':'); @@ -571,62 +576,64 @@ static void ch_save(const char *args) fpackf(tfile, "Bb", hotspottext[i][l]); } - fpackf(tfile, "Bi", numplayers); - if (numplayers < maxplayers) - for (int j = 1; j < numplayers; 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", 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]); @@ -689,7 +696,7 @@ static int findClosestPlayer() int closest = -1; float closestdist = std::numeric_limits::max(); - for (int i = 1; i < numplayers; i++) { + for (int i = 1; i < Person::players.size(); i++) { float distance = distsq(&Person::players[i]->coords, &Person::players[0]->coords); if (distance < closestdist) { closestdist = distance; @@ -876,13 +883,13 @@ static void ch_belt(const char *args) static void ch_cellophane(const char *args) { cellophane = !cellophane; - float mul = cellophane ? 0 : 1; + float mul = (cellophane ? 0 : 1); - for (int i = 0; i < numplayers; i++) { - Person::players[i]->proportionhead.z = Person::players[i]->proportionhead.x * mul; - Person::players[i]->proportionbody.z = Person::players[i]->proportionbody.x * mul; - Person::players[i]->proportionarms.z = Person::players[i]->proportionarms.x * mul; - Person::players[i]->proportionlegs.z = Person::players[i]->proportionlegs.x * mul; + 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; } } @@ -960,7 +967,7 @@ static void ch_black(const char *args) static void ch_sizemin(const char *args) { - for (int i = 1; i < numplayers; i++) + 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; } @@ -1067,7 +1074,7 @@ static void ch_dialogue(const char *args) } for (int i = 0; i < numdialogueboxes[numdialogues]; i++) { - for (int j = 0; j < numplayers; j++) { + for (int j = 0; j < Person::players.size(); j++) { participantfacing[numdialogues][i][j] = Person::players[j]->facing; } } @@ -1150,7 +1157,7 @@ static void ch_immobile(const char *args) static void ch_allimmobile(const char *args) { - for (int i = 1; i < numplayers; i++) + for (int i = 1; i < Person::players.size(); i++) Person::players[i]->immobile = 1; } @@ -1607,6 +1614,15 @@ void LoadCampaign() if (!accountactive) return; ifstream ipstream(ConvertFileName((":Data:Campaigns:" + accountactive->getCurrentCampaign() + ".txt").c_str())); + if (!ipstream.good()) { + if (accountactive->getCurrentCampaign() == "main") { + cerr << "Could not found main campaign!" << endl; + return; + } + cerr << "Could not found campaign \"" << accountactive->getCurrentCampaign() << "\", falling back to main." << endl; + accountactive->setCurrentCampaign("main"); + return LoadCampaign(); + } ipstream.ignore(256, ':'); int numlevels; ipstream >> numlevels; @@ -1983,13 +1999,15 @@ void Loadlevel(const char *name) if (visibleloading) LoadingScreen(); - //mapcenter=objects.center; - //mapradius=objects.radius; + int numplayers; funpackf(tfile, "Bi", &numplayers); int howmanyremoved = 0; bool removeanother = 0; - if (numplayers > 1 && numplayers < maxplayers) { + if (numplayers > maxplayers) { + cout << "Warning: this level contains more players than allowed" << endl; + } + if (numplayers > 1) { for (int i = 1; i < numplayers; i++) { Person::players.push_back(shared_ptr(new Person())); if (visibleloading) @@ -2089,6 +2107,8 @@ void Loadlevel(const char *name) LoadingScreen(); numplayers -= howmanyremoved; + Person::players.resize(numplayers); + funpackf(tfile, "Bi", &numpathpoints); if (numpathpoints > 30 || numpathpoints < 0) numpathpoints = 0; @@ -2127,9 +2147,7 @@ void Loadlevel(const char *name) fclose(tfile); - if (numplayers > maxplayers - 1) - numplayers = maxplayers - 1; - for (int i = 0; i < numplayers; i++) { + for (int i = 0; i < Person::players.size(); i++) { if (visibleloading) LoadingScreen(); Person::players[i]->burnt = 0; @@ -2290,22 +2308,17 @@ void Loadlevel(const char *name) Person::players[0]->aitype = playercontrolled; Person::players[0]->weaponactive = -1; - if (difficulty == 1) + if (difficulty == 1) { Person::players[0]->power = 1 / .9; - - if (difficulty == 0) - Person::players[0]->power = 1 / .8; - - if (difficulty == 1) Person::players[0]->damagetolerance = 250; - if (difficulty == 0) + } else if (difficulty == 0) { + Person::players[0]->power = 1 / .8; Person::players[0]->damagetolerance = 300; - if (difficulty == 0) Person::players[0]->armorhead *= 1.5; - if (difficulty == 0) Person::players[0]->armorhigh *= 1.5; - if (difficulty == 0) Person::players[0]->armorlow *= 1.5; + } + cameraloc = Person::players[0]->coords; cameraloc.y += 5; yaw = Person::players[0]->yaw; @@ -2319,15 +2332,14 @@ void Loadlevel(const char *name) LOG("Starting background music..."); OPENAL_StopSound(OPENAL_ALL); - if (environment == snowyenvironment) { - if (ambientsound) + if (ambientsound) { + if (environment == snowyenvironment) { emit_stream_np(stream_wind); - } else if (environment == desertenvironment) { - if (ambientsound) + } else if (environment == desertenvironment) { emit_stream_np(stream_desertambient); - } else if (environment == grassyenvironment) { - if (ambientsound) + } else if (environment == grassyenvironment) { emit_stream_np(stream_wind, 100.); + } } oldmusicvolume[0] = 0; oldmusicvolume[1] = 0; @@ -2878,7 +2890,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; @@ -2886,18 +2898,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); @@ -2908,7 +2920,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) { @@ -2929,7 +2941,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; @@ -2938,9 +2950,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) { @@ -2965,7 +2977,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) { @@ -3033,17 +3045,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 < numplayers; i++) { + for (int 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) { @@ -3093,7 +3105,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; @@ -3168,7 +3180,7 @@ void doDebugKeys() } XYZ temppos; - for (int j = 0; j < numplayers; j++) { + for (int j = 0; j < Person::players.size(); j++) { if (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); @@ -3199,7 +3211,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(); @@ -3210,7 +3222,7 @@ void doDebugKeys() } } - if (Input::isKeyPressed(SDLK_n) && !Input::isKeyDown(SDLK_LCTRL)) { + if (Input::isKeyPressed(SDL_SCANCODE_N) && !Input::isKeyDown(SDL_SCANCODE_LCTRL)) { //if(!Person::players[0]->skeleton.free)Person::players[0]->damage+=500; Person::players[0]->RagDoll(0); //Person::players[0]->spurt=1; @@ -3219,7 +3231,7 @@ void doDebugKeys() 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; @@ -3227,7 +3239,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; @@ -3242,7 +3254,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; @@ -3251,22 +3263,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) { - //player[closest]=player[numplayers-1]; - //Person::players[closest]->skeleton=Person::players[numplayers-1]->skeleton; - numplayers--; + 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)) { + if (Input::isKeyPressed(SDL_SCANCODE_M) && Input::isKeyDown(SDL_SCANCODE_LSHIFT)) { //drawmode++; //if(drawmode>2)drawmode=0; if (objects.numobjects < max_objects - 1) { @@ -3293,159 +3303,152 @@ void doDebugKeys() } } - if (Input::isKeyPressed(SDLK_p) && Input::isKeyDown(SDLK_LSHIFT) && !Input::isKeyDown(SDLK_LCTRL)) { - if (numplayers < maxplayers - 1) { - Person::players[numplayers]->scale = .2 * 5 * Person::players[0]->scale; - Person::players[numplayers]->creature = rabbittype; - Person::players[numplayers]->howactive = editoractive; - Person::players[numplayers]->skeleton.id = numplayers; - Person::players[numplayers]->skeleton.Load((char *)":Data:Skeleton:Basic Figure", (char *)":Data:Skeleton:Basic Figurelow", (char *)":Data:Skeleton:Rabbitbelt", (char *)":Data:Models:Body.solid", (char *)":Data:Models:Body2.solid", (char *)":Data:Models:Body3.solid", (char *)":Data:Models:Body4.solid", (char *)":Data:Models:Body5.solid", (char *)":Data:Models:Body6.solid", (char *)":Data:Models:Body7.solid", (char *)":Data:Models:Bodylow.solid", (char *)":Data:Models:Belt.solid", 1); - - //texsize=512*512*3/texdetail/texdetail; - //if(!Person::players[numplayers]->loaded)Person::players[numplayers]->skeleton.skinText = new GLubyte[texsize]; - //Person::players[numplayers]->skeleton.skinText.resize(texsize); - - int k = abs(Random() % 2) + 1; - if (k == 0) { - Person::players[numplayers]->skeleton.drawmodel.textureptr.load(":Data:Textures:Fur3.jpg", 1, &Person::players[numplayers]->skeleton.skinText[0], &Person::players[numplayers]->skeleton.skinsize); - Person::players[numplayers]->whichskin = 0; - } else if (k == 1) { - Person::players[numplayers]->skeleton.drawmodel.textureptr.load(":Data:Textures:Fur.jpg", 1, &Person::players[numplayers]->skeleton.skinText[0], &Person::players[numplayers]->skeleton.skinsize); - Person::players[numplayers]->whichskin = 1; - } else { - Person::players[numplayers]->skeleton.drawmodel.textureptr.load(":Data:Textures:Fur2.jpg", 1, &Person::players[numplayers]->skeleton.skinText[0], &Person::players[numplayers]->skeleton.skinsize); - Person::players[numplayers]->whichskin = 2; - } + 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[numplayers]->skeleton.drawmodelclothes.textureptr.load(":Data:Textures:Belt.png", 1, 1); - Person::players[numplayers]->power = 1; - Person::players[numplayers]->speedmult = 1; - Person::players[numplayers]->animCurrent = bounceidleanim; - Person::players[numplayers]->animTarget = bounceidleanim; - Person::players[numplayers]->frameCurrent = 0; - Person::players[numplayers]->frameTarget = 1; - Person::players[numplayers]->target = 0; - Person::players[numplayers]->bled = 0; - Person::players[numplayers]->speed = 1 + (float)(Random() % 100) / 1000; - - Person::players[numplayers]->targetyaw = Person::players[0]->targetyaw; - Person::players[numplayers]->yaw = Person::players[0]->yaw; - - Person::players[numplayers]->velocity = 0; - Person::players[numplayers]->coords = Person::players[0]->coords; - Person::players[numplayers]->oldcoords = Person::players[numplayers]->coords; - Person::players[numplayers]->realoldcoords = Person::players[numplayers]->coords; - - Person::players[numplayers]->id = numplayers; - Person::players[numplayers]->skeleton.id = numplayers; - Person::players[numplayers]->updatedelay = 0; - Person::players[numplayers]->normalsupdatedelay = 0; - - Person::players[numplayers]->aitype = passivetype; - - if (Person::players[0]->creature == wolftype) { - headprop = Person::players[0]->proportionhead.x / 1.1; - bodyprop = Person::players[0]->proportionbody.x / 1.1; - armprop = Person::players[0]->proportionarms.x / 1.1; - legprop = Person::players[0]->proportionlegs.x / 1.1; - } + Person::players.back()->scale = .2 * 5 * Person::players[0]->scale; + Person::players.back()->creature = rabbittype; + Person::players.back()->howactive = editoractive; + Person::players.back()->skeleton.id = Person::players.size()-1; + Person::players.back()->skeleton.Load((char *)":Data:Skeleton:Basic Figure", (char *)":Data:Skeleton:Basic Figurelow", (char *)":Data:Skeleton:Rabbitbelt", (char *)":Data:Models:Body.solid", (char *)":Data:Models:Body2.solid", (char *)":Data:Models:Body3.solid", (char *)":Data:Models:Body4.solid", (char *)":Data:Models:Body5.solid", (char *)":Data:Models:Body6.solid", (char *)":Data:Models:Body7.solid", (char *)":Data:Models:Bodylow.solid", (char *)":Data:Models:Belt.solid", 1); + + int k = abs(Random() % 2) + 1; + if (k == 0) { + Person::players.back()->skeleton.drawmodel.textureptr.load(":Data:Textures:Fur3.jpg", 1, &Person::players.back()->skeleton.skinText[0], &Person::players.back()->skeleton.skinsize); + Person::players.back()->whichskin = 0; + } else if (k == 1) { + Person::players.back()->skeleton.drawmodel.textureptr.load(":Data:Textures:Fur.jpg", 1, &Person::players.back()->skeleton.skinText[0], &Person::players.back()->skeleton.skinsize); + Person::players.back()->whichskin = 1; + } else { + Person::players.back()->skeleton.drawmodel.textureptr.load(":Data:Textures:Fur2.jpg", 1, &Person::players.back()->skeleton.skinText[0], &Person::players.back()->skeleton.skinsize); + Person::players.back()->whichskin = 2; + } - if (Person::players[0]->creature == rabbittype) { - headprop = Person::players[0]->proportionhead.x / 1.2; - bodyprop = Person::players[0]->proportionbody.x / 1.05; - armprop = Person::players[0]->proportionarms.x / 1.00; - legprop = Person::players[0]->proportionlegs.x / 1.1; - } + Person::players.back()->skeleton.drawmodelclothes.textureptr.load(":Data:Textures:Belt.png", 1, 1); + Person::players.back()->power = 1; + Person::players.back()->speedmult = 1; + Person::players.back()->animCurrent = bounceidleanim; + Person::players.back()->animTarget = bounceidleanim; + Person::players.back()->frameCurrent = 0; + Person::players.back()->frameTarget = 1; + Person::players.back()->target = 0; + Person::players.back()->bled = 0; + Person::players.back()->speed = 1 + (float)(Random() % 100) / 1000; + + Person::players.back()->targetyaw = Person::players[0]->targetyaw; + Person::players.back()->yaw = Person::players[0]->yaw; + + Person::players.back()->velocity = 0; + Person::players.back()->coords = Person::players[0]->coords; + Person::players.back()->oldcoords = Person::players.back()->coords; + Person::players.back()->realoldcoords = Person::players.back()->coords; + + Person::players.back()->id = Person::players.size()-1; + Person::players.back()->updatedelay = 0; + Person::players.back()->normalsupdatedelay = 0; + + Person::players.back()->aitype = passivetype; + + if (Person::players[0]->creature == wolftype) { + headprop = Person::players[0]->proportionhead.x / 1.1; + bodyprop = Person::players[0]->proportionbody.x / 1.1; + armprop = Person::players[0]->proportionarms.x / 1.1; + legprop = Person::players[0]->proportionlegs.x / 1.1; + } - if (Person::players[numplayers]->creature == wolftype) { - Person::players[numplayers]->proportionhead = 1.1 * headprop; - Person::players[numplayers]->proportionbody = 1.1 * bodyprop; - Person::players[numplayers]->proportionarms = 1.1 * armprop; - Person::players[numplayers]->proportionlegs = 1.1 * legprop; - } + if (Person::players[0]->creature == rabbittype) { + headprop = Person::players[0]->proportionhead.x / 1.2; + bodyprop = Person::players[0]->proportionbody.x / 1.05; + armprop = Person::players[0]->proportionarms.x / 1.00; + legprop = Person::players[0]->proportionlegs.x / 1.1; + } - if (Person::players[numplayers]->creature == rabbittype) { - Person::players[numplayers]->proportionhead = 1.2 * headprop; - Person::players[numplayers]->proportionbody = 1.05 * bodyprop; - Person::players[numplayers]->proportionarms = 1.00 * armprop; - Person::players[numplayers]->proportionlegs = 1.1 * legprop; - Person::players[numplayers]->proportionlegs.y = 1.05 * legprop; - } + if (Person::players.back()->creature == wolftype) { + Person::players.back()->proportionhead = 1.1 * headprop; + Person::players.back()->proportionbody = 1.1 * bodyprop; + Person::players.back()->proportionarms = 1.1 * armprop; + Person::players.back()->proportionlegs = 1.1 * legprop; + } - Person::players[numplayers]->headless = 0; - Person::players[numplayers]->onfire = 0; + if (Person::players.back()->creature == rabbittype) { + Person::players.back()->proportionhead = 1.2 * headprop; + Person::players.back()->proportionbody = 1.05 * bodyprop; + Person::players.back()->proportionarms = 1.00 * armprop; + Person::players.back()->proportionlegs = 1.1 * legprop; + Person::players.back()->proportionlegs.y = 1.05 * legprop; + } - if (cellophane) { - Person::players[numplayers]->proportionhead.z = 0; - Person::players[numplayers]->proportionbody.z = 0; - Person::players[numplayers]->proportionarms.z = 0; - Person::players[numplayers]->proportionlegs.z = 0; - } + Person::players.back()->headless = 0; + Person::players.back()->onfire = 0; - Person::players[numplayers]->tempanimation.Load((char *)"Tempanim", 0, 0); - - Person::players[numplayers]->damagetolerance = 200; - - Person::players[numplayers]->protectionhead = Person::players[0]->protectionhead; - Person::players[numplayers]->protectionhigh = Person::players[0]->protectionhigh; - Person::players[numplayers]->protectionlow = Person::players[0]->protectionlow; - Person::players[numplayers]->armorhead = Person::players[0]->armorhead; - Person::players[numplayers]->armorhigh = Person::players[0]->armorhigh; - Person::players[numplayers]->armorlow = Person::players[0]->armorlow; - Person::players[numplayers]->metalhead = Person::players[0]->metalhead; - Person::players[numplayers]->metalhigh = Person::players[0]->metalhigh; - Person::players[numplayers]->metallow = Person::players[0]->metallow; - - Person::players[numplayers]->immobile = Person::players[0]->immobile; - - Person::players[numplayers]->numclothes = Person::players[0]->numclothes; - if (Person::players[numplayers]->numclothes) - for (int i = 0; i < Person::players[numplayers]->numclothes; i++) { - strcpy(Person::players[numplayers]->clothes[i], Person::players[0]->clothes[i]); - Person::players[numplayers]->clothestintr[i] = Person::players[0]->clothestintr[i]; - Person::players[numplayers]->clothestintg[i] = Person::players[0]->clothestintg[i]; - Person::players[numplayers]->clothestintb[i] = Person::players[0]->clothestintb[i]; - tintr = Person::players[numplayers]->clothestintr[i]; - tintg = Person::players[numplayers]->clothestintg[i]; - tintb = Person::players[numplayers]->clothestintb[i]; - AddClothes((char *)Person::players[numplayers]->clothes[i], &Person::players[numplayers]->skeleton.skinText[0]); - } - if (Person::players[numplayers]->numclothes) { - Person::players[numplayers]->DoMipmaps(); - } + if (cellophane) { + Person::players.back()->proportionhead.z = 0; + Person::players.back()->proportionbody.z = 0; + Person::players.back()->proportionarms.z = 0; + Person::players.back()->proportionlegs.z = 0; + } - Person::players[numplayers]->power = Person::players[0]->power; - Person::players[numplayers]->speedmult = Person::players[0]->speedmult; - - Person::players[numplayers]->damage = 0; - Person::players[numplayers]->permanentdamage = 0; - Person::players[numplayers]->superpermanentdamage = 0; - Person::players[numplayers]->deathbleeding = 0; - Person::players[numplayers]->bleeding = 0; - Person::players[numplayers]->numwaypoints = 0; - Person::players[numplayers]->waypoint = 0; - Person::players[numplayers]->jumppath = 0; - Person::players[numplayers]->weaponstuck = -1; - Person::players[numplayers]->weaponactive = -1; - Person::players[numplayers]->num_weapons = 0; - Person::players[numplayers]->bloodloss = 0; - Person::players[numplayers]->dead = 0; - - Person::players[numplayers]->loaded = 1; - - numplayers++; + Person::players.back()->tempanimation.Load((char *)"Tempanim", 0, 0); + + Person::players.back()->damagetolerance = 200; + + Person::players.back()->protectionhead = Person::players[0]->protectionhead; + Person::players.back()->protectionhigh = Person::players[0]->protectionhigh; + Person::players.back()->protectionlow = Person::players[0]->protectionlow; + Person::players.back()->armorhead = Person::players[0]->armorhead; + Person::players.back()->armorhigh = Person::players[0]->armorhigh; + Person::players.back()->armorlow = Person::players[0]->armorlow; + Person::players.back()->metalhead = Person::players[0]->metalhead; + Person::players.back()->metalhigh = Person::players[0]->metalhigh; + Person::players.back()->metallow = Person::players[0]->metallow; + + Person::players.back()->immobile = Person::players[0]->immobile; + + Person::players.back()->numclothes = Person::players[0]->numclothes; + if (Person::players.back()->numclothes) + for (int i = 0; i < Person::players.back()->numclothes; i++) { + strcpy(Person::players.back()->clothes[i], Person::players[0]->clothes[i]); + Person::players.back()->clothestintr[i] = Person::players[0]->clothestintr[i]; + Person::players.back()->clothestintg[i] = Person::players[0]->clothestintg[i]; + Person::players.back()->clothestintb[i] = Person::players[0]->clothestintb[i]; + tintr = Person::players.back()->clothestintr[i]; + tintg = Person::players.back()->clothestintg[i]; + tintb = Person::players.back()->clothestintb[i]; + AddClothes((char *)Person::players.back()->clothes[i], &Person::players.back()->skeleton.skinText[0]); + } + if (Person::players.back()->numclothes) { + Person::players.back()->DoMipmaps(); } - } - if (Input::isKeyPressed(SDLK_p) && Input::isKeyDown(SDLK_LSHIFT)) { - if (Person::players[numplayers - 1]->numwaypoints < 90) { - Person::players[numplayers - 1]->waypoints[Person::players[numplayers - 1]->numwaypoints] = Person::players[0]->coords; - Person::players[numplayers - 1]->waypointtype[Person::players[numplayers - 1]->numwaypoints] = editorpathtype; - Person::players[numplayers - 1]->numwaypoints++; + Person::players.back()->power = Person::players[0]->power; + Person::players.back()->speedmult = Person::players[0]->speedmult; + + Person::players.back()->damage = 0; + Person::players.back()->permanentdamage = 0; + Person::players.back()->superpermanentdamage = 0; + Person::players.back()->deathbleeding = 0; + Person::players.back()->bleeding = 0; + Person::players.back()->numwaypoints = 0; + Person::players.back()->waypoint = 0; + Person::players.back()->jumppath = 0; + Person::players.back()->weaponstuck = -1; + Person::players.back()->weaponactive = -1; + Person::players.back()->num_weapons = 0; + Person::players.back()->bloodloss = 0; + Person::players.back()->dead = 0; + + Person::players.back()->loaded = 1; + } + + 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; + Person::players.back()->numwaypoints++; } } - 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; @@ -3477,17 +3480,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]; @@ -3510,7 +3513,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--; @@ -3518,7 +3521,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++; @@ -3526,44 +3529,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); @@ -3574,8 +3577,8 @@ void doDebugKeys() void doJumpReversals() { - for (int k = 0; k < numplayers; k++) - for (int i = k; i < numplayers; i++) { + for (int k = 0; k < Person::players.size(); k++) + for (int i = k; i < Person::players.size(); i++) { if (i == k) continue; if ( Person::players[k]->skeleton.free == 0 && @@ -3675,7 +3678,7 @@ void doJumpReversals() void doAerialAcrobatics() { static XYZ facing, flatfacing; - for (int k = 0; k < numplayers; k++) { + for (int k = 0; k < Person::players.size(); k++) { Person::players[k]->turnspeed = 500; if ((Person::players[k]->isRun() && @@ -4076,7 +4079,7 @@ void doAttacks() if (Input::isKeyDown(attackkey) && !oldattackkey && !Person::players[0]->backkeydown) { - for (int k = 0; k < numplayers; k++) { + for (int k = 0; k < Person::players.size(); k++) { if ((Person::players[k]->animTarget == swordslashanim || Person::players[k]->animTarget == staffhitanim || Person::players[k]->animTarget == staffspinhitanim) && @@ -4089,7 +4092,7 @@ void doAttacks() if (!hostile || indialogue != -1) Person::players[0]->attackkeydown = 0; - for (int k = 0; k < numplayers; k++) { + for (int 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) { @@ -4107,7 +4110,7 @@ void doAttacks() if (Person::players[k]->jumppower <= 1) { Person::players[k]->jumppower -= 2; } else { - for (int i = 0; i < numplayers; i++) { + for (int i = 0; i < Person::players.size(); i++) { if (i == k) continue; if (Person::players[i]->animTarget == swordslashanim || @@ -4145,8 +4148,8 @@ void doAttacks() const int attackweapon = Person::players[k]->weaponactive == -1 ? 0 : weapons[Person::players[k]->weaponids[Person::players[k]->weaponactive]].getType(); //normal attacks (?) Person::players[k]->hasvictim = 0; - if (numplayers > 1) - for (int i = 0; i < numplayers; i++) { + if (Person::players.size() > 1) + for (int i = 0; i < Person::players.size(); i++) { if (i == k || !(k == 0 || i == 0)) continue; if (!Person::players[k]->hasvictim) @@ -4416,8 +4419,8 @@ void doAttacks() } } const bool hasstaff = attackweapon == staff; - if (k == 0 && numplayers > 1) - for (int i = 0; i < numplayers; i++) { + if (k == 0 && Person::players.size() > 1) + for (int i = 0; i < Person::players.size(); i++) { if (i == k) continue; if ((playerrealattackkeydown || Person::players[i]->dead || !hasstaff) && @@ -4542,7 +4545,7 @@ void doAttacks() } if (!Person::players[k]->hasvictim) { //find victim - for (int i = 0; i < numplayers; i++) { + for (int i = 0; i < Person::players.size(); i++) { if (i == k || !(i == 0 || k == 0)) continue; if (!Person::players[i]->skeleton.free) { @@ -4604,9 +4607,9 @@ void doPlayerCollisions() { static XYZ rotatetarget; static float collisionradius; - if (numplayers > 1) - for (int k = 0; k < numplayers; k++) - for (int i = k + 1; i < numplayers; i++) { + if (Person::players.size() > 1) + for (int k = 0; k < Person::players.size(); k++) + for (int 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 && @@ -4964,7 +4967,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 < numplayers; j++) + for (int 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) @@ -5085,7 +5088,7 @@ void doAI(int i) //wolf smell if (Person::players[i]->creature == wolftype) { XYZ windsmell; - for (int j = 0; j < numplayers; j++) { + for (int 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) { @@ -5108,7 +5111,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 < numplayers; j++) { + for (int 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) @@ -5298,7 +5301,7 @@ void doAI(int i) if (!Person::players[i]->ally) { int closest = -1; float closestdist = -1; - for (int k = 0; k < numplayers; k++) { + for (int 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 && @@ -5647,7 +5650,7 @@ void doAI(int i) Person::players[i]->isCrouch() || Person::players[i]->isRun())) { int target = -2; - for (int j = 0; j < numplayers; j++) + for (int j = 0; j < Person::players.size(); j++) if (j != i && !Person::players[j]->skeleton.free && Person::players[j]->hasvictim && (tutoriallevel == 1 && reversaltrain || @@ -6293,10 +6296,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; } @@ -6370,7 +6370,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(); @@ -6380,9 +6380,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; @@ -6391,10 +6391,7 @@ void MenuTick() fireSound(firestartsound); - for (int i = 0; i < 255; i++) { - displaytext[0][i] = 0; - } - displaychars[0] = 0; + displaytext[0].clear(); displayselected = 0; } @@ -6432,8 +6429,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; @@ -6444,16 +6441,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; @@ -6461,7 +6458,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.); @@ -6502,7 +6499,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) @@ -6563,7 +6560,7 @@ 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); @@ -6574,12 +6571,10 @@ void Game::Tick() chatting = 1; if (chatting) { - inputText(displaytext[0], &displayselected, &displaychars[0]); + inputText(displaytext[0], &displayselected); if (!waiting) { - if (displaychars[0]) { - for (int j = 0; j < 255; j++) - displaytext[0][j] = 0; - displaychars[0] = 0; + if (!displaytext[0].empty()) { + displaytext[0].clear(); displayselected = 0; } chatting = 0; @@ -6606,20 +6601,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; } } @@ -6633,7 +6623,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(); @@ -6650,10 +6640,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; @@ -6698,7 +6688,7 @@ void Game::Tick() special = 0; } if ((!hostile || dialoguetype[i] > 40 && dialoguetype[i] < 50) && - realdialoguetype < numplayers && + realdialoguetype < Person::players.size() && realdialoguetype > 0 && (dialoguegonethrough[i] == 0 || !special) && (special || Input::isKeyPressed(attackkey))) { @@ -6866,29 +6856,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; @@ -6913,32 +6903,32 @@ void Game::Tick() } } - for (int j = 0; j < numplayers; j++) { + for (int 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]) { @@ -6954,17 +6944,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]) { @@ -7001,7 +6991,7 @@ void Game::Tick() } if (dialoguetype[whichdialogue] > 49 && dialoguetype[whichdialogue] < 60) { hostile = 1; - for (int i = 1; i < numplayers; i++) { + for (int i = 1; i < Person::players.size(); i++) { Person::players[i]->aitype = attacktypecutoff; } } @@ -7040,11 +7030,11 @@ void Game::Tick() doJumpReversals(); - for (int k = 0; k < numplayers; k++) + for (int 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 < numplayers; k++) { + for (int 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); @@ -7056,8 +7046,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 && @@ -7078,7 +7068,7 @@ void Game::Tick() static bool movekey; //? - for (int i = 0; i < numplayers; i++) { + for (int i = 0; i < Person::players.size(); i++) { static float oldtargetyaw; if (!Person::players[i]->skeleton.free) { oldtargetyaw = Person::players[i]->targetyaw; @@ -7166,7 +7156,7 @@ void Game::Tick() } //avoid flaming players - for (int j = 0; j < numplayers; j++) + for (int 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) < @@ -7331,8 +7321,8 @@ void Game::Tick() Person::players[i]->isRun() || Person::players[i]->isIdle() || Person::players[i]->animTarget == rollanim || Person::players[i]->animTarget == backhandspringanim) { - if (numplayers > 1) - for (int j = 0; j < numplayers; j++) { + if (Person::players.size() > 1) + for (int j = 0; j < Person::players.size(); j++) { if (Person::players[i]->weaponactive == -1) if (j != i) if (Person::players[j]->num_weapons && @@ -7438,8 +7428,8 @@ void Game::Tick() Person::players[i]->isCrouch() || Person::players[i]->animTarget == sneakanim || Person::players[i]->isFlip()) - if (numplayers > 1) - for (int j = 0; j < numplayers; j++) { + if (Person::players.size() > 1) + for (int j = 0; j < Person::players.size(); j++) { if (i != j) if (tutoriallevel != 1 || tutorialstage == 49) if (hostile) @@ -7503,7 +7493,7 @@ void Game::Tick() } Person::players[i]->weaponactive = -1; - for (int j = 0; j < numplayers; j++) { + for (int j = 0; j < Person::players.size(); j++) { Person::players[j]->wentforweapon = 0; } } @@ -7599,15 +7589,15 @@ void Game::Tick() target = -2; if (i == 0) { Person::players[i]->superruntoggle = 1; - if (numplayers > 1) - for (int j = 0; j < numplayers; j++) + if (Person::players.size() > 1) + for (int 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 (numplayers > 1) - for (int j = 0; j < numplayers; j++) { + if (Person::players.size() > 1) + for (int 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] && @@ -7650,8 +7640,8 @@ void Game::Tick() Person::players[i]->superruntoggle = 0; target = -2; if (Person::players[i]->isCrouch()) { - if (numplayers > 1) - for (int j = 0; j < numplayers; j++) { + if (Person::players.size() > 1) + for (int j = 0; j < Person::players.size(); j++) { if (j != i && !Person::players[j]->skeleton.free && Person::players[j]->victim && @@ -7840,8 +7830,8 @@ void Game::Tick() //Dodge sweep? target = -2; - if (numplayers > 1) - for (int j = 0; j < numplayers; j++) { + if (Person::players.size() > 1) + for (int 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]) && @@ -7926,7 +7916,7 @@ void Game::Tick() } //Rotation - for (int k = 0; k < numplayers; k++) { + for (int 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; @@ -7963,7 +7953,7 @@ void Game::Tick() } //do animations - for (int k = 0; k < numplayers; k++) { + for (int 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); @@ -8101,7 +8091,7 @@ void Game::Tick() } } - if (Input::isKeyPressed(SDLK_F1)) + if (Input::isKeyPressed(SDL_SCANCODE_F1)) Screenshot(); } @@ -8147,7 +8137,7 @@ void Game::TickOnceAfter() realthreat = 0; musictype = leveltheme; - for (int i = 0; i < numplayers; i++) { + for (int i = 0; i < Person::players.size(); i++) { if ((Person::players[i]->aitype == attacktypecutoff || Person::players[i]->aitype == getweapontype || Person::players[i]->aitype == gethelptype || @@ -8264,7 +8254,7 @@ void Game::TickOnceAfter() winhotspot = true; int numalarmed = 0; - for (int i = 1; i < numplayers; i++) + for (int 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) @@ -8276,7 +8266,7 @@ void Game::TickOnceAfter() targetlevel = whichlevel; } alldead = true; - for (int i = 1; i < numplayers; i++) { + for (int i = 1; i < Person::players.size(); i++) { if (!Person::players[i]->dead && Person::players[i]->howactive < typedead1) { alldead = false; break;