X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;f=Source%2FGameTick.cpp;h=047c5f133feb8077a0d790bb01e0c808740afb09;hb=72621d52ae69fa4ecb4329437810d71860ae3ebc;hp=57d7722c70cb4e141074172765dfa2c16cff07d2;hpb=e557f9d3439aa7bcf5a4d951c99a9c20b56cb7bc;p=lugaru.git diff --git a/Source/GameTick.cpp b/Source/GameTick.cpp index 57d7722..047c5f1 100644 --- a/Source/GameTick.cpp +++ b/Source/GameTick.cpp @@ -27,22 +27,30 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include #endif +#include #include #include "Game.h" #include "openal_wrapper.h" #include "Settings.h" +#include "Input.h" +#include "Animation.h" +#include "Awards.h" + +#include using namespace std; +// Added more evilness needed for MSVC +#ifdef _MSC_VER + #define strncasecmp(s1, s2, n) _strnicmp(s1, s2, n) + #define snprintf(buf, size, format, ...) _sprintf_p(buf, size, format) +#endif + + extern float multiplier; extern XYZ viewer; extern int environment; -extern float texscale; extern Terrain terrain; -extern OPENAL_SAMPLE *samp[100]; -extern int channels[100]; -extern Sprites sprites; -extern int kTextureSize; extern float screenwidth,screenheight; extern float gravity; extern int detail; @@ -52,21 +60,13 @@ extern int slomo; extern float slomodelay; extern bool floatjump; extern float volume; -extern Animation animation[animation_count]; extern Light light; -extern float texdetail; -extern GLubyte bloodText[512*512*3]; -extern GLubyte wolfbloodText[512*512*3]; -extern float terraindetail; extern float camerashake; extern float woozy; extern float blackout; extern bool cellophane; extern bool musictoggle; extern int difficulty; -extern Weapons weapons; -extern Person player[maxplayers]; -extern int numplayers; extern int bloodtoggle; extern bool invertmouse; extern float windvar; @@ -76,46 +76,22 @@ extern bool ambientsound; extern bool mousejump; extern float viewdistance; extern bool freeze; -extern bool autoslomo; extern bool keyboardfrozen; -extern int netdatanew; extern bool loadingstuff; -extern char mapname[256]; extern XYZ windvector; -extern bool buttons[3]; extern bool debugmode; -static int music1; +static int leveltheme; extern int mainmenu; -extern int oldmainmenu; extern bool visibleloading; -extern int loadscreencolor; -extern float flashamount,flashr,flashg,flashb; -extern int flashdelay; extern XYZ envsound[30]; extern float envsoundvol[30]; extern int numenvsounds; extern float envsoundlife[30]; extern float usermousesensitivity; extern bool ismotionblur; -extern bool foliage; -extern bool trilinear; -extern bool damageeffects; -extern bool showpoints; -extern bool texttoggle; -extern bool alwaysblur; -extern float gamespeed; +extern bool showdamagebar; // (des)activate the damage bar extern bool decals; -extern bool vblsync; -extern bool immediate; -extern bool velocityblur; -extern int bonus; -extern int oldbonus; -extern float bonusvalue; -extern float bonustotal; -extern float bonustime; -extern float startbonustotal; extern float tintr,tintg,tintb; -extern float bonusnum[100]; extern bool skyboxtexture; extern float skyboxr; extern float skyboxg; @@ -137,11 +113,9 @@ extern bool reversaltrain; extern bool canattack; extern bool cananger; extern float damagedealt; -extern float damagetaken; extern int maptype; extern int editoractive; extern int editorpathtype; -extern bool oldbuttons[3]; extern float hostiletime; @@ -157,73 +131,13 @@ extern float hotspotsize[40]; extern char hotspottext[40][256]; extern int currenthotspot; -extern int kBitsPerPixel; extern int hostile; -extern int numaccounts; -extern int accountactive; -extern int accountdifficulty[10]; -extern int accountprogress[10]; -extern float accountpoints[10]; -extern float accounthighscore[10][50]; -extern float accountfasttime[10][50]; -extern bool accountunlocked[10][60]; -extern char accountname[10][256]; - extern bool stillloading; extern bool winfreeze; -extern int numfalls; -extern int numflipfail; -extern int numseen; -extern int numstaffattack; -extern int numswordattack; -extern int numknifeattack; -extern int numunarmedattack; -extern int numescaped; -extern int numflipped; -extern int numwallflipped; -extern int numthrowkill; -extern int numafterkill; -extern int numreversals; -extern int numattacks; -extern int maxalarmed; -extern int numresponded; - -extern int numdialogues; -extern int numdialogueboxes[max_dialogues]; -extern int dialoguetype[max_dialogues]; -extern int dialogueboxlocation[max_dialogues][max_dialoguelength]; -extern float dialogueboxcolor[max_dialogues][max_dialoguelength][3]; -extern int dialogueboxsound[max_dialogues][max_dialoguelength]; -extern char dialoguetext[max_dialogues][max_dialoguelength][128]; -extern char dialoguename[max_dialogues][max_dialoguelength][64]; -extern XYZ dialoguecamera[max_dialogues][max_dialoguelength]; -extern XYZ participantlocation[max_dialogues][10]; -extern int participantfocus[max_dialogues][max_dialoguelength]; -extern int participantaction[max_dialogues][max_dialoguelength]; -extern float participantrotation[max_dialogues][10]; -extern XYZ participantfacing[max_dialogues][max_dialoguelength][10]; -extern float dialoguecamerarotation[max_dialogues][max_dialoguelength]; -extern float dialoguecamerarotation2[max_dialogues][max_dialoguelength]; -extern int indialogue; -extern int whichdialogue; -extern int directing; -extern float dialoguetime; -extern int dialoguegonethrough[20]; - extern bool campaign; -extern float oldgamespeed; - -extern float accountcampaignhighscore[10]; -extern float accountcampaignfasttime[10]; -extern float accountcampaignscore[10]; -extern float accountcampaigntime[10]; - -extern int accountcampaignchoicesmade[10]; -extern int accountcampaignchoices[10][5000]; - static const char *rabbitskin[] = { ":Data:Textures:Fur3.jpg", ":Data:Textures:Fur.jpg", @@ -254,11 +168,6 @@ static bool stripfx(const char *str, const char *pfx) return !strncasecmp(str, pfx, strlen(pfx)); } -extern OPENAL_STREAM * strm[20]; -extern "C" void PlaySoundEx(int channel, OPENAL_SAMPLE *sptr, OPENAL_DSPUNIT *dsp, signed char startpaused); -extern "C" void PlayStreamEx(int chan, OPENAL_STREAM *sptr, OPENAL_DSPUNIT *dsp, signed char startpaused); - - static const char *cmd_names[] = { #define DECLARE_COMMAND(cmd) #cmd " ", #include "ConsoleCmds.h" @@ -277,194 +186,268 @@ static console_handler cmd_handlers[] = { #undef DECLARE_COMMAND }; -static void ch_quit(Game *game, const char *args) -{ - game->tryquit = 1; + + +// added utility functions -sf17k ============================================================= + +//TODO: try to hide these variables completely with a better interface +inline void setAnimation(int playerid,int animation){ + player[playerid].targetanimation=animation; + player[playerid].targetframe=0; + player[playerid].target=0; } -static void ch_map(Game *game, const char *args) -{ - char buf[64]; - snprintf(buf, 63, ":Data:Maps:%s", args); - game->Loadlevel(buf); - game->whichlevel = -2; - campaign = 0; +//TODO: this is incorrect but I'm afraid to change it and break something, +//probably causes quirky behavior that I might want to preserve +inline float roughDirection(XYZ vec){ + Normalise(&vec); + float angle=-asin(-vec.x)*180/M_PI; + if(vec.z<0) + angle=180-angle; + return angle; +} +inline float roughDirectionTo(XYZ start, XYZ end){ + return roughDirection(end-start); } -static void ch_save(Game *game, const char *args) -{ - char buf[64]; - int i, j, k, l, m, templength; - float headprop, bodyprop, armprop, legprop; - 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", player[0].coords.x, player[0].coords.y, player[0].coords.z, player[0].rotation, player[0].targetrotation, player[0].num_weapons); - if(player[0].num_weapons>0&&player[0].num_weapons<5) - for(j=0;jskeleton.joints[pplayer->skeleton.jointlabels[bodypart]]; } - fpackf(tfile, "Bi", player[0].numclothes); +inline float sq(float n) { return n*n; } - fpackf(tfile, "Bi Bi", player[0].whichskin, player[0].creature); +inline float stepTowardf(float from, float to, float by){ + if(fabs(from-to)to) return from-by; + else return from+by; +} - fpackf(tfile, "Bi", numdialogues); - if(numdialogues) - for(k=0;ktryquit = 1; +} - fpackf(tfile, "Bi", numhotspots); - if(numhotspots) - for(i=0;iLoadlevel(args); + game->whichlevel = -2; + campaign = 0; +} - fpackf(tfile, "Bi", numplayers); - if(numplayers>1&&numplayers0&&player[j].num_weapons<5) - for(k=0;k0&&player[0].num_weapons<5) + for(int j=0;jnumpathpoints); - if(game->numpathpoints) - for(j=0;jnumpathpoints;j++){ - fpackf(tfile, "Bf Bf Bf Bi", game->pathpoint[j].x, game->pathpoint[j].y, game->pathpoint[j].z, game->numpathpointconnect[j]); - for(k=0;knumpathpointconnect[j];k++){ - fpackf(tfile, "Bi", game->pathpointconnect[j][k]); - } - } + fpackf(tfile, "Bi", numplayers); + if(numplayersnumpathpoints); + for(int j=0;jnumpathpoints;j++){ + fpackf(tfile, "Bf Bf Bf Bi", game->pathpoint[j].x, game->pathpoint[j].y, game->pathpoint[j].z, game->numpathpointconnect[j]); + for(int k=0;knumpathpointconnect[j];k++) + fpackf(tfile, "Bi", game->pathpointconnect[j][k]); + } - fpackf(tfile, "Bf Bf Bf Bf", game->mapcenter.x, game->mapcenter.y, game->mapcenter.z, game->mapradius); + fpackf(tfile, "Bf Bf Bf Bf", game->mapcenter.x, game->mapcenter.y, game->mapcenter.z, game->mapradius); - fclose(tfile); + fclose(tfile); } static void ch_cellar(Game *game, const char *args) @@ -515,7 +498,7 @@ static void ch_size(Game *game, const char *args) static int find_closest() { int closest = 0; - float closestdist = 1.0/0.0; + float closestdist = std::numeric_limits::max(); for (int i = 1; i < numplayers; i++) { float distance; @@ -547,9 +530,7 @@ static void set_proportion(int pnum, const char *args) player[pnum].proportionbody=1.1*bodyprop; player[pnum].proportionarms=1.1*armprop; player[pnum].proportionlegs=1.1*legprop; - } - - if(player[pnum].creature==rabbittype){ + } else if(player[pnum].creature==rabbittype){ player[pnum].proportionhead=1.2*headprop; player[pnum].proportionbody=1.05*bodyprop; player[pnum].proportionarms=1.00*armprop; @@ -661,10 +642,10 @@ static void set_clothes(int pnum, Game *game, const char *args) char buf[64]; snprintf(buf, 63, ":Data:Textures:%s.png", args); - if (!game->AddClothes(buf,0,1,&player[pnum].skeleton.skinText[pnum],&player[pnum].skeleton.skinsize)) + if (!game->AddClothes(buf,&player[pnum].skeleton.skinText[pnum])) return; - player[pnum].DoMipmaps(5,0,0,player[pnum].skeleton.skinsize,player[pnum].skeleton.skinsize); + player[pnum].DoMipmaps(); strcpy(player[pnum].clothes[player[pnum].numclothes],buf); player[pnum].clothestintr[player[pnum].numclothes]=tintr; player[pnum].clothestintg[player[pnum].numclothes]=tintg; @@ -737,6 +718,11 @@ static void ch_wolfie(Game *game, const char *args) set_proportion(0, "1 1 1 1"); } +static void ch_wolfieisgod(Game *game, const char *args) +{ + ch_wolfie(game, args); +} + static void ch_wolf(Game *game, const char *args) { game->LoadTextureSave(":Data:Textures:Wolf.jpg",&player[0].skeleton.drawmodel.textureptr,1, @@ -755,6 +741,12 @@ static void ch_darkwolf(Game *game, const char *args) &player[0].skeleton.skinText[0],&player[0].skeleton.skinsize); } +static void ch_lizardwolf(Game *game, const char *args) +{ + game->LoadTextureSave(":Data:Textures:Lizardwolf.jpg",&player[0].skeleton.drawmodel.textureptr,1, + &player[0].skeleton.skinText[0],&player[0].skeleton.skinsize); +} + static void ch_white(Game *game, const char *args) { game->LoadTextureSave(":Data:Textures:fur.jpg",&player[0].skeleton.drawmodel.textureptr,1, @@ -775,8 +767,7 @@ static void ch_black(Game *game, const char *args) static void ch_sizemin(Game *game, const char *args) { - int i; - for (i = 1; i < numplayers; i++) + for (int i = 1; i < numplayers; i++) if (player[i].scale < 0.8 * 0.2) player[i].scale = 0.8 * 0.2; } @@ -809,24 +800,22 @@ static void ch_notindemo(Game *game, const char *args) static void ch_type(Game *game, const char *args) { - int i, n = sizeof(editortypenames) / sizeof(editortypenames[0]); - for (i = 0; i < n; i++) - if (stripfx(args, editortypenames[i])) - { - editoractive = i; - break; - } + 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(Game *game, const char *args) { - int i, n = sizeof(pathtypenames) / sizeof(pathtypenames[0]); - for (i = 0; i < n; i++) - if (stripfx(args, pathtypenames[i])) - { - editorpathtype = i; - break; - } + 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(Game *game, const char *args) @@ -848,7 +837,7 @@ static void ch_hs(Game *game, const char *args) static void ch_dialogue(Game *game, const char *args) { - int dlg, i, j; + int dlg; char buf1[32], buf2[64]; sscanf(args, "%d %31s", &dlg, buf1); @@ -862,7 +851,7 @@ static void ch_dialogue(Game *game, const char *args) ifstream ipstream(ConvertFileName(buf2)); ipstream.ignore(256,':'); ipstream >> numdialogueboxes[numdialogues]; - for(i=0;i> dialogueboxsound[numdialogues][i]; } - for(i=0;i> numdialogueboxes[whichdi]; - for(i=0;i= numdialogues) return; - for(i=0;i Tick() <*****/ -extern void ScreenShot(const char * fname); +extern bool save_image(const char * fname); void Screenshot (void) { char temp[1024]; @@ -1192,252 +1128,36 @@ void Screenshot (void) #else mkdir("Screenshots", S_IRWXU); #endif - - ScreenShot(temp/*"Screenshots\\Screenshot.png"*/); - - /*FSSpec MAC_file; - GraphicsExportComponent QT_exporter; - OSErr MAC_error_code; - CGrafPtr MAC_currentPort; - GDHandle MAC_currentDevice; - unsigned char* MAC_pixels; - Rect MAC_picture_rectangle; - GWorldPtr MAC_offscreen_graphics_port; - - static int numscreenshots=0; - - // Make an FSSpec - static char buf[256]; - if(numscreenshots==0){ - buf[0]=26; - buf[1]=':'; - buf[2]='S'; - buf[3]='c'; - buf[4]='r'; - buf[5]='e'; - buf[6]='e'; - buf[7]='n'; - buf[8]='s'; - buf[9]='h'; - buf[10]='o'; - buf[11]='t'; - buf[12]='s'; - buf[13]=':'; - buf[14]='S'; - buf[15]='c'; - buf[16]='r'; - buf[17]='e'; - buf[18]='e'; - buf[19]='n'; - buf[20]='s'; - buf[21]='h'; - buf[22]='o'; - buf[23]='t'; - buf[24]='0'; - buf[25]='0'; - buf[26]='0'; - } - - FInfo *fndrInfo; - FSMakeFSSpec(0, 0, (unsigned char*)buf, &MAC_file); - while(!FSpGetFInfo (&MAC_file, fndrInfo)){ - FSMakeFSSpec(0, 0, (unsigned char*)buf, &MAC_file); - if(!FSpGetFInfo (&MAC_file, fndrInfo)){ - numscreenshots++; - buf[26]++; - if(buf[26]==':'){ - buf[26]='0'; - buf[25]++; - if(buf[25]==':'){ - buf[25]='0'; - buf[24]++; - if(buf[24]==':'){ - buf[24]='9'; - buf[25]='9'; - buf[26]='9'; - } - } - } - } - } - - - // Get the GWorld - GWorldPtr MAC_gWorld = (CGrafPtr) FrontWindow(); - //assert(MAC_gWorld != NULL); - - // Allocate memory for loading image - MAC_pixels = new unsigned char[(int)(screenheight * screenwidth * 4)]; - if (MAC_pixels == NULL) { - //UTIL_Error("Could not create Texture data."); - return; - } - - // Get GWorld - ::GetGWorld(&MAC_currentPort, &MAC_currentDevice); - - // Make a picture Rectangle - MAC_picture_rectangle.left = 0; - MAC_picture_rectangle.right = screenwidth; - MAC_picture_rectangle.top = 0; - MAC_picture_rectangle.bottom = screenheight; - - // Create new offscreen GWorld - MAC_error_code = ::QTNewGWorldFromPtr (&MAC_offscreen_graphics_port, k32ARGBPixelFormat, &MAC_picture_rectangle, NULL, NULL, 0, (char *) MAC_pixels, screenwidth * 4); - if (MAC_error_code) { - ::SetGWorld(MAC_currentPort, MAC_currentDevice); - delete MAC_pixels; - //UTIL_Error("Could not create offscreen GWorld. "); - return; - - } - - // Copy OpenGL Context to new GWorld - glReadBuffer(GL_FRONT); - glReadPixels(0,0,screenwidth,screenheight,GL_RGBA,GL_UNSIGNED_BYTE,MAC_pixels); - - // Swizzle texture - for (unsigned long byte = 0; byte < screenheight * screenwidth * 4; byte+=4) { - unsigned char temp = MAC_pixels[byte+0]; - MAC_pixels[byte+0] = MAC_pixels[byte+3]; - MAC_pixels[byte+3] = MAC_pixels[byte+2]; - MAC_pixels[byte+2] = MAC_pixels[byte+1]; - MAC_pixels[byte+1] = temp; - } - - // Flip the image :( This could probably be optimized - int vert; - int src_index; - int dst_index; - unsigned char temp; - for (int horz = 0; horz < screenwidth; ++horz) - for (vert = 0; vert < screenheight / 2; ++vert) { - src_index = (screenwidth * vert + horz) * 4; - dst_index = (screenwidth * (screenheight - vert - 1) + horz) * 4; - - temp=MAC_pixels[src_index+0]; - MAC_pixels[src_index+0]=MAC_pixels[dst_index+0]; - MAC_pixels[dst_index+0]=temp; - - temp=MAC_pixels[src_index+1]; - MAC_pixels[src_index+1]=MAC_pixels[dst_index+1]; - MAC_pixels[dst_index+1]=temp; - - temp=MAC_pixels[src_index+2]; - MAC_pixels[src_index+2]=MAC_pixels[dst_index+2]; - MAC_pixels[dst_index+2]=temp; - - temp=MAC_pixels[src_index+3]; - MAC_pixels[src_index+3]=MAC_pixels[dst_index+3]; - MAC_pixels[dst_index+3]=temp; - } - - - - // Export the Gworld - MAC_error_code = OpenADefaultComponent(GraphicsExporterComponentType, kQTFileTypeBMP, &QT_exporter); - if (MAC_error_code) { - //UTIL_Warning("Unable to export screenshot."); - ::SetGWorld(MAC_currentPort, MAC_currentDevice); - ::DisposeGWorld(MAC_offscreen_graphics_port); - delete MAC_pixels; - return; - } - - MAC_error_code = GraphicsExportSetInputGWorld(QT_exporter,MAC_offscreen_graphics_port); - if (MAC_error_code) { - ::CloseComponent(QT_exporter); - ::SetGWorld(MAC_currentPort, MAC_currentDevice); - ::DisposeGWorld(MAC_offscreen_graphics_port); - delete MAC_pixels; - //UTIL_Warning("Unable to export screenshot."); - return; - } - - MAC_error_code = GraphicsExportSetOutputFile(QT_exporter,&MAC_file); - if (MAC_error_code) { - ::CloseComponent(QT_exporter); - ::SetGWorld(MAC_currentPort, MAC_currentDevice); - ::DisposeGWorld(MAC_offscreen_graphics_port); - delete MAC_pixels; - //UTIL_Warning("Unable to export screenshot."); - return; - } - - MAC_error_code = GraphicsExportDoExport(QT_exporter,NULL); - if (MAC_error_code) { - ::CloseComponent(QT_exporter); - ::SetGWorld(MAC_currentPort, MAC_currentDevice); - ::DisposeGWorld(MAC_offscreen_graphics_port); - delete MAC_pixels; - //UTIL_Warning("Unable to export screenshot."); - return; - } - - ::CloseComponent(QT_exporter); - ::SetGWorld(MAC_currentPort, MAC_currentDevice); - ::DisposeGWorld(MAC_offscreen_graphics_port); - - delete MAC_pixels;*/ + + save_image(temp); } - - -void Game::SetUpLighting(){ - if(environment==snowyenvironment){ - light.color[0]=.65; - light.color[1]=.65; - light.color[2]=.7; - light.ambient[0]=.4; - light.ambient[1]=.4; - light.ambient[2]=.44; - } - if(environment==desertenvironment){ - light.color[0]=.95; - light.color[1]=.95; - light.color[2]=.95; - light.ambient[0]=.4; - light.ambient[1]=.35; - light.ambient[2]=.3; - } - - if(environment==grassyenvironment){ - light.color[0]=.95; - light.color[1]=.95; - light.color[2]=1; - light.ambient[0]=.4; - light.ambient[1]=.4; - light.ambient[2]=.44; - } - if(!skyboxtexture){ - light.color[0]=1; - light.color[1]=1; - light.color[2]=1; - light.ambient[0]=.4; - light.ambient[1]=.4; - light.ambient[2]=.4; - } +void Game::SetUpLighting(){ + if(environment==snowyenvironment) + light.setColors(.65,.65,.7,.4,.4,.44); + if(environment==desertenvironment) + light.setColors(.95,.95,.95,.4,.35,.3); + if(environment==grassyenvironment) + light.setColors(.95,.95,1,.4,.4,.44); + if(!skyboxtexture) + light.setColors(1,1,1,.4,.4,.4); float average; average=(skyboxlightr+skyboxlightg+skyboxlightb)/3; light.color[0]*=(skyboxlightr+average)/2; light.color[1]*=(skyboxlightg+average)/2; light.color[2]*=(skyboxlightb+average)/2; - light.ambient[0]=light.ambient[0]*(skyboxlightr+average)/2*1; - light.ambient[1]=light.ambient[1]*(skyboxlightg+average)/2*1; - light.ambient[2]=light.ambient[2]*(skyboxlightb+average)/2*1; - /* - light.ambient[0]=0; - light.ambient[1]=0; - light.ambient[2]=0; */ + light.ambient[0]*=(skyboxlightr+average)/2; + light.ambient[1]*=(skyboxlightg+average)/2; + light.ambient[2]*=(skyboxlightb+average)/2; } int Game::findPathDist(int start,int end){ - int i,j,k,smallestcount,count,connected; + int smallestcount,count,connected; int last,last2,last3,last4; int closest; smallestcount=1000; - for(i=0;i<50;i++){ + for(int i=0;i<50;i++){ count=0; last=start; last2=-1; @@ -1445,23 +1165,23 @@ int Game::findPathDist(int start,int end){ last4=-1; while(last!=end&&count<30){ closest=-1; - for(j=0;jendpoint.x)minx=endpoint.x; - miny=startpoint.y; - if(miny>endpoint.y)miny=endpoint.y; - minz=startpoint.z; - if(minz>endpoint.z)minz=endpoint.z; - - maxx=startpoint.x; - if(maxxminx-objects.model[i].boundingsphereradius&&objects.position[i].xminy-objects.model[i].boundingsphereradius&&objects.position[i].yminz-objects.model[i].boundingsphereradius&&objects.position[i].zminx-objects.model[i].boundingsphereradius&& + objects.position[i].xminy-objects.model[i].boundingsphereradius&& + objects.position[i].yminz-objects.model[i].boundingsphereradius&& + objects.position[i].zendpoint.x)minx=endpoint.x; - miny=startpoint.y; - if(miny>endpoint.y)miny=endpoint.y; - minz=startpoint.z; - if(minz>endpoint.z)minz=endpoint.z; - - maxx=startpoint.x; - if(maxxminx-objects.model[what].boundingsphereradius&&objects.position[what].xminy-objects.model[what].boundingsphereradius&&objects.position[what].yminz-objects.model[what].boundingsphereradius&&objects.position[what].zminx-objects.model[what].boundingsphereradius&& + objects.position[what].xminy-objects.model[what].boundingsphereradius&& + objects.position[what].yminz-objects.model[what].boundingsphereradius&& + objects.position[what].z= 0 && which <= 15){ + char buf[32]; + snprintf(buf, 32, "map%d", which + 1); // challenges + Loadlevel(buf); + }else + Loadlevel("mapsave"); +} -void Game::Loadlevel(char *name){ - int i,j,k,l,m; - static int oldlevel; +void Game::Loadlevel(const char *name){ int templength; float lamefloat; - int lameint; + static const char *pfx = ":Data:Maps:"; + char *buf; float headprop,legprop,armprop,bodyprop; LOGFUNC; LOG(std::string("Loading level...") + name); - - if(!gameon)visibleloading=1; - - if(stealthloading)visibleloading=0; - - if(!stillloading)loadtime=0; + cout << "Loading level..." << name << endl; + + if(!gameon) + visibleloading=1; + if(stealthloading) + visibleloading=0; + if(!stillloading) + loadtime=0; gamestarted=1; numenvsounds=0; - //visibleloading=1; - if(tutoriallevel!=-1)tutoriallevel=0; - else tutoriallevel=1; - if(tutoriallevel==1)tutorialstage=0; - if(tutorialstage==0){ + if(tutoriallevel!=-1) + tutoriallevel=0; + else + tutoriallevel=1; + + if(tutoriallevel==1) + tutorialstage=0; + if(tutorialstage==0) { tutorialstagetime=0; tutorialmaxtime=1; } loadingstuff=1; - if(!firstload){ - oldlevel=50; - } - OPENAL_SetPaused(channels[whooshsound], true); - OPENAL_SetPaused(channels[stream_firesound], true); + pause_sound(whooshsound); + pause_sound(stream_firesound); // Change the map filename into something that is os specific - char *FixedFN = ConvertFileName(name); + buf = (char*) alloca(strlen(pfx) + strlen(name) + 1); + sprintf(buf, "%s%s", pfx, name); + const char *FixedFN = ConvertFileName(buf); int mapvers; - FILE *tfile; + FILE *tfile; + char* buff=getcwd(NULL,0); + cout << buff << " " << FixedFN << endl; + free(buff); tfile=fopen( FixedFN, "rb" ); - if(tfile) - { - OPENAL_SetPaused(channels[stream_firesound], true); - - + if(tfile) { + cout << "existe" << endl; + pause_sound(stream_firesound); scoreadded=0; windialogue=0; - hostiletime=0; - won=0; - //campaign=0; - animation[bounceidleanim].Load((char *)":Data:Animations:Idle",middleheight,neutral); + animation[bounceidleanim].Load((char *)"Idle",middleheight,neutral); numdialogues=0; - for(i=0;i<20;i++) - { + for(int i=0;i<20;i++) dialoguegonethrough[i]=0; - } indialogue=-1; cameramode=0; @@ -1869,10 +1484,13 @@ void Game::Loadlevel(char *name){ damagedealt=0; damagetaken=0; - if(accountactive!=-1)difficulty=accountdifficulty[accountactive]; + if(accountactive) + difficulty=accountactive->getDifficulty(); - if(difficulty!=2)minimap=1; - else minimap=0; + if(difficulty!=2) + minimap=1; + else + minimap=0; numhotspots=0; currenthotspot=-1; @@ -1886,10 +1504,8 @@ void Game::Loadlevel(char *name){ freeze=0; winfreeze=0; - for(i=0;i<100;i++) - { + for(int i=0;i<100;i++) bonusnum[i]=0; - } numfalls=0; numflipfail=0; @@ -1912,86 +1528,84 @@ void Game::Loadlevel(char *name){ bonus=0; gameon=1; changedelay=0; - if(console) - { - PlaySoundEx( consolesuccesssound, samp[consolesuccesssound], NULL, true); - OPENAL_SetVolume(channels[consolesuccesssound], 256); - OPENAL_SetPaused(channels[consolesuccesssound], false); + if(console){ + emit_sound_np(consolesuccesssound); freeze=0; - console=0; + console=false; + cout << "console contente" << endl; } - if(!stealthloading) - { + if(!stealthloading){ terrain.numdecals=0; - sprites.numsprites=0; - for(i=0;i=15)funpackf(tfile, "Bi", &indemo); - else indemo=0; - if(mapvers>=5)funpackf(tfile, "Bi", &maptype); - else maptype=mapkilleveryone; - if(mapvers>=6)funpackf(tfile, "Bi", &hostile); - else hostile=1; - if(mapvers>=4)funpackf(tfile, "Bf Bf", &viewdistance, &fadestart); + if(mapvers>=15) + funpackf(tfile, "Bi", &indemo); + else + indemo=0; + if(mapvers>=5) + funpackf(tfile, "Bi", &maptype); + else + maptype=mapkilleveryone; + if(mapvers>=6) + funpackf(tfile, "Bi", &hostile); else - { + hostile=1; + if(mapvers>=4) + funpackf(tfile, "Bf Bf", &viewdistance, &fadestart); + else{ viewdistance=100; fadestart=.6; } - if(mapvers>=2)funpackf(tfile, "Bb Bf Bf Bf", &skyboxtexture, &skyboxr, &skyboxg, &skyboxb); - else - { + if(mapvers>=2) + funpackf(tfile, "Bb Bf Bf Bf", &skyboxtexture, &skyboxr, &skyboxg, &skyboxb); + else{ skyboxtexture=1; skyboxr=1; skyboxg=1; skyboxb=1; } - if(mapvers>=10)funpackf(tfile, "Bf Bf Bf", &skyboxlightr, &skyboxlightg, &skyboxlightb); - else - { + if(mapvers>=10) + funpackf(tfile, "Bf Bf Bf", &skyboxlightr, &skyboxlightg, &skyboxlightb); + else{ skyboxlightr=skyboxr; skyboxlightg=skyboxg; skyboxlightb=skyboxb; } - if(!stealthloading)funpackf(tfile, "Bf Bf Bf Bf Bf Bi", &player[0].coords.x,&player[0].coords.y,&player[0].coords.z,&player[0].rotation,&player[0].targetrotation, &player[0].num_weapons); - if(stealthloading)funpackf(tfile, "Bf Bf Bf Bf Bf Bi", &lamefloat,&lamefloat,&lamefloat,&lamefloat,&lamefloat, &player[0].num_weapons); + if(!stealthloading) + funpackf(tfile, "Bf Bf Bf Bf Bf Bi", &player[0].coords.x,&player[0].coords.y,&player[0].coords.z,&player[0].rotation,&player[0].targetrotation, &player[0].num_weapons); + if(stealthloading) + funpackf(tfile, "Bf Bf Bf Bf Bf Bi", &lamefloat,&lamefloat,&lamefloat,&lamefloat,&lamefloat, &player[0].num_weapons); player[0].originalcoords=player[0].coords; if(player[0].num_weapons>0&&player[0].num_weapons<5) - { - for(j=0;j=9) - { funpackf(tfile, "Bi Bi", &player[0].whichskin, &player[0].creature); - } - else - { + else{ player[0].whichskin=0; player[0].creature=rabbittype; } - for(i=0;i=8) - { + //dialogues + if(mapvers>=8){ funpackf(tfile, "Bi", &numdialogues); - if(numdialogues) - { - for(k=0;k128||templength<=0)templength=128; - for(m=0;m64||templength<=0)templength=64; - for(m=0;m128||templength<=0) + templength=128; + int m; + for(m=0;m64||templength<=0)templength=64; + for(m=0;m=7) - { + if(mapvers>=7){ funpackf(tfile, "Bi", &numhotspots); - if(numhotspots) - { - for(i=0;imaxdistance) - { - whichclosest=i; + if(tempdist>maxdistance){ + //~ whichclosest=i; maxdistance=tempdist; } } objects.radius=fast_sqrt(maxdistance); } - if(visibleloading){loadscreencolor=4; LoadingScreen();} + if(visibleloading) + LoadingScreen(); //mapcenter=objects.center; //mapradius=objects.radius; funpackf(tfile, "Bi", &numplayers); int howmanyremoved=0; bool removeanother=0; - if(numplayers>1&&numplayers1&&numplayers=5)funpackf(tfile, "Bi", &player[i-howmanyremoved].howactive); - else player[i-howmanyremoved].howactive=typeactive; - if(mapvers>=3)funpackf(tfile, "Bf",&player[i-howmanyremoved].scale); - else player[i-howmanyremoved].scale=-1; - if(mapvers>=11)funpackf(tfile, "Bb",&player[i-howmanyremoved].immobile); - else player[i-howmanyremoved].immobile=0; - if(mapvers>=12)funpackf(tfile, "Bf",&player[i-howmanyremoved].rotation); - else player[i-howmanyremoved].rotation=0; + if(mapvers>=5) + funpackf(tfile, "Bi", &player[i-howmanyremoved].howactive); + else + player[i-howmanyremoved].howactive=typeactive; + if(mapvers>=3) + funpackf(tfile, "Bf",&player[i-howmanyremoved].scale); + else + player[i-howmanyremoved].scale=-1; + if(mapvers>=11) + funpackf(tfile, "Bb",&player[i-howmanyremoved].immobile); + else + player[i-howmanyremoved].immobile=0; + if(mapvers>=12) + funpackf(tfile, "Bf",&player[i-howmanyremoved].rotation); + else + player[i-howmanyremoved].rotation=0; player[i-howmanyremoved].targetrotation=player[i-howmanyremoved].rotation; if(player[i-howmanyremoved].num_weapons<0||player[i-howmanyremoved].num_weapons>5){ removeanother=1; howmanyremoved++; } - if(!removeanother) - { - if(player[i-howmanyremoved].num_weapons>0&&player[i-howmanyremoved].num_weapons<5) - { - for(j=0;j0&&player[i-howmanyremoved].num_weapons<5){ + for(int j=0;j=5)funpackf(tfile, "Bi", &player[i-howmanyremoved].waypointtype[j]); - else player[i-howmanyremoved].waypointtype[j] = wpkeepwalking; + if(mapvers>=5) + funpackf(tfile, "Bi", &player[i-howmanyremoved].waypointtype[j]); + else + player[i-howmanyremoved].waypointtype[j] = wpkeepwalking; } funpackf(tfile, "Bi", &player[i-howmanyremoved].waypoint); - if(player[i-howmanyremoved].waypoint>player[i-howmanyremoved].numwaypoints-1)player[i-howmanyremoved].waypoint=0; + if(player[i-howmanyremoved].waypoint>player[i-howmanyremoved].numwaypoints-1) + player[i-howmanyremoved].waypoint=0; funpackf(tfile, "Bf Bf Bf", &player[i-howmanyremoved].armorhead, &player[i-howmanyremoved].armorhigh, &player[i-howmanyremoved].armorlow); funpackf(tfile, "Bf Bf Bf", &player[i-howmanyremoved].protectionhead, &player[i-howmanyremoved].protectionhigh, &player[i-howmanyremoved].protectionlow); funpackf(tfile, "Bf Bf Bf", &player[i-howmanyremoved].metalhead, &player[i-howmanyremoved].metalhigh, &player[i-howmanyremoved].metallow); funpackf(tfile, "Bf Bf", &player[i-howmanyremoved].power, &player[i-howmanyremoved].speedmult); - if(mapvers>=4)funpackf(tfile, "Bf Bf Bf Bf", &headprop, &bodyprop, &armprop, &legprop); - else - { + if(mapvers>=4) + funpackf(tfile, "Bf Bf Bf Bf", &headprop, &bodyprop, &armprop, &legprop); + else{ headprop=1; bodyprop=1; armprop=1; legprop=1; } - if(player[i-howmanyremoved].creature==wolftype) - { + if(player[i-howmanyremoved].creature==wolftype){ player[i-howmanyremoved].proportionhead=1.1*headprop; player[i-howmanyremoved].proportionbody=1.1*bodyprop; player[i-howmanyremoved].proportionarms=1.1*armprop; player[i-howmanyremoved].proportionlegs=1.1*legprop; } - if(player[i-howmanyremoved].creature==rabbittype) - { + if(player[i-howmanyremoved].creature==rabbittype){ player[i-howmanyremoved].proportionhead=1.2*headprop; player[i-howmanyremoved].proportionbody=1.05*bodyprop; player[i-howmanyremoved].proportionarms=1.00*armprop; @@ -2242,13 +1822,11 @@ void Game::Loadlevel(char *name){ } funpackf(tfile, "Bi", &player[i-howmanyremoved].numclothes); - if(player[i-howmanyremoved].numclothes) - { - for(k=0;k30||numpathpoints<0) numpathpoints=0; - if(numpathpoints) - { - for(j=0;jmaxplayers-1)numplayers=maxplayers-1; - for(i=0;imaxplayers-1) + numplayers=maxplayers-1; + for(int i=0;i20) - OPENAL_StopSound(i); - } -*/ + if(visibleloading) + LoadingScreen(); + //~ for(int i=0;i2)newdetail=detail; - if(newdetail<0)newdetail=detail; - if(newscreenwidth<0)newscreenwidth=screenwidth; - if(newscreenheight<0)newscreenheight=screenheight; - - SaveSettings(*this); - } - if(mainmenu==4||mainmenu==5||mainmenu==6||mainmenu==7||mainmenu==9||mainmenu==13||mainmenu==10||mainmenu==11||mainmenu==100){ - float gLoc[3]={0,0,0}; - float vel[3]={0,0,0}; - OPENAL_Sample_SetMinMaxDistance(samp[fireendsound], 9999.0f, 99999.0f); - PlaySoundEx( fireendsound, samp[fireendsound], NULL, true); - OPENAL_3D_SetAttributes(channels[fireendsound], gLoc, vel); - OPENAL_SetVolume(channels[fireendsound], 256); - OPENAL_SetPaused(channels[fireendsound], false); - OPENAL_Sample_SetMinMaxDistance(samp[fireendsound], 8.0f, 2000.0f); - - flashr=1; - flashg=0; - flashb=0; - flashamount=1; - flashdelay=1; - } - if(mainmenu==3&&gameon)mainmenu=2; - if(mainmenu==3&&!gameon)mainmenu=1; - if(mainmenu==5&&gameon)mainmenu=2; - if(mainmenu==5&&!gameon)mainmenu=1; - if(mainmenu==4)mainmenu=3; - if(mainmenu==6)mainmenu=5; - if(mainmenu==7)mainmenu=1; - if(mainmenu==9)mainmenu=5; - if(mainmenu==11)mainmenu=5; - if(mainmenu==13)mainmenu=12; - if(mainmenu==10)mainmenu=5; - if(mainmenu==100){ - mainmenu=5; - gameon=0; - winfreeze=0; - } - mainmenutogglekeydown=1; - } - if(!IsKeyDown(theKeyMap, MAC_ESCAPE_KEY)){ - mainmenutogglekeydown=0; - } - } - - /*static bool minimaptogglekeydown; - if(IsKeyDown(theKeyMap, MAC_TAB_KEY)&&!minimaptogglekeydown){ - minimap=1-minimap; - minimaptogglekeydown=1; - } - if(!IsKeyDown(theKeyMap, MAC_TAB_KEY)){ - minimaptogglekeydown=0; - } - */ - - static bool minimaptogglekeydown; - if(IsKeyDown(theKeyMap, MAC_TAB_KEY)&&!minimaptogglekeydown&&tutoriallevel){ - if(tutorialstage!=51) - tutorialstagetime=tutorialmaxtime; - PlaySoundEx( consolefailsound, samp[consolefailsound], NULL, true); - OPENAL_SetVolume(channels[consolefailsound], 128); - OPENAL_SetPaused(channels[consolefailsound], false); - minimaptogglekeydown=1; - } - if(!IsKeyDown(theKeyMap, MAC_TAB_KEY)){ - minimaptogglekeydown=0; - } - - if(mainmenu){ - //menu buttons - if(mainmenu==1||mainmenu==2){ - if(Button()&&!oldbutton&&selected==1){ - if(!gameon){ - float gLoc[3]={0,0,0}; - float vel[3]={0,0,0}; - OPENAL_Sample_SetMinMaxDistance(samp[firestartsound], 9999.0f, 99999.0f); - PlaySoundEx( firestartsound, samp[firestartsound], NULL, true); - OPENAL_3D_SetAttributes(channels[firestartsound], gLoc, vel); - OPENAL_SetVolume(channels[firestartsound], 256); - OPENAL_SetPaused(channels[firestartsound], false); - OPENAL_Sample_SetMinMaxDistance(samp[firestartsound], 8.0f, 2000.0f); - - flashr=1; - flashg=0; - flashb=0; - flashamount=1; - flashdelay=1; - - //new game - if(accountactive!=-1)mainmenu=5; - else mainmenu=7; - /* - startbonustotal=0; - - loading=2; - loadtime=0; - if(firstload)TickOnceAfter(); - if(!firstload)LoadStuff(); - else { - Loadlevel(0); - } - mainmenu=0; - gameon=1; - OPENAL_SetPaused(channels[music3], true); */ - } - else - { - //resume - mainmenu=0; - OPENAL_SetPaused(channels[stream_music3], true); - OPENAL_SetPaused(channels[music1], false); - } - } - - if(Button()&&!oldbutton&&selected==2){ - float gLoc[3]={0,0,0}; - float vel[3]={0,0,0}; - OPENAL_Sample_SetMinMaxDistance(samp[firestartsound], 9999.0f, 99999.0f); - PlaySoundEx( firestartsound, samp[firestartsound], NULL, true); - OPENAL_3D_SetAttributes(channels[firestartsound], gLoc, vel); - OPENAL_SetVolume(channels[firestartsound], 256); - OPENAL_SetPaused(channels[firestartsound], false); - OPENAL_Sample_SetMinMaxDistance(samp[firestartsound], 8.0f, 2000.0f); - - flashr=1; - flashg=0; - flashb=0; - flashamount=1; - flashdelay=1; - - //options - - mainmenu=3; - - if(newdetail>2)newdetail=detail; - if(newdetail<0)newdetail=detail; - if(newscreenwidth>3000)newscreenwidth=screenwidth; - if(newscreenwidth<0)newscreenwidth=screenwidth; - if(newscreenheight>3000)newscreenheight=screenheight; - if(newscreenheight<0)newscreenheight=screenheight; - } - - if(Button()&&!oldbutton&&selected==3){ - float gLoc[3]={0,0,0}; - float vel[3]={0,0,0}; - OPENAL_Sample_SetMinMaxDistance(samp[fireendsound], 9999.0f, 99999.0f); - PlaySoundEx( fireendsound, samp[fireendsound], NULL, true); - OPENAL_3D_SetAttributes(channels[fireendsound], gLoc, vel); - OPENAL_SetVolume(channels[fireendsound], 256); - OPENAL_SetPaused(channels[fireendsound], false); - OPENAL_Sample_SetMinMaxDistance(samp[fireendsound], 8.0f, 2000.0f); - - flashr=1; - flashg=0; - flashb=0; - flashamount=1; - flashdelay=1; - - if(!gameon){ - //quit - tryquit=1; - OPENAL_SetPaused(channels[stream_music3], true); - } - else{ - //end game - gameon=0; - mainmenu=1; - } - } - if(Button())oldbutton=1; - else oldbutton=0; - } - - if(mainmenu==3){ - if(Button()&&!oldbutton&&selected!=-1){ - float gLoc[3]={0,0,0}; - float vel[3]={0,0,0}; - OPENAL_Sample_SetMinMaxDistance(samp[firestartsound], 9999.0f, 99999.0f); - PlaySoundEx( firestartsound, samp[firestartsound], NULL, true); - OPENAL_3D_SetAttributes(channels[firestartsound], gLoc, vel); - OPENAL_SetVolume(channels[firestartsound], 256); - OPENAL_SetPaused(channels[firestartsound], false); - OPENAL_Sample_SetMinMaxDistance(samp[firestartsound], 8.0f, 2000.0f); - } - if(Button()&&!oldbutton&&selected==0){ - - extern SDL_Rect **resolutions; - bool isCustomResolution = true; - bool 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; - } - - - } - if(Button()&&!oldbutton&&selected==1){ - newdetail++; - if(newdetail>2)newdetail=0; - } - if(Button()&&!oldbutton&&selected==2){ - bloodtoggle++; - if(bloodtoggle>2)bloodtoggle=0; - } - if(Button()&&!oldbutton&&selected==3){ - difficulty++; - if(difficulty>2)difficulty=0; - } - if(Button()&&!oldbutton&&selected==4){ - ismotionblur=1-ismotionblur; - } - if(Button()&&!oldbutton&&selected==5){ - decals=1-decals; - } - if(Button()&&!oldbutton&&selected==6){ - musictoggle=1-musictoggle; - - if(!musictoggle){ - OPENAL_SetPaused(channels[music1], true); - OPENAL_SetPaused(channels[stream_music2], true); - OPENAL_SetPaused(channels[stream_music3], true); - - for(i=0;i<4;i++){ - oldmusicvolume[i]=0; - musicvolume[i]=0; - } - } - - if(musictoggle){ - PlayStreamEx( stream_music3, strm[stream_music3], NULL, true); - OPENAL_SetPaused(channels[stream_music3], false); - OPENAL_SetVolume(channels[stream_music3], 256); - } - } - if(Button()&&!oldbutton&&selected==9){ - invertmouse=1-invertmouse; - } - if(Button()&&!oldbutton&&selected==10){ - usermousesensitivity+=.2; - if(usermousesensitivity>2)usermousesensitivity=.2; - } - if(Button()&&!oldbutton&&selected==11){ - volume+=.1f; - if(volume>1.0001f)volume=0; - OPENAL_SetSFXMasterVolume((int)(volume*255)); - } - if(Button()&&!oldbutton&&selected==7){ - /*float gLoc[3]={0,0,0}; - float vel[3]={0,0,0}; - OPENAL_Sample_SetMinMaxDistance(samp[firestartsound], 9999.0f, 99999.0f); - PlaySoundEx( firestartsound, samp[firestartsound], NULL, true); - OPENAL_3D_SetAttributes(channels[firestartsound], gLoc, vel); - OPENAL_SetVolume(channels[firestartsound], 256); - OPENAL_SetPaused(channels[firestartsound], false); - OPENAL_Sample_SetMinMaxDistance(samp[firestartsound], 8.0f, 2000.0f); - */ - flashr=1; - flashg=0; - flashb=0; - flashamount=1; - flashdelay=1; - - //options - - mainmenu=4; - keyselect=-1; - } - if(Button()&&!oldbutton&&selected==8){ - float gLoc[3]={0,0,0}; - float vel[3]={0,0,0}; - OPENAL_Sample_SetMinMaxDistance(samp[fireendsound], 9999.0f, 99999.0f); - PlaySoundEx( fireendsound, samp[fireendsound], NULL, true); - OPENAL_3D_SetAttributes(channels[fireendsound], gLoc, vel); - OPENAL_SetVolume(channels[fireendsound], 256); - OPENAL_SetPaused(channels[fireendsound], false); - OPENAL_Sample_SetMinMaxDistance(samp[fireendsound], 8.0f, 2000.0f); - - flashr=1; - flashg=0; - flashb=0; - flashamount=1; - flashdelay=1; - - if(newdetail>2)newdetail=detail; - if(newdetail<0)newdetail=detail; - if(newscreenwidth<0)newscreenwidth=screenwidth; - if(newscreenheight<0)newscreenheight=screenheight; - - - SaveSettings(*this); - if(mainmenu==3&&gameon)mainmenu=2; - if(mainmenu==3&&!gameon)mainmenu=1; - } - if(Button())oldbutton=1; - else oldbutton=0; - } - if(mainmenu==4){ - if(Button()&&!oldbutton&&selected!=-1&&keyselect==-1){ - float gLoc[3]={0,0,0}; - float vel[3]={0,0,0}; - OPENAL_Sample_SetMinMaxDistance(samp[firestartsound], 9999.0f, 99999.0f); - PlaySoundEx( firestartsound, samp[firestartsound], NULL, true); - OPENAL_3D_SetAttributes(channels[firestartsound], gLoc, vel); - OPENAL_SetVolume(channels[firestartsound], 256); - OPENAL_SetPaused(channels[firestartsound], false); - OPENAL_Sample_SetMinMaxDistance(samp[firestartsound], 8.0f, 2000.0f); - } - if(Button()&&!oldbutton&&selected<9&&keyselect==-1){ - keyselect=selected; - oldbuttons[0]=1; - oldbuttons[1]=1; - oldbuttons[2]=1; - } - if(keyselect!=-1){ - for(i=0;i<3;i++) - if(!buttons[i]&&!oldbutton&&!Button())oldbuttons[i]=0; - for(i=0;i<140;i++){ - if((IsKeyDown(theKeyMap, i)||(buttons[0]&&!oldbuttons[0]&&!oldbutton)||(buttons[1]&&!oldbuttons[1]&&!oldbutton))&&keyselect!=-1){ - if(i!=MAC_ESCAPE_KEY&&(strcmp(KeyToChar(i),"unknown")||(buttons[0]&&!oldbuttons[0]&&!oldbutton)||(buttons[1]&&!oldbuttons[1]&&!oldbutton))){ - float gLoc[3]={0,0,0}; - float vel[3]={0,0,0}; - OPENAL_Sample_SetMinMaxDistance(samp[fireendsound], 9999.0f, 99999.0f); - PlaySoundEx( fireendsound, samp[fireendsound], NULL, true); - OPENAL_3D_SetAttributes(channels[fireendsound], gLoc, vel); - OPENAL_SetVolume(channels[fireendsound], 256); - OPENAL_SetPaused(channels[fireendsound], false); - OPENAL_Sample_SetMinMaxDistance(samp[fireendsound], 8.0f, 2000.0f); - - int keynum; - keynum=i; - if(buttons[0]&&!oldbuttons[0])keynum=MAC_MOUSEBUTTON1; - if(buttons[1]&&!oldbuttons[1])keynum=MAC_MOUSEBUTTON2; - - - - if(keyselect==0)forwardkey=keynum; - if(keyselect==1)backkey=keynum; - if(keyselect==2)leftkey=keynum; - if(keyselect==3)rightkey=keynum; - if(keyselect==4)crouchkey=keynum; - if(keyselect==5)jumpkey=keynum; - if(keyselect==6)drawkey=keynum; - if(keyselect==7)throwkey=keynum; - if(keyselect==8)attackkey=keynum; - keyselect=-1; - } - } - }} - if(Button()&&!oldbutton&&selected==9){ - float gLoc[3]={0,0,0}; - float vel[3]={0,0,0}; - OPENAL_Sample_SetMinMaxDistance(samp[fireendsound], 9999.0f, 99999.0f); - PlaySoundEx( fireendsound, samp[fireendsound], NULL, true); - OPENAL_3D_SetAttributes(channels[fireendsound], gLoc, vel); - OPENAL_SetVolume(channels[fireendsound], 256); - OPENAL_SetPaused(channels[fireendsound], false); - OPENAL_Sample_SetMinMaxDistance(samp[fireendsound], 8.0f, 2000.0f); - - flashr=1; - flashg=0; - flashb=0; - flashamount=1; - flashdelay=1; - - mainmenu=3; - - if(newdetail>2)newdetail=detail; - if(newdetail<0)newdetail=detail; - if(newscreenwidth>3000)newscreenwidth=screenwidth; - if(newscreenwidth<0)newscreenwidth=screenwidth; - if(newscreenheight>3000)newscreenheight=screenheight; - if(newscreenheight<0)newscreenheight=screenheight; - } - } - - if(mainmenu==5){ - - if(endgame==2){ - accountcampaignchoicesmade[accountactive]=0; - accountcampaignscore[accountactive]=0; - accountcampaigntime[accountactive]=0; - endgame=0; - } - - if(Button()&&!oldbutton&&selected==1){ - float gLoc[3]={0,0,0}; - float vel[3]={0,0,0}; - OPENAL_Sample_SetMinMaxDistance(samp[firestartsound], 9999.0f, 99999.0f); - PlaySoundEx( firestartsound, samp[firestartsound], NULL, true); - OPENAL_3D_SetAttributes(channels[firestartsound], gLoc, vel); - OPENAL_SetVolume(channels[firestartsound], 256); - OPENAL_SetPaused(channels[firestartsound], false); - OPENAL_Sample_SetMinMaxDistance(samp[firestartsound], 8.0f, 2000.0f); - - flashr=1; - flashg=0; - flashb=0; - flashamount=1; - flashdelay=1; - - startbonustotal=0; - - loading=2; - loadtime=0; - targetlevel=-1; - if(firstload)TickOnceAfter(); - if(!firstload)LoadStuff(); - else { - Loadlevel(-1); - } - - mainmenu=0; - gameon=1; - OPENAL_SetPaused(channels[stream_music3], true); - } - if(Button()&&!oldbutton&&selected-7>=accountcampaignchoicesmade[accountactive]){//selected>=7&&(selected-7<=campaignnumchoices)){ - float gLoc[3]={0,0,0}; - float vel[3]={0,0,0}; - OPENAL_Sample_SetMinMaxDistance(samp[firestartsound], 9999.0f, 99999.0f); - PlaySoundEx( firestartsound, samp[firestartsound], NULL, true); - OPENAL_3D_SetAttributes(channels[firestartsound], gLoc, vel); - OPENAL_SetVolume(channels[firestartsound], 256); - OPENAL_SetPaused(channels[firestartsound], false); - OPENAL_Sample_SetMinMaxDistance(samp[firestartsound], 8.0f, 2000.0f); - - flashr=1; - flashg=0; - flashb=0; - flashamount=1; - flashdelay=1; - - startbonustotal=0; - - loading=2; - loadtime=0; - targetlevel=7; - if(firstload)TickOnceAfter(); - if(!firstload)LoadStuff(); - //else { - for(i=0;i<255;i++){ - mapname[i]='\0'; - } - mapname[0]=':'; - mapname[1]='D'; - mapname[2]='a'; - mapname[3]='t'; - mapname[4]='a'; - mapname[5]=':'; - mapname[6]='M'; - mapname[7]='a'; - mapname[8]='p'; - mapname[9]='s'; - mapname[10]=':'; - strcat(mapname,campaignmapname[campaignchoicewhich[selected-7-accountcampaignchoicesmade[accountactive]]]); - whichchoice=selected-7-accountcampaignchoicesmade[accountactive]; - visibleloading=1; - stillloading=1; - Loadlevel(mapname); - //Loadlevel(campaignmapname[levelorder[selected-7]]); - //} - campaign=1; - mainmenu=0; - gameon=1; - OPENAL_SetPaused(channels[stream_music3], true); - } - if(Button()&&!oldbutton&&selected==4){ - float gLoc[3]={0,0,0}; - float vel[3]={0,0,0}; - OPENAL_Sample_SetMinMaxDistance(samp[fireendsound], 9999.0f, 99999.0f); - PlaySoundEx( fireendsound, samp[fireendsound], NULL, true); - OPENAL_3D_SetAttributes(channels[fireendsound], gLoc, vel); - OPENAL_SetVolume(channels[fireendsound], 256); - OPENAL_SetPaused(channels[fireendsound], false); - OPENAL_Sample_SetMinMaxDistance(samp[fireendsound], 8.0f, 2000.0f); - - flashr=1; - flashg=0; - flashb=0; - flashamount=1; - flashdelay=1; - - if(mainmenu==5&&gameon)mainmenu=2; - if(mainmenu==5&&!gameon)mainmenu=1; - } - if(Button()&&!oldbutton&&selected==5){ - float gLoc[3]={0,0,0}; - float vel[3]={0,0,0}; - OPENAL_Sample_SetMinMaxDistance(samp[fireendsound], 9999.0f, 99999.0f); - PlaySoundEx( fireendsound, samp[fireendsound], NULL, true); - OPENAL_3D_SetAttributes(channels[fireendsound], gLoc, vel); - OPENAL_SetVolume(channels[fireendsound], 256); - OPENAL_SetPaused(channels[fireendsound], false); - OPENAL_Sample_SetMinMaxDistance(samp[fireendsound], 8.0f, 2000.0f); - - flashr=1; - flashg=0; - flashb=0; - flashamount=1; - flashdelay=1; - - mainmenu=7; - } - if(Button()&&!oldbutton&&selected==3){ - float gLoc[3]={0,0,0}; - float vel[3]={0,0,0}; - OPENAL_Sample_SetMinMaxDistance(samp[firestartsound], 9999.0f, 99999.0f); - PlaySoundEx( firestartsound, samp[firestartsound], NULL, true); - OPENAL_3D_SetAttributes(channels[firestartsound], gLoc, vel); - OPENAL_SetVolume(channels[firestartsound], 256); - OPENAL_SetPaused(channels[firestartsound], false); - OPENAL_Sample_SetMinMaxDistance(samp[firestartsound], 8.0f, 2000.0f); - - flashr=1; - flashg=0; - flashb=0; - flashamount=1; - flashdelay=1; - - mainmenu=6; - } - if(Button()&&!oldbutton&&selected==2){ - float gLoc[3]={0,0,0}; - float vel[3]={0,0,0}; - OPENAL_Sample_SetMinMaxDistance(samp[firestartsound], 9999.0f, 99999.0f); - PlaySoundEx( firestartsound, samp[firestartsound], NULL, true); - OPENAL_3D_SetAttributes(channels[firestartsound], gLoc, vel); - OPENAL_SetVolume(channels[firestartsound], 256); - OPENAL_SetPaused(channels[firestartsound], false); - OPENAL_Sample_SetMinMaxDistance(samp[firestartsound], 8.0f, 2000.0f); - - flashr=1; - flashg=0; - flashb=0; - flashamount=1; - flashdelay=1; - - mainmenu=9; - } - if(Button())oldbutton=1; - else oldbutton=0; - } - if(mainmenu==9){ - if(Button()&&!oldbutton&&selected=0&&selected<=accountprogress[accountactive]){ - float gLoc[3]={0,0,0}; - float vel[3]={0,0,0}; - OPENAL_Sample_SetMinMaxDistance(samp[firestartsound], 9999.0f, 99999.0f); - PlaySoundEx( firestartsound, samp[firestartsound], NULL, true); - OPENAL_3D_SetAttributes(channels[firestartsound], gLoc, vel); - OPENAL_SetVolume(channels[firestartsound], 256); - OPENAL_SetPaused(channels[firestartsound], false); - OPENAL_Sample_SetMinMaxDistance(samp[firestartsound], 8.0f, 2000.0f); - - flashr=1; - flashg=0; - flashb=0; - flashamount=1; - flashdelay=1; - - startbonustotal=0; - - loading=2; - loadtime=0; - targetlevel=selected; - if(firstload)TickOnceAfter(); - if(!firstload)LoadStuff(); - else { - Loadlevel(selected); - } - campaign=0; - - mainmenu=0; - gameon=1; - OPENAL_SetPaused(channels[stream_music3], true); - } - if(Button()&&!oldbutton&&selected==numchallengelevels){ - float gLoc[3]={0,0,0}; - float vel[3]={0,0,0}; - OPENAL_Sample_SetMinMaxDistance(samp[fireendsound], 9999.0f, 99999.0f); - PlaySoundEx( fireendsound, samp[fireendsound], NULL, true); - OPENAL_3D_SetAttributes(channels[fireendsound], gLoc, vel); - OPENAL_SetVolume(channels[fireendsound], 256); - OPENAL_SetPaused(channels[fireendsound], false); - OPENAL_Sample_SetMinMaxDistance(samp[fireendsound], 8.0f, 2000.0f); - - flashr=1; - flashg=0; - flashb=0; - flashamount=1; - flashdelay=1; - - mainmenu=5; - } - if(Button())oldbutton=1; - else oldbutton=0; - } - if(mainmenu==11){ - if(Button()&&!oldbutton&&selected=0&&selected<=accountprogress[accountactive]){ - float gLoc[3]={0,0,0}; - float vel[3]={0,0,0}; - OPENAL_Sample_SetMinMaxDistance(samp[firestartsound], 9999.0f, 99999.0f); - PlaySoundEx( firestartsound, samp[firestartsound], NULL, true); - OPENAL_3D_SetAttributes(channels[firestartsound], gLoc, vel); - OPENAL_SetVolume(channels[firestartsound], 256); - OPENAL_SetPaused(channels[firestartsound], false); - OPENAL_Sample_SetMinMaxDistance(samp[firestartsound], 8.0f, 2000.0f); - - flashr=1; - flashg=0; - flashb=0; - flashamount=1; - flashdelay=1; - - startbonustotal=0; - - loading=2; - loadtime=0; - targetlevel=selected; - if(firstload)TickOnceAfter(); - if(!firstload)LoadStuff(); - else { - Loadlevel(selected); - } - campaign=0; - - mainmenu=0; - gameon=1; - OPENAL_SetPaused(channels[stream_music3], true); - } - if(Button()&&!oldbutton&&selected==numchallengelevels){ - float gLoc[3]={0,0,0}; - float vel[3]={0,0,0}; - OPENAL_Sample_SetMinMaxDistance(samp[fireendsound], 9999.0f, 99999.0f); - PlaySoundEx( fireendsound, samp[fireendsound], NULL, true); - OPENAL_3D_SetAttributes(channels[fireendsound], gLoc, vel); - OPENAL_SetVolume(channels[fireendsound], 256); - OPENAL_SetPaused(channels[fireendsound], false); - OPENAL_Sample_SetMinMaxDistance(samp[fireendsound], 8.0f, 2000.0f); - - flashr=1; - flashg=0; - flashb=0; - flashamount=1; - flashdelay=1; - - mainmenu=5; - } - if(Button())oldbutton=1; - else oldbutton=0; - } - if(mainmenu==10){ - endgame=2; - if(Button()&&!oldbutton&&selected==3){ - float gLoc[3]={0,0,0}; - float vel[3]={0,0,0}; - OPENAL_Sample_SetMinMaxDistance(samp[fireendsound], 9999.0f, 99999.0f); - PlaySoundEx( fireendsound, samp[fireendsound], NULL, true); - OPENAL_3D_SetAttributes(channels[fireendsound], gLoc, vel); - OPENAL_SetVolume(channels[fireendsound], 256); - OPENAL_SetPaused(channels[fireendsound], false); - OPENAL_Sample_SetMinMaxDistance(samp[fireendsound], 8.0f, 2000.0f); - - flashr=1; - flashg=0; - flashb=0; - flashamount=1; - flashdelay=1; - - mainmenu=5; - } - if(Button())oldbutton=1; - else oldbutton=0; - } - - if(mainmenu==6){ - if(Button()&&!oldbutton&&selected!=-1){ - float gLoc[3]={0,0,0}; - float vel[3]={0,0,0}; - OPENAL_Sample_SetMinMaxDistance(samp[firestartsound], 9999.0f, 99999.0f); - PlaySoundEx( firestartsound, samp[firestartsound], NULL, true); - OPENAL_3D_SetAttributes(channels[firestartsound], gLoc, vel); - OPENAL_SetVolume(channels[firestartsound], 256); - OPENAL_SetPaused(channels[firestartsound], false); - OPENAL_Sample_SetMinMaxDistance(samp[firestartsound], 8.0f, 2000.0f); - } - if(Button()&&!oldbutton&&selected==1){ - float gLoc[3]={0,0,0}; - float vel[3]={0,0,0}; - OPENAL_Sample_SetMinMaxDistance(samp[fireendsound], 9999.0f, 99999.0f); - PlaySoundEx( fireendsound, samp[fireendsound], NULL, true); - OPENAL_3D_SetAttributes(channels[fireendsound], gLoc, vel); - OPENAL_SetVolume(channels[fireendsound], 256); - OPENAL_SetPaused(channels[fireendsound], false); - OPENAL_Sample_SetMinMaxDistance(samp[fireendsound], 8.0f, 2000.0f); - - flashr=1; - flashg=0; - flashb=0; - flashamount=1; - flashdelay=1; - - for(i=accountactive;i0&&selectedtutorialmaxtime){ + tutorialstage++; + tutorialsuccess=0; + if(tutorialstage<=1){ + canattack=0; + cananger=0; + reversaltrain=0; + } + switch(tutorialstage){ + case 1: + tutorialmaxtime=5; + break; case 2: + tutorialmaxtime=2; + break; case 3: + tutorialmaxtime=600; + break; case 4: + tutorialmaxtime=1000; + break; case 5: + tutorialmaxtime=600; + break; case 6: + tutorialmaxtime=600; + break; case 7: + tutorialmaxtime=600; + break; case 8: + tutorialmaxtime=600; + break; case 9: + tutorialmaxtime=600; + break; case 10: + tutorialmaxtime=2; + break; case 11: + tutorialmaxtime=1000; + break; case 12: + tutorialmaxtime=1000; + break; case 13: + tutorialmaxtime=2; + break; case 14: { + tutorialmaxtime=3; + + XYZ temp,temp2; + + temp.x=1011; + temp.y=84; + temp.z=491; + temp2.x=1025; + temp2.y=75; + temp2.z=447; + + player[1].coords=(temp+temp2)/2; + + emit_sound_at(fireendsound, player[1].coords); + + for(int i=0;i0)tutorialsuccess=1; + break; case 41: if(player[0].weaponactive==-1&&player[0].num_weapons>0)tutorialsuccess=1; + break; case 43: if(player[0].targetanimation==knifeslashstartanim)tutorialsuccess=1; + break; case 44: if(animation[player[0].targetanimation].attack==reversal)tutorialsuccess=1; + break; case 45: if(animation[player[0].targetanimation].attack==reversal)tutorialsuccess=1; + break; case 46: if(animation[player[0].targetanimation].attack==reversal)tutorialsuccess=1; + break; case 49: if(player[1].weaponstuck!=-1)tutorialsuccess=1; + break; default: break; + } + if(tutorialsuccess>=1)tutorialstagetime=tutorialmaxtime-3; + + + if(tutorialstagetime==tutorialmaxtime-3){ + emit_sound_np(consolesuccesssound); + } + + if(tutorialsuccess>=1){ + if(tutorialstage==34||tutorialstage==35) + tutorialstagetime=tutorialmaxtime-1; + } + } - if(Button())oldbutton=1; - else oldbutton=0; + if(tutorialstage<14||tutorialstage>=50){ + player[1].coords.y=300; + player[1].velocity=0; + } +} - if(IsKeyDown(theKeyMap, MAC_Q_KEY)&&IsKeyDown(theKeyMap, MAC_COMMAND_KEY)){ - tryquit=1; - if(mainmenu==3){ - if(newdetail>2)newdetail=detail; - if(newdetail<0)newdetail=detail; - if(newscreenwidth<0)newscreenwidth=screenwidth; - if(newscreenheight<0)newscreenheight=screenheight; +void Game::doDebugKeys(){ + float headprop,bodyprop,armprop,legprop; + if(debugmode){ + if(Input::isKeyPressed(SDLK_h)){ + player[0].damagetolerance=200000; + player[0].damage=0; + player[0].burnt=0; + player[0].permanentdamage=0; + player[0].superpermanentdamage=0; + } + + if(Input::isKeyPressed(SDLK_j)){ + environment++; + if(environment>2) + environment=0; + Setenvironment(environment); + } + + if(Input::isKeyPressed(SDLK_c)){ + cameramode=1-cameramode; + } + + if(Input::isKeyPressed(SDLK_x)&&!Input::isKeyDown(SDLK_LSHIFT)){ + if(player[0].num_weapons>0){ + if(weapons[player[0].weaponids[0]].getType()==sword) + weapons[player[0].weaponids[0]].setType(staff); + else if(weapons[player[0].weaponids[0]].getType()==staff) + weapons[player[0].weaponids[0]].setType(knife); + else + weapons[player[0].weaponids[0]].setType(sword); + } + } + + if(Input::isKeyPressed(SDLK_x)&&Input::isKeyDown(SDLK_LSHIFT)){ + int closest=-1; + float closestdist=-1; + float distance; + if(numplayers>1) + for(int i=1;i1) + for(int i=1;i1) + for(int i=1;i9) + player[closest].whichskin=0; + if(player[closest].whichskin>2&&player[closest].creature==wolftype) + player[closest].whichskin=0; + + LoadTextureSave(creatureskin[player[closest].creature][player[closest].whichskin], + &player[closest].skeleton.drawmodel.textureptr,1,&player[closest].skeleton.skinText[0],&player[closest].skeleton.skinsize); + } + + if(player[closest].numclothes){ + for(int i=0;i1) + for(int i=1;i1) + for(int i=1;i1) + for(int i=1;inumchallengelevels-1) + targetlevel=0; + loading=1; + leveltime=5; + } + + if(editorenabled){ + if(Input::isKeyPressed(SDLK_DELETE)&&Input::isKeyDown(SDLK_LSHIFT)){ + int closest=-1; + float closestdist=-1; + float distance; + if(numplayers>1) + for(int i=1;i0&&closest>=0){ + //player[closest]=player[numplayers-1]; + //player[closest].skeleton=player[numplayers-1].skeleton; + numplayers--; + } + } + + if(Input::isKeyPressed(SDLK_DELETE)&&Input::isKeyDown(SDLK_LCTRL)){ + int closest=-1; + float closestdist=-1; + float distance; + if(max_objects>1) + for(int i=1;i0&&closest>=0){ + objects.position[closest].y-=500; + } + } + + if(Input::isKeyPressed(SDLK_m)&&Input::isKeyDown(SDLK_LSHIFT)){ + //drawmode++; + //if(drawmode>2)drawmode=0; + if(objects.numobjects1) + for(int i=0;i1&&pathpointselected!=-1){ + numpathpointconnect[pathpointselected]++; + pathpointconnect[pathpointselected][numpathpointconnect[pathpointselected]-1]=numpathpoints-1; + } + pathpointselected=numpathpoints-1; + } + } + } + + if(Input::isKeyPressed(SDLK_PERIOD)){ + pathpointselected++; + if(pathpointselected>=numpathpoints) + pathpointselected=-1; + } + if(Input::isKeyPressed(SDLK_COMMA)&&!Input::isKeyDown(SDLK_LSHIFT)){ + pathpointselected--; + if(pathpointselected<=-2) + pathpointselected=numpathpoints-1; + } + if(Input::isKeyPressed(SDLK_COMMA)&&Input::isKeyDown(SDLK_LSHIFT)){ + if(pathpointselected!=-1){ + numpathpoints--; + pathpoint[pathpointselected]=pathpoint[numpathpoints]; + numpathpointconnect[pathpointselected]=numpathpointconnect[numpathpoints]; + for(int i=0;ifiretype)editortype=0; + } + + if(Input::isKeyDown(SDLK_LEFT)&&!Input::isKeyDown(SDLK_LSHIFT)&&!Input::isKeyDown(SDLK_LCTRL)){ + editorrotation-=multiplier*100; + if(editorrotation<-.01)editorrotation=-.01; + } + + if(Input::isKeyDown(SDLK_RIGHT)&&!Input::isKeyDown(SDLK_LSHIFT)&&!Input::isKeyDown(SDLK_LCTRL)){ + editorrotation+=multiplier*100; + } + + if(Input::isKeyDown(SDLK_UP)&&!Input::isKeyDown(SDLK_LCTRL)){ + editorsize+=multiplier; + } + + if(Input::isKeyDown(SDLK_DOWN)&&!Input::isKeyDown(SDLK_LCTRL)){ + editorsize-=multiplier; + if(editorsize<.1)editorsize=.1; + } + + + if(Input::isKeyPressed(SDLK_LEFT)&&Input::isKeyDown(SDLK_LSHIFT)&&Input::isKeyDown(SDLK_LCTRL)){ + mapradius-=multiplier*10; + } + + if(Input::isKeyPressed(SDLK_RIGHT)&&Input::isKeyDown(SDLK_LSHIFT)&&Input::isKeyDown(SDLK_LCTRL)){ + mapradius+=multiplier*10; + } + if(Input::isKeyDown(SDLK_UP)&&Input::isKeyDown(SDLK_LCTRL)){ + editorrotation2+=multiplier*100; + } + + if(Input::isKeyDown(SDLK_DOWN)&&Input::isKeyDown(SDLK_LCTRL)){ + editorrotation2-=multiplier*100; + if(editorrotation2<-.01)editorrotation2=-.01; + } + if(Input::isKeyPressed(SDLK_DELETE)&&objects.numobjects&&Input::isKeyDown(SDLK_LSHIFT)){ + int closest=-1; + float closestdist=-1; + float distance; + for(int i=0;i0&&closest>=0)objects.DeleteObject(closest); + } + } + } +} - SaveSettings(*this); - } - } +void Game::doJumpReversals(){ + for(int k=0;k4)transition+=multiplier/8; - if(transition>1){ - transition=0; - anim++; - if(anim>4)anim=0; - loaddistrib=0; - } - } - OPENAL_SetFrequency(channels[stream_music3], 22050); - - if(entername){ - for(i=0;i<140;i++){ - if(IsKeyDown(theKeyMap, i)){ - togglekeydelay[i]+=multiplier; - if(togglekeydelay[i]>.4){ - togglekey[i]=0; - togglekeydelay[i]=.36; - } - if(!togglekey[i]){ - if(KeyToSingleChar(i)!='\0'&&displaychars[0]<60){ - for(j=255;j>=displayselected+1;j--){ - displaytext[0][j]=displaytext[0][j-1]; - } - displaytext[0][displayselected]=KeyToSingleChar(i); - if(IsKeyDown(theKeyMap, MAC_SHIFT_KEY))displaytext[0][displayselected]=Shift(displaytext[0][displayselected]); - displayselected++; - displaychars[0]++; - } - if(i==MAC_DELETE_KEY&&displayselected!=0){ - for(j=displayselected-1;j<255;j++){ - displaytext[0][j]=displaytext[0][j+1]; - } - displaytext[0][255]=' '; - displayselected--; - displaychars[0]--; - } - if(i==MAC_ARROW_LEFT_KEY&&displayselected!=0){ - displayselected--; - } - if(i==MAC_ARROW_RIGHT_KEY&&displayselected0&& + !player[k].skeleton.free&& + player[k].targetanimation!=climbanim&& + player[k].targetanimation!=hanganim){ + XYZ lowpoint,lowpointtarget,lowpoint2,lowpointtarget2,lowpoint3,lowpointtarget3,lowpoint4,lowpointtarget4,lowpoint5,lowpointtarget5,lowpoint6,lowpointtarget6,lowpoint7,lowpointtarget7,colpoint,colpoint2; + int whichhit; + bool tempcollide=0; + + if(player[k].collide<-.3) + player[k].collide=-.3; + if(player[k].collide>1) + player[k].collide=1; + player[k].collide-=multiplier*30; + + //clip to terrain + player[k].coords.y=max(player[k].coords.y, terrain.getHeight(player[k].coords.x,player[k].coords.z)); + + for(int l=0;l.5&&player[k].aitype==playercontrolled|| + objects.position[i].y>player[k].coords.y){ + lowpoint=player[k].coords; + if(player[k].targetanimation!=jumpupanim&& + player[k].targetanimation!=jumpdownanim&& + !player[k].isFlip()) + lowpoint.y+=1.25; + else + lowpoint.y+=1.3; + if( player[k].coords.yterrain.getHeight(player[k].coords.x,player[k].coords.z)-.1) + player[k].coords.y=terrain.getHeight(player[k].coords.x,player[k].coords.z); + if(player[k].SphereCheck(&lowpoint, 1.3, &colpoint, &objects.position[i], &objects.rotation[i], &objects.model[i])!=-1){ + flatfacing=lowpoint-player[k].coords; + player[k].coords=lowpoint; + player[k].coords.y-=1.3; + player[k].collide=1; + tempcollide=1; + //wall jumps + //TODO: refactor four similar blocks + if(player[k].aitype==playercontrolled&& + (player[k].targetanimation==jumpupanim|| + player[k].targetanimation==jumpdownanim|| + player[k].isFlip())&& + !player[k].jumptogglekeydown&& + player[k].jumpkeydown){ + lowpointtarget=lowpoint+DoRotation(player[k].facing,0,-90,0)*1.5; + XYZ tempcoords1=lowpoint; + whichhit=objects.model[i].LineCheck(&lowpoint,&lowpointtarget,&colpoint,&objects.position[i],&objects.rotation[i]); + if(whichhit!=-1&&fabs(objects.model[i].facenormals[whichhit].y)<.3){ + setAnimation(k,walljumpleftanim); + emit_sound_at(movewhooshsound, player[k].coords); + if(k==0) + pause_sound(whooshsound); + + lowpointtarget=DoRotation(objects.model[i].facenormals[whichhit],0,objects.rotation[i],0); + player[k].rotation=-asin(0-lowpointtarget.x)*180/M_PI; + if(lowpointtarget.z<0) + player[k].rotation=180-player[k].rotation; + player[k].targetrotation=player[k].rotation; + player[k].lowrotation=player[k].rotation; + if(k==0) + numwallflipped++; + } + else + { + lowpoint=tempcoords1; + lowpointtarget=lowpoint+DoRotation(player[k].facing,0,90,0)*1.5; + whichhit=objects.model[i].LineCheck(&lowpoint,&lowpointtarget,&colpoint,&objects.position[i],&objects.rotation[i]); + if(whichhit!=-1&&fabs(objects.model[i].facenormals[whichhit].y)<.3){ + setAnimation(k,walljumprightanim); + emit_sound_at(movewhooshsound, player[k].coords); + if(k==0)pause_sound(whooshsound); + + lowpointtarget=DoRotation(objects.model[i].facenormals[whichhit],0,objects.rotation[i],0); + player[k].rotation=-asin(0-lowpointtarget.x)*180/M_PI; + if(lowpointtarget.z<0)player[k].rotation=180-player[k].rotation; + player[k].targetrotation=player[k].rotation; + player[k].lowrotation=player[k].rotation; + if(k==0)numwallflipped++; + } + else + { + lowpoint=tempcoords1; + lowpointtarget=lowpoint+player[k].facing*2; + whichhit=objects.model[i].LineCheck(&lowpoint,&lowpointtarget,&colpoint,&objects.position[i],&objects.rotation[i]); + if(whichhit!=-1&&fabs(objects.model[i].facenormals[whichhit].y)<.3){ + setAnimation(k,walljumpbackanim); + emit_sound_at(movewhooshsound, player[k].coords); + if(k==0)pause_sound(whooshsound); + + lowpointtarget=DoRotation(objects.model[i].facenormals[whichhit],0,objects.rotation[i],0); + player[k].rotation=-asin(0-lowpointtarget.x)*180/M_PI; + if(lowpointtarget.z<0)player[k].rotation=180-player[k].rotation; + player[k].targetrotation=player[k].rotation; + player[k].lowrotation=player[k].rotation; + if(k==0)numwallflipped++; + } + else + { + lowpoint=tempcoords1; + lowpointtarget=lowpoint-player[k].facing*2; + whichhit=objects.model[i].LineCheck(&lowpoint,&lowpointtarget,&colpoint,&objects.position[i],&objects.rotation[i]); + if(whichhit!=-1&&fabs(objects.model[i].facenormals[whichhit].y)<.3){ + setAnimation(k,walljumpfrontanim); + emit_sound_at(movewhooshsound, player[k].coords); + if(k==0)pause_sound(whooshsound); + + lowpointtarget=DoRotation(objects.model[i].facenormals[whichhit],0,objects.rotation[i],0); + player[k].rotation=-asin(0-lowpointtarget.x)*180/M_PI; + if(lowpointtarget.z<0)player[k].rotation=180-player[k].rotation; + player[k].rotation+=180; + player[k].targetrotation=player[k].rotation; + player[k].lowrotation=player[k].rotation; + if(k==0)numwallflipped++; + } + } + } + } + } + } + } + else if(objects.type[i]==rocktype){ + lowpoint2=player[k].coords; + lowpoint=player[k].coords; + lowpoint.y+=2; + if(objects.model[i].LineCheck(&lowpoint,&lowpoint2,&colpoint,&objects.position[i],&objects.rotation[i])!=-1){ + player[k].coords=colpoint; + player[k].collide=1; + tempcollide=1; + + if(player[k].targetanimation==jumpdownanim||player[k].isFlip()){ + //flipped into a rock + if(player[k].isFlip()&&animation[player[k].targetanimation].label[player[k].targetframe]==7) + player[k].RagDoll(0); + + if(player[k].targetanimation==jumpupanim){ + player[k].jumppower=-4; + player[k].targetanimation=player[k].getIdle(); + } + player[k].target=0; + player[k].targetframe=0; + player[k].onterrain=1; + + if(player[k].id==0){ + pause_sound(whooshsound); + OPENAL_SetVolume(channels[whooshsound], 0); + } + + //landing + if((player[k].targetanimation==jumpdownanim||player[k].isFlip())&&!player[k].wasLanding()){ + if(player[k].isFlip()) + player[k].jumppower=-4; + player[k].targetanimation=player[k].getLanding(); + emit_sound_at(landsound, player[k].coords, 128.); + if(k==0){ + envsound[numenvsounds]=player[k].coords; + envsoundvol[numenvsounds]=16; + envsoundlife[numenvsounds]=.4; + numenvsounds++; + } + + } + } + } + } + } + + if(tempcollide&&(/*player[k].jumptogglekeydown*/1==1||player[k].aitype!=playercontrolled)) + for(int l=0;l.5) + if(whichhit!=-1){ + if(whichhit!=-1&&player[k].targetanimation!=jumpupanim&&player[k].targetanimation!=jumpdownanim) + player[k].collided=1; + if(checkcollide(lowpoint7,lowpointtarget7)==-1) + if(checkcollide(lowpoint6,lowpointtarget6)==-1) + if( objects.model[i].LineCheckPossible(&lowpoint2,&lowpointtarget2, + &colpoint,&objects.position[i],&objects.rotation[i])!=-1&& + objects.model[i].LineCheckPossible(&lowpoint3,&lowpointtarget3, + &colpoint,&objects.position[i],&objects.rotation[i])!=-1&& + objects.model[i].LineCheckPossible(&lowpoint4,&lowpointtarget4, + &colpoint,&objects.position[i],&objects.rotation[i])!=-1&& + objects.model[i].LineCheckPossible(&lowpoint5,&lowpointtarget5, + &colpoint,&objects.position[i],&objects.rotation[i])!=-1) + for(int j=0;j<45;j++){ + lowpoint=player[k].coords; + lowpoint.y+=(float)j/13; + lowpointtarget=lowpoint+facing*1.4; + if(objects.model[i].LineCheckPossible(&lowpoint,&lowpointtarget, + &colpoint2,&objects.position[i],&objects.rotation[i])==-1){ + if(j<=6||j<=25&&player[k].targetanimation==jumpdownanim) + break; + if(player[k].targetanimation==jumpupanim||player[k].targetanimation==jumpdownanim){ + lowpoint=DoRotation(objects.model[i].facenormals[whichhit],0,objects.rotation[k],0); + lowpoint=player[k].coords; + lowpoint.y+=(float)j/13; + lowpointtarget=lowpoint+facing*1.3; + flatfacing=player[k].coords; + player[k].coords=colpoint-DoRotation(objects.model[i].facenormals[whichhit],0,objects.rotation[k],0)*.01; + player[k].coords.y=lowpointtarget.y-.07; + player[k].currentoffset=(flatfacing-player[k].coords)/player[k].scale; + + if(j>10||!player[k].isRun()){ + if(player[k].targetanimation==jumpdownanim||player[k].targetanimation==jumpupanim){ + if(k==0) + pause_sound(whooshsound); + } + emit_sound_at(jumpsound, player[k].coords, 128.); + + lowpointtarget=DoRotation(objects.model[i].facenormals[whichhit],0,objects.rotation[i],0); + player[k].rotation=-asin(0-lowpointtarget.x)*180/M_PI; + if(lowpointtarget.z<0) + player[k].rotation=180-player[k].rotation; + player[k].targetrotation=player[k].rotation; + player[k].lowrotation=player[k].rotation; + + //player[k].velocity=lowpointtarget*.03; + player[k].velocity=0; + + //climb ledge (?) + if(player[k].targetanimation==jumpupanim){ + player[k].targetanimation=climbanim; + player[k].jumppower=0; + player[k].jumpclimb=1; + } + player[k].transspeed=6; + player[k].target=0; + player[k].targetframe=1; + //hang ledge (?) + if(j>25){ + setAnimation(k,hanganim); + player[k].jumppower=0; + } + } + break; + } + } + } + } + } + } + } + } + if(player[k].collide<=0){ + //in the air + if(!player[k].onterrain&& + player[k].targetanimation!=jumpupanim&& + player[k].targetanimation!=jumpdownanim&& + player[k].targetanimation!=climbanim&& + player[k].targetanimation!=hanganim&& + !player[k].isWallJump()&& + !player[k].isFlip()){ + if(player[k].currentanimation!=climbanim&& + player[k].currentanimation!=tempanim&& + player[k].targetanimation!=backhandspringanim&& + (player[k].targetanimation!=rollanim|| + player[k].targetframe<2|| + player[k].targetframe>6)){ + //stagger off ledge (?) + if(player[k].targetanimation==staggerbackhighanim||player[k].targetanimation==staggerbackhardanim) + player[k].RagDoll(0); + setAnimation(k,jumpdownanim); + + if(!k) + emit_sound_at(whooshsound, player[k].coords, 128.); + } + //gravity + player[k].velocity.y+=gravity; + } + } + } + player[k].realoldcoords=player[k].coords; + } +} - for(j=0;j<255;j++){ - displaytext[0][j]=' '; - } - displaychars[0]=0; - displayselected=0; - entername=0; - - mainmenu=8; - - flashr=1; - flashg=0; - flashb=0; - flashamount=1; - flashdelay=1; - - float gLoc[3]={0,0,0}; - float vel[3]={0,0,0}; - OPENAL_Sample_SetMinMaxDistance(samp[firestartsound], 9999.0f, 99999.0f); - PlaySoundEx( firestartsound, samp[firestartsound], NULL, true); - OPENAL_3D_SetAttributes(channels[firestartsound], gLoc, vel); - OPENAL_SetVolume(channels[firestartsound], 256); - OPENAL_SetPaused(channels[firestartsound], false); - OPENAL_Sample_SetMinMaxDistance(samp[firestartsound], 8.0f, 2000.0f); - - for(j=0;j<255;j++){ - displaytext[0][j]=' '; - } - displaychars[0]=0; - - - displayselected=0; - }} - - if(i==MAC_RETURN_KEY&&mainmenu==13){ - if(displaychars[0]){ - sprintf (registrationname, "%s", displaytext[0]); - if(displaychars[0]<254)registrationname[displaychars[0]]='\0'; - - mainmenu=5; - - flashr=1; - flashg=0; - flashb=0; - flashamount=1; - flashdelay=1; - - float gLoc[3]={0,0,0}; - float vel[3]={0,0,0}; - OPENAL_Sample_SetMinMaxDistance(samp[firestartsound], 9999.0f, 99999.0f); - PlaySoundEx( firestartsound, samp[firestartsound], NULL, true); - OPENAL_3D_SetAttributes(channels[firestartsound], gLoc, vel); - OPENAL_SetVolume(channels[firestartsound], 256); - OPENAL_SetPaused(channels[firestartsound], false); - OPENAL_Sample_SetMinMaxDistance(samp[firestartsound], 8.0f, 2000.0f); - - for(j=0;j<255;j++){ - displaytext[0][j]=' '; - } - displaychars[0]=0; - - displayselected=0; - }} - } - togglekey[i]=1; - } - else { - togglekey[i]=0; - togglekeydelay[i]=0; - } - } - - displayblinkdelay-=multiplier; - if(displayblinkdelay<=0){ - displayblinkdelay=.3; - displayblink=1-displayblink; - } - } - } - - if(!mainmenu){ - if(hostile==1)hostiletime+=multiplier; - else hostiletime=0; - if(!winfreeze)leveltime+=multiplier; - if(IsKeyDown(theKeyMap, MAC_ESCAPE_KEY)){ - chatting=0; - console=0; - freeze=0; - displaychars[0]=0; - } - - if(IsKeyDown(theKeyMap, chatkey)&&!chattogglekeydown&&!console&&!chatting&&debugmode){ - chatting=1; - chattogglekeydown=1; - togglekey[chatkey]=1; - togglekeydelay[chatkey]=-20; - } - - if(!IsKeyDown(theKeyMap, chatkey)){ - chattogglekeydown=0; - } - - if(chatting){ - for(i=0;i<140;i++){ - if(IsKeyDown(theKeyMap, i)){ - togglekeydelay[i]+=multiplier; - if(togglekeydelay[i]>.4){ - togglekey[i]=0; - togglekeydelay[i]=.36; - } - if(!togglekey[i]){ - if(KeyToSingleChar(i)!='\0'&&displaychars[0]<60){ - for(j=255;j>=displayselected+1;j--){ - displaytext[0][j]=displaytext[0][j-1]; - } - displaytext[0][displayselected]=KeyToSingleChar(i); - if(IsKeyDown(theKeyMap, MAC_SHIFT_KEY))displaytext[0][displayselected]=Shift(displaytext[0][displayselected]); - displayselected++; - displaychars[0]++; - } - if(i==MAC_DELETE_KEY&&displayselected!=0){ - for(j=displayselected-1;j<255;j++){ - displaytext[0][j]=displaytext[0][j+1]; - } - displaytext[0][255]=' '; - displayselected--; - displaychars[0]--; - } - if(i==MAC_ARROW_LEFT_KEY&&displayselected!=0){ - displayselected--; - } - if(i==MAC_ARROW_RIGHT_KEY&&displayselected.4){ - togglekey[i]=0; - togglekeydelay[i]=.36; - } - if(!togglekey[i]){ - if(KeyToSingleChar(i)!='\0'&&consolechars[0]<255){ - for(j=255;j>=consoleselected+1;j--){ - consoletext[0][j]=consoletext[0][j-1]; - } - consoletext[0][consoleselected]=KeyToSingleChar(i); - if(IsKeyDown(theKeyMap, MAC_SHIFT_KEY))consoletext[0][consoleselected]=Shift(consoletext[0][consoleselected]); - consoleselected++; - consolechars[0]++; - } - else if(i==MAC_ENTER_KEY){ - for(j=255;j>=consoleselected+1;j--){ - consoletext[0][j]=consoletext[0][j-1]; - } - consoletext[0][consoleselected]='\n'; - consoleselected++; - consolechars[0]++; - } - if(i==MAC_DELETE_KEY&&consoleselected!=0){ - for(j=consoleselected-1;j<255;j++){ - consoletext[0][j]=consoletext[0][j+1]; - } - consoletext[0][255]=' '; - consoleselected--; - consolechars[0]--; - } - if(i==MAC_ARROW_UP_KEY){ - if(archiveselected<14)archiveselected++; - for(j=0;j<255;j++){ - consolechars[0]=consolechars[archiveselected]; - consoletext[0][j]=consoletext[archiveselected][j]; - consoleselected=consolechars[0]; - } - } - if(i==MAC_ARROW_DOWN_KEY){ - if(archiveselected>0)archiveselected--; - for(j=0;j<255;j++){ - consolechars[0]=consolechars[archiveselected]; - consoletext[0][j]=consoletext[archiveselected][j]; - consoleselected=consolechars[0]; - } - } - if(i==MAC_ARROW_LEFT_KEY&&consoleselected!=0){ - consoleselected--; - } - if(i==MAC_ARROW_RIGHT_KEY&&consoleselected0){ - for(k=14;k>=1;k--){ - for(j=0;j<255;j++){ - consoletext[k][j]=consoletext[k-1][j]; - } - consolechars[k]=consolechars[k-1]; - } - for(j=0;j<255;j++){ - consoletext[0][j]=' '; - } - consolechars[0]=0; - consoleselected=0; - } - } - } - togglekey[i]=1; - } - else { - togglekey[i]=0; - togglekeydelay[i]=0; - } - } - - consoleblinkdelay-=multiplier; - if(consoleblinkdelay<=0){ - consoleblinkdelay=.3; - consoleblink=1-consoleblink; - } - } - - if(IsKeyDown(theKeyMap, MAC_Q_KEY)&&IsKeyDown(theKeyMap, MAC_COMMAND_KEY)){ - tryquit=1; - if(mainmenu==3){ - if(newdetail>2)newdetail=detail; - if(newdetail<0)newdetail=detail; - if(newscreenwidth<0)newscreenwidth=screenwidth; - if(newscreenheight<0)newscreenheight=screenheight; - - ofstream opstream(ConvertFileName(":Data:config.txt", "w")); - opstream << "Screenwidth:\n"; - opstream << newscreenwidth; - opstream << "\nScreenheight:\n"; - opstream << newscreenheight; - opstream << "\nMouse sensitivity:\n"; - opstream << usermousesensitivity; - opstream << "\nBlur(0,1):\n"; - opstream << ismotionblur; - opstream << "\nOverall Detail(0,1,2) higher=better:\n"; - opstream << newdetail; - opstream << "\nFloating jump:\n"; - opstream << floatjump; - opstream << "\nMouse jump:\n"; - opstream << mousejump; - opstream << "\nAmbient sound:\n"; - opstream << ambientsound; - opstream << "\nBlood (0,1,2):\n"; - opstream << bloodtoggle; - opstream << "\nAuto slomo:\n"; - opstream << autoslomo; - opstream << "\nFoliage:\n"; - opstream << foliage; - opstream << "\nMusic:\n"; - opstream << musictoggle; - opstream << "\nTrilinear:\n"; - opstream << trilinear; - opstream << "\nDecals(shadows,blood puddles,etc):\n"; - opstream << decals; - opstream << "\nInvert mouse:\n"; - opstream << invertmouse; - opstream << "\nGamespeed:\n"; - if(oldgamespeed==0)oldgamespeed=1; - opstream << oldgamespeed; - opstream << "\nDifficulty(0,1,2) higher=harder:\n"; - opstream << difficulty; - opstream << "\nDamage effects(blackout, doublevision):\n"; - opstream << damageeffects; - opstream << "\nText:\n"; - opstream << texttoggle; - opstream << "\nDebug:\n"; - opstream << debugmode; - opstream << "\nVBL Sync:\n"; - opstream << vblsync; - opstream << "\nShow Points:\n"; - opstream << showpoints; - opstream << "\nAlways Blur:\n"; - opstream << alwaysblur; - opstream << "\nImmediate mode (turn on on G5):\n"; - opstream << immediate; - opstream << "\nVelocity blur:\n"; - opstream << velocityblur; - opstream << "\nVolume:\n"; - opstream << volume; - opstream << "\nForward key:\n"; - opstream << KeyToChar(forwardkey); - opstream << "\nBack key:\n"; - opstream << KeyToChar(backkey); - opstream << "\nLeft key:\n"; - opstream << KeyToChar(leftkey); - opstream << "\nRight key:\n"; - opstream << KeyToChar(rightkey); - opstream << "\nJump key:\n"; - opstream << KeyToChar(jumpkey); - opstream << "\nCrouch key:\n"; - opstream << KeyToChar(crouchkey); - opstream << "\nDraw key:\n"; - opstream << KeyToChar(drawkey); - opstream << "\nThrow key:\n"; - opstream << KeyToChar(throwkey); - opstream << "\nAttack key:\n"; - opstream << KeyToChar(attackkey); - opstream << "\nChat key:\n"; - opstream << KeyToChar(chatkey); - opstream.close(); - } - } - - static int oldwinfreeze; - if(winfreeze&&!oldwinfreeze){ - OPENAL_SetFrequency(OPENAL_ALL, 0.001); - PlaySoundEx( consolesuccesssound, samp[consolesuccesssound], NULL, true); - OPENAL_SetVolume(channels[consolesuccesssound], 256); - OPENAL_SetPaused(channels[consolesuccesssound], false); - } - if(winfreeze==0)oldwinfreeze=winfreeze; - else oldwinfreeze++; - - if((IsKeyDown(theKeyMap, jumpkey)||IsKeyDown(theKeyMap, MAC_SPACE_KEY))&&!oldjumpkeydown&&!campaign){ - if(winfreeze)winfreeze=0; - oldjumpkeydown=1; - } - if((IsKeyDown(theKeyMap, MAC_ESCAPE_KEY))&&!campaign&&gameon){ - if(winfreeze){ - mainmenu=9; - gameon=0; - } - } - if((IsKeyDown(theKeyMap, jumpkey)||IsKeyDown(theKeyMap, MAC_SPACE_KEY))){ - oldjumpkeydown=1; - } - if(!IsKeyDown(theKeyMap, jumpkey)&&!IsKeyDown(theKeyMap, MAC_SPACE_KEY))oldjumpkeydown=0; - - if(!freeze&&!winfreeze&&!(mainmenu&&gameon)&&(gameon||!gamestarted)){ - - static bool oldbuttondialogue; - - if(indialogue!=-1)talkdelay=1; - talkdelay-=multiplier; - - if(talkdelay<=0) - if(indialogue==-1&&(animation[player[0].targetanimation].height!=highheight)/*&&!hostile*/) - for(i=0;i49){ - realdialoguetype=dialoguetype[i]-50; - special=1; - } - else if(dialoguetype[i]>39){ - realdialoguetype=dialoguetype[i]-40; - special=1; - } - else if(dialoguetype[i]>29){ - realdialoguetype=dialoguetype[i]-30; - special=1; - } - else if(dialoguetype[i]>19){ - realdialoguetype=dialoguetype[i]-20; - special=1; - } - else if(dialoguetype[i]>9){ - realdialoguetype=dialoguetype[i]-10; - special=1; - } - else { - realdialoguetype=dialoguetype[i]; - special=0; - } - if((!hostile||(dialoguetype[i]>40&&dialoguetype[i]<50))&&realdialoguetype0&&(dialoguegonethrough[i]==0||!special)&&(special||(IsKeyDown(theKeyMap, attackkey)&&!oldbuttondialogue))){ - if(findDistancefast(&player[0].coords,&player[realdialoguetype].coords)<6||player[realdialoguetype].howactive>=typedead1||(dialoguetype[i]>40&&dialoguetype[i]<50)){ - whichdialogue=i; - for(j=0;j0){ - hotspot[i]=player[hotspottype[i]].coords; - } - } - } - - //Tutorial - if(tutoriallevel&&tutorialstagetime>tutorialmaxtime){ - tutorialstage++; - tutorialsuccess=0; - if(tutorialstage<=1){ - canattack=0; - cananger=0; - reversaltrain=0; - } - if(tutorialstage==1){ - tutorialmaxtime=5; - } - if(tutorialstage==2){ - tutorialmaxtime=2; - } - if(tutorialstage==3){ - tutorialmaxtime=600; - } - if(tutorialstage==4){ - tutorialmaxtime=1000; - } - if(tutorialstage==5){ - tutorialmaxtime=600; - } - if(tutorialstage==6){ - tutorialmaxtime=600; - } - if(tutorialstage==7){ - tutorialmaxtime=600; - } - if(tutorialstage==8){ - tutorialmaxtime=600; - } - if(tutorialstage==9){ - tutorialmaxtime=600; - } - if(tutorialstage==10){ - tutorialmaxtime=2; - } - if(tutorialstage==11){ - tutorialmaxtime=1000; - } - if(tutorialstage==12){ - tutorialmaxtime=1000; - } - if(tutorialstage==13){ - tutorialmaxtime=2; - } - if(tutorialstage==14){ - tutorialmaxtime=3; - - XYZ temp,temp2; - - temp.x=1011; - temp.y=84; - temp.z=491; - temp2.x=1025; - temp2.y=75; - temp2.z=447; - - player[1].coords=(temp+temp2)/2; - - float gLoc[3]; - float vel[3]; - gLoc[0]=player[1].coords.x; - gLoc[1]=player[1].coords.y; - gLoc[2]=player[1].coords.z; - vel[0]=0; - vel[1]=0; - vel[2]=0; - PlaySoundEx( fireendsound, samp[fireendsound], NULL, true); - OPENAL_3D_SetAttributes(channels[fireendsound], gLoc, vel); - OPENAL_SetVolume(channels[fireendsound], 256); - OPENAL_SetPaused(channels[fireendsound], false); - - for(i=0;i0)tutorialsuccess=1; - } - if(tutorialstage==41){ - if(player[0].weaponactive==-1&&player[0].num_weapons>0)tutorialsuccess=1; - } - if(tutorialstage==43){ - if(player[0].targetanimation==knifeslashstartanim)tutorialsuccess=1; - } - if(tutorialstage==44){ - if(animation[player[0].targetanimation].attack==reversal)tutorialsuccess=1; - } - if(tutorialstage==45){ - if(animation[player[0].targetanimation].attack==reversal)tutorialsuccess=1; - } - if(tutorialstage==46){ - if(animation[player[0].targetanimation].attack==reversal)tutorialsuccess=1; - } - if(tutorialstage==49){ - if(player[1].weaponstuck!=-1)tutorialsuccess=1; - } - if(tutorialsuccess>=1)tutorialstagetime=tutorialmaxtime-3; - - - if(tutorialstagetime==tutorialmaxtime-3){ - PlaySoundEx( consolesuccesssound, samp[consolesuccesssound], NULL, true); - OPENAL_SetVolume(channels[consolesuccesssound], 256); - OPENAL_SetPaused(channels[consolesuccesssound], false); - } - - if(tutorialsuccess>=1){ - if(tutorialstage==34||tutorialstage==35) - tutorialstagetime=tutorialmaxtime-1; - } - } - - if(tutoriallevel){ - if(tutorialstage<14||tutorialstage>=50){ - player[1].coords.y=300; - player[1].velocity=0; - } - } - - if(tutoriallevel!=1){ - if(bonustime==0&&bonus!=solidhit&&bonus!=spinecrusher&&bonus!=tracheotomy&&bonus!=backstab&&bonusvalue>10){ - PlaySoundEx( consolesuccesssound, samp[consolesuccesssound], NULL, true); - OPENAL_SetVolume(channels[consolesuccesssound], 256); - OPENAL_SetPaused(channels[consolesuccesssound], false); - } - } - else - if(bonustime==0){ - PlaySoundEx( fireendsound, samp[fireendsound], NULL, true); - OPENAL_SetVolume(channels[fireendsound], 256); - OPENAL_SetPaused(channels[fireendsound], false); - } - if(bonustime==0){ - if(bonus!=solidhit&&bonus!=twoxcombo&&bonus!=threexcombo&&bonus!=fourxcombo&&bonus!=megacombo)bonusnum[bonus]++; - else bonusnum[bonus]+=0.15; - if(tutoriallevel)bonusvalue=0; - bonusvalue/=bonusnum[bonus]; - bonustotal+=bonusvalue; - } - bonustime+=multiplier; - - if(environment==snowyenvironment){ - precipdelay-=multiplier; - while(precipdelay<0){ - precipdelay+=.04; - if(!detail)precipdelay+=.04; - XYZ footvel,footpoint; - - footvel=0; - footpoint=viewer+viewerfacing*6; - footpoint.y+=((float)abs(Random()%1200))/100-6; - footpoint.x+=((float)abs(Random()%1200))/100-6; - footpoint.z+=((float)abs(Random()%1200))/100-6; - sprites.MakeSprite(snowsprite, footpoint,footvel, 1,1,1, .1, 1); - } - } - for(k=0;kplayer[k].targetrotation){ - player[k].rotation-=multiplier*player[k].turnspeed; - } - else if(player[k].rotationplayer[k].targetrotation){ - player[k].rotation-=multiplier*player[k].turnspeed; - } - else if(player[k].rotationplayer[k].targetrotation){ - player[k].rotation-=multiplier*player[k].turnspeed; - } - else if(player[k].rotation0){ - if(!player[k].skeleton.free&&player[k].targetanimation!=climbanim&&player[k].targetanimation!=hanganim){ - bool tempcollide=0; - - if(player[k].collide<-.3)player[k].collide=-.3; - if(player[k].collide>1)player[k].collide=1; - player[k].collide-=multiplier*30; - - if(player[k].coords.y.5&&player[k].aitype==playercontrolled)||objects.position[i].y>player[k].coords.y))){ - lowpoint=player[k].coords; - if(player[k].targetanimation!=jumpupanim&&player[k].targetanimation!=jumpdownanim&&!player[k].isFlip())lowpoint.y+=1.25; - else lowpoint.y+=1.3; - if(player[k].coords.yterrain.getHeight(player[k].coords.x,player[k].coords.z)-.1){ - player[k].coords.y=terrain.getHeight(player[k].coords.x,player[k].coords.z); - } - /*while(player[k].coords.y.5) - if(whichhit!=-1){ - //if(k==0){ - if(whichhit!=-1)if(player[k].targetanimation!=jumpupanim&&player[k].targetanimation!=jumpdownanim)player[k].collided=1; - if(checkcollide(lowpoint7,lowpointtarget7)==-1) - if(checkcollide(lowpoint6,lowpointtarget6)==-1) - if(objects.model[i].LineCheckPossible(&lowpoint2,&lowpointtarget2,&colpoint,&objects.position[i],&objects.rotation[i])!=-1&&objects.model[i].LineCheckPossible(&lowpoint3,&lowpointtarget3,&colpoint,&objects.position[i],&objects.rotation[i])!=-1&&objects.model[i].LineCheckPossible(&lowpoint4,&lowpointtarget4,&colpoint,&objects.position[i],&objects.rotation[i])!=-1&&objects.model[i].LineCheckPossible(&lowpoint5,&lowpointtarget5,&colpoint,&objects.position[i],&objects.rotation[i])!=-1) - for(j=0;j<45;j++){ - lowpoint=player[k].coords; - lowpoint.y+=(float)j/13; - lowpointtarget=lowpoint+facing*1.4; - if(objects.model[i].LineCheckPossible(&lowpoint,&lowpointtarget,&colpoint2,&objects.position[i],&objects.rotation[i])==-1){ - if(j<=6){ - j=100; - } - /*if(j>=25&&(player[k].isRun()||player[k].targetanimation==sneakanim||player[k].targetanimation==walkanim)){ - j=100; - }*/ - if(j<=25&&player[k].targetanimation==jumpdownanim){ - j=100; - } - if(j!=100&&(/*j>25||(player[k].isRun()||player[k].targetanimation==sneakanim||player[k].targetanimation==walkanim)||*/player[k].targetanimation==jumpupanim||player[k].targetanimation==jumpdownanim)){ - lowpoint=DoRotation(objects.model[i].facenormals[whichhit],0,objects.rotation[k],0); - if(1==1/*dotproduct(&player[k].velocity,&lowpoint)>0||player[k].aitype!=playercontrolled||(player[k].isRun()||player[k].targetanimation==sneakanim||player[k].targetanimation==walkanim||player[k].targetanimation==jumpupanim)*/){ - lowpoint=player[k].coords; - lowpoint.y+=(float)j/13; - lowpointtarget=lowpoint+facing*1.3; - flatfacing=player[k].coords; - player[k].coords=colpoint-DoRotation(objects.model[i].facenormals[whichhit],0,objects.rotation[k],0)*.01; - player[k].coords.y=lowpointtarget.y-.07; - player[k].currentoffset=(flatfacing-player[k].coords)/player[k].scale; - - if(j>10||!player[k].isRun()){ - if(player[k].targetanimation==jumpdownanim||player[k].targetanimation==jumpupanim){ - if(k==0)OPENAL_SetPaused(channels[whooshsound], true); - } - float gLoc[3]; - float vel[3]; - gLoc[0]=player[k].coords.x; - gLoc[1]=player[k].coords.y; - gLoc[2]=player[k].coords.z; - vel[0]=player[k].velocity.x; - vel[1]=player[k].velocity.y; - vel[2]=player[k].velocity.z; - PlaySoundEx( jumpsound, samp[jumpsound], NULL, true); - OPENAL_3D_SetAttributes(channels[jumpsound], gLoc, vel); - OPENAL_SetVolume(channels[jumpsound], 128); - OPENAL_SetPaused(channels[jumpsound], false); - - lowpointtarget=DoRotation(objects.model[i].facenormals[whichhit],0,objects.rotation[i],0); - player[k].rotation=-asin(0-lowpointtarget.x); - player[k].rotation*=360/6.28; - if(lowpointtarget.z<0)player[k].rotation=180-player[k].rotation; - player[k].targetrotation=player[k].rotation; - player[k].lowrotation=player[k].rotation; - - //player[k].velocity=lowpointtarget*.03; - player[k].velocity=0; - - if(/*(player[k].isRun()||player[k].targetanimation==sneakanim||player[k].targetanimation==walkanim)||*/player[k].targetanimation==jumpupanim){ - //player[k].currentanimation=climbanim; - player[k].targetanimation=climbanim; - player[k].jumppower=0; - player[k].jumpclimb=1; - } - player[k].transspeed=6; - player[k].target=0; - - //player[k].currentframe=1; - player[k].targetframe=1; - if(j>25){ - //player[k].currentframe=0; - player[k].targetframe=0; - //player[k].currentanimation=hanganim; - player[k].targetanimation=hanganim; - player[k].jumppower=0; - } - } - j=100; - } - } - } - } - //} - } - } - } - } - } - if(player[k].collide<=0){ - if(!player[k].onterrain&&player[k].targetanimation!=jumpupanim&&player[k].targetanimation!=jumpdownanim&&player[k].targetanimation!=climbanim&&player[k].targetanimation!=hanganim&&!player[k].isWallJump()&&!player[k].isFlip()){ - if(player[k].currentanimation!=climbanim&&player[k].currentanimation!=tempanim&&player[k].targetanimation!=backhandspringanim&&(player[k].targetanimation!=rollanim||player[k].targetframe<2||player[k].targetframe>6)){ - if(player[k].targetanimation==staggerbackhighanim||player[k].targetanimation==staggerbackhardanim)player[k].RagDoll(0); - player[k].targetanimation=jumpdownanim; - player[k].targetframe=0; - player[k].target=0; - - float gLoc[3]; - float vel[3]; - gLoc[0]=player[k].coords.x; - gLoc[1]=player[k].coords.y; - gLoc[2]=player[k].coords.z; - vel[0]=player[k].velocity.x; - vel[1]=player[k].velocity.y; - vel[2]=player[k].velocity.z; - if(k==0){ - PlaySoundEx( whooshsound, samp[whooshsound], NULL, true); - OPENAL_3D_SetAttributes(channels[whooshsound], gLoc, vel); - OPENAL_SetVolume(channels[whooshsound], 128); - OPENAL_SetPaused(channels[whooshsound], false); - } - } - player[k].velocity.y+=gravity; - } - } - } - } - player[k].realoldcoords=player[k].coords; - } - - static XYZ oldviewer; - - if(indialogue==-1){ - player[0].forwardkeydown=IsKeyDown(theKeyMap, forwardkey); - player[0].leftkeydown=IsKeyDown(theKeyMap, leftkey); - player[0].backkeydown=IsKeyDown(theKeyMap, backkey); - player[0].rightkeydown=IsKeyDown(theKeyMap, rightkey); - player[0].jumpkeydown=IsKeyDown(theKeyMap, jumpkey); - player[0].crouchkeydown=IsKeyDown(theKeyMap, crouchkey); - player[0].drawkeydown=IsKeyDown(theKeyMap, drawkey); - player[0].throwkeydown=IsKeyDown(theKeyMap, throwkey); - } - else - { - player[0].forwardkeydown=0; - player[0].leftkeydown=0; - player[0].backkeydown=0; - player[0].rightkeydown=0; - player[0].jumpkeydown=0; - player[0].crouchkeydown=0; - player[0].drawkeydown=0; - player[0].throwkeydown=0; - } - - if(!player[0].jumpkeydown)player[0].jumpclimb=0; - - - static bool endkeydown; - if(indialogue!=-1){ - cameramode=1; - if(directing){ - facing=0; - facing.z=-1; - - facing=DoRotation(facing,-rotation2,0,0); - facing=DoRotation(facing,0,0-rotation,0); - - flatfacing=0; - flatfacing.z=-1; - - flatfacing=DoRotation(flatfacing,0,-rotation,0); - - if(IsKeyDown(theKeyMap, forwardkey))viewer+=facing*multiplier*4; - if(IsKeyDown(theKeyMap, backkey))viewer-=facing*multiplier*4; - if(IsKeyDown(theKeyMap, leftkey))viewer+=DoRotation(flatfacing*multiplier,0,90,0)*4; - if(IsKeyDown(theKeyMap, rightkey))viewer+=DoRotation(flatfacing*multiplier,0,-90,0)*4; - if(IsKeyDown(theKeyMap, jumpkey))viewer.y+=multiplier*4; - if(IsKeyDown(theKeyMap, crouchkey))viewer.y-=multiplier*4; - if(!endkeydown&&(IsKeyDown(theKeyMap, MAC_1_KEY)||IsKeyDown(theKeyMap, MAC_2_KEY)||IsKeyDown(theKeyMap, MAC_3_KEY)||IsKeyDown(theKeyMap, MAC_4_KEY)||IsKeyDown(theKeyMap, MAC_5_KEY) - ||IsKeyDown(theKeyMap, MAC_6_KEY)||IsKeyDown(theKeyMap, MAC_7_KEY)||IsKeyDown(theKeyMap, MAC_8_KEY)||IsKeyDown(theKeyMap, MAC_9_KEY)||IsKeyDown(theKeyMap, MAC_0_KEY) - ||IsKeyDown(theKeyMap, MAC_MINUS_KEY))){ - int whichend; - if(IsKeyDown(theKeyMap, MAC_1_KEY))whichend=1; - if(IsKeyDown(theKeyMap, MAC_2_KEY))whichend=2; - if(IsKeyDown(theKeyMap, MAC_3_KEY))whichend=3; - if(IsKeyDown(theKeyMap, MAC_4_KEY))whichend=4; - if(IsKeyDown(theKeyMap, MAC_5_KEY))whichend=5; - if(IsKeyDown(theKeyMap, MAC_6_KEY))whichend=6; - if(IsKeyDown(theKeyMap, MAC_7_KEY))whichend=7; - if(IsKeyDown(theKeyMap, MAC_8_KEY))whichend=8; - if(IsKeyDown(theKeyMap, MAC_9_KEY))whichend=9; - if(IsKeyDown(theKeyMap, MAC_0_KEY))whichend=0; - if(IsKeyDown(theKeyMap, MAC_MINUS_KEY))whichend=-1; - if(whichend!=-1){ - participantfocus[whichdialogue][indialogue]=whichend; - participantlocation[whichdialogue][whichend]=player[whichend].coords; - participantrotation[whichdialogue][whichend]=player[whichend].rotation; - } - if(whichend==-1){ - participantfocus[whichdialogue][indialogue]=-1; - } - if(player[participantfocus[whichdialogue][indialogue]].dead){ - indialogue=-1; - directing=0; - cameramode=0; - } - dialoguecamera[whichdialogue][indialogue]=viewer; - dialoguecamerarotation[whichdialogue][indialogue]=rotation; - dialoguecamerarotation2[whichdialogue][indialogue]=rotation2; - indialogue++; - if(indialogue=numdialogueboxes[whichdialogue]){ - indialogue=-1; - directing=0; - cameramode=0; - } - } - if(!directing){ - OPENAL_SetPaused(channels[whooshsound], true); - viewer=dialoguecamera[whichdialogue][indialogue]; - if(viewer.y0.5) - if((!endkeydown&&(IsKeyDown(theKeyMap, MAC_1_KEY)||IsKeyDown(theKeyMap, MAC_2_KEY)||IsKeyDown(theKeyMap, MAC_3_KEY)||IsKeyDown(theKeyMap, MAC_4_KEY)||IsKeyDown(theKeyMap, MAC_5_KEY) - ||IsKeyDown(theKeyMap, MAC_6_KEY)||IsKeyDown(theKeyMap, MAC_7_KEY)||IsKeyDown(theKeyMap, MAC_8_KEY)||IsKeyDown(theKeyMap, MAC_9_KEY)||IsKeyDown(theKeyMap, MAC_0_KEY) - ||IsKeyDown(theKeyMap, MAC_MINUS_KEY)))||(IsKeyDown(theKeyMap, attackkey)&&!oldbuttondialogue)){ - indialogue++; - endkeydown=1; - if(indialogue=numdialogueboxes[whichdialogue]){ - indialogue=-1; - directing=0; - cameramode=0; - if(dialoguetype[whichdialogue]>19&&dialoguetype[whichdialogue]<30){ - hostile=1; - } - if(dialoguetype[whichdialogue]>29&&dialoguetype[whichdialogue]<40){ - windialogue=1; - } - if(dialoguetype[whichdialogue]>49&&dialoguetype[whichdialogue]<60){ - hostile=1; - for(i=1;i2)environment=0; - Setenvironment(environment); - - envtogglekeydown=1; - } - - - if(!IsKeyDown(theKeyMap, MAC_J_KEY)){ - envtogglekeydown=0; - } - - if(IsKeyDown(theKeyMap, MAC_C_KEY)&&!cameratogglekeydown&&debugmode){ - cameramode=1-cameramode; - cameratogglekeydown=1; - } - - if(!IsKeyDown(theKeyMap, MAC_C_KEY)){ - cameratogglekeydown=0; - } - - if(IsKeyDown(theKeyMap, MAC_X_KEY)&&!IsKeyDown(theKeyMap, MAC_SHIFT_KEY)&&!detailtogglekeydown&&debugmode){ - if(player[0].num_weapons>0){ - if(weapons.type[player[0].weaponids[0]]==sword)weapons.type[player[0].weaponids[0]]=staff; - else if(weapons.type[player[0].weaponids[0]]==staff)weapons.type[player[0].weaponids[0]]=knife; - else weapons.type[player[0].weaponids[0]]=sword; - if(weapons.type[player[0].weaponids[0]]==sword){ - weapons.mass[player[0].weaponids[0]]=1.5; - weapons.tipmass[player[0].weaponids[0]]=1; - weapons.length[player[0].weaponids[0]]=.8; - } - if(weapons.type[player[0].weaponids[0]]==staff){ - weapons.mass[player[0].weaponids[0]]=2; - weapons.tipmass[player[0].weaponids[0]]=1; - weapons.length[player[0].weaponids[0]]=1.5; - } - - if(weapons.type[player[0].weaponids[0]]==knife){ - weapons.mass[player[0].weaponids[0]]=1; - weapons.tipmass[player[0].weaponids[0]]=1.2; - weapons.length[player[0].weaponids[0]]=.25; - } - } - - /*for(i=0;i1) - for(i=1;i1) - for(i=1;i1) - for(i=1;i9)player[closest].whichskin=0; - if(player[closest].whichskin>2&&player[closest].creature==wolftype)player[closest].whichskin=0; - - LoadTextureSave(creatureskin[player[closest].creature][player[closest].whichskin], - &player[closest].skeleton.drawmodel.textureptr,1,&player[closest].skeleton.skinText[0],&player[closest].skeleton.skinsize); - } - - if(player[closest].numclothes){ - for(i=0;i1) - for(i=1;i1) - for(i=1;i1) - for(i=1;i1&&numplayers1) - for(i=1;i0&&closest>=0){ - //player[closest]=player[numplayers-1]; - //player[closest].skeleton=player[numplayers-1].skeleton; - numplayers--; - } - drawmodetogglekeydown=1; - } - - if(IsKeyDown(theKeyMap, MAC_DELETE_KEY)&&editorenabled&&!drawmodetogglekeydown&&IsKeyDown(theKeyMap, MAC_CONTROL_KEY)){ - int closest=-1; - float closestdist=-1; - float distance; - if(max_objects>1) - for(i=1;i0&&closest>=0){ - objects.position[closest].y-=500; - } - drawmodetogglekeydown=1; - } - - if(IsKeyDown(theKeyMap, MAC_M_KEY)&&!drawmodetogglekeydown&&!IsKeyDown(theKeyMap, MAC_SHIFT_KEY)&&editorenabled&&debugmode){ - //drawmode++; - //if(drawmode>2)drawmode=0; - if(objects.numobjects1) - for(i=0;i1&&pathpointselected!=-1){ - numpathpointconnect[pathpointselected]++; - pathpointconnect[pathpointselected][numpathpointconnect[pathpointselected]-1]=numpathpoints-1; - } - pathpointselected=numpathpoints-1; - } - } - drawmodetogglekeydown=1; - } - - if(IsKeyDown(theKeyMap, MAC_PERIOD_KEY)&&!drawmodetogglekeydown&&editorenabled){ - pathpointselected++; - if(pathpointselected>=numpathpoints)pathpointselected=-1; - drawmodetogglekeydown=1; - } - if(IsKeyDown(theKeyMap, MAC_COMMA_KEY)&&!IsKeyDown(theKeyMap, MAC_SHIFT_KEY)&&!drawmodetogglekeydown&&editorenabled){ - pathpointselected--; - if(pathpointselected<=-2)pathpointselected=numpathpoints-1; - drawmodetogglekeydown=1; - } - if(IsKeyDown(theKeyMap, MAC_COMMA_KEY)&&IsKeyDown(theKeyMap, MAC_SHIFT_KEY)&&!drawmodetogglekeydown&&editorenabled){ - if(pathpointselected!=-1){ - numpathpoints--; - pathpoint[pathpointselected]=pathpoint[numpathpoints]; - numpathpointconnect[pathpointselected]=numpathpointconnect[numpathpoints]; - for(i=0;ifiretype)editortype=0; - drawmodetogglekeydown=1; - } - - if(IsKeyDown(theKeyMap, MAC_ARROW_LEFT_KEY)&&editorenabled&&!IsKeyDown(theKeyMap, MAC_SHIFT_KEY)&&!IsKeyDown(theKeyMap, MAC_CONTROL_KEY)){ - editorrotation-=multiplier*100; - if(editorrotation<-.01)editorrotation=-.01; - drawmodetogglekeydown=1; - } - - if(IsKeyDown(theKeyMap, MAC_ARROW_RIGHT_KEY)&&editorenabled&&!IsKeyDown(theKeyMap, MAC_SHIFT_KEY)&&!IsKeyDown(theKeyMap, MAC_CONTROL_KEY)){ - editorrotation+=multiplier*100; - drawmodetogglekeydown=1; - } - - if(IsKeyDown(theKeyMap, MAC_ARROW_UP_KEY)&&editorenabled&&!IsKeyDown(theKeyMap, MAC_CONTROL_KEY)){ - editorsize+=multiplier; - drawmodetogglekeydown=1; - } - - if(IsKeyDown(theKeyMap, MAC_ARROW_DOWN_KEY)&&editorenabled&&!IsKeyDown(theKeyMap, MAC_CONTROL_KEY)){ - editorsize-=multiplier; - if(editorsize<.1)editorsize=.1; - drawmodetogglekeydown=1; - } - - - if(IsKeyDown(theKeyMap, MAC_ARROW_LEFT_KEY)&&!drawmodetogglekeydown&&editorenabled&&IsKeyDown(theKeyMap, MAC_SHIFT_KEY)&&IsKeyDown(theKeyMap, MAC_CONTROL_KEY)){ - mapradius-=multiplier*10; - } - - if(IsKeyDown(theKeyMap, MAC_ARROW_RIGHT_KEY)&&!drawmodetogglekeydown&&editorenabled&&IsKeyDown(theKeyMap, MAC_SHIFT_KEY)&&IsKeyDown(theKeyMap, MAC_CONTROL_KEY)){ - mapradius+=multiplier*10; - } - /* - if(IsKeyDown(theKeyMap, MAC_ARROW_LEFT_KEY)&&editorenabled&&!IsKeyDown(theKeyMap, MAC_SHIFT_KEY)&&IsKeyDown(theKeyMap, MAC_CONTROL_KEY)){ - mapcenter.x+=multiplier*20; - } - - if(IsKeyDown(theKeyMap, MAC_ARROW_RIGHT_KEY)&&editorenabled&&!IsKeyDown(theKeyMap, MAC_SHIFT_KEY)&&IsKeyDown(theKeyMap, MAC_CONTROL_KEY)){ - mapcenter.x-=multiplier*20; - } - - if(IsKeyDown(theKeyMap, MAC_ARROW_UP_KEY)&&editorenabled&&IsKeyDown(theKeyMap, MAC_CONTROL_KEY)){ - mapcenter.z+=multiplier*20; - } - - if(IsKeyDown(theKeyMap, MAC_ARROW_DOWN_KEY)&&editorenabled&&IsKeyDown(theKeyMap, MAC_CONTROL_KEY)){ - mapcenter.z-=multiplier*20; - } - */ - if(IsKeyDown(theKeyMap, MAC_ARROW_UP_KEY)&&editorenabled&&IsKeyDown(theKeyMap, MAC_CONTROL_KEY)){ - editorrotation2+=multiplier*100; - } - - if(IsKeyDown(theKeyMap, MAC_ARROW_DOWN_KEY)&&editorenabled&&IsKeyDown(theKeyMap, MAC_CONTROL_KEY)){ - editorrotation2-=multiplier*100; - if(editorrotation2<-.01)editorrotation2=-.01; - } - if(IsKeyDown(theKeyMap, MAC_DELETE_KEY)&&editorenabled&&objects.numobjects&&!drawmodetogglekeydown&&!IsKeyDown(theKeyMap, MAC_SHIFT_KEY)){ - int closest=-1; - float closestdist=-1; - float distance; - for(i=0;i0&&closest>=0)objects.DeleteObject(closest); - drawmodetogglekeydown=1; - } - - - if(!IsKeyDown(theKeyMap, MAC_M_KEY)&&!IsKeyDown(theKeyMap, MAC_ARROW_LEFT_KEY)&&!IsKeyDown(theKeyMap, MAC_COMMA_KEY)&&!IsKeyDown(theKeyMap, MAC_PERIOD_KEY)&&!IsKeyDown(theKeyMap, MAC_ARROW_RIGHT_KEY)&&!IsKeyDown(theKeyMap, MAC_DELETE_KEY)&&!IsKeyDown(theKeyMap, MAC_P_KEY)){ - drawmodetogglekeydown=0; - } - - if(IsKeyDown(theKeyMap, MAC_N_KEY)&&!IsKeyDown(theKeyMap, MAC_CONTROL_KEY)&&!texturesizetogglekeydown&&debugmode){ - //if(!player[0].skeleton.free)player[0].damage+=500; - player[0].RagDoll(0); - //player[0].spurt=1; - //player[0].DoDamage(1000); - - float gLoc[3]; - float vel[3]; - gLoc[0]=player[0].coords.x; - gLoc[1]=player[0].coords.y; - gLoc[2]=player[0].coords.z; - vel[0]=player[0].velocity.x; - vel[1]=player[0].velocity.y; - vel[2]=player[0].velocity.z; - PlaySoundEx( whooshsound, samp[whooshsound], NULL, true); - OPENAL_3D_SetAttributes(channels[whooshsound], gLoc, vel); - OPENAL_SetVolume(channels[whooshsound], 128); - OPENAL_SetPaused(channels[whooshsound], false); - //OPENAL_SetPaused(channels[whooshsound], true); - - texturesizetogglekeydown=1; - } - - if(IsKeyDown(theKeyMap, MAC_N_KEY)&&IsKeyDown(theKeyMap, MAC_CONTROL_KEY)&&!texturesizetogglekeydown&&debugmode){ - - int closest=-1; - float closestdist=-1; - float distance; - for(i=0;i1&&player[k].backkeydown&&player[k].targetanimation!=backhandspringanim&&(player[k].isIdle()||player[k].isStop()||player[k].isRun()||player[k].targetanimation==walkanim)){ - for(i=0;i1) - for(i=0;i0&&weapons.type[player[k].weaponids[player[k].weaponactive]]==knife&&player[i].bloodloss>player[i].damagetolerance/2)player[k].targetanimation=knifefollowanim; - else if(findDistancefast(&player[k].coords,&player[i].coords)<2.5*(player[k].scale*5)*(player[k].scale*5)&&animation[player[i].targetanimation].height!=lowheight&&!player[k].forwardkeydown&&!player[k].leftkeydown&&!player[k].rightkeydown&&!player[k].crouchkeydown&&player[k].weaponactive!=-1&&weapons.type[player[k].weaponids[player[k].weaponactive]]==knife&&player[k].weaponmissdelay<=0)player[k].targetanimation=knifeslashstartanim; - else if(findDistancefast(&player[k].coords,&player[i].coords)<4.5*(player[k].scale*5)*(player[k].scale*5)&&animation[player[i].targetanimation].height!=lowheight&&!player[k].crouchkeydown&&player[k].weaponactive!=-1&&weapons.type[player[k].weaponids[player[k].weaponactive]]==sword&&player[k].weaponmissdelay<=0)player[k].targetanimation=swordslashanim; - else if(findDistancefast(&player[k].coords,&player[i].coords)<4.5*(player[k].scale*5)*(player[k].scale*5)&&animation[player[i].targetanimation].height!=lowheight&&!player[k].crouchkeydown&&player[k].weaponactive!=-1&&weapons.type[player[k].weaponids[player[k].weaponactive]]==staff&&player[k].weaponmissdelay<=0&&!player[k].leftkeydown&&!player[k].rightkeydown&&!player[k].forwardkeydown)player[k].targetanimation=staffhitanim; - else if(findDistancefast(&player[k].coords,&player[i].coords)<4.5*(player[k].scale*5)*(player[k].scale*5)&&animation[player[i].targetanimation].height!=lowheight&&!player[k].crouchkeydown&&player[k].weaponactive!=-1&&weapons.type[player[k].weaponids[player[k].weaponactive]]==staff&&player[k].weaponmissdelay<=0)player[k].targetanimation=staffspinhitanim; - else if(findDistancefast(&player[k].coords,&player[i].coords)<2.5*(player[k].scale*5)*(player[k].scale*5)&&animation[player[i].targetanimation].height!=lowheight)player[k].targetanimation=spinkickanim; - else if(findDistancefast(&player[k].coords,&player[i].coords)<2.5*(player[k].scale*5)*(player[k].scale*5)&&animation[player[i].targetanimation].height==lowheight&&animation[player[k].targetanimation].attack!=normalattack)player[k].targetanimation=lowkickanim; - } - else { - if(findDistancefast(&player[k].coords,&player[i].coords)<4.5*(player[k].scale*5)*(player[k].scale*5)){ - if(player[k].weaponactive==-1)randattack=abs(Random()%5); - else randattack=abs(Random()%5); - if(player[k].weaponactive==-1&&findDistancefast(&player[k].coords,&player[i].coords)<2.5*(player[k].scale*5)*(player[k].scale*5)){ - if(randattack==0&&animation[player[i].targetanimation].height!=lowheight)player[k].targetanimation=sweepanim; - else if(randattack==1&&animation[player[i].targetanimation].height!=lowheight&&player[k].weaponactive==-1)player[k].targetanimation=upunchanim; - else if(randattack==2&&animation[player[i].targetanimation].height!=lowheight)player[k].targetanimation=spinkickanim; - else if(animation[player[i].targetanimation].height==lowheight)player[k].targetanimation=lowkickanim; - } - if(player[k].weaponactive!=-1){ - if((tutoriallevel!=1||player[k].weaponactive==-1)&&findDistancefast(&player[k].coords,&player[i].coords)<2.5*(player[k].scale*5)*(player[k].scale*5)&&randattack==0&&animation[player[i].targetanimation].height!=lowheight)player[k].targetanimation=sweepanim; - else if(findDistancefast(&player[k].coords,&player[i].coords)<2.5*(player[k].scale*5)*(player[k].scale*5)/*&&animation[player[i].targetanimation].height!=lowheight*/&&weapons.type[player[k].weaponids[player[k].weaponactive]]==knife&&player[k].weaponmissdelay<=0)player[k].targetanimation=knifeslashstartanim; - //else if(findDistancefast(&player[k].coords,&player[i].coords)<2.5&&player[k].weaponactive!=-1&&player[i].staggerdelay>0&&weapons.type[player[k].weaponids[player[k].weaponactive]]==knife)player[k].targetanimation=knifefollowanim; - else if(!(player[0].victim==&player[i]&&player[0].hasvictim&&player[0].targetanimation==swordslashanim)&&weapons.type[player[k].weaponids[player[k].weaponactive]]==sword&&player[k].weaponmissdelay<=0)player[k].targetanimation=swordslashanim; - else if(!(player[0].victim==&player[i]&&player[0].hasvictim&&player[0].targetanimation==swordslashanim)&&weapons.type[player[k].weaponids[player[k].weaponactive]]==staff&&player[k].weaponmissdelay<=0&&randattack<3)player[k].targetanimation=staffhitanim; - else if(!(player[0].victim==&player[i]&&player[0].hasvictim&&player[0].targetanimation==swordslashanim)&&weapons.type[player[k].weaponids[player[k].weaponactive]]==staff&&player[k].weaponmissdelay<=0&&randattack>=3)player[k].targetanimation=staffspinhitanim; - else if((tutoriallevel!=1||player[k].weaponactive==-1)&&findDistancefast(&player[k].coords,&player[i].coords)<2.5*(player[k].scale*5)*(player[k].scale*5)&&randattack==1&&animation[player[i].targetanimation].height!=lowheight)player[k].targetanimation=spinkickanim; - else if(findDistancefast(&player[k].coords,&player[i].coords)<2.5*(player[k].scale*5)*(player[k].scale*5)&&animation[player[i].targetanimation].height==lowheight&&animation[player[k].targetanimation].attack!=normalattack)player[k].targetanimation=lowkickanim; - } - } - } - if(player[k].targetanimation==upunchanim&&player[k].creature==wolftype)player[k].targetanimation=wolfslapanim; - } - if((tutoriallevel!=1||tutorialstage==22)&&player[i].howactive0&&player[k].madskills)||(player[i].surprised>0)||player[i].aitype==passivetype)||(player[k].weaponactive!=-1&&player[i].stunned>0))&&normaldotproduct(player[i].facing,player[i].coords-player[k].coords)>0&&(k==0)){ - if(player[k].weaponactive==-1){ - player[i].targetanimation=sneakattackedanim; - player[i].currentanimation=sneakattackedanim; - player[k].currentanimation=sneakattackanim; - player[k].targetanimation=sneakattackanim; - player[k].oldcoords=player[k].coords; - player[k].coords=player[i].coords; - } - if(player[k].weaponactive!=-1&&weapons.type[player[k].weaponids[player[k].weaponactive]]==knife){ - player[i].targetanimation=knifesneakattackedanim; - player[i].currentanimation=knifesneakattackedanim; - player[k].currentanimation=knifesneakattackanim; - player[k].targetanimation=knifesneakattackanim; - player[i].oldcoords=player[i].coords; - player[i].coords=player[k].coords; - } - if(player[k].weaponactive!=-1&&weapons.type[player[k].weaponids[player[k].weaponactive]]==sword){ - player[i].targetanimation=swordsneakattackedanim; - player[i].currentanimation=swordsneakattackedanim; - player[k].currentanimation=swordsneakattackanim; - player[k].targetanimation=swordsneakattackanim; - player[i].oldcoords=player[i].coords; - player[i].coords=player[k].coords; - } - if(player[k].weaponactive==-1||weapons.type[player[k].weaponids[player[k].weaponactive]]!=staff){ - player[k].victim=&player[i]; - player[k].hasvictim=1; - player[i].targettilt2=0; - player[i].targetframe=1; - player[i].currentframe=0; - player[i].target=0; - player[i].velocity=0; - player[k].targettilt2=player[i].targettilt2; - player[k].currentframe=player[i].currentframe; - player[k].targetframe=player[i].targetframe; - player[k].target=player[i].target; - player[k].velocity=0; - player[k].targetrotation=player[i].rotation; - player[k].rotation=player[i].rotation; - player[i].targetrotation=player[i].rotation; - } - } - if(animation[player[k].targetanimation].attack==normalattack&&player[k].victim==&player[i]&&(!player[i].skeleton.free)){ - oldattackkey=1; - player[k].targetframe=0; - player[k].target=0; - //player[k].velocity=0; - - rotatetarget=player[i].coords-player[k].coords; - Normalise(&rotatetarget); - player[k].targetrotation=-asin(0-rotatetarget.x); - player[k].targetrotation*=360/6.28; - if(rotatetarget.z<0)player[k].targetrotation=180-player[k].targetrotation; - - player[k].targettilt2=-asin(rotatetarget.y)*360/6.28;//*-70; - - player[k].lastattack3=player[k].lastattack2; - player[k].lastattack2=player[k].lastattack; - player[k].lastattack=player[k].targetanimation; - //player[k].targettilt2=0; - //slomo=1; - //slomodelay=.2; - } - if(player[k].targetanimation==knifefollowanim&&player[k].victim==&player[i]){ - rotatetarget=player[i].coords-player[k].coords; - Normalise(&rotatetarget); - player[k].targetrotation=-asin(0-rotatetarget.x); - player[k].targetrotation*=360/6.28; - if(rotatetarget.z<0)player[k].targetrotation=180-player[k].targetrotation; - player[k].targettilt2=-asin(rotatetarget.y)*360/6.28;//*-70; - oldattackkey=1; - player[k].victim=&player[i]; - player[k].hasvictim=1; - player[i].targetanimation=knifefollowedanim; - player[i].currentanimation=knifefollowedanim; - player[i].targettilt2=0; - player[i].targettilt2=player[k].targettilt2; - player[i].targetframe=1; - player[i].currentframe=0; - player[i].target=0; - player[i].velocity=0; - player[k].currentanimation=knifefollowanim; - player[k].targetanimation=knifefollowanim; - player[k].targettilt2=player[i].targettilt2; - player[k].currentframe=player[i].currentframe; - player[k].targetframe=player[i].targetframe; - player[k].target=player[i].target; - player[k].velocity=0; - player[k].oldcoords=player[k].coords; - player[i].coords=player[k].coords; - player[i].targetrotation=player[k].targetrotation; - player[i].rotation=player[k].targetrotation; - player[k].rotation=player[k].targetrotation; - player[i].rotation=player[k].targetrotation; - } - } - } - bool hasstaff=0; - if(player[k].weaponactive!=-1){ - if(weapons.type[player[k].weaponids[player[k].weaponactive]]==staff)hasstaff=1; - } - if(numplayers>1) - for(i=0;i1000||player[k].isRun()||(hasstaff)||(player[k].weaponactive!=-1&&player[i].skeleton.free&&(player[i].skeleton.longdead>2000||player[i].damage>player[i].damagetolerance/8||player[i].bloodloss>player[i].damagetolerance/2)&&findDistancefast(&player[k].coords,&player[i].coords)<1.5*(player[k].scale*5)*(player[k].scale*5)))){ - player[k].victim=&player[i]; - player[k].hasvictim=1; - if(player[k].weaponactive!=-1&&tutoriallevel!=1){ - if(player[k].crouchkeydown&&player[k].weaponactive!=-1&&weapons.type[player[k].weaponids[player[k].weaponactive]]==knife&&findDistancefast(&player[k].coords,&player[i].coords)<1.5*(player[k].scale*5)*(player[k].scale*5))player[k].targetanimation=crouchstabanim; - if(player[k].crouchkeydown&&findDistancefast(&player[k].coords,&player[i].coords)<1.5*(player[k].scale*5)*(player[k].scale*5)/*&&player[i].dead!=2*/&&weapons.type[player[k].weaponids[player[k].weaponactive]]==sword)player[k].targetanimation=swordgroundstabanim; - if(/*(player[k].crouchkeydown||!player[i].dead)&&*/findDistancefast(&player[k].coords,&player[i].coords)<3.5*(player[k].scale*5)*(player[k].scale*5)/*&&player[i].dead!=2*/&&weapons.type[player[k].weaponids[player[k].weaponactive]]==staff)player[k].targetanimation=staffgroundsmashanim; - } - if(findDistancefast(&player[k].coords,&player[i].coords)<2.5&&player[k].crouchkeydown&&player[k].targetanimation!=crouchstabanim&&(player[k].weaponactive==-1)&&player[i].dead&&player[i].skeleton.free&&player[i].skeleton.longdead>1000){ - player[k].targetanimation=killanim; - for(j=0;jcoords)&&i!=k&&(i==0||k==0)){ - player[k].victim=&player[i]; - } - } - } - if(player[k].aitype==playercontrolled) - if(player[k].attackkeydown&&(player[k].isRun())&&player[k].wasRun()&&((player[k].hasvictim&&findDistancefast(&player[k].coords,&player[k].victim->coords)<12*(player[k].scale*5)*(player[k].scale*5)&&findDistancefast(&player[k].coords,&player[k].victim->coords)>7*(player[k].scale*5)*(player[k].scale*5)&&!player[k].victim->skeleton.free&&player[k].victim->targetanimation!=getupfrombackanim&&player[k].victim->targetanimation!=getupfromfrontanim&&animation[player[k].victim->targetanimation].height!=lowheight&&player[k].aitype!=playercontrolled&&normaldotproduct(player[k].facing,player[k].victim->coords-player[k].coords)>0&&player[k].rabbitkickenabled)||player[k].jumpkeydown)){ - oldattackkey=1; - player[k].targetanimation=rabbitkickanim; - player[k].targetframe=0; - player[k].target=0; - } - if(animation[player[k].targetanimation].attack&&k==0){ - numattacks++; - bool armedstaff=0; - if(player[k].weaponactive!=-1){ - if(weapons.type[player[k].weaponids[player[k].weaponactive]]==staff)armedstaff=1; - } - bool armedsword=0; - if(player[k].weaponactive!=-1){ - if(weapons.type[player[k].weaponids[player[k].weaponactive]]==sword)armedsword=1; - } - bool armedknife=0; - if(player[k].weaponactive!=-1){ - if(weapons.type[player[k].weaponids[player[k].weaponactive]]==knife)armedknife=1; - } - if(armedstaff)numstaffattack++; - else if(armedsword)numswordattack++; - else if(armedknife)numknifeattack++; - else numunarmedattack++; - } - } - } - } - - //Collisions - static float collisionradius; - if(numplayers>1) - for(k=0;kplayer[k].coords.y-3) - if(player[i].coords.yplayer[k].coords.x-3) - if(player[i].coords.xplayer[k].coords.z-3) - if(player[i].coords.zskeleton.free)collisionradius=3; - if((!player[i].skeleton.oldfree||!player[k].skeleton.oldfree)&&(findDistancefast(&tempcoords1,&tempcoords2)1)||(player[k].skeleton.oldfree==1&&findLengthfast(&player[k].velocity)>1)||(player[i].skeleton.oldfree==0&&player[k].skeleton.oldfree==0)){ - rotatetarget=player[k].velocity-player[i].velocity; - if(((player[i].targetanimation!=getupfrombackanim&&player[i].targetanimation!=getupfromfrontanim)||player[i].skeleton.free)&&((player[k].targetanimation!=getupfrombackanim&&player[k].targetanimation!=getupfromfrontanim)||player[k].skeleton.free)) - if(((((findLengthfast(&rotatetarget)>150&&(i!=0&&k!=0))||(findLengthfast(&rotatetarget)>50&&player[0].rabbitkickragdoll/*currentanimation==rabbitkickanim*/&&(i==0||k==0)))&&normaldotproduct(rotatetarget,player[k].coords-player[i].coords)>0)&&((i==0||k==0)||((player[i].skeleton.oldfree==1&&k!=0&&animation[player[k].currentanimation].attack==neutral)||(player[k].skeleton.oldfree==1&&i!=0&&animation[player[i].currentanimation].attack==neutral)||(player[i].isFlip()&&!player[i].skeleton.oldfree&&(i==0||k==0))||(player[k].isFlip()&&!player[k].skeleton.oldfree&&(i==0||k==0))||(i==0||k==0))))||((player[i].targetanimation==jumpupanim||player[i].targetanimation==jumpdownanim||player[i].isFlip())&&(player[k].targetanimation==jumpupanim||player[k].targetanimation==jumpdownanim||player[k].isFlip())&&(i==0||k==0)&&(!player[i].skeleton.oldfree&&!player[k].skeleton.oldfree))){ - //If hit by body - if((i!=0||player[i].skeleton.free)&&(k!=0||player[k].skeleton.free)||(animation[player[i].targetanimation].height==highheight&&animation[player[k].targetanimation].height==highheight)){ - static float gLoc[3]; - static float vel[3]; - gLoc[0]=player[i].coords.x; - gLoc[1]=player[i].coords.y; - gLoc[2]=player[i].coords.z; - vel[0]=player[i].velocity.x; - vel[1]=player[i].velocity.y; - vel[2]=player[i].velocity.z; - if(tutoriallevel!=1){ - PlaySoundEx( heavyimpactsound, samp[heavyimpactsound], NULL, true); - OPENAL_3D_SetAttributes(channels[heavyimpactsound], gLoc, vel); - OPENAL_SetVolume(channels[heavyimpactsound], 256); - OPENAL_SetPaused(channels[heavyimpactsound], false); - } - //player[i].velocity=player[k].velocity; - //player[k].velocity=player[i].velocity; - - player[i].RagDoll(0); - if(player[i].damage>player[i].damagetolerance-findLengthfast(&rotatetarget)/4&&!player[i].dead){ - bonus=aimbonus; - bonustime=0; - bonusvalue=150; - } - player[i].DoDamage(findLengthfast(&rotatetarget)/4); - player[k].RagDoll(0); - if(player[k].damage>player[k].damagetolerance-findLengthfast(&rotatetarget)/4&&!player[k].dead){ - bonus=aimbonus; - bonustime=0; - bonusvalue=150; - } - player[k].DoDamage(findLengthfast(&rotatetarget)/4); - - //if(player[i].skeleton.oldfree){ - for(j=0;j1&&checkdelay<=0){ - checkdelay=.015; - for(k=0;kplayer[k].coords.y-3) - if(player[i].coords.yplayer[k].coords.x-3) - if(player[i].coords.xplayer[k].coords.z-3) - if(player[i].coords.zplayer[k].skeleton.longdead&&player[k].skeleton.free!=2)||player[i].skeleton.free==2){ - stuck=i; - moving=k; - } - else - { - moving=i; - stuck=k; - } - isgood=1; - - if(isgood){ - above[moving]=stuck; - for(l=0;l1) + for(int i=0;i0&& + attackweapon==knife&& + player[i].bloodloss>player[i].damagetolerance/2) + player[k].targetanimation=knifefollowanim; + //knifeslashstart + else if(distance<2.5*sq(player[k].scale*5)&& + animation[player[i].targetanimation].height!=lowheight&& + !player[k].forwardkeydown&& + !player[k].leftkeydown&& + !player[k].rightkeydown&& + !player[k].crouchkeydown&& + attackweapon==knife&& + player[k].weaponmissdelay<=0) + player[k].targetanimation=knifeslashstartanim; + //swordslash + else if(distance<4.5*sq(player[k].scale*5)&& + animation[player[i].targetanimation].height!=lowheight&& + !player[k].crouchkeydown&& + attackweapon==sword&& + player[k].weaponmissdelay<=0) + player[k].targetanimation=swordslashanim; + //staffhit + else if(distance<4.5*sq(player[k].scale*5)&& + animation[player[i].targetanimation].height!=lowheight&& + !player[k].crouchkeydown&& + attackweapon==staff&& + player[k].weaponmissdelay<=0&& + !player[k].leftkeydown&& + !player[k].rightkeydown&& + !player[k].forwardkeydown) + player[k].targetanimation=staffhitanim; + //staffspinhit + else if(distance<4.5*sq(player[k].scale*5)&& + animation[player[i].targetanimation].height!=lowheight&& + !player[k].crouchkeydown&& + attackweapon==staff&& + player[k].weaponmissdelay<=0) + player[k].targetanimation=staffspinhitanim; + //spinkick + else if(distance<2.5*sq(player[k].scale*5)&& + animation[player[i].targetanimation].height!=lowheight) + player[k].targetanimation=spinkickanim; + //lowkick + else if(distance<2.5*sq(player[k].scale*5)&& + animation[player[i].targetanimation].height==lowheight&& + animation[player[k].targetanimation].attack!=normalattack) + player[k].targetanimation=lowkickanim; + } else { //AI player + if(distance<4.5*sq(player[k].scale*5)){ + randattack=abs(Random()%5); + if(!attackweapon&&distance<2.5*sq(player[k].scale*5)){ + //sweep + if(randattack==0&&animation[player[i].targetanimation].height!=lowheight) + player[k].targetanimation=sweepanim; + //upunch + else if(randattack==1&&animation[player[i].targetanimation].height!=lowheight&& + !attackweapon) + player[k].targetanimation=upunchanim; + //spinkick + else if(randattack==2&&animation[player[i].targetanimation].height!=lowheight) + player[k].targetanimation=spinkickanim; + //lowkick + else if(animation[player[i].targetanimation].height==lowheight) + player[k].targetanimation=lowkickanim; + } + if(attackweapon){ + //sweep + if((tutoriallevel!=1||!attackweapon)&& + distance<2.5*sq(player[k].scale*5)&& + randattack==0&& + animation[player[i].targetanimation].height!=lowheight) + player[k].targetanimation=sweepanim; + //knifeslashstart + else if(distance<2.5*sq(player[k].scale*5)&& + attackweapon==knife&& + player[k].weaponmissdelay<=0) + player[k].targetanimation=knifeslashstartanim; + //swordslash + else if(!(player[0].victim==&player[i]&& + player[0].hasvictim&& + player[0].targetanimation==swordslashanim)&& + attackweapon==sword&& + player[k].weaponmissdelay<=0) + player[k].targetanimation=swordslashanim; + //staffhit + else if(!(player[0].victim==&player[i]&& + player[0].hasvictim&& + player[0].targetanimation==swordslashanim)&& + attackweapon==staff&& + player[k].weaponmissdelay<=0&& + randattack<3) + player[k].targetanimation=staffhitanim; + //staffspinhit + else if(!(player[0].victim==&player[i]&& + player[0].hasvictim&& + player[0].targetanimation==swordslashanim)&& + attackweapon==staff&& + player[k].weaponmissdelay<=0&& + randattack>=3) + player[k].targetanimation=staffspinhitanim; + //spinkick + else if((tutoriallevel!=1||!attackweapon)&& + distance<2.5*sq(player[k].scale*5)&& + randattack==1&& + animation[player[i].targetanimation].height!=lowheight) + player[k].targetanimation=spinkickanim; + //lowkick + else if(distance<2.5*sq(player[k].scale*5)&& + animation[player[i].targetanimation].height==lowheight&& + animation[player[k].targetanimation].attack!=normalattack) + player[k].targetanimation=lowkickanim; + } + } + } + //upunch becomes wolfslap + if(player[k].targetanimation==upunchanim&&player[k].creature==wolftype) + player[k].targetanimation=wolfslapanim; + } + //sneak attacks + if((k==0)&&(tutoriallevel!=1||tutorialstage==22)&& + player[i].howactive0&&player[k].madskills|| + player[i].surprised>0|| + player[i].aitype==passivetype|| + attackweapon&&player[i].stunned>0)&& + normaldotproduct(player[i].facing,player[i].coords-player[k].coords)>0){ + //sneakattack + if(!attackweapon){ + player[k].currentanimation=sneakattackanim; + player[k].targetanimation=sneakattackanim; + player[i].currentanimation=sneakattackedanim; + player[i].targetanimation=sneakattackedanim; + player[k].oldcoords=player[k].coords; + player[k].coords=player[i].coords; + } + //knifesneakattack + if(attackweapon==knife){ + player[k].currentanimation=knifesneakattackanim; + player[k].targetanimation=knifesneakattackanim; + player[i].currentanimation=knifesneakattackedanim; + player[i].targetanimation=knifesneakattackedanim; + player[i].oldcoords=player[i].coords; + player[i].coords=player[k].coords; + } + //swordsneakattack + if(attackweapon==sword){ + player[k].currentanimation=swordsneakattackanim; + player[k].targetanimation=swordsneakattackanim; + player[i].currentanimation=swordsneakattackedanim; + player[i].targetanimation=swordsneakattackedanim; + player[i].oldcoords=player[i].coords; + player[i].coords=player[k].coords; + } + if(attackweapon!=staff){ + player[k].victim=&player[i]; + player[k].hasvictim=1; + player[i].targettilt2=0; + player[i].targetframe=1; + player[i].currentframe=0; + player[i].target=0; + player[i].velocity=0; + player[k].targettilt2=player[i].targettilt2; + player[k].currentframe=player[i].currentframe; + player[k].targetframe=player[i].targetframe; + player[k].target=player[i].target; + player[k].velocity=0; + player[k].targetrotation=player[i].rotation; + player[k].rotation=player[i].rotation; + player[i].targetrotation=player[i].rotation; + } + } + if(animation[player[k].targetanimation].attack==normalattack&& + player[k].victim==&player[i]&& + (!player[i].skeleton.free)){ + oldattackkey=1; + player[k].targetframe=0; + player[k].target=0; + + player[k].targetrotation=roughDirectionTo(player[k].coords,player[i].coords); + player[k].targettilt2=pitchTo(player[k].coords,player[i].coords); + player[k].lastattack3=player[k].lastattack2; + player[k].lastattack2=player[k].lastattack; + player[k].lastattack=player[k].targetanimation; + } + if(player[k].targetanimation==knifefollowanim&& + player[k].victim==&player[i]){ + oldattackkey=1; + player[k].targetrotation=roughDirectionTo(player[k].coords,player[i].coords); + player[k].targettilt2=pitchTo(player[k].coords,player[i].coords); + player[k].victim=&player[i]; + player[k].hasvictim=1; + player[i].targetanimation=knifefollowedanim; + player[i].currentanimation=knifefollowedanim; + player[i].targettilt2=0; + player[i].targettilt2=player[k].targettilt2; + player[i].targetframe=1; + player[i].currentframe=0; + player[i].target=0; + player[i].velocity=0; + player[k].currentanimation=knifefollowanim; + player[k].targetanimation=knifefollowanim; + player[k].targettilt2=player[i].targettilt2; + player[k].currentframe=player[i].currentframe; + player[k].targetframe=player[i].targetframe; + player[k].target=player[i].target; + player[k].velocity=0; + player[k].oldcoords=player[k].coords; + player[i].coords=player[k].coords; + player[i].targetrotation=player[k].targetrotation; + player[i].rotation=player[k].targetrotation; + player[k].rotation=player[k].targetrotation; + player[i].rotation=player[k].targetrotation; + } + } + } + const bool hasstaff=attackweapon==staff; + if(k==0&&numplayers>1) + for(int i=0;i1000|| + player[k].isRun()|| + hasstaff|| + (attackweapon&& + (player[i].skeleton.longdead>2000|| + player[i].damage>player[i].damagetolerance/8|| + player[i].bloodloss>player[i].damagetolerance/2)&& + distance<1.5*sq(player[k].scale*5)))){ + player[k].victim=&player[i]; + player[k].hasvictim=1; + if(attackweapon&&tutoriallevel!=1){ + //crouchstab + if(player[k].crouchkeydown&&attackweapon==knife&&distance<1.5*sq(player[k].scale*5)) + player[k].targetanimation=crouchstabanim; + //swordgroundstab + if(player[k].crouchkeydown&&distance<1.5*sq(player[k].scale*5)&&attackweapon==sword) + player[k].targetanimation=swordgroundstabanim; + //staffgroundsmash + if(distance<3.5*sq(player[k].scale*5)&&attackweapon==staff) + player[k].targetanimation=staffgroundsmashanim; + } + if(distance<2.5&& + player[k].crouchkeydown&& + player[k].targetanimation!=crouchstabanim&& + !attackweapon&& + player[i].dead&& + player[i].skeleton.free&& + player[i].skeleton.longdead>1000){ + player[k].targetanimation=killanim; + //TODO: refactor this out, what does it do? + for(int j=0;jcoords)) + player[k].victim=&player[i]; + }else{ + player[k].victim=&player[i]; + player[k].hasvictim=1; + } + } + } + } + if(player[k].aitype==playercontrolled) + //rabbit kick + if(player[k].attackkeydown&& + player[k].isRun()&& + player[k].wasRun()&& + ((player[k].hasvictim&& + findDistancefast(&player[k].coords,&player[k].victim->coords)<12*sq(player[k].scale*5)&& + findDistancefast(&player[k].coords,&player[k].victim->coords)>7*sq(player[k].scale*5)&& + !player[k].victim->skeleton.free&& + player[k].victim->targetanimation!=getupfrombackanim&& + player[k].victim->targetanimation!=getupfromfrontanim&& + animation[player[k].victim->targetanimation].height!=lowheight&& + player[k].aitype!=playercontrolled&& //wat??? + normaldotproduct(player[k].facing,player[k].victim->coords-player[k].coords)>0&& + player[k].rabbitkickenabled)|| + player[k].jumpkeydown)){ + oldattackkey=1; + setAnimation(k,rabbitkickanim); + } + //update counts + if(animation[player[k].targetanimation].attack&&k==0){ + numattacks++; + switch(attackweapon){ + case 0: numunarmedattack++; break; + case knife: numknifeattack++; break; + case sword: numswordattack++; break; + case staff: numstaffattack++; break; + } + } + } + } + } + } +} - if(!IsKeyDown(theKeyMap, MAC_N_KEY)){ - texturesizetogglekeydown=0; - } +void Game::doPlayerCollisions(){ + static XYZ rotatetarget; + static float collisionradius; + if(numplayers>1) + for(int k=0;kplayer[k].coords.y-3) + if(player[i].coords.yplayer[k].coords.x-3) + if(player[i].coords.xplayer[k].coords.z-3) + if(player[i].coords.zskeleton.free) + collisionradius=3; + if((!player[i].skeleton.oldfree||!player[k].skeleton.oldfree)&& + (findDistancefast(&tempcoords1,&tempcoords2)1)|| + (player[k].skeleton.oldfree==1&&findLengthfast(&player[k].velocity)>1)|| + (player[i].skeleton.oldfree==0&&player[k].skeleton.oldfree==0)){ + rotatetarget=player[k].velocity-player[i].velocity; + if((player[i].targetanimation!=getupfrombackanim&&player[i].targetanimation!=getupfromfrontanim|| + player[i].skeleton.free)&& + (player[k].targetanimation!=getupfrombackanim&&player[k].targetanimation!=getupfromfrontanim|| + player[k].skeleton.free)) + if((((k!=0&&findLengthfast(&rotatetarget)>150|| + k==0&&findLengthfast(&rotatetarget)>50&&player[0].rabbitkickragdoll)&& + normaldotproduct(rotatetarget,player[k].coords-player[i].coords)>0)&& + (k==0|| + k!=0&&player[i].skeleton.oldfree==1&&animation[player[k].currentanimation].attack==neutral|| + /*i!=0&&*/player[k].skeleton.oldfree==1&&animation[player[i].currentanimation].attack==neutral))|| + (player[i].targetanimation==jumpupanim||player[i].targetanimation==jumpdownanim||player[i].isFlip())&& + (player[k].targetanimation==jumpupanim||player[k].targetanimation==jumpdownanim||player[k].isFlip())&& + k==0&&!player[i].skeleton.oldfree&&!player[k].skeleton.oldfree){ + //If hit by body + if( (i!=0||player[i].skeleton.free)&& + (k!=0||player[k].skeleton.free)|| + (animation[player[i].targetanimation].height==highheight&& + animation[player[k].targetanimation].height==highheight)){ + if(tutoriallevel!=1){ + emit_sound_at(heavyimpactsound, player[i].coords); + } + + player[i].RagDoll(0); + if(player[i].damage>player[i].damagetolerance-findLengthfast(&rotatetarget)/4&&!player[i].dead){ + award_bonus(0, aimbonus); + } + player[i].DoDamage(findLengthfast(&rotatetarget)/4); + player[k].RagDoll(0); + if(player[k].damage>player[k].damagetolerance-findLengthfast(&rotatetarget)/4&&!player[k].dead){ + award_bonus(0, aimbonus); // Huh, again? + } + player[k].DoDamage(findLengthfast(&rotatetarget)/4); + + for(int j=0;jplayer[i].coords.y+2&& + !player[0].onterrain) + player[i].pause=1; + + //pathfinding + if(player[i].aitype==pathfindtype){ + if(player[i].finalpathfindpoint==-1){ + float closestdistance; + float tempdist; + int closest; + XYZ colpoint; + closest=-1; + closestdistance=-1; + for(int j=0;j.8 && !player[i].jumpkeydown && player[i].collided<.8) + player[i].targetrotation+=90*(player[i].whichdirection*2-1); + + if(player[i].collided<1||player[i].targetanimation!=jumpupanim) + player[i].jumpkeydown=0; + if((player[i].collided>.8&&player[i].jumppower>=5)) + player[i].jumpkeydown=1; + + if((tutoriallevel!=1||cananger)&& + hostile&& + !player[0].dead&& + findDistancefast(&player[i].coords,&player[0].coords)<400&& + player[i].occluded<25){ + if(findDistancefast(&player[i].coords,&player[0].coords)<12&& + animation[player[0].targetanimation].height!=lowheight&& + !editorenabled&& + (player[0].coords.y0) + if(player[j].coords.y.5) + player[i].howactive=typeactive; + + if(player[i].aitype==passivetype){ + player[i].aiupdatedelay-=multiplier; + player[i].losupdatedelay-=multiplier; + player[i].lastseentime+=multiplier; + player[i].pausetime-=multiplier; + if(player[i].lastseentime>1) + player[i].lastseentime=1; + + if(player[i].aiupdatedelay<0){ + if(player[i].numwaypoints>1&&player[i].howactive==typeactive&&player[i].pausetime<=0){ + player[i].targetrotation=roughDirectionTo(player[i].coords,player[i].waypoints[player[i].waypoint]); + player[i].lookrotation=player[i].targetrotation; + player[i].aiupdatedelay=.05; + + if(findDistancefastflat(&player[i].coords,&player[i].waypoints[player[i].waypoint])<1){ + if(player[i].waypointtype[player[i].waypoint]==wppause) + player[i].pausetime=4; + player[i].waypoint++; + if(player[i].waypoint>player[i].numwaypoints-1) + player[i].waypoint=0; + + } + } + + if(player[i].numwaypoints>1&&player[i].howactive==typeactive&&player[i].pausetime<=0) + player[i].forwardkeydown=1; + else + player[i].forwardkeydown=0; + player[i].leftkeydown=0; + player[i].backkeydown=0; + player[i].rightkeydown=0; + player[i].crouchkeydown=0; + player[i].attackkeydown=0; + player[i].throwkeydown=0; + + if(player[i].avoidcollided>.8&&!player[i].jumpkeydown&&player[i].collided<.8){ + if(!player[i].avoidsomething) + player[i].targetrotation+=90*(player[i].whichdirection*2-1); + else{ + XYZ leftpos,rightpos; + float leftdist,rightdist; + leftpos = player[i].coords+DoRotation(player[i].facing,0,90,0); + rightpos = player[i].coords-DoRotation(player[i].facing,0,90,0); + leftdist = findDistancefast(&leftpos, &player[i].avoidwhere); + rightdist = findDistancefast(&rightpos, &player[i].avoidwhere); + if(leftdist.8&&player[i].jumppower>=5)) + player[i].jumpkeydown=1; + + + //hearing sounds + if(!editorenabled){ + if(player[i].howactive<=typesleeping) + if(numenvsounds>0&&(tutoriallevel!=1||cananger)&&hostile) + for(int j=0;j0&&findDistancefast(&player[i].coords,&envsound[j])< + 2*(vol+vol*(player[i].creature==rabbittype)*3)) + player[i].aitype=attacktypecutoff; + } + + if(player[i].aitype!=passivetype){ + if(player[i].howactive==typesleeping) + setAnimation(i,getupfromfrontanim); + player[i].howactive=typeactive; + } + } + + if(player[i].howactive0)){ + float smelldistance=50; + if(j==0&&player[j].num_weapons>0){ + if(weapons[player[j].weaponids[0]].bloody) + smelldistance=100; + if(player[j].num_weapons==2) + if(weapons[player[j].weaponids[1]].bloody) + smelldistance=100; + } + if(j!=0) + smelldistance=100; + windsmell=windvector; + Normalise(&windsmell); + windsmell=windsmell*2+player[j].coords; + if(findDistancefast(&player[i].coords,&windsmell)0) + if((-1==checkcollide( + DoRotation(playerJoint(i,head).position,0,player[i].rotation,0)* + player[i].scale+player[i].coords, + DoRotation(playerJoint(j,head).position,0,player[j].rotation,0)* + player[j].scale+player[j].coords)&& + !player[j].isWallJump())|| + (player[j].targetanimation==hanganim&& + normaldotproduct(player[j].facing,player[i].coords-player[j].coords)<0)){ + player[i].lastseentime-=.2; + if(j==0&&animation[player[j].targetanimation].height==lowheight) + player[i].lastseentime-=.4; + else + player[i].lastseentime-=.6; + } + if(player[i].lastseentime<=0){ + player[i].aitype=searchtype; + player[i].lastchecktime=12; + player[i].lastseen=player[j].coords; + player[i].lastseentime=12; + } + } + } + } + } + //alerted surprise + if(player[i].aitype==attacktypecutoff&&musictype!=2){ + if(player[i].creature!=wolftype){ + player[i].stunned=.6; + player[i].surprised=.6; + } + if(player[i].creature==wolftype){ + player[i].stunned=.47; + player[i].surprised=.47; + } + numseen++; + } + } + + //search for player + int j; + if(player[i].aitype==searchtype){ + player[i].aiupdatedelay-=multiplier; + player[i].losupdatedelay-=multiplier; + if(!player[i].pause) + player[i].lastseentime-=multiplier; + player[i].lastchecktime-=multiplier; + + if(player[i].isRun()&&!player[i].onground){ + if(player[i].coords.y>terrain.getHeight(player[i].coords.x,player[i].coords.z)+10){ + XYZ test2=player[i].coords+player[i].facing; + test2.y+=5; + XYZ test=player[i].coords+player[i].facing; + test.y-=10; + j=checkcollide(test2,test,player[i].laststanding); + if(j==-1) + j=checkcollide(test2,test); + if(j==-1){ + player[i].velocity=0; + setAnimation(i,player[i].getStop()); + player[i].targetrotation+=180; + player[i].stunned=.5; + //player[i].aitype=passivetype; + player[i].aitype=pathfindtype; + player[i].finalfinaltarget=player[i].waypoints[player[i].waypoint]; + player[i].finalpathfindpoint=-1; + player[i].targetpathfindpoint=-1; + player[i].lastpathfindpoint=-1; + player[i].lastpathfindpoint2=-1; + player[i].lastpathfindpoint3=-1; + player[i].lastpathfindpoint4=-1; + } + else player[i].laststanding=j; + } + } + //check out last seen location + if(player[i].aiupdatedelay<0){ + player[i].targetrotation=roughDirectionTo(player[i].coords,player[i].lastseen); + player[i].lookrotation=player[i].targetrotation; + player[i].aiupdatedelay=.05; + player[i].forwardkeydown=1; + + if(findDistancefastflat(&player[i].coords,&player[i].lastseen)<1*sq(player[i].scale*5)||player[i].lastchecktime<0){ + player[i].forwardkeydown=0; + player[i].aiupdatedelay=1; + player[i].lastseen.x+=(float(Random()%100)-50)/25; + player[i].lastseen.z+=(float(Random()%100)-50)/25; + player[i].lastchecktime=3; + } + + player[i].leftkeydown=0; + player[i].backkeydown=0; + player[i].rightkeydown=0; + player[i].crouchkeydown=0; + player[i].attackkeydown=0; + player[i].throwkeydown=0; + + if(player[i].avoidcollided>.8&&!player[i].jumpkeydown&&player[i].collided<.8){ + if(!player[i].avoidsomething)player[i].targetrotation+=90*(player[i].whichdirection*2-1); + else{ + XYZ leftpos,rightpos; + float leftdist,rightdist; + leftpos = player[i].coords+DoRotation(player[i].facing,0,90,0); + rightpos = player[i].coords-DoRotation(player[i].facing,0,90,0); + leftdist = findDistancefast(&leftpos, &player[i].avoidwhere); + rightdist = findDistancefast(&rightpos, &player[i].avoidwhere); + if(leftdist.8&&player[i].jumppower>=5)) + player[i].jumpkeydown=1; + + if(numenvsounds>0&&((tutoriallevel!=1||cananger)&&hostile)) + for(int k=0;k0) + if((checkcollide( + DoRotation(playerJoint(i,head).position,0,player[i].rotation,0)* + player[i].scale+player[i].coords, + DoRotation(playerJoint(0,head).position,0,player[0].rotation,0)* + player[0].scale+player[0].coords)==-1)|| + (player[0].targetanimation==hanganim&&normaldotproduct( + player[0].facing,player[i].coords-player[0].coords)<0)){ + /* //TODO: changed j to 0 on a whim, make sure this is correct + (player[j].targetanimation==hanganim&&normaldotproduct( + player[j].facing,player[i].coords-player[j].coords)<0) + */ + player[i].aitype=attacktypecutoff; + player[i].lastseentime=1; + } + } + //player escaped + if(player[i].lastseentime<0){ + //player[i].aitype=passivetype; + numescaped++; + player[i].aitype=pathfindtype; + player[i].finalfinaltarget=player[i].waypoints[player[i].waypoint]; + player[i].finalpathfindpoint=-1; + player[i].targetpathfindpoint=-1; + player[i].lastpathfindpoint=-1; + player[i].lastpathfindpoint2=-1; + player[i].lastpathfindpoint3=-1; + player[i].lastpathfindpoint4=-1; + } + } + + if(player[i].aitype!=gethelptype) + player[i].runninghowlong=0; + + //get help from buddies + if(player[i].aitype==gethelptype){ + player[i].runninghowlong+=multiplier; + player[i].aiupdatedelay-=multiplier; + + if(player[i].aiupdatedelay<0||player[i].ally==0){ + player[i].aiupdatedelay=.2; + + //find closest ally + //TODO: factor out closest search somehow + if(!player[i].ally){ + int closest=-1; + float closestdist=-1; + for(int k=0;k0){ + player[i].targetrotation=roughDirectionTo(player[i].coords,player[player[i].ally].coords); + player[i].lookrotation=player[i].targetrotation; + player[i].aiupdatedelay=.05; + player[i].forwardkeydown=1; + + if(findDistancefastflat(&player[i].coords,&player[player[i].ally].coords)<3){ + player[i].aitype=searchtype; + player[i].lastseentime=12; + player[player[i].ally].aitype=searchtype; + if(player[player[i].ally].lastseentime.8&&!player[i].jumpkeydown&&player[i].collided<.8){ + if(!player[i].avoidsomething) + player[i].targetrotation+=90*(player[i].whichdirection*2-1); + else{ + XYZ leftpos,rightpos; + float leftdist,rightdist; + leftpos = player[i].coords+DoRotation(player[i].facing,0,90,0); + rightpos = player[i].coords-DoRotation(player[i].facing,0,90,0); + leftdist = findDistancefast(&leftpos, &player[i].avoidwhere); + rightdist = findDistancefast(&rightpos, &player[i].avoidwhere); + if(leftdist.8&&player[i].jumppower>=5) + player[i].jumpkeydown=1; + } + + //retreiving a weapon on the ground + if(player[i].aitype==getweapontype){ + player[i].aiupdatedelay-=multiplier; + player[i].lastchecktime-=multiplier; + + if(player[i].aiupdatedelay<0){ + player[i].aiupdatedelay=.2; + + //ALLY IS WEPON + if(player[i].ally<0){ + int closest=-1; + float closestdist=-1; + for(int k=0;k=0){ + if(weapons[player[i].ally].owner!=-1|| + findDistancefast(&player[i].coords,&weapons[player[i].ally].position)>16){ + player[i].aitype=attacktypecutoff; + player[i].lastseentime=1; + } + //TODO: factor these out as moveToward() + player[i].targetrotation=roughDirectionTo(player[i].coords,weapons[player[i].ally].position); + player[i].lookrotation=player[i].targetrotation; + player[i].aiupdatedelay=.05; + player[i].forwardkeydown=1; + + + if(player[i].avoidcollided>.8&&!player[i].jumpkeydown&&player[i].collided<.8){ + if(!player[i].avoidsomething) + player[i].targetrotation+=90*(player[i].whichdirection*2-1); + else{ + XYZ leftpos,rightpos; + float leftdist,rightdist; + leftpos = player[i].coords+DoRotation(player[i].facing,0,90,0); + rightpos = player[i].coords-DoRotation(player[i].facing,0,90,0); + leftdist = findDistancefast(&leftpos, &player[i].avoidwhere); + rightdist = findDistancefast(&rightpos, &player[i].avoidwhere); + if(leftdist.8&&player[i].jumppower>=5)) + player[i].jumpkeydown=1; + } + + if(player[i].aitype==attacktypecutoff){ + player[i].aiupdatedelay-=multiplier; + //dodge or reverse rabbit kicks, knife throws, flips + if(player[i].damage.5) + player[i].stunned=1; + } + //go for weapon on the ground + if(player[i].wentforweapon<3) + for(int k=0;kterrain.getHeight(player[i].coords.x,player[i].coords.z)+10){ + XYZ test2=player[i].coords+player[i].facing; + test2.y+=5; + XYZ test=player[i].coords+player[i].facing; + test.y-=10; + j=checkcollide(test2,test,player[i].laststanding); + if(j==-1) + j=checkcollide(test2,test); + if(j==-1) { + player[i].velocity=0; + setAnimation(i,player[i].getStop()); + player[i].targetrotation+=180; + player[i].stunned=.5; + player[i].aitype=pathfindtype; + player[i].finalfinaltarget=player[i].waypoints[player[i].waypoint]; + player[i].finalpathfindpoint=-1; + player[i].targetpathfindpoint=-1; + player[i].lastpathfindpoint=-1; + player[i].lastpathfindpoint2=-1; + player[i].lastpathfindpoint3=-1; + player[i].lastpathfindpoint4=-1; + } else + player[i].laststanding=j; + } + //lose sight of player in the air (?) + if(player[0].coords.y>player[i].coords.y+5&& + animation[player[0].targetanimation].height!=highheight&& + !player[0].onterrain){ + player[i].aitype=pathfindtype; + player[i].finalfinaltarget=player[i].waypoints[player[i].waypoint]; + player[i].finalpathfindpoint=-1; + player[i].targetpathfindpoint=-1; + player[i].lastpathfindpoint=-1; + player[i].lastpathfindpoint2=-1; + player[i].lastpathfindpoint3=-1; + player[i].lastpathfindpoint4=-1; + } + //it's time to think (?) + if(player[i].aiupdatedelay<0&& + !animation[player[i].targetanimation].attack&& + player[i].targetanimation!=staggerbackhighanim&& + player[i].targetanimation!=staggerbackhardanim&& + player[i].targetanimation!=backhandspringanim&& + player[i].targetanimation!=dodgebackanim){ + //draw weapon + if(player[i].weaponactive==-1&&player[i].num_weapons>0) + player[i].drawkeydown=Random()%2; + else + player[i].drawkeydown=0; + player[i].rabbitkickenabled=Random()%2; + //chase player + XYZ rotatetarget=player[0].coords+player[0].velocity; + XYZ targetpoint=player[0].coords; + if(findDistancefast(&player[0].coords,&player[i].coords)< + findDistancefast(&rotatetarget,&player[i].coords)) + targetpoint+=player[0].velocity* + findDistance(&player[0].coords,&player[i].coords)/findLength(&player[i].velocity); + player[i].targetrotation=roughDirectionTo(player[i].coords,targetpoint); + player[i].lookrotation=player[i].targetrotation; + player[i].aiupdatedelay=.2+fabs((float)(Random()%100)/1000); + + if(findDistancefast(&player[i].coords,&player[0].coords)>5&&(player[0].weaponactive==-1||player[i].weaponactive!=-1)) + player[i].forwardkeydown=1; + else if((findDistancefast(&player[i].coords,&player[0].coords)>16|| + findDistancefast(&player[i].coords,&player[0].coords)<9)&& + player[0].weaponactive!=-1) + player[i].forwardkeydown=1; + else if(Random()%6==0||(player[i].creature==wolftype&&Random()%3==0)) + player[i].forwardkeydown=1; + else + player[i].forwardkeydown=0; + //chill out around the corpse + if(player[0].dead){ + player[i].forwardkeydown=0; + if(Random()%10==0) + player[i].forwardkeydown=1; + if(Random()%100==0){ + player[i].aitype=pathfindtype; + player[i].finalfinaltarget=player[i].waypoints[player[i].waypoint]; + player[i].finalpathfindpoint=-1; + player[i].targetpathfindpoint=-1; + player[i].lastpathfindpoint=-1; + player[i].lastpathfindpoint2=-1; + player[i].lastpathfindpoint3=-1; + player[i].lastpathfindpoint4=-1; + } + } + player[i].leftkeydown=0; + player[i].backkeydown=0; + player[i].rightkeydown=0; + player[i].crouchkeydown=0; + player[i].throwkeydown=0; + + if(player[i].avoidcollided>.8&&!player[i].jumpkeydown&&player[i].collided<.8) + player[i].targetrotation+=90*(player[i].whichdirection*2-1); + //attack!!! + if(Random()%2==0||player[i].weaponactive!=-1||player[i].creature==wolftype) + player[i].attackkeydown=1; + else + player[i].attackkeydown=0; + if(player[i].isRun()&&Random()%6&&findDistancefast(&player[i].coords,&player[0].coords)>7) + player[i].attackkeydown=0; + + //TODO: wat + if(player[i].aitype!=playercontrolled&& + (player[i].isIdle()|| + player[i].isCrouch()|| + player[i].isRun())){ + int target=-2; + for(int j=0;jcoords)<4&& + player[j].victim==&player[i]&& + (player[j].targetanimation==sweepanim|| + player[j].targetanimation==spinkickanim|| + player[j].targetanimation==staffhitanim|| + player[j].targetanimation==staffspinhitanim|| + player[j].targetanimation==winduppunchanim|| + player[j].targetanimation==upunchanim|| + player[j].targetanimation==wolfslapanim|| + player[j].targetanimation==knifeslashstartanim|| + player[j].targetanimation==swordslashanim&& + (findDistancefast(&player[j].coords,&player[i].coords)<2|| + player[i].weaponactive!=-1))){ + if(target>=0) + target=-1; + else + target=j; + } + if(target>=0) + player[target].Reverse(); + } + + if(player[i].collided<1) + player[i].jumpkeydown=0; + if(player[i].collided>.8&&player[i].jumppower>=5|| + findDistancefast(&player[i].coords,&player[0].coords)>400&& + player[i].onterrain&& + player[i].creature==rabbittype) + player[i].jumpkeydown=1; + //TODO: why are we controlling the human? + if(normaldotproduct(player[i].facing,player[0].coords-player[i].coords)>0) + player[0].jumpkeydown=0; + if(player[0].targetanimation==jumpdownanim&& + findDistancefast(&player[0].coords,&player[i].coords)<40) + player[i].crouchkeydown=1; + if(player[i].jumpkeydown) + player[i].attackkeydown=0; + + if(tutoriallevel==1) + if(!canattack) + player[i].attackkeydown=0; + + + XYZ facing=player[i].coords; + XYZ flatfacing=player[0].coords; + facing.y+=playerJoint(i,head).position.y*player[i].scale; + flatfacing.y+=playerJoint(0,head).position.y*player[0].scale; + if(player[i].occluded>=2) + if(-1!=checkcollide(facing,flatfacing)){ + if(!player[i].pause) + player[i].lastseentime-=.2; + if(player[i].lastseentime<=0&& + (player[i].creature!=wolftype|| + player[i].weaponstuck==-1)){ + player[i].aitype=searchtype; + player[i].lastchecktime=12; + player[i].lastseen=player[0].coords; + player[i].lastseentime=12; + } + }else + player[i].lastseentime=1; + } + } + if(animation[player[0].targetanimation].height==highheight&& + (player[i].aitype==attacktypecutoff|| + player[i].aitype==searchtype)) + if(player[0].coords.y>terrain.getHeight(player[0].coords.x,player[0].coords.z)+10){ + XYZ test=player[0].coords; + test.y-=40; + if(-1==checkcollide(player[0].coords,test)) + player[i].stunned=1; + } + //stunned + if(player[i].aitype==passivetype&&!(player[i].numwaypoints>1)|| + player[i].stunned>0|| + player[i].pause&&player[i].damage>player[i].superpermanentdamage){ + if(player[i].pause) + player[i].lastseentime=1; + player[i].targetrotation=player[i].rotation; + player[i].forwardkeydown=0; + player[i].leftkeydown=0; + player[i].backkeydown=0; + player[i].rightkeydown=0; + player[i].jumpkeydown=0; + player[i].attackkeydown=0; + player[i].crouchkeydown=0; + player[i].throwkeydown=0; + } + + + XYZ facing; + facing=0; + facing.z=-1; + + XYZ flatfacing=DoRotation(facing,0,player[i].rotation+180,0); + facing=flatfacing; + + if(player[i].aitype==attacktypecutoff){ + player[i].targetheadrotation=180-roughDirectionTo(player[i].coords,player[0].coords); + player[i].targetheadrotation2=pitchTo(player[i].coords,player[0].coords); + }else if(player[i].howactive>=typesleeping){ + player[i].targetheadrotation=player[i].targetrotation; + player[i].targetheadrotation2=0; + }else{ + if(player[i].interestdelay<=0){ + player[i].interestdelay=.7+(float)(abs(Random()%100))/100; + player[i].headtarget=player[i].coords; + player[i].headtarget.x+=(float)(abs(Random()%200)-100)/100; + player[i].headtarget.z+=(float)(abs(Random()%200)-100)/100; + player[i].headtarget.y+=(float)(abs(Random()%200)-100)/300; + player[i].headtarget+=player[i].facing*1.5; + } + player[i].targetheadrotation=180-roughDirectionTo(player[i].coords,player[i].headtarget); + player[i].targetheadrotation2=pitchTo(player[i].coords,player[i].headtarget); + } + } +} - for(k=0;k unused +18 stereo configuration +*/ + +void Game::MenuTick(){ + //menu buttons + + // some specific case where we do something even if the left mouse button is not pressed. + if((mainmenu==5) && (endgame==2)) { + accountactive->endGame(); + endgame=0; + } + if(mainmenu==10) + endgame=2; + if( (mainmenu==18) && Input::isKeyPressed(MOUSEBUTTON2) && (selected==1) ) + stereoseparation-=0.001; + + if(Input::MouseClicked() && (selected >= 0)) { // handling of the left mouse clic in menus + switch(mainmenu) { + case 1: + case 2: + switch(selected) { + case 1: + if(gameon) { //resume + mainmenu=0; + pause_sound(stream_menutheme); + resume_stream(leveltheme); + } else { //new game + fireSound(firestartsound); + flash(); + mainmenu=(accountactive?5:7); + selected=-1; + } + break; + case 2: //options + fireSound(); + flash(); + mainmenu=3; + if(newdetail>2) newdetail=detail; + if(newdetail<0) newdetail=detail; + if(newscreenwidth>3000) newscreenwidth=screenwidth; + if(newscreenwidth<0) newscreenwidth=screenwidth; + if(newscreenheight>3000) newscreenheight=screenheight; + if(newscreenheight<0) newscreenheight=screenheight; + break; + case 3: + fireSound(); + flash(); + if(gameon){ //end game + gameon=0; + mainmenu=1; + } else { //quit + tryquit=1; + pause_sound(stream_menutheme); + } + break; + } + break; + case 3: + fireSound(); + bool isCustomResolution,found; + switch(selected){ + case 0: + extern SDL_Rect **resolutions; + 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; } + } - static bool respawnkeydown; - if(!editorenabled&&(whichlevel!=-2&&(IsKeyDown(theKeyMap, MAC_Z_KEY)&&IsKeyDown(theKeyMap, MAC_COMMAND_KEY)&&debugmode&&!editorenabled)||(IsKeyDown(theKeyMap, jumpkey)&&!respawnkeydown&&!oldattackkey&&player[0].dead))){ - targetlevel=whichlevel; - loading=1; - leveltime=5; + if(!found) { + newscreenwidth = (int) resolutions[0]->w; + newscreenheight = (int) resolutions[0]->h; + } + break; + case 1: + newdetail++; + if(newdetail>2) newdetail=0; + break; + case 2: + bloodtoggle++; + if(bloodtoggle>2) bloodtoggle=0; + break; + case 3: + difficulty++; + if(difficulty>2) difficulty=0; + break; + case 4: + ismotionblur = !ismotionblur; + break; + case 5: + decals = !decals; + break; + case 6: + musictoggle = !musictoggle; + + if(musictoggle) { + emit_stream_np(stream_menutheme); + } else { + pause_sound(leveltheme); + pause_sound(stream_fighttheme); + pause_sound(stream_menutheme); + + for(int i=0;i<4;i++){ + oldmusicvolume[i]=0; + musicvolume[i]=0; } - if(!IsKeyDown(theKeyMap, jumpkey))respawnkeydown=0; - if(IsKeyDown(theKeyMap, jumpkey))respawnkeydown=1; + } + break; + case 7: // controls + flash(); + mainmenu=4; + selected=-1; + keyselect=-1; + break; + case 8: + flash(); + + SaveSettings(*this); + mainmenu=gameon?2:1; + break; + case 9: + invertmouse = !invertmouse; + break; + case 10: + usermousesensitivity+=.2; + if(usermousesensitivity>2) usermousesensitivity=.2; + break; + case 11: + volume+=.1f; + if(volume>1.0001f) volume=0; + OPENAL_SetSFXMasterVolume((int)(volume*255)); + break; + case 12: + flash(); + + newstereomode = stereomode; + mainmenu=18; + keyselect=-1; + break; + case 13: + showdamagebar = !showdamagebar; + break; + } + break; + case 4: + if(!waiting) { + fireSound(); + if(selected<9 && keyselect==-1) + keyselect=selected; + if(keyselect!=-1) + setKeySelected(); + if(selected==9){ + flash(); + + mainmenu=3; + } + } + break; + case 5: + fireSound(); + flash(); + if((selected-NB_CAMPAIGN_MENU_ITEM >= accountactive->getCampaignChoicesMade())) { + startbonustotal=0; + loading=2; + loadtime=0; + targetlevel=7; + if(firstload) + TickOnceAfter(); + else + LoadStuff(); + whichchoice=selected-NB_CAMPAIGN_MENU_ITEM-accountactive->getCampaignChoicesMade(); + actuallevel=(accountactive->getCampaignChoicesMade()>0?campaignlevels[accountactive->getCampaignChoicesMade()-1].nextlevel[whichchoice]:0); + visibleloading=1; + stillloading=1; + Loadlevel(campaignlevels[actuallevel].mapname.c_str()); + campaign=1; + mainmenu=0; + gameon=1; + pause_sound(stream_menutheme); + } + switch(selected){ + case 1: + startbonustotal=0; + + loading=2; + loadtime=0; + targetlevel=-1; + if(firstload) { + TickOnceAfter(); + } else + LoadStuff(); + Loadlevel(-1); + + mainmenu=0; + gameon=1; + pause_sound(stream_menutheme); + break; + case 2: + mainmenu=9; + break; + case 3: + mainmenu=6; + break; + case 4: + mainmenu=(gameon?2:1); + break; + case 5: + mainmenu=7; + break; + case 6: + vector campaigns = ListCampaigns(); + vector::iterator c; + if ((c = find(campaigns.begin(),campaigns.end(),accountactive->getCurrentCampaign()))==campaigns.end()) { + if(!campaigns.empty()) + accountactive->setCurrentCampaign(campaigns.front()); + } else { + c++; + if(c==campaigns.end()) + c=campaigns.begin(); + accountactive->setCurrentCampaign(*c); + } + LoadCampaign(); + break; + } + break; + case 6: + fireSound(); + if(selected==1) { + flash(); + accountactive = Account::destroy(accountactive); + mainmenu=7; + } else if(selected==2) { + flash(); + mainmenu=5; + } + break; + case 7: + fireSound(); + if(selected==0 && Account::getNbAccounts()<8){ + entername=1; + } else if (selected < Account::getNbAccounts()+1) { + flash(); + mainmenu=5; + accountactive=Account::get(selected-1); + } else if (selected == Account::getNbAccounts()+1) { + flash(); + mainmenu=5; + for(int j=0;j<255;j++){ + displaytext[0][j]=0; + } + displaychars[0]=0; + displayselected=0; + entername=0; + } + break; + case 8: + fireSound(); + flash(); + if(selected<=2) + accountactive->setDifficulty(selected); + mainmenu=5; + break; + case 9: + if(selectedgetProgress()){ + fireSound(); + flash(); + startbonustotal=0; - if(whichlevel!=-2&&IsKeyDown(theKeyMap, MAC_K_KEY)&&IsKeyDown(theKeyMap, MAC_SHIFT_KEY)&&!slomotogglekeydown&&debugmode&&!editorenabled){ - targetlevel++; - if(targetlevel>numchallengelevels-1)targetlevel=0; - loading=1; - leveltime=5; - slomotogglekeydown=1; - } + loading=2; + loadtime=0; + targetlevel=selected; + if(firstload) + TickOnceAfter(); + else + LoadStuff(); + Loadlevel(selected); + campaign=0; - /* - if(IsKeyDown(theKeyMap, MAC_Z_KEY)){ - //Respawn - OPENAL_SetPaused(channels[whooshsound], true); - changedelay=0; - for(k=0;k= stereoCount) + newstereomode = stereoNone; + } + } else if(selected==2) { + stereoreverse = !stereoreverse; + } else if(selected==3) { + flash(); + mainmenu=3; + + stereomode = newstereomode; + InitStereo(stereomode); + } + } + break; + } + } - static bool movekey; - static bool connected; - /*player[0].forwardkeydown=IsKeyDown(theKeyMap, MAC_W_KEY); - player[0].leftkeydown=IsKeyDown(theKeyMap, MAC_A_KEY); - player[0].backkeydown=IsKeyDown(theKeyMap, MAC_S_KEY); - player[0].rightkeydown=IsKeyDown(theKeyMap, MAC_D_KEY); - player[0].jumpkeydown=IsKeyDown(theKeyMap, MAC_SPACE_KEY); - player[0].crouchkeydown=IsKeyDown(theKeyMap, MAC_SHIFT_KEY);*/ + if(Input::isKeyDown(SDLK_q) && Input::isKeyDown(SDLK_LMETA)){ + tryquit=1; + if(mainmenu==3) { + SaveSettings(*this); + } + } - //if(!player[0].crouchkeydown)player[0].crouchkeydown=IsKeyDown(theKeyMap, MAC_CONTROL_KEY); + OPENAL_SetFrequency(channels[stream_menutheme], 22050); - for(int i=0;i.8)player[i].avoidcollided=0; - if(player[i].aitype!=playercontrolled&&indialogue==-1){ - player[i].jumpclimb=0; - //AI - if(editorenabled)player[i].stunned=1; - - player[i].pause=0; - //if(findDistancefastflat(&player[i].coords,&player[0].coords)<3/*&&player[0].coords.y>player[i].coords.y+.1*/)player[i].pause=1; - if(findDistancefastflat(&player[0].coords,&player[i].coords)<30&&player[0].coords.y>player[i].coords.y+2&&!player[0].onterrain)player[i].pause=1; - - /*if(player[i].aitype==passivetype&&player[i].numwaypoints<=1){ - player[i].forwardkeydown=0; - player[i].leftkeydown=0; - player[i].backkeydown=0; - player[i].rightkeydown=0; - player[i].crouchkeydown=0; - player[i].attackkeydown=0; - player[i].jumpkeydown=0; - player[i].throwkeydown=0; - }*/ - - if(player[i].aitype==pathfindtype){ - if(player[i].finalpathfindpoint==-1){ - float closestdistance; - float tempdist; - int closest; - XYZ colpoint; - closest=-1; - closestdistance=-1; - for(j=0;j.8&&!player[i].jumpkeydown&&player[i].collided<.8)player[i].targetrotation+=90*(player[i].whichdirection*2-1); - - if(player[i].collided<1||player[i].targetanimation!=jumpupanim)player[i].jumpkeydown=0; - if((player[i].collided>.8&&player[i].jumppower>=5))player[i].jumpkeydown=1; - - if((tutoriallevel!=1||cananger)&&hostile&&!player[0].dead&&findDistancefast(&player[i].coords,&player[0].coords)<400&&player[i].occluded<25){ - if(findDistancefast(&player[i].coords,&player[0].coords)<12&&animation[player[0].targetanimation].height!=lowheight&&!editorenabled&&(player[0].coords.y0) - if(player[j].coords.y.5){ - player[i].howactive=typeactive; - } - - if(player[i].aitype==passivetype){ - player[i].aiupdatedelay-=multiplier; - player[i].losupdatedelay-=multiplier; - player[i].lastseentime+=multiplier; - player[i].pausetime-=multiplier; - if(player[i].lastseentime>1)player[i].lastseentime=1; - - if(player[i].aiupdatedelay<0){ - if(player[i].numwaypoints>1&&player[i].howactive==typeactive&&player[i].pausetime<=0){ - rotatetarget=player[i].waypoints[player[i].waypoint]-player[i].coords; - Normalise(&rotatetarget); - player[i].targetrotation=-asin(0-rotatetarget.x); - player[i].targetrotation*=360/6.28; - if(rotatetarget.z<0)player[i].targetrotation=180-player[i].targetrotation; - player[i].lookrotation=player[i].targetrotation; - player[i].aiupdatedelay=.05; - - if(findDistancefastflat(&player[i].coords,&player[i].waypoints[player[i].waypoint])<1){ - if(player[i].waypointtype[player[i].waypoint]==wppause)player[i].pausetime=4; - player[i].waypoint++; - if(player[i].waypoint>player[i].numwaypoints-1)player[i].waypoint=0; - - } - } - - if(player[i].numwaypoints>1&&player[i].howactive==typeactive&&player[i].pausetime<=0)player[i].forwardkeydown=1; - else player[i].forwardkeydown=0; - player[i].leftkeydown=0; - player[i].backkeydown=0; - player[i].rightkeydown=0; - player[i].crouchkeydown=0; - player[i].attackkeydown=0; - player[i].throwkeydown=0; - - if(player[i].avoidcollided>.8&&!player[i].jumpkeydown&&player[i].collided<.8){ - if(!player[i].avoidsomething)player[i].targetrotation+=90*(player[i].whichdirection*2-1); - else{ - XYZ leftpos,rightpos; - float leftdist,rightdist; - leftpos = player[i].coords+DoRotation(player[i].facing,0,90,0); - rightpos = player[i].coords-DoRotation(player[i].facing,0,90,0); - leftdist = findDistancefast(&leftpos, &player[i].avoidwhere); - rightdist = findDistancefast(&rightpos, &player[i].avoidwhere); - if(leftdist.8&&player[i].jumppower>=5))player[i].jumpkeydown=1; - - - if(!editorenabled){ - if(player[i].howactive0&&(tutoriallevel!=1||cananger)&&hostile) - for(j=0;j0&&(tutoriallevel!=1||cananger)&&hostile) - for(j=0;j14) - if(findDistancefast(&player[i].coords,&envsound[j])<2*((envsoundvol[j]-14)+(envsoundvol[j]-14)*(player[i].creature==rabbittype)*3)){ - player[i].aitype=attacktypecutoff; - } - } - - if(player[i].aitype!=passivetype){ - if(player[i].howactive==typesleeping){ - player[i].targetanimation=getupfromfrontanim; - player[i].targetframe=0; - player[i].target=0; - } - - player[i].howactive=typeactive; - } - } - - if(player[i].howactive0)){ - if(j==0&&player[j].num_weapons>0){ - if(weapons.bloody[player[j].weaponids[0]])smelldistance=100; - if(player[j].num_weapons==2) - if(weapons.bloody[player[j].weaponids[1]])smelldistance=100; - } - if(j!=0){ - smelldistance=100; - } - windsmell=windvector; - Normalise(&windsmell); - windsmell=windsmell*2+player[j].coords; - if(findDistancefast(&player[i].coords,&windsmell)0) - if((-1==checkcollide(DoRotation(player[i].skeleton.joints[player[i].skeleton.jointlabels[head]].position,0,player[i].rotation,0)*player[i].scale+player[i].coords,DoRotation(player[j].skeleton.joints[player[j].skeleton.jointlabels[head]].position,0,player[j].rotation,0)*player[j].scale+player[j].coords)&&!player[j].isWallJump())||(player[j].targetanimation==hanganim&&normaldotproduct(player[j].facing,player[i].coords-player[j].coords)<0)){ - player[i].lastseentime-=.2; - if(j==0&&animation[player[j].targetanimation].height==lowheight)player[i].lastseentime-=.4; - else player[i].lastseentime-=.6; - } - if(player[i].lastseentime<=0){ - player[i].aitype=searchtype; - player[i].lastchecktime=12; - player[i].lastseen=player[j].coords; - player[i].lastseentime=12; - } - } - } - } - } - if(player[i].aitype==attacktypecutoff&&musictype!=2){ - if(player[i].creature!=wolftype){ - player[i].stunned=.6; - player[i].surprised=.6; - } - if(player[i].creature==wolftype){ - player[i].stunned=.47; - player[i].surprised=.47; - } - numseen++; - } - } - - if(player[i].aitype==searchtype){ - player[i].aiupdatedelay-=multiplier; - player[i].losupdatedelay-=multiplier; - if(!player[i].pause)player[i].lastseentime-=multiplier; - player[i].lastchecktime-=multiplier; - - if(player[i].isRun()&&!player[i].onground){ - if(player[i].coords.y>terrain.getHeight(player[i].coords.x,player[i].coords.z)+10){ - test2=player[i].coords+player[i].facing; - test2.y+=5; - test=player[i].coords+player[i].facing; - test.y-=10; - j=checkcollide(test2,test,player[i].laststanding); - if(j==-1)j=checkcollide(test2,test); - if(j==-1){ - player[i].velocity=0; - player[i].targetanimation=player[i].getStop(); - player[i].targetframe=0; - player[i].target=0; - player[i].targetrotation+=180; - player[i].stunned=.5; - //player[i].aitype=passivetype; - player[i].aitype=pathfindtype; - player[i].finalfinaltarget=player[i].waypoints[player[i].waypoint]; - player[i].finalpathfindpoint=-1; - player[i].targetpathfindpoint=-1; - player[i].lastpathfindpoint=-1; - player[i].lastpathfindpoint2=-1; - player[i].lastpathfindpoint3=-1; - player[i].lastpathfindpoint4=-1; - } - else player[i].laststanding=j; - } - } - if(player[i].aiupdatedelay<0){ - rotatetarget=player[i].lastseen-player[i].coords; - Normalise(&rotatetarget); - player[i].targetrotation=-asin(0-rotatetarget.x); - player[i].targetrotation*=360/6.28; - if(rotatetarget.z<0)player[i].targetrotation=180-player[i].targetrotation; - player[i].lookrotation=player[i].targetrotation; - player[i].aiupdatedelay=.05; - player[i].forwardkeydown=1; - - if(findDistancefastflat(&player[i].coords,&player[i].lastseen)<1*(player[i].scale*5)*(player[i].scale*5)||player[i].lastchecktime<0){ - player[i].forwardkeydown=0; - player[i].aiupdatedelay=1; - player[i].lastseen.x+=(float(Random()%100)-50)/25; - player[i].lastseen.z+=(float(Random()%100)-50)/25; - player[i].lastchecktime=3; - } - - player[i].leftkeydown=0; - player[i].backkeydown=0; - player[i].rightkeydown=0; - player[i].crouchkeydown=0; - player[i].attackkeydown=0; - player[i].throwkeydown=0; - - if(player[i].avoidcollided>.8&&!player[i].jumpkeydown&&player[i].collided<.8){ - if(!player[i].avoidsomething)player[i].targetrotation+=90*(player[i].whichdirection*2-1); - else{ - XYZ leftpos,rightpos; - float leftdist,rightdist; - leftpos = player[i].coords+DoRotation(player[i].facing,0,90,0); - rightpos = player[i].coords-DoRotation(player[i].facing,0,90,0); - leftdist = findDistancefast(&leftpos, &player[i].avoidwhere); - rightdist = findDistancefast(&rightpos, &player[i].avoidwhere); - if(leftdist.8&&player[i].jumppower>=5))player[i].jumpkeydown=1; - - if(numenvsounds>0&&((tutoriallevel!=1||cananger)&&hostile)) - for(j=0;j0) - if((-1==checkcollide(DoRotation(player[i].skeleton.joints[player[i].skeleton.jointlabels[head]].position,0,player[i].rotation,0)*player[i].scale+player[i].coords,DoRotation(player[0].skeleton.joints[player[0].skeleton.jointlabels[head]].position,0,player[0].rotation,0)*player[0].scale+player[0].coords))||(player[j].targetanimation==hanganim&&normaldotproduct(player[j].facing,player[i].coords-player[j].coords)<0)){ - player[i].aitype=attacktypecutoff; - player[i].lastseentime=1; - } - } - if(player[i].lastseentime<0){ - //player[i].aitype=passivetype; - numescaped++; - player[i].aitype=pathfindtype; - player[i].finalfinaltarget=player[i].waypoints[player[i].waypoint]; - player[i].finalpathfindpoint=-1; - player[i].targetpathfindpoint=-1; - player[i].lastpathfindpoint=-1; - player[i].lastpathfindpoint2=-1; - player[i].lastpathfindpoint3=-1; - player[i].lastpathfindpoint4=-1; - } - } - - if(player[i].aitype!=gethelptype){ - player[i].runninghowlong=0; - } - - if(player[i].aitype==gethelptype){ - player[i].runninghowlong+=multiplier; - player[i].aiupdatedelay-=multiplier; - - if(player[i].aiupdatedelay<0||player[i].ally==0){ - player[i].aiupdatedelay=.2; - - int closest; - float closestdist; - closest=-1; - closestdist=-1; - float distance; - - if(!player[i].ally){ - for(j=0;j0){ - rotatetarget=player[player[i].ally].coords-player[i].coords; - Normalise(&rotatetarget); - player[i].targetrotation=-asin(0-rotatetarget.x); - player[i].targetrotation*=360/6.28; - if(rotatetarget.z<0)player[i].targetrotation=180-player[i].targetrotation; - player[i].lookrotation=player[i].targetrotation; - player[i].aiupdatedelay=.05; - player[i].forwardkeydown=1; - - if(findDistancefastflat(&player[i].coords,&player[player[i].ally].coords)<3){ - player[i].aitype=searchtype; - player[i].lastseentime=12; - player[player[i].ally].aitype=searchtype; - if(player[player[i].ally].lastseentime.8&&!player[i].jumpkeydown&&player[i].collided<.8){ - if(!player[i].avoidsomething)player[i].targetrotation+=90*(player[i].whichdirection*2-1); - else{ - XYZ leftpos,rightpos; - float leftdist,rightdist; - leftpos = player[i].coords+DoRotation(player[i].facing,0,90,0); - rightpos = player[i].coords-DoRotation(player[i].facing,0,90,0); - leftdist = findDistancefast(&leftpos, &player[i].avoidwhere); - rightdist = findDistancefast(&rightpos, &player[i].avoidwhere); - if(leftdist.8&&player[i].jumppower>=5))player[i].jumpkeydown=1; - } - - if(player[i].aitype==getweapontype){ - player[i].aiupdatedelay-=multiplier; - player[i].lastchecktime-=multiplier; - - if(player[i].aiupdatedelay<0){ - player[i].aiupdatedelay=.2; - - int closest; - float closestdist; - closest=-1; - closestdist=-1; - float distance; - - if(player[i].ally<0){ - for(j=0;j=0){ - if(weapons.owner[player[i].ally]!=-1||findDistancefast(&player[i].coords,&weapons.position[player[i].ally])>16){ - player[i].aitype=attacktypecutoff; - player[i].lastseentime=1; - } - rotatetarget=weapons.position[player[i].ally]-player[i].coords; - Normalise(&rotatetarget); - player[i].targetrotation=-asin(0-rotatetarget.x); - player[i].targetrotation*=360/6.28; - if(rotatetarget.z<0)player[i].targetrotation=180-player[i].targetrotation; - player[i].lookrotation=player[i].targetrotation; - player[i].aiupdatedelay=.05; - player[i].forwardkeydown=1; - - - if(player[i].avoidcollided>.8&&!player[i].jumpkeydown&&player[i].collided<.8){ - if(!player[i].avoidsomething)player[i].targetrotation+=90*(player[i].whichdirection*2-1); - else{ - XYZ leftpos,rightpos; - float leftdist,rightdist; - leftpos = player[i].coords+DoRotation(player[i].facing,0,90,0); - rightpos = player[i].coords-DoRotation(player[i].facing,0,90,0); - leftdist = findDistancefast(&leftpos, &player[i].avoidwhere); - rightdist = findDistancefast(&rightpos, &player[i].avoidwhere); - if(leftdist.8&&player[i].jumppower>=5))player[i].jumpkeydown=1; - } - - if(player[i].aitype==attacktypecutoff){ - player[i].aiupdatedelay-=multiplier; - if(player[i].damage.5)player[i].stunned=1; - } - if(player[i].wentforweapon<3) - for(j=0;jterrain.getHeight(player[i].coords.x,player[i].coords.z)+10){ - test2=player[i].coords+player[i].facing; - test2.y+=5; - test=player[i].coords+player[i].facing; - test.y-=10; - j=checkcollide(test2,test,player[i].laststanding); - if(j==-1)j=checkcollide(test2,test); - if(j==-1){ - player[i].velocity=0; - player[i].targetanimation=player[i].getStop(); - player[i].targetframe=0; - player[i].target=0; - player[i].targetrotation+=180; - player[i].stunned=.5; - //player[i].aitype=passivetype; - player[i].aitype=pathfindtype; - player[i].finalfinaltarget=player[i].waypoints[player[i].waypoint]; - player[i].finalpathfindpoint=-1; - player[i].targetpathfindpoint=-1; - player[i].lastpathfindpoint=-1; - player[i].lastpathfindpoint2=-1; - player[i].lastpathfindpoint3=-1; - player[i].lastpathfindpoint4=-1; - } - else player[i].laststanding=j; - } - } - if(player[0].coords.y>player[i].coords.y+5&&animation[player[0].targetanimation].height!=highheight&&!player[0].onterrain){ - player[i].aitype=pathfindtype; - player[i].finalfinaltarget=player[i].waypoints[player[i].waypoint]; - player[i].finalpathfindpoint=-1; - player[i].targetpathfindpoint=-1; - player[i].lastpathfindpoint=-1; - player[i].lastpathfindpoint2=-1; - player[i].lastpathfindpoint3=-1; - player[i].lastpathfindpoint4=-1; - } - if(player[i].aiupdatedelay<0&&!animation[player[i].targetanimation].attack&&player[i].targetanimation!=staggerbackhighanim&&player[i].targetanimation!=staggerbackhardanim&&player[i].targetanimation!=backhandspringanim&&player[i].targetanimation!=dodgebackanim){ - if(player[i].weaponactive==-1&&player[i].num_weapons>0)player[i].drawkeydown=Random()%2; - else player[i].drawkeydown=0; - player[i].rabbitkickenabled=Random()%2; - rotatetarget=player[player[i].aitarget].coords+player[player[i].aitarget].velocity; - if(findDistancefast(&player[player[i].aitarget].coords,&player[i].coords)5&&(player[0].weaponactive==-1||player[i].weaponactive!=-1))player[i].forwardkeydown=1; - else if((findDistancefast(&player[i].coords,&player[0].coords)>16||findDistancefast(&player[i].coords,&player[0].coords)<9)&&player[0].weaponactive!=-1)player[i].forwardkeydown=1; - else if(Random()%6==0||(player[i].creature==wolftype&&Random()%3==0))player[i].forwardkeydown=1; - else player[i].forwardkeydown=0; - if(player[0].dead){ - player[i].forwardkeydown=0; - if(Random()%10==0)player[i].forwardkeydown=1; - if(Random()%100==0){ - player[i].aitype=pathfindtype; - player[i].finalfinaltarget=player[i].waypoints[player[i].waypoint]; - player[i].finalpathfindpoint=-1; - player[i].targetpathfindpoint=-1; - player[i].lastpathfindpoint=-1; - player[i].lastpathfindpoint2=-1; - player[i].lastpathfindpoint3=-1; - player[i].lastpathfindpoint4=-1; - } - } - player[i].leftkeydown=0; - player[i].backkeydown=0; - player[i].rightkeydown=0; - player[i].crouchkeydown=0; - player[i].throwkeydown=0; - - if(player[i].avoidcollided>.8&&!player[i].jumpkeydown&&player[i].collided<.8)player[i].targetrotation+=90*(player[i].whichdirection*2-1); - /*for(j=0;jid==i&&(player[j].targetanimation==spinkickanim&&player[j].targetframe<3)){ - player[i].crouchkeydown=1; - } - }*/ - if(Random()%2==0/*||player[0].weaponactive!=-1*/||player[i].weaponactive!=-1||player[i].creature==wolftype)player[i].attackkeydown=1; - else player[i].attackkeydown=0; - if((player[i].isRun())&&Random()%6&&findDistancefast(&player[i].coords,&player[0].coords)>7)player[i].attackkeydown=0; - //if(player[i].attackkeydown&&findDistancefast(&player[i].coords,&player[0].coords)<3&&player[i].targetanimation!=runanim&&!player[0].skeleton.free)player[i].crouchkeydown=1; - /*if(player[0].targetanimation==rabbitkickanim&&!player[0].skeleton.free){ - player[i].attackkeydown=0; - if(player[i].isIdle())player[i].crouchkeydown=1; - player[i].forwardkeydown=0; - player[i].aiupdatedelay=.02; - }*/ - - if(player[i].aitype!=playercontrolled&&(player[i].isIdle()||player[i].isCrouch()||player[i].isRun())){ - target=-2; - for(j=0;jcoords)<4&&player[j].victim==&player[i]&&(player[j].targetanimation==sweepanim||player[j].targetanimation==spinkickanim||player[j].targetanimation==staffhitanim||player[j].targetanimation==staffspinhitanim||player[j].targetanimation==winduppunchanim||player[j].targetanimation==upunchanim||player[j].targetanimation==wolfslapanim||player[j].targetanimation==knifeslashstartanim||((player[j].targetanimation==swordslashanim)&&(findDistancefast(&player[j].coords,&player[i].coords)<2||(player[i].weaponactive!=-1))))){ - if(target>=0)target=-1; - else target=j; - } - } - } - if(target>=0)player[target].Reverse(); - } - - if(player[i].collided<1)player[i].jumpkeydown=0; - if((player[i].collided>.8&&player[i].jumppower>=5)||(findDistancefast(&player[i].coords,&player[0].coords)>400&&player[i].onterrain&&player[i].creature==rabbittype))player[i].jumpkeydown=1; - if(normaldotproduct(player[i].facing,player[0].coords-player[i].coords)>0) - player[0].jumpkeydown=0; - if(player[0].targetanimation==jumpdownanim&&findDistancefast(&player[0].coords,&player[i].coords)<40)player[i].crouchkeydown=1; - if(player[i].jumpkeydown)player[i].attackkeydown=0; - //if(animation[player[i].targetanimation].attack==reversed)player[i].crouchkeydown=1; - - if(tutoriallevel==1){ - if(!canattack)player[i].attackkeydown=0; - } - - - facing=player[i].coords; - flatfacing=player[0].coords; - facing.y+=player[i].skeleton.joints[player[i].skeleton.jointlabels[head]].position.y*player[i].scale; - flatfacing.y+=player[0].skeleton.joints[player[0].skeleton.jointlabels[head]].position.y*player[0].scale; - if(player[i].occluded>=2) - if(-1!=checkcollide(facing,flatfacing)){ - if(!player[i].pause)player[i].lastseentime-=.2; - if(player[i].lastseentime<=0&&(player[i].creature!=wolftype||player[i].weaponstuck==-1)){ - player[i].aitype=searchtype; - player[i].lastchecktime=12; - player[i].lastseen=player[0].coords; - player[i].lastseentime=12; - } - } - else player[i].lastseentime=1; - } - } - if(animation[player[0].targetanimation].height==highheight&&(player[i].aitype==attacktypecutoff||player[i].aitype==searchtype)){ - if(player[0].coords.y>terrain.getHeight(player[0].coords.x,player[0].coords.z)+10){ - test=player[0].coords; - test.y-=40; - if(-1==checkcollide(player[0].coords,test))player[i].stunned=1; - } - } - // NOTE: Ask about logic of this call : NOTE - if((player[i].aitype==passivetype && !(player[i].numwaypoints>1)) || - player[i].stunned>0 || - (player[i].pause && (player[i].damage > player[i].superpermanentdamage))) - { - if(/*player[i].aitype==attacktypecutoff&&*/player[i].pause)player[i].lastseentime=1; - player[i].targetrotation=player[i].rotation; - player[i].forwardkeydown=0; - player[i].leftkeydown=0; - player[i].backkeydown=0; - player[i].rightkeydown=0; - player[i].jumpkeydown=0; - player[i].attackkeydown=0; - player[i].crouchkeydown=0; - player[i].throwkeydown=0; - } - - - facing=0; - facing.z=-1; - - flatfacing=DoRotation(facing,0,player[i].rotation+180,0); - facing=flatfacing; - - if(player[i].aitype==attacktypecutoff){ - rotatetarget=player[0].coords-player[i].coords; - Normalise(&rotatetarget); - player[i].targetheadrotation=-asin(0-rotatetarget.x); - player[i].targetheadrotation*=360/6.28; - if(rotatetarget.z<0)player[i].targetheadrotation=180-player[i].targetheadrotation; - - player[i].targetheadrotation*=-1; - player[i].targetheadrotation+=180; - //player[i].targetheadrotation2=0; - player[i].targetheadrotation2=-asin(rotatetarget.y)*360/6.28; - } - else if(player[i].howactive>=typesleeping){ - player[i].targetheadrotation=player[i].targetrotation; - player[i].targetheadrotation2=0; - } - else { - if(player[i].interestdelay<=0){ - player[i].interestdelay=.7+(float)(abs(Random()%100))/100; - player[i].headtarget=player[i].coords; - player[i].headtarget.x+=(float)(abs(Random()%200)-100)/100; - player[i].headtarget.z+=(float)(abs(Random()%200)-100)/100; - player[i].headtarget.y+=(float)(abs(Random()%200)-100)/300; - player[i].headtarget+=player[i].facing*1.5; - } - rotatetarget=player[i].headtarget-player[i].coords; - Normalise(&rotatetarget); - player[i].targetheadrotation=-asin(0-rotatetarget.x); - player[i].targetheadrotation*=360/6.28; - if(rotatetarget.z<0)player[i].targetheadrotation=180-player[i].targetheadrotation; - - player[i].targetheadrotation*=-1; - player[i].targetheadrotation+=180; - player[i].targetheadrotation2=-asin(rotatetarget.y)*360/6.28; - } - //if(whichlevel==2)player[i].jumpkeydown=0; - } - if(animation[player[i].targetanimation].attack==reversed){ - //player[i].targetrotation=player[i].rotation; - player[i].forwardkeydown=0; - player[i].leftkeydown=0; - player[i].backkeydown=0; - player[i].rightkeydown=0; - player[i].jumpkeydown=0; - player[i].attackkeydown=0; - //player[i].crouchkeydown=0; - player[i].throwkeydown=0; - } + for(int i=0;i<15;i++){ + displaytime[i]+=multiplier; + } - if(indialogue!=-1){ - player[i].forwardkeydown=0; - player[i].leftkeydown=0; - player[i].backkeydown=0; - player[i].rightkeydown=0; - player[i].jumpkeydown=0; - player[i].crouchkeydown=0; - player[i].drawkeydown=0; - player[i].throwkeydown=0; - } + keyboardfrozen=false; + Input::Tick(); - if(player[i].collided<-.3)player[i].collided=-.3; - if(player[i].collided>1)player[i].collided=1; - player[i].collided-=multiplier*4; - player[i].whichdirectiondelay-=multiplier; - if(player[i].avoidcollided<-.3||player[i].whichdirectiondelay<=0){ - player[i].avoidcollided=-.3; - player[i].whichdirection=abs(Random()%2); - player[i].whichdirectiondelay=.4; - } - if(player[i].avoidcollided>1)player[i].avoidcollided=1; - player[i].avoidcollided-=multiplier/4; - if(!player[i].skeleton.free)player[i].stunned-=multiplier; - if(!player[i].skeleton.free)player[i].surprised-=multiplier; - if(player[i].surprised<=0&&player[i].aitype==attacktypecutoff&&i!=0&&!player[i].dead&&!player[i].skeleton.free&&animation[player[i].targetanimation].attack==neutral)numresponded=1; - - if(!player[i].throwkeydown){ - player[i].throwtogglekeydown=0; - } - if(player[i].throwkeydown&&!player[i].throwtogglekeydown){ - if(player[i].weaponactive==-1&&player[i].num_weapons<2&&(player[i].isIdle()||player[i].isCrouch()||player[i].targetanimation==sneakanim||player[i].targetanimation==rollanim||player[i].targetanimation==backhandspringanim||player[i].isFlip()||player[i].isFlip()||player[i].aitype!=playercontrolled)){ - for(j=0;jid)) - if(findDistancefastflat(&player[i].coords,&weapons.position[j])<2&&player[i].weaponactive==-1){ - if(findDistancefast(&player[i].coords,&weapons.position[j])<1||player[i].victim){ - float gLoc[3]; - float vel[3]; - gLoc[0]=player[i].coords.x; - gLoc[1]=player[i].coords.y; - gLoc[2]=player[i].coords.z; - vel[0]=player[i].velocity.x; - vel[1]=player[i].velocity.y; - vel[2]=player[i].velocity.z; - if(weapons.type[j]!=staff){ - PlaySoundEx( knifedrawsound, samp[knifedrawsound], NULL, true); - OPENAL_3D_SetAttributes(channels[knifedrawsound], gLoc, vel); - OPENAL_SetVolume(channels[knifedrawsound], 128); - OPENAL_SetPaused(channels[knifedrawsound], false); - } - - player[i].weaponactive=0; - weapons.owner[j]=player[i].id; - if(player[i].num_weapons>0){ - player[i].weaponids[player[i].num_weapons]=player[i].weaponids[0]; - } - player[i].num_weapons++; - player[i].weaponids[0]=j; - } - } - //} - } - } - else if ((player[i].isIdle()||player[i].isFlip()||player[i].aitype!=playercontrolled)&&findDistancefast(&player[i].coords,&weapons.position[j])<5&&player[i].coords.yid)) - if(findDistancefastflat(&player[i].coords,&weapons.position[k])<3&&player[i].weaponactive==-1){ - float gLoc[3]; - float vel[3]; - gLoc[0]=player[i].coords.x; - gLoc[1]=player[i].coords.y; - gLoc[2]=player[i].coords.z; - vel[0]=player[i].velocity.x; - vel[1]=player[i].velocity.y; - vel[2]=player[i].velocity.z; - if(weapons.type[k]!=staff){ - PlaySoundEx( knifedrawsound, samp[knifedrawsound], NULL, true); - OPENAL_3D_SetAttributes(channels[knifedrawsound], gLoc, vel); - OPENAL_SetVolume(channels[knifedrawsound], 128); - OPENAL_SetPaused(channels[knifedrawsound], false); - } - - player[i].weaponactive=0; - weapons.owner[k]=player[i].id; - if(player[i].num_weapons>0){ - player[i].weaponids[player[i].num_weapons]=player[i].weaponids[0]; - } - player[i].num_weapons++; - player[i].weaponids[0]=k; - } - } - } - } - } - } - if(player[i].isCrouch()||player[i].targetanimation==sneakanim||player[i].isRun()||player[i].isIdle()||player[i].targetanimation==rollanim||player[i].targetanimation==backhandspringanim){ - if(numplayers>1) - for(j=0;j0&&player[j].weaponstuckwhere==1))||player[j].weaponstuck==-1||player[j].num_weapons>1)){ - if(player[i].targetanimation!=rollanim&&player[i].targetanimation!=backhandspringanim){ - player[i].throwtogglekeydown=1; - player[i].victim=&player[j]; - player[i].hasvictim=1; - player[i].targetanimation=crouchremoveknifeanim; - player[i].target=0; - player[i].targetframe=0; - rotatetarget=player[j].coords-player[i].coords; - Normalise(&rotatetarget); - player[i].targetrotation=-asin(0-rotatetarget.x); - player[i].targetrotation*=360/6.28; - if(rotatetarget.z<0)player[i].targetrotation=180-player[i].targetrotation; - } - if(player[i].targetanimation==rollanim||player[i].targetanimation==backhandspringanim){ - player[i].throwtogglekeydown=1; - player[i].victim=&player[j]; - player[i].hasvictim=1; - int k = player[j].weaponids[0]; - if(player[i].hasvictim){ - float gLoc[3]; - float vel[3]; - gLoc[0]=player[i].coords.x; - gLoc[1]=player[i].coords.y; - gLoc[2]=player[i].coords.z; - vel[0]=player[i].velocity.x; - vel[1]=player[i].velocity.y; - vel[2]=player[i].velocity.z; - bool fleshstuck; - fleshstuck=0; - if(player[i].victim->weaponstuck!=-1){ - if(player[i].victim->weaponids[player[i].victim->weaponstuck]==k){ - fleshstuck=1; - } - } - if(!fleshstuck){ - if(weapons.type[k]!=staff){ - PlaySoundEx( knifedrawsound, samp[knifedrawsound], NULL, true); - OPENAL_3D_SetAttributes(channels[knifedrawsound], gLoc, vel); - OPENAL_SetVolume(channels[knifedrawsound], 128); - OPENAL_SetPaused(channels[knifedrawsound], false); - } - } - if(fleshstuck){ - PlaySoundEx( fleshstabremovesound, samp[fleshstabremovesound], NULL, true); - OPENAL_3D_SetAttributes(channels[fleshstabremovesound], gLoc, vel); - OPENAL_SetVolume(channels[fleshstabremovesound], 128); - OPENAL_SetPaused(channels[fleshstabremovesound], false); - } - - player[i].weaponactive=0; - if(weapons.owner[k]!=-1){ - if(player[i].victim->num_weapons==1)player[i].victim->num_weapons=0; - else player[i].victim->num_weapons=1; - - player[i].victim->skeleton.longdead=0; - player[i].victim->skeleton.free=1; - player[i].victim->skeleton.broken=0; - - for(int l=0;lskeleton.num_joints;l++){ - player[i].victim->skeleton.joints[l].velchange=0; - player[i].victim->skeleton.joints[l].locked=0; - } - - XYZ relative; - relative=0; - relative.y=10; - Normalise(&relative); - XYZ footvel,footpoint; - footvel=0; - footpoint=weapons.position[k]; - if(player[i].victim->weaponstuck!=-1){ - if(player[i].victim->weaponids[player[i].victim->weaponstuck]==k){ - if(bloodtoggle)sprites.MakeSprite(cloudimpactsprite, footpoint,footvel, 1,0,0, .8, .3); - weapons.bloody[k]=2; - weapons.blooddrip[k]=5; - player[i].victim->weaponstuck=-1; - player[i].victim->bloodloss+=2000; - player[i].victim->DoDamage(2000); - } - } - if(player[i].victim->num_weapons>0){ - if(player[i].victim->weaponstuck!=0&&player[i].victim->weaponstuck!=-1)player[i].victim->weaponstuck=0; - if(player[i].victim->weaponids[0]==k) - player[i].victim->weaponids[0]=player[i].victim->weaponids[player[i].victim->num_weapons]; - } - - player[i].victim->weaponactive=-1; - - player[i].victim->skeleton.joints[player[i].victim->skeleton.jointlabels[abdomen]].velocity+=relative*6; - player[i].victim->skeleton.joints[player[i].victim->skeleton.jointlabels[neck]].velocity+=relative*6; - player[i].victim->skeleton.joints[player[i].victim->skeleton.jointlabels[rightshoulder]].velocity+=relative*6; - player[i].victim->skeleton.joints[player[i].victim->skeleton.jointlabels[leftshoulder]].velocity+=relative*6; - } - weapons.owner[k]=i; - if(player[i].num_weapons>0){ - player[i].weaponids[player[i].num_weapons]=player[i].weaponids[0]; - } - player[i].num_weapons++; - player[i].weaponids[0]=k; - } - } - } - } - } - } - if(player[i].weaponactive!=-1&&player[i].aitype==playercontrolled){ - if(weapons.type[player[i].weaponids[0]]==knife){ - if(player[i].isIdle()||player[i].isRun()||player[i].isCrouch()||player[i].targetanimation==sneakanim||player[i].isFlip()) - if(numplayers>1) - for(j=0;j1.5&&!player[j].skeleton.free&&-1==checkcollide(DoRotation(player[j].skeleton.joints[player[j].skeleton.jointlabels[head]].position,0,player[j].rotation,0)*player[j].scale+player[j].coords,DoRotation(player[i].skeleton.joints[player[i].skeleton.jointlabels[head]].position,0,player[i].rotation,0)*player[i].scale+player[i].coords)){ - if(!player[i].isFlip()){ - player[i].throwtogglekeydown=1; - player[i].victim=&player[j]; - player[i].targetanimation=knifethrowanim; - player[i].target=0; - player[i].targetframe=0; - rotatetarget=player[j].coords-player[i].coords; - Normalise(&rotatetarget); - player[i].targetrotation=-asin(0-rotatetarget.x); - player[i].targetrotation*=360/6.28; - if(rotatetarget.z<0)player[i].targetrotation=180-player[i].targetrotation; - - player[i].targettilt2=-asin(rotatetarget.y)*360/6.28; - } - if(player[i].isFlip()){ - if(player[i].weaponactive!=-1){ - player[i].throwtogglekeydown=1; - player[i].victim=&player[j]; - XYZ aim; - weapons.owner[player[i].weaponids[0]]=-1; - aim=player[i].victim->coords+DoRotation(player[i].victim->skeleton.joints[player[i].victim->skeleton.jointlabels[abdomen]].position,0,player[i].victim->rotation,0)*player[i].victim->scale+player[i].victim->velocity*findDistance(&player[i].victim->coords,&player[i].coords)/50-(player[i].coords+DoRotation(player[i].skeleton.joints[player[i].skeleton.jointlabels[righthand]].position,0,player[i].rotation,0)*player[i].scale); - Normalise(&aim); - - aim=DoRotation(aim,(float)abs(Random()%30)-15,(float)abs(Random()%30)-15,0); - - weapons.velocity[player[i].weaponids[0]]=aim*50; - weapons.tipvelocity[player[i].weaponids[0]]=aim*50; - weapons.missed[player[i].weaponids[0]]=0; - weapons.freetime[player[i].weaponids[0]]=0; - weapons.firstfree[player[i].weaponids[0]]=1; - weapons.physics[player[i].weaponids[0]]=0; - player[i].num_weapons--; - if(player[i].num_weapons){ - player[i].weaponids[0]=player[i].weaponids[player[i].num_weapons]; - } - player[i].weaponactive=-1; - } - } - } - } - } - } - if(player[i].weaponactive!=-1&&player[i].aitype==playercontrolled){ - if(player[i].isCrouch()||player[i].targetanimation==sneakanim) - { - player[i].throwtogglekeydown=1; - weapons.owner[player[i].weaponids[0]]=-1; - weapons.velocity[player[i].weaponids[0]]=player[i].velocity*.2; - if(weapons.velocity[player[i].weaponids[0]].x==0)weapons.velocity[player[i].weaponids[0]].x=.1; - weapons.tipvelocity[player[i].weaponids[0]]=weapons.velocity[player[i].weaponids[0]]; - weapons.missed[player[i].weaponids[0]]=1; - weapons.freetime[player[i].weaponids[0]]=0; - weapons.firstfree[player[i].weaponids[0]]=1; - weapons.physics[player[i].weaponids[0]]=1; - player[i].num_weapons--; - if(player[i].num_weapons){ - player[i].weaponids[0]=player[i].weaponids[player[i].num_weapons]; - if(player[i].weaponstuck==player[i].num_weapons)player[i].weaponstuck=0; - } - - player[i].weaponactive=-1; - for(j=0;j1) - for(j=0;j1) - for(j=0;jcoords)<3&&player[j].victim==&player[i]&&(player[j].targetanimation==sweepanim||player[j].targetanimation==upunchanim||player[j].targetanimation==wolfslapanim||((player[j].targetanimation==swordslashanim||player[j].targetanimation==knifeslashstartanim||player[j].targetanimation==staffhitanim||player[j].targetanimation==staffspinhitanim)&&findDistancefast(&player[j].coords,&player[i].coords)<2))){ - if(target>=0)target=-1; - else target=j; - } - } - } - if(target>=0)player[target].Reverse(); - player[i].lowreversaldelay=.5; - - if(player[i].isIdle()){ - player[i].targetanimation=player[i].getCrouch(); - player[i].target=0; - player[i].targetframe=0; - player[i].transspeed=10; - } - if(player[i].isRun()||(player[i].isStop()&&(player[i].leftkeydown||player[i].rightkeydown||player[i].forwardkeydown||player[i].backkeydown))){ - player[i].targetanimation=rollanim; - player[i].target=0; - player[i].targetframe=0; - player[i].transspeed=20; - } - } - if(!player[i].crouchkeydown){ - //Uncrouch - if(!player[i].isRun()&&player[i].targetanimation!=sneakanim&&i==0)player[i].superruntoggle=0; - target=-2; - if(player[i].isCrouch()){ - if(numplayers>1) - for(j=0;jcoords)<3&&player[j].victim==&player[i]&&(player[j].targetanimation==spinkickanim)&&player[i].isCrouch()){ - if(target>=0)target=-1; - else target=j; - } - } - } - if(target>=0)player[target].Reverse(); - player[i].highreversaldelay=.5; - - if(player[i].isCrouch()){ - if(!player[i].wasCrouch()){ - player[i].currentanimation=player[i].getCrouch(); - player[i].currentframe=0; - } - player[i].target=0; - player[i].targetanimation=player[i].getIdle(); - player[i].targetframe=0; - player[i].transspeed=10; - } - } - if(player[i].targetanimation==sneakanim){ - player[i].targetanimation=player[i].getIdle(); - player[i].target=0; - player[i].targetframe=0; - player[i].transspeed=10; - } - } - if(player[i].forwardkeydown){ - if(player[i].isIdle()||(player[i].isStop()&&player[i].targetrotation==player[i].rotation)||(player[i].isLanding()&&player[i].targetframe>0&&!player[i].jumpkeydown)||(player[i].isLandhard()&&player[i].targetframe>0&&!player[i].jumpkeydown&&player[i].crouchkeydown)){ - if(player[i].aitype==passivetype)player[i].targetanimation=walkanim; - else player[i].targetanimation=player[i].getRun(); - player[i].target=0; - player[i].targetframe=0; - } - if(player[i].isCrouch()){ - player[i].targetanimation=sneakanim; - if(player[i].wasCrouch())player[i].target=0; - player[i].targetframe=0; - } - if(player[i].targetanimation==hanganim/*&&(!player[i].forwardstogglekeydown||player[i].aitype!=playercontrolled)*/){ - player[i].targetanimation=climbanim; - player[i].target=0; - player[i].targetframe=1; - player[i].jumpclimb=1; - } - if(player[i].targetanimation==jumpupanim||player[i].targetanimation==jumpdownanim||player[i].isFlip()){ - player[i].velocity+=absflatfacing*5*multiplier; - } - player[i].forwardstogglekeydown=1; - movekey=1; - } - if (player[i].rightkeydown){ - if(player[i].isIdle()||(player[i].isStop()&&player[i].targetrotation==player[i].rotation)||(player[i].isLanding()&&player[i].targetframe>0&&!player[i].jumpkeydown)||(player[i].isLandhard()&&player[i].targetframe>0&&!player[i].jumpkeydown&&player[i].crouchkeydown)){ - player[i].targetanimation=player[i].getRun(); - player[i].target=0; - player[i].targetframe=0; - } - if(player[i].isCrouch()){ - player[i].targetanimation=sneakanim; - if(player[i].wasCrouch()) player[i].target=0; - player[i].targetframe=0; - } - if(player[i].targetanimation==jumpupanim||player[i].targetanimation==jumpdownanim||player[i].isFlip()){ - player[i].velocity+=DoRotation(absflatfacing*5*multiplier,0,-90,0); - } - player[i].targetrotation-=90; - if(player[i].forwardkeydown)player[i].targetrotation+=45; - if(player[i].backkeydown)player[i].targetrotation-=45; - movekey=1; - } - if ( player[i].leftkeydown){ - if(player[i].isIdle()||(player[i].isStop()&&player[i].targetrotation==player[i].rotation)||(player[i].isLanding()&&player[i].targetframe>0&&!player[i].jumpkeydown)||(player[i].isLandhard()&&player[i].targetframe>0&&!player[i].jumpkeydown&&player[i].crouchkeydown)){ - player[i].targetanimation=player[i].getRun(); - player[i].target=0; - player[i].targetframe=0; - } - if(player[i].isCrouch()){ - player[i].targetanimation=sneakanim; - if(player[i].wasCrouch())player[i].target=0; - player[i].targetframe=0; - } - if(player[i].targetanimation==jumpupanim||player[i].targetanimation==jumpdownanim||player[i].isFlip()){ - player[i].velocity-=DoRotation(absflatfacing*5*multiplier,0,-90,0); - } - player[i].targetrotation+=90; - if(player[i].forwardkeydown)player[i].targetrotation-=45; - if(player[i].backkeydown)player[i].targetrotation+=45; - movekey=1; - } - if(player[i].backkeydown){ - if(player[i].isIdle()||(player[i].isStop()&&player[i].targetrotation==player[i].rotation)||(player[i].isLanding()&&player[i].targetframe>0&&!player[i].jumpkeydown)||(player[i].isLandhard()&&player[i].targetframe>0&&!player[i].jumpkeydown&&player[i].crouchkeydown)){ - player[i].targetanimation=player[i].getRun(); - player[i].target=0; - player[i].targetframe=0; - } - if(player[i].isCrouch()){ - player[i].targetanimation=sneakanim; - if(player[i].wasCrouch())player[i].target=0; - player[i].targetframe=0; - } - if(player[i].targetanimation==jumpupanim||player[i].targetanimation==jumpdownanim||player[i].isFlip()){ - player[i].velocity-=absflatfacing*5*multiplier; - } - if(player[i].targetanimation==hanganim){ - player[i].currentanimation=jumpdownanim; - player[i].targetanimation=jumpdownanim; - player[i].target=0; - player[i].currentframe=0; - player[i].targetframe=1; - player[i].velocity=0; - player[i].velocity.y+=gravity; - player[i].coords.y-=1.4; - player[i].grabdelay=1; - } - if ( !player[i].leftkeydown&&!player[i].rightkeydown) - player[i].targetrotation+=180; - movekey=1; - } - if((player[i].jumpkeydown&&!player[i].jumpclimb)||player[i].jumpstart){ - if((((player[i].isLanding()&&player[i].targetframe>=3)||player[i].isRun()||player[i].targetanimation==walkanim||player[i].isCrouch()||player[i].targetanimation==sneakanim)&&player[i].jumppower>1)&&((player[i].targetanimation!=rabbitrunninganim&&player[i].targetanimation!=wolfrunninganim)||i!=0)){ - player[i].jumpstart=0; - player[i].targetanimation=jumpupanim; - player[i].target=0; - player[i].targetframe=0; - player[i].rotation=player[i].targetrotation; - player[i].transspeed=20; - player[i].FootLand(0,1); - player[i].FootLand(1,1); - - facing=0; - facing.z=-1; - flatfacing=DoRotation(facing,0,player[i].targetrotation+180,0); - - if(movekey)player[i].velocity=flatfacing*player[i].speed*45*player[i].scale; - if(!movekey)player[i].velocity=0; - - //Dodge sweep? - target=-2; - if(numplayers>1) - for(j=0;jcoords)<3&&player[j].victim==&player[i]&&(player[j].targetanimation==sweepanim)){ - if(target>=0)target=-1; - else target=j; - } - } - } - if(target>=0)player[i].velocity.y=1; - else if(player[i].crouchkeydown||player[i].aitype!=playercontrolled){ - player[i].velocity.y=7; - player[i].crouchtogglekeydown=1; - } - else player[i].velocity.y=5; - - if(mousejump&&i==0&&debugmode){ - if(!player[i].isLanding())player[i].tempdeltav=deltav; - if(player[i].tempdeltav<0)player[i].velocity.y-=(float)(player[i].tempdeltav)/multiplier/1000; - } - - player[i].coords.y+=.2; - player[i].jumppower-=1; - - static float gLoc[3]; - static float vel[3]; - gLoc[0]=player[i].coords.x; - gLoc[1]=player[i].coords.y; - gLoc[2]=player[i].coords.z; - vel[0]=player[i].velocity.x; - vel[1]=player[i].velocity.y; - vel[2]=player[i].velocity.z; - - if(i==0){ - PlaySoundEx( whooshsound, samp[whooshsound], NULL, true); - OPENAL_3D_SetAttributes(channels[whooshsound], gLoc, vel); - OPENAL_SetVolume(channels[whooshsound], 128); - OPENAL_SetPaused(channels[whooshsound], false); - } - - PlaySoundEx( jumpsound, samp[jumpsound], NULL, true); - OPENAL_3D_SetAttributes(channels[jumpsound], gLoc, vel); - OPENAL_SetVolume(channels[jumpsound], 128); - OPENAL_SetPaused(channels[jumpsound], false); - } - if((player[i].isIdle())&&player[i].jumppower>1){ - player[i].targetanimation=player[i].getLanding(); - player[i].landhard=0; - player[i].target=0; - player[i].targetframe=2; - player[i].jumpstart=1; - player[i].tempdeltav=deltav; - } - if(player[i].targetanimation==jumpupanim&&(((!floatjump&&!editorenabled)||!debugmode)||player[i].aitype!=playercontrolled)){ - if(player[i].jumppower>multiplier*6){ - player[i].velocity.y+=multiplier*6; - player[i].jumppower-=multiplier*6; - } - if(player[i].jumppower<=multiplier*6){ - player[i].velocity.y+=player[i].jumppower; - player[i].jumppower=0; - } - } - if(((floatjump||editorenabled)&&debugmode)&&i==0)player[i].velocity.y+=multiplier*30; - } - - if(!movekey){ - if(player[i].isRun()||player[i].targetanimation==walkanim){ - player[i].targetanimation=player[i].getStop(); - player[i].target=0; - player[i].targetframe=0; - } - if(player[i].targetanimation==sneakanim){ - player[i].targetanimation=player[i].getCrouch(); - if(player[i].currentanimation==sneakanim)player[i].target=0; - player[i].targetframe=0; - } - } - if(player[i].targetanimation==walkanim&&(player[i].aitype==attacktypecutoff||player[i].aitype==searchtype||(player[i].aitype==passivetype&&player[i].numwaypoints<=1))){ - player[i].targetanimation=player[i].getStop(); - player[i].target=0; - player[i].targetframe=0; - } - if(player[i].isRun()&&(player[i].aitype==passivetype)){ - player[i].targetanimation=player[i].getStop(); - player[i].target=0; - player[i].targetframe=0; - } - } - } - if(player[i].targetanimation==rollanim)player[i].targetrotation=oldtargetrotation; - } + if(Input::isKeyDown(SDLK_F7)){ + if(Input::isKeyDown(SDLK_LSHIFT)) + stereoseparation -= 0.001; + else + stereoseparation -= 0.010; + printf("Stereo decreased increased to %f\n", stereoseparation); + } - //Rotation - for(k=0;k180){ - if(player[k].rotation>player[k].targetrotation)player[k].rotation-=360; - else player[k].rotation+=360; - } + if(Input::isKeyDown(SDLK_F8)){ + if(Input::isKeyDown(SDLK_LSHIFT)) + stereoseparation += 0.001; + else + stereoseparation += 0.010; + printf("Stereo separation increased to %f\n", stereoseparation); + } - if(abs(player[k].rotation-player[k].targetrotation)>90&&(player[k].isRun()||player[k].targetanimation==walkanim)){ - player[k].targetanimation=player[k].getStop(); - player[k].targetframe=0; - player[k].target=0; - } - if(player[k].targetanimation==backhandspringanim||player[k].targetanimation==dodgebackanim){ - player[k].targettilt=0; - } - if(player[k].targetanimation!=jumpupanim&&player[k].targetanimation!=backhandspringanim&&player[k].targetanimation!=jumpdownanim&&!player[k].isFlip()){ - player[k].targettilt=0; - if(player[k].jumppower<0&&!player[k].jumpkeydown)player[k].jumppower=0; - player[k].jumppower+=multiplier*7; - if(player[k].isCrouch())player[k].jumppower+=multiplier*7; - //*(1-(player[k].damage/player[k].damagetolerance)) - if(player[k].jumppower>5)player[k].jumppower=5; - } + if(Input::isKeyPressed(SDLK_TAB)&&tutoriallevel){ + if(tutorialstage!=51) + tutorialstagetime=tutorialmaxtime; + emit_sound_np(consolefailsound, 128.); + } - if(player[k].isRun()){ - player[k].targettilt=(player[k].rotation-player[k].targetrotation)/4; - } + /* + Values of mainmenu : + 1 Main menu + 2 Menu pause (resume/end game) + 3 Option menu + 4 Controls configuration menu + 5 Main game menu (choose level or challenge) + 6 Deleting user menu + 7 User managment menu (select/add) + 8 Choose difficulty menu + 9 Challenge level selection menu + 10 End of the campaign congratulation (is that really a menu?) + 11 Same that 9 ??? => unused + 18 stereo configuration + */ + + if(!console) { + //campaign over? + if(mainmenu&&endgame==1) + mainmenu=10; + //go to level select after completing a campaign level + if(campaign&&winfreeze&&mainmenu==0&&campaignlevels[actuallevel].choosenext==1) { + mainmenu=5; + gameon=0; + winfreeze=0; + fireSound(); + flash(); + if(musictoggle) { + OPENAL_SetFrequency(OPENAL_ALL, 0.001); + emit_stream_np(stream_menutheme); + pause_sound(leveltheme); + } + LoadCampaign(); + } + //escape key pressed + //TODO: there must be code somewhere else that handles clicking the Back button, merge it with this + if(Input::isKeyPressed(SDLK_ESCAPE)&& + (gameon||mainmenu==0||(mainmenu>=3&&mainmenu!=8&&!(mainmenu==7&&entername)))) { + selected=-1; + if(mainmenu==0&&!winfreeze) + mainmenu=2; //pause + else if(mainmenu==1||mainmenu==2){ + mainmenu=0; //unpause + } + //play menu theme + if(musictoggle&&(mainmenu==1||mainmenu==2)){ + OPENAL_SetFrequency(OPENAL_ALL, 0.001); + emit_stream_np(stream_menutheme); + pause_sound(leveltheme); + } + //on resume, play level music + if(!mainmenu){ + pause_sound(stream_menutheme); + resume_stream(leveltheme); + } + //finished with settings menu + if(mainmenu==3){ + SaveSettings(*this); + } + //effects + if(mainmenu>=3&&mainmenu!=8){ + fireSound(); + flash(); + } + //go back + switch(mainmenu){ + case 3: case 5: + mainmenu=gameon?2:1; break; + case 4: case 18: + mainmenu=3; break; + case 6: case 7: case 9: case 10: + mainmenu=5; break; + } + } + } - if(abs(player[k].tilt-player[k].targettilt)player[k].targettilt){ - player[k].tilt-=multiplier*150; - } - else if(player[k].tilt=0;j--){ - envsoundlife[j]-=multiplier; - if(envsoundlife[j]<0){ - numenvsounds--; - envsoundlife[j]=envsoundlife[numenvsounds]; - envsound[j]=envsound[numenvsounds]; - } - } - if(!slomo)OPENAL_SetFrequency(OPENAL_ALL, 22050); - if(slomo)OPENAL_SetFrequency(OPENAL_ALL, slomofreq); - - if(tutoriallevel==1){ - XYZ temp; - XYZ temp2; - XYZ temp3; - XYZ oldtemp; - XYZ oldtemp2; - temp.x=1011; - temp.y=84; - temp.z=491; - temp2.x=1025; - temp2.y=75; - temp2.z=447; - temp3.x=1038; - temp3.y=76; - temp3.z=453; - oldtemp=temp; - oldtemp2=temp2; - if(tutorialstage>=51) - if(findDistancefast(&temp,&player[0].coords)>=findDistancefast(&temp,&temp2)-1||findDistancefast(&temp3,&player[0].coords)<4){ - OPENAL_StopSound(OPENAL_ALL); // hack...OpenAL renderer isn't stopping music after tutorial goes to level menu... - OPENAL_SetFrequency(OPENAL_ALL, 0.001); - - PlayStreamEx( stream_music3, strm[stream_music3], NULL, true); - OPENAL_SetPaused(channels[stream_music3], false); - OPENAL_SetVolume(channels[stream_music3], 256); - - gameon=0; - mainmenu=5; - - float gLoc[3]={0,0,0}; - float vel[3]={0,0,0}; - OPENAL_Sample_SetMinMaxDistance(samp[fireendsound], 9999.0f, 99999.0f); - PlaySoundEx( fireendsound, samp[fireendsound], NULL, true); - OPENAL_3D_SetAttributes(channels[fireendsound], gLoc, vel); - OPENAL_SetVolume(channels[fireendsound], 256); - OPENAL_SetPaused(channels[fireendsound], false); - OPENAL_Sample_SetMinMaxDistance(samp[fireendsound], 8.0f, 2000.0f); - - flashr=1; - flashg=0; - flashb=0; - flashamount=1; - flashdelay=1; - } - if(tutorialstage<51) - if(findDistancefast(&temp,&player[0].coords)>=findDistancefast(&temp,&temp2)-1||findDistancefast(&temp3,&player[0].coords)<4){ - float gLoc[3]; - float vel[3]; - gLoc[0]=player[0].coords.x; - gLoc[1]=player[0].coords.y; - gLoc[2]=player[0].coords.z; - vel[0]=0; - vel[1]=0; - vel[2]=0; - PlaySoundEx( fireendsound, samp[fireendsound], NULL, true); - OPENAL_3D_SetAttributes(channels[fireendsound], gLoc, vel); - OPENAL_SetVolume(channels[fireendsound], 256); - OPENAL_SetPaused(channels[fireendsound], false); - - player[0].coords=(oldtemp+oldtemp2)/2; - - flashr=1; - flashg=1; - flashb=1; - flashamount=1; - flashdelay=1; - } - if(tutorialstage>=14&&tutorialstage<50) - if(findDistancefast(&temp,&player[1].coords)>=findDistancefast(&temp,&temp2)-1||findDistancefast(&temp3,&player[1].coords)<4){ - float gLoc[3]; - float vel[3]; - gLoc[0]=player[1].coords.x; - gLoc[1]=player[1].coords.y; - gLoc[2]=player[1].coords.z; - vel[0]=0; - vel[1]=0; - vel[2]=0; - PlaySoundEx( fireendsound, samp[fireendsound], NULL, true); - OPENAL_3D_SetAttributes(channels[fireendsound], gLoc, vel); - OPENAL_SetVolume(channels[fireendsound], 256); - OPENAL_SetPaused(channels[fireendsound], false); - - for(int i=0;i0){ + consoletext[0][consolechars[0]]=' '; + cmd_dispatch(this, 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]; + } + for(int j=0;j<255;j++) + consoletext[0][j]=0; + consolechars[0]=0; + consoleselected=0; + } + } + + consoleblinkdelay-=multiplier; + if(consoleblinkdelay<=0){ + consoleblinkdelay=.3; + consoleblink=1-consoleblink; + } + } - //3d sound - static float gLoc[3]; - gLoc[0]=viewer.x; - gLoc[1]=viewer.y; - gLoc[2]=viewer.z; - static float vel[3]; - vel[0]=(viewer.x-oldviewer.x)/multiplier; - vel[1]=(viewer.y-oldviewer.y)/multiplier; - vel[2]=(viewer.z-oldviewer.z)/multiplier; - //Set orientation with forward and up vectors - static XYZ upvector; - upvector=0; - upvector.z=-1; + if(Input::isKeyDown(SDLK_q)&&Input::isKeyDown(SDLK_LMETA)){ + tryquit=1; + if(mainmenu==3) { + SaveSettings(*this); + } + } - upvector=DoRotation(upvector,-rotation2+90,0,0); - upvector=DoRotation(upvector,0,0-rotation,0); + static int oldwinfreeze; + if(winfreeze&&!oldwinfreeze){ + OPENAL_SetFrequency(OPENAL_ALL, 0.001); + emit_sound_np(consolesuccesssound); + } + if(winfreeze==0) + oldwinfreeze=winfreeze; + else + oldwinfreeze++; + + if((Input::isKeyPressed(jumpkey)||Input::isKeyPressed(SDLK_SPACE))&&!campaign) + if(winfreeze) + winfreeze=0; + if((Input::isKeyDown(SDLK_ESCAPE))&&!campaign&&gameon){ + if(console){ + console=false; + freeze=0; + } else if(winfreeze) { + mainmenu=9; + gameon=0; + } + } - facing=0; - facing.z=-1; - facing=DoRotation(facing,-rotation2,0,0); - facing=DoRotation(facing,0,0-rotation,0); + //TODO: what is this test? + if(!freeze&&!winfreeze&&!(mainmenu&&gameon)&&(gameon||!gamestarted)){ - static float ori[6]; - ori[0] = -facing.x; - ori[1] = facing.y; - ori[2] = -facing.z; - ori[3] = -upvector.x; - ori[4] = upvector.y; - ori[5] = -upvector.z; + //dialogues + if(indialogue!=-1) + talkdelay=1; + talkdelay-=multiplier; - OPENAL_3D_Listener_SetAttributes(&gLoc[0], &vel[0], ori[0], ori[1], ori[2], ori[3], ori[4], ori[5]); - OPENAL_Update(); + if(talkdelay<=0&&indialogue==-1&&animation[player[0].targetanimation].height!=highheight) + for(int i=0;i49){ + realdialoguetype=dialoguetype[i]-50; + special=1; + } + else if(dialoguetype[i]>39){ + realdialoguetype=dialoguetype[i]-40; + special=1; + } + else if(dialoguetype[i]>29){ + realdialoguetype=dialoguetype[i]-30; + special=1; + } + else if(dialoguetype[i]>19){ + realdialoguetype=dialoguetype[i]-20; + special=1; + } + else if(dialoguetype[i]>9){ + realdialoguetype=dialoguetype[i]-10; + special=1; + } + else { + realdialoguetype=dialoguetype[i]; + special=0; + } + if((!hostile||dialoguetype[i]>40&&dialoguetype[i]<50)&& + realdialoguetype0&& + (dialoguegonethrough[i]==0||!special)&& + (special||Input::isKeyPressed(attackkey))){ + if(findDistancefast(&player[0].coords,&player[realdialoguetype].coords)<6|| + player[realdialoguetype].howactive>=typedead1|| + dialoguetype[i]>40&&dialoguetype[i]<50){ + whichdialogue=i; + for(int j=0;j0){ + hotspot[i]=player[hotspottype[i]].coords; + } + } + } + + //Tutorial + if(tutoriallevel){ + doTutorial(); + } + + //bonuses + if(tutoriallevel!=1){ + if(bonustime==0&& + bonus!=solidhit&& + bonus!=spinecrusher&& + bonus!=tracheotomy&& + bonus!=backstab&& + bonusvalue>10){ + emit_sound_np(consolesuccesssound); + } + } else if(bonustime==0){ + emit_sound_np(fireendsound); + } + if(bonustime==0){ + if(bonus!=solidhit&& + bonus!=twoxcombo&& + bonus!=threexcombo&& + bonus!=fourxcombo&& + bonus!=megacombo) + bonusnum[bonus]++; + else + bonusnum[bonus]+=0.15; + if(tutoriallevel) + bonusvalue=0; + bonusvalue/=bonusnum[bonus]; + bonustotal+=bonusvalue; + } + bonustime+=multiplier; + + //snow effects + if(environment==snowyenvironment){ + precipdelay-=multiplier; + while(precipdelay<0){ + precipdelay+=.04; + if(!detail) + precipdelay+=.04; + XYZ footvel,footpoint; + + footvel=0; + footpoint=viewer+viewerfacing*6; + footpoint.y+=((float)abs(Random()%1200))/100-6; + footpoint.x+=((float)abs(Random()%1200))/100-6; + footpoint.z+=((float)abs(Random()%1200))/100-6; + Sprite::MakeSprite(snowsprite, footpoint,footvel, 1,1,1, .1, 1); + } + } + + + doAerialAcrobatics(); + + + static XYZ oldviewer; + + //control keys + if(indialogue==-1){ + player[0].forwardkeydown=Input::isKeyDown(forwardkey); + player[0].leftkeydown=Input::isKeyDown(leftkey); + player[0].backkeydown=Input::isKeyDown(backkey); + player[0].rightkeydown=Input::isKeyDown(rightkey); + player[0].jumpkeydown=Input::isKeyDown(jumpkey); + player[0].crouchkeydown=Input::isKeyDown(crouchkey); + player[0].drawkeydown=Input::isKeyDown(drawkey); + player[0].throwkeydown=Input::isKeyDown(throwkey); + } + else + { + player[0].forwardkeydown=0; + player[0].leftkeydown=0; + player[0].backkeydown=0; + player[0].rightkeydown=0; + player[0].jumpkeydown=0; + player[0].crouchkeydown=0; + player[0].drawkeydown=0; + player[0].throwkeydown=0; + } + + if(!player[0].jumpkeydown) + player[0].jumpclimb=0; + + + if(indialogue!=-1){ + cameramode=1; + if(directing){ + facing=0; + facing.z=-1; + + facing=DoRotation(facing,-rotation2,0,0); + facing=DoRotation(facing,0,0-rotation,0); + + flatfacing=0; + flatfacing.z=-1; + + flatfacing=DoRotation(flatfacing,0,-rotation,0); + + if(Input::isKeyDown(forwardkey)) + viewer+=facing*multiplier*4; + if(Input::isKeyDown(backkey)) + viewer-=facing*multiplier*4; + if(Input::isKeyDown(leftkey)) + viewer+=DoRotation(flatfacing*multiplier,0,90,0)*4; + if(Input::isKeyDown(rightkey)) + viewer+=DoRotation(flatfacing*multiplier,0,-90,0)*4; + if(Input::isKeyDown(jumpkey)) + 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)){ + 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)) + whichend=-1; + if(whichend!=-1){ + participantfocus[whichdialogue][indialogue]=whichend; + participantlocation[whichdialogue][whichend]=player[whichend].coords; + participantrotation[whichdialogue][whichend]=player[whichend].rotation; + } + if(whichend==-1){ + participantfocus[whichdialogue][indialogue]=-1; + } + if(player[participantfocus[whichdialogue][indialogue]].dead){ + indialogue=-1; + directing=0; + cameramode=0; + } + dialoguecamera[whichdialogue][indialogue]=viewer; + dialoguecamerarotation[whichdialogue][indialogue]=rotation; + dialoguecamerarotation2[whichdialogue][indialogue]=rotation2; + indialogue++; + if(indialogue=numdialogueboxes[whichdialogue]){ + indialogue=-1; + directing=0; + cameramode=0; + } + } + if(!directing){ + pause_sound(whooshsound); + viewer=dialoguecamera[whichdialogue][indialogue]; + viewer.y=max((double)viewer.y,terrain.getHeight(viewer.x,viewer.z)+.1); + rotation=dialoguecamerarotation[whichdialogue][indialogue]; + rotation2=dialoguecamerarotation2[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)|| + Input::isKeyPressed(attackkey)){ + indialogue++; + if(indialogue=numdialogueboxes[whichdialogue]){ + indialogue=-1; + directing=0; + cameramode=0; + if(dialoguetype[whichdialogue]>19&&dialoguetype[whichdialogue]<30){ + hostile=1; + } + if(dialoguetype[whichdialogue]>29&&dialoguetype[whichdialogue]<40){ + windialogue=1; + } + if(dialoguetype[whichdialogue]>49&&dialoguetype[whichdialogue]<60){ + hostile=1; + for(int i=1;i.8) + player[i].avoidcollided=0; + + doAI(i); + + if(animation[player[i].targetanimation].attack==reversed){ + //player[i].targetrotation=player[i].rotation; + player[i].forwardkeydown=0; + player[i].leftkeydown=0; + player[i].backkeydown=0; + player[i].rightkeydown=0; + player[i].jumpkeydown=0; + player[i].attackkeydown=0; + //player[i].crouchkeydown=0; + player[i].throwkeydown=0; + } + + if(indialogue!=-1){ + player[i].forwardkeydown=0; + player[i].leftkeydown=0; + player[i].backkeydown=0; + player[i].rightkeydown=0; + player[i].jumpkeydown=0; + player[i].crouchkeydown=0; + player[i].drawkeydown=0; + player[i].throwkeydown=0; + } + + if(player[i].collided<-.3) + player[i].collided=-.3; + if(player[i].collided>1) + player[i].collided=1; + player[i].collided-=multiplier*4; + player[i].whichdirectiondelay-=multiplier; + if(player[i].avoidcollided<-.3||player[i].whichdirectiondelay<=0){ + player[i].avoidcollided=-.3; + player[i].whichdirection=abs(Random()%2); + player[i].whichdirectiondelay=.4; + } + if(player[i].avoidcollided>1) + player[i].avoidcollided=1; + player[i].avoidcollided-=multiplier/4; + if(!player[i].skeleton.free){ + player[i].stunned-=multiplier; + player[i].surprised-=multiplier; + } + if(i!=0&&player[i].surprised<=0&& + player[i].aitype==attacktypecutoff&& + !player[i].dead&& + !player[i].skeleton.free&& + animation[player[i].targetanimation].attack==neutral) + numresponded=1; + + if(!player[i].throwkeydown) + player[i].throwtogglekeydown=0; + + //pick up weapon + if(player[i].throwkeydown&&!player[i].throwtogglekeydown){ + if(player[i].weaponactive==-1&& + player[i].num_weapons<2&& + (player[i].isIdle()|| + player[i].isCrouch()|| + player[i].targetanimation==sneakanim|| + player[i].targetanimation==rollanim|| + player[i].targetanimation==backhandspringanim|| + player[i].isFlip()|| + player[i].isFlip()|| + player[i].aitype!=playercontrolled)){ + for(int j=0;jid) + if(findDistancefastflat(&player[i].coords,&weapons[j].position)<2&&player[i].weaponactive==-1) + if(findDistancefast(&player[i].coords,&weapons[j].position)<1||player[i].victim){ + if(weapons[j].getType()!=staff) + emit_sound_at(knifedrawsound, player[i].coords, 128.); + + player[i].weaponactive=0; + weapons[j].owner=player[i].id; + if(player[i].num_weapons>0) + player[i].weaponids[player[i].num_weapons]=player[i].weaponids[0]; + player[i].num_weapons++; + player[i].weaponids[0]=j; + } + } + }else if((player[i].isIdle()|| + player[i].isFlip()|| + player[i].aitype!=playercontrolled)&& + findDistancefast(&player[i].coords,&weapons[j].position)<5&& + player[i].coords.yid) + if(findDistancefastflat(&player[i].coords,&weapons[k].position)<3&& + player[i].weaponactive==-1){ + if(weapons[k].getType()!=staff) + emit_sound_at(knifedrawsound, player[i].coords, 128.); + + player[i].weaponactive=0; + weapons[k].owner=player[i].id; + if(player[i].num_weapons>0) + player[i].weaponids[player[i].num_weapons]=player[i].weaponids[0]; + player[i].num_weapons++; + player[i].weaponids[0]=k; + } + } + } + } + } + } + if(player[i].isCrouch()|| + player[i].targetanimation==sneakanim|| + player[i].isRun()|| + player[i].isIdle()||player[i].targetanimation==rollanim|| + player[i].targetanimation==backhandspringanim){ + if(numplayers>1) + for(int j=0;j0&& + player[j].weaponstuckwhere==1))|| + player[j].weaponstuck==-1|| + player[j].num_weapons>1)){ + if(player[i].targetanimation!=rollanim&&player[i].targetanimation!=backhandspringanim){ + player[i].throwtogglekeydown=1; + player[i].victim=&player[j]; + player[i].hasvictim=1; + setAnimation(i,crouchremoveknifeanim); + player[i].targetrotation=roughDirectionTo(player[i].coords,player[j].coords); + } + if(player[i].targetanimation==rollanim||player[i].targetanimation==backhandspringanim){ + player[i].throwtogglekeydown=1; + player[i].victim=&player[j]; + player[i].hasvictim=1; + int k = player[j].weaponids[0]; + if(player[i].hasvictim){ + bool fleshstuck; + fleshstuck=0; + if(player[i].victim->weaponstuck!=-1){ + if(player[i].victim->weaponids[player[i].victim->weaponstuck]==k){ + fleshstuck=1; + } + } + if(!fleshstuck){ + if(weapons[k].getType()!=staff) + emit_sound_at(knifedrawsound, player[i].coords, 128.); + } + if(fleshstuck) + emit_sound_at(fleshstabremovesound, player[i].coords, 128.); + + player[i].weaponactive=0; + if(weapons[k].owner!=-1){ + if(player[i].victim->num_weapons==1)player[i].victim->num_weapons=0; + else player[i].victim->num_weapons=1; + + player[i].victim->skeleton.longdead=0; + player[i].victim->skeleton.free=1; + player[i].victim->skeleton.broken=0; + + for(int l=0;lskeleton.num_joints;l++){ + player[i].victim->skeleton.joints[l].velchange=0; + player[i].victim->skeleton.joints[l].locked=0; + } + + XYZ relative; + relative=0; + relative.y=10; + Normalise(&relative); + XYZ footvel,footpoint; + footvel=0; + footpoint=weapons[k].position; + if(player[i].victim->weaponstuck!=-1){ + if(player[i].victim->weaponids[player[i].victim->weaponstuck]==k){ + if(bloodtoggle)Sprite::MakeSprite(cloudimpactsprite, footpoint,footvel, 1,0,0, .8, .3); + weapons[k].bloody=2; + weapons[k].blooddrip=5; + player[i].victim->weaponstuck=-1; + player[i].victim->bloodloss+=2000; + player[i].victim->DoDamage(2000); + } + } + if(player[i].victim->num_weapons>0){ + if(player[i].victim->weaponstuck!=0&&player[i].victim->weaponstuck!=-1)player[i].victim->weaponstuck=0; + if(player[i].victim->weaponids[0]==k) + player[i].victim->weaponids[0]=player[i].victim->weaponids[player[i].victim->num_weapons]; + } + + player[i].victim->weaponactive=-1; + + playerJoint(player[i].victim,abdomen).velocity+=relative*6; + playerJoint(player[i].victim,neck).velocity+=relative*6; + playerJoint(player[i].victim,rightshoulder).velocity+=relative*6; + playerJoint(player[i].victim,leftshoulder).velocity+=relative*6; + } + weapons[k].owner=i; + if(player[i].num_weapons>0){ + player[i].weaponids[player[i].num_weapons]=player[i].weaponids[0]; + } + player[i].num_weapons++; + player[i].weaponids[0]=k; + } + } + } + } + } + } + if(player[i].weaponactive!=-1&&player[i].aitype==playercontrolled){ + if(weapons[player[i].weaponids[0]].getType()==knife){ + if(player[i].isIdle()|| + player[i].isRun()|| + player[i].isCrouch()|| + player[i].targetanimation==sneakanim|| + player[i].isFlip()) + if(numplayers>1) + for(int j=0;j1.5&& + !player[j].skeleton.free&& + -1==checkcollide(DoRotation(playerJoint(j,head).position,0,player[j].rotation,0)*player[j].scale+player[j].coords,DoRotation(playerJoint(i,head).position,0,player[i].rotation,0)*player[i].scale+player[i].coords)){ + if(!player[i].isFlip()){ + player[i].throwtogglekeydown=1; + player[i].victim=&player[j]; + setAnimation(i,knifethrowanim); + player[i].targetrotation=roughDirectionTo(player[i].coords,player[j].coords); + player[i].targettilt2=pitchTo(player[i].coords,player[j].coords); + } + if(player[i].isFlip()){ + if(player[i].weaponactive!=-1){ + player[i].throwtogglekeydown=1; + player[i].victim=&player[j]; + XYZ aim; + weapons[player[i].weaponids[0]].owner=-1; + aim=player[i].victim->coords+DoRotation(playerJoint(player[i].victim,abdomen).position,0,player[i].victim->rotation,0)*player[i].victim->scale+player[i].victim->velocity*findDistance(&player[i].victim->coords,&player[i].coords)/50-(player[i].coords+DoRotation(playerJoint(i,righthand).position,0,player[i].rotation,0)*player[i].scale); + Normalise(&aim); + + aim=DoRotation(aim,(float)abs(Random()%30)-15,(float)abs(Random()%30)-15,0); + + weapons[player[i].weaponids[0]].velocity=aim*50; + weapons[player[i].weaponids[0]].tipvelocity=aim*50; + weapons[player[i].weaponids[0]].missed=0; + weapons[player[i].weaponids[0]].freetime=0; + weapons[player[i].weaponids[0]].firstfree=1; + weapons[player[i].weaponids[0]].physics=0; + player[i].num_weapons--; + if(player[i].num_weapons){ + player[i].weaponids[0]=player[i].weaponids[player[i].num_weapons]; + } + player[i].weaponactive=-1; + } + } + } + } + } + } + if(player[i].weaponactive!=-1&&player[i].aitype==playercontrolled){ + if(player[i].isCrouch()||player[i].targetanimation==sneakanim){ + player[i].throwtogglekeydown=1; + weapons[player[i].weaponids[0]].owner=-1; + weapons[player[i].weaponids[0]].velocity=player[i].velocity*.2; + if(weapons[player[i].weaponids[0]].velocity.x==0)weapons[player[i].weaponids[0]].velocity.x=.1; + weapons[player[i].weaponids[0]].tipvelocity=weapons[player[i].weaponids[0]].velocity; + weapons[player[i].weaponids[0]].missed=1; + weapons[player[i].weaponids[0]].freetime=0; + weapons[player[i].weaponids[0]].firstfree=1; + weapons[player[i].weaponids[0]].physics=1; + player[i].num_weapons--; + if(player[i].num_weapons){ + player[i].weaponids[0]=player[i].weaponids[player[i].num_weapons]; + if(player[i].weaponstuck==player[i].num_weapons)player[i].weaponstuck=0; + } + + player[i].weaponactive=-1; + for(int j=0;j1) + for(int j=0;j1) + for(int j=0;jcoords)<3&& + player[j].victim==&player[i]&& + (player[j].targetanimation==sweepanim|| + player[j].targetanimation==upunchanim|| + player[j].targetanimation==wolfslapanim|| + ((player[j].targetanimation==swordslashanim|| + player[j].targetanimation==knifeslashstartanim|| + player[j].targetanimation==staffhitanim|| + player[j].targetanimation==staffspinhitanim)&& + findDistancefast(&player[j].coords,&player[i].coords)<2))){ + if(target>=0) + target=-1; + else + target=j; + } + } + } + if(target>=0) + player[target].Reverse(); + player[i].lowreversaldelay=.5; + + if(player[i].isIdle()){ + setAnimation(i,player[i].getCrouch()); + player[i].transspeed=10; + } + if(player[i].isRun()|| + (player[i].isStop()&& + (player[i].leftkeydown|| + player[i].rightkeydown|| + player[i].forwardkeydown|| + player[i].backkeydown))){ + setAnimation(i,rollanim); + player[i].transspeed=20; + } + } + if(!player[i].crouchkeydown){ + //Uncrouch + if(!player[i].isRun()&&player[i].targetanimation!=sneakanim&&i==0)player[i].superruntoggle=0; + target=-2; + if(player[i].isCrouch()){ + if(numplayers>1) + for(int j=0;jcoords)<3&& + player[j].victim==&player[i]&& + (player[j].targetanimation==spinkickanim)&& + player[i].isCrouch()){ + if(target>=0) + target=-1; + else + target=j; + } + } + } + if(target>=0) + player[target].Reverse(); + player[i].highreversaldelay=.5; + + if(player[i].isCrouch()){ + if(!player[i].wasCrouch()){ + player[i].currentanimation=player[i].getCrouch(); + player[i].currentframe=0; + } + setAnimation(i,player[i].getIdle()); + player[i].transspeed=10; + } + } + if(player[i].targetanimation==sneakanim){ + setAnimation(i,player[i].getIdle()); + player[i].transspeed=10; + } + } + if(player[i].forwardkeydown){ + if(player[i].isIdle()|| + (player[i].isStop()&& + player[i].targetrotation==player[i].rotation)|| + (player[i].isLanding()&& + player[i].targetframe>0&& + !player[i].jumpkeydown)|| + (player[i].isLandhard()&& + player[i].targetframe>0&& + !player[i].jumpkeydown&& + player[i].crouchkeydown)){ + if(player[i].aitype==passivetype) + setAnimation(i,walkanim); + else + setAnimation(i,player[i].getRun()); + } + if(player[i].isCrouch()){ + player[i].targetanimation=sneakanim; + if(player[i].wasCrouch()) + player[i].target=0; + player[i].targetframe=0; + } + if(player[i].targetanimation==hanganim/*&&(!player[i].forwardstogglekeydown||player[i].aitype!=playercontrolled)*/){ + setAnimation(i,climbanim); + player[i].targetframe=1; + player[i].jumpclimb=1; + } + if(player[i].targetanimation==jumpupanim||player[i].targetanimation==jumpdownanim||player[i].isFlip()){ + player[i].velocity+=absflatfacing*5*multiplier; + } + player[i].forwardstogglekeydown=1; + movekey=1; + } + if (player[i].rightkeydown){ + if(player[i].isIdle()|| + (player[i].isStop()&& + player[i].targetrotation==player[i].rotation)|| + (player[i].isLanding()&& + player[i].targetframe>0&& + !player[i].jumpkeydown)|| + (player[i].isLandhard()&& + player[i].targetframe>0&& + !player[i].jumpkeydown&& + player[i].crouchkeydown)){ + setAnimation(i,player[i].getRun()); + } + if(player[i].isCrouch()){ + player[i].targetanimation=sneakanim; + if(player[i].wasCrouch()) + player[i].target=0; + player[i].targetframe=0; + } + if(player[i].targetanimation==jumpupanim||player[i].targetanimation==jumpdownanim||player[i].isFlip()){ + player[i].velocity+=DoRotation(absflatfacing*5*multiplier,0,-90,0); + } + player[i].targetrotation-=90; + if(player[i].forwardkeydown)player[i].targetrotation+=45; + if(player[i].backkeydown)player[i].targetrotation-=45; + movekey=1; + } + if ( player[i].leftkeydown){ + if(player[i].isIdle()|| + (player[i].isStop()&& + player[i].targetrotation==player[i].rotation)|| + (player[i].isLanding()&& + player[i].targetframe>0&& + !player[i].jumpkeydown)|| + (player[i].isLandhard()&& + player[i].targetframe>0&& + !player[i].jumpkeydown&& + player[i].crouchkeydown)){ + setAnimation(i,player[i].getRun()); + } + if(player[i].isCrouch()){ + player[i].targetanimation=sneakanim; + if(player[i].wasCrouch()) + player[i].target=0; + player[i].targetframe=0; + } + if(player[i].targetanimation==jumpupanim||player[i].targetanimation==jumpdownanim||player[i].isFlip()){ + player[i].velocity-=DoRotation(absflatfacing*5*multiplier,0,-90,0); + } + player[i].targetrotation+=90; + if(player[i].forwardkeydown)player[i].targetrotation-=45; + if(player[i].backkeydown)player[i].targetrotation+=45; + movekey=1; + } + if(player[i].backkeydown){ + if(player[i].isIdle()|| + (player[i].isStop()&& + player[i].targetrotation==player[i].rotation)|| + (player[i].isLanding()&& + player[i].targetframe>0&& + !player[i].jumpkeydown)|| + (player[i].isLandhard()&& + player[i].targetframe>0&& + !player[i].jumpkeydown&& + player[i].crouchkeydown)){ + setAnimation(i,player[i].getRun()); + } + if(player[i].isCrouch()){ + player[i].targetanimation=sneakanim; + if(player[i].wasCrouch()) + player[i].target=0; + player[i].targetframe=0; + } + if(player[i].targetanimation==jumpupanim||player[i].targetanimation==jumpdownanim||player[i].isFlip()){ + player[i].velocity-=absflatfacing*5*multiplier; + } + if(player[i].targetanimation==hanganim){ + player[i].currentanimation=jumpdownanim; + player[i].targetanimation=jumpdownanim; + player[i].target=0; + player[i].currentframe=0; + player[i].targetframe=1; + player[i].velocity=0; + player[i].velocity.y+=gravity; + player[i].coords.y-=1.4; + player[i].grabdelay=1; + } + if ( !player[i].leftkeydown&&!player[i].rightkeydown) + player[i].targetrotation+=180; + movekey=1; + } + if((player[i].jumpkeydown&&!player[i].jumpclimb)||player[i].jumpstart){ + if((((player[i].isLanding()&&player[i].targetframe>=3)|| + player[i].isRun()|| + player[i].targetanimation==walkanim|| + player[i].isCrouch()|| + player[i].targetanimation==sneakanim)&& + player[i].jumppower>1)&& + ((player[i].targetanimation!=rabbitrunninganim&& + player[i].targetanimation!=wolfrunninganim)||i!=0)){ + player[i].jumpstart=0; + setAnimation(i,jumpupanim); + player[i].rotation=player[i].targetrotation; + player[i].transspeed=20; + player[i].FootLand(0,1); + player[i].FootLand(1,1); + + facing=0; + facing.z=-1; + flatfacing=DoRotation(facing,0,player[i].targetrotation+180,0); + + if(movekey)player[i].velocity=flatfacing*player[i].speed*45*player[i].scale; + if(!movekey)player[i].velocity=0; + + //Dodge sweep? + target=-2; + if(numplayers>1) + for(int j=0;jcoords)<3&& + player[j].victim==&player[i]&& + (player[j].targetanimation==sweepanim)){ + if(target>=0)target=-1; + else target=j; + } + } + } + if(target>=0)player[i].velocity.y=1; + else if(player[i].crouchkeydown||player[i].aitype!=playercontrolled){ + player[i].velocity.y=7; + player[i].crouchtogglekeydown=1; + } + else player[i].velocity.y=5; + + if(mousejump&&i==0&&debugmode){ + if(!player[i].isLanding())player[i].tempdeltav=deltav; + if(player[i].tempdeltav<0)player[i].velocity.y-=(float)(player[i].tempdeltav)/multiplier/1000; + } + + player[i].coords.y+=.2; + player[i].jumppower-=1; + + if (!i) + emit_sound_at(whooshsound, player[i].coords, 128.); + + emit_sound_at(jumpsound, player[i].coords, 128.); + } + if((player[i].isIdle())&&player[i].jumppower>1){ + setAnimation(i,player[i].getLanding()); + player[i].targetframe=2; + player[i].landhard=0; + player[i].jumpstart=1; + player[i].tempdeltav=deltav; + } + if(player[i].targetanimation==jumpupanim&& + (((!floatjump&& + !editorenabled)|| + !debugmode)|| + player[i].aitype!=playercontrolled)){ + if(player[i].jumppower>multiplier*6){ + player[i].velocity.y+=multiplier*6; + player[i].jumppower-=multiplier*6; + } + if(player[i].jumppower<=multiplier*6){ + player[i].velocity.y+=player[i].jumppower; + player[i].jumppower=0; + } + } + if(((floatjump||editorenabled)&&debugmode)&&i==0)player[i].velocity.y+=multiplier*30; + } + + if(!movekey){ + if(player[i].isRun()||player[i].targetanimation==walkanim) + setAnimation(i,player[i].getStop()); + if(player[i].targetanimation==sneakanim){ + player[i].targetanimation=player[i].getCrouch(); + if(player[i].currentanimation==sneakanim) + player[i].target=0; + player[i].targetframe=0; + } + } + if(player[i].targetanimation==walkanim&& + (player[i].aitype==attacktypecutoff|| + player[i].aitype==searchtype|| + (player[i].aitype==passivetype&& + player[i].numwaypoints<=1))) + setAnimation(i,player[i].getStop()); + if(player[i].isRun()&&(player[i].aitype==passivetype)) + setAnimation(i,player[i].getStop()); + } + } + if(player[i].targetanimation==rollanim) + player[i].targetrotation=oldtargetrotation; + } + + //Rotation + for(int k=0;k180){ + if(player[k].rotation>player[k].targetrotation) + player[k].rotation-=360; + else + player[k].rotation+=360; + } + + //stop to turn in right direction + if(fabs(player[k].rotation-player[k].targetrotation)>90&&(player[k].isRun()||player[k].targetanimation==walkanim)) + setAnimation(k,player[k].getStop()); + + if(player[k].targetanimation==backhandspringanim||player[k].targetanimation==dodgebackanim) + player[k].targettilt=0; + + if(player[k].targetanimation!=jumpupanim&& + player[k].targetanimation!=backhandspringanim&& + player[k].targetanimation!=jumpdownanim&& + !player[k].isFlip()){ + player[k].targettilt=0; + if(player[k].jumppower<0&&!player[k].jumpkeydown) + player[k].jumppower=0; + player[k].jumppower+=multiplier*7; + if(player[k].isCrouch()) + player[k].jumppower+=multiplier*7; + if(player[k].jumppower>5) + player[k].jumppower=5; + } + + if(player[k].isRun()) + player[k].targettilt=(player[k].rotation-player[k].targetrotation)/4; + + player[k].tilt=stepTowardf(player[k].tilt,player[k].targettilt,multiplier*150); + player[k].grabdelay-=multiplier; + } + + //do animations + for(int k=0;k=0;j--){ + envsoundlife[j]-=multiplier; + if(envsoundlife[j]<0){ + numenvsounds--; + envsoundlife[j]=envsoundlife[numenvsounds]; + envsound[j]=envsound[numenvsounds]; + } + } + if(slomo) + OPENAL_SetFrequency(OPENAL_ALL, slomofreq); + else + OPENAL_SetFrequency(OPENAL_ALL, 22050); + + if(tutoriallevel==1){ + XYZ temp; + XYZ temp2; + XYZ temp3; + XYZ oldtemp; + XYZ oldtemp2; + temp.x=1011; + temp.y=84; + temp.z=491; + temp2.x=1025; + temp2.y=75; + temp2.z=447; + temp3.x=1038; + temp3.y=76; + temp3.z=453; + oldtemp=temp; + oldtemp2=temp2; + if(tutorialstage>=51) + if(findDistancefast(&temp,&player[0].coords)>=findDistancefast(&temp,&temp2)-1||findDistancefast(&temp3,&player[0].coords)<4){ + OPENAL_StopSound(OPENAL_ALL); // hack...OpenAL renderer isn't stopping music after tutorial goes to level menu... + OPENAL_SetFrequency(OPENAL_ALL, 0.001); + + emit_stream_np(stream_menutheme); + + gameon=0; + mainmenu=5; + + fireSound(); + + flash(); + } + if(tutorialstage<51) + if(findDistancefast(&temp,&player[0].coords)>=findDistancefast(&temp,&temp2)-1||findDistancefast(&temp3,&player[0].coords)<4){ + emit_sound_at(fireendsound, player[0].coords); + + player[0].coords=(oldtemp+oldtemp2)/2; + + flash(); + } + if(tutorialstage>=14&&tutorialstage<50) + if(findDistancefast(&temp,&player[1].coords)>=findDistancefast(&temp,&temp2)-1||findDistancefast(&temp3,&player[1].coords)<4){ + emit_sound_at(fireendsound, player[1].coords); + + for(int i=0;i90)rotation2=90; - if(rotation2<-70)rotation2=-70; + if(!invertmouse) + rotation2+=deltav*.7; + if(invertmouse) + rotation2-=deltav*.7; + if(rotation2>90) + rotation2=90; + if(rotation2<-70) + rotation2=-70; } - if(mainmenu)rotation+=multiplier*5; - - //} } -void Game::TickOnceAfter(){ +void Game::TickOnceAfter(){ static XYZ colviewer; static XYZ coltarget; static XYZ target; static XYZ col; - static float brotate; static XYZ facing; - static int i,j; static float changedelay; static bool alldead; static float unseendelay; @@ -9242,460 +7491,294 @@ void Game::TickOnceAfter(){ if(!mainmenu){ - if(environment==snowyenvironment)music1=stream_music1snow; - if(environment==grassyenvironment)music1=stream_music1grass; - if(environment==desertenvironment)music1=stream_music1desert; + if(environment==snowyenvironment) + leveltheme=stream_snowtheme; + if(environment==grassyenvironment) + leveltheme=stream_grasstheme; + if(environment==desertenvironment) + leveltheme=stream_deserttheme; realthreat=0; - musictype=music1; - for(i=0;i0){ - musictype=stream_music2; - } + if(unseendelay>0) + musictype=stream_fighttheme; } if(loading==2){ - musictype=stream_music3; + musictype=stream_menutheme; musicvolume[2]=512; musicvolume[0]=0; musicvolume[1]=0; musicvolume[3]=0; } - if(musictoggle){ - if(musictype!=oldmusictype&&musictype==stream_music2){ - static float gLoc[3]; - static float vel[3]; - gLoc[0]=cameraloc.x; - gLoc[1]=cameraloc.y; - gLoc[2]=cameraloc.z; - vel[0]=0; - vel[1]=0; - vel[2]=0; - PlaySoundEx( alarmsound, samp[alarmsound], NULL, true); - OPENAL_SetVolume(channels[alarmsound], 512); - OPENAL_SetPaused(channels[alarmsound], false); - - } - } + if(musictoggle) + if(musictype!=oldmusictype&&musictype==stream_fighttheme) + emit_sound_np(alarmsound); musicselected=musictype; - if(musicselected==music1)musicvolume[0]+=multiplier*450; - else musicvolume[0]-=multiplier*450; - if(musicselected==stream_music2)musicvolume[1]+=multiplier*450; - else musicvolume[1]-=multiplier*450; - if(musicselected==stream_music3)musicvolume[2]+=multiplier*450; - else musicvolume[2]-=multiplier*450; - /* - if(musicselected==music1)musicvolume[0]+=multiplier*100; - else musicvolume[0]-=multiplier*450; - if(musicselected==music2)musicvolume[1]+=multiplier*150; - else if(player[0].dead)musicvolume[1]-=multiplier*450; - else musicvolume[1]-=multiplier*100; - if(musicselected==music3)musicvolume[2]+=multiplier*450; - else musicvolume[2]-=multiplier*450;*/ - - for(i=0;i<3;i++){ - if(musicvolume[i]<0)musicvolume[i]=0; - if(musicvolume[i]>512)musicvolume[i]=512; + if(musicselected==leveltheme) + musicvolume[0]+=multiplier*450; + else + musicvolume[0]-=multiplier*450; + if(musicselected==stream_fighttheme) + musicvolume[1]+=multiplier*450; + else + musicvolume[1]-=multiplier*450; + if(musicselected==stream_menutheme) + musicvolume[2]+=multiplier*450; + else + musicvolume[2]-=multiplier*450; + + for(int i=0;i<3;i++){ + if(musicvolume[i]<0) + musicvolume[i]=0; + if(musicvolume[i]>512) + musicvolume[i]=512; } - if(musicvolume[2]>128&&!loading&&!mainmenu)musicvolume[2]=128; + if(musicvolume[2]>128&&!loading&&!mainmenu) + musicvolume[2]=128; if(musictoggle){ - if(musicvolume[0]>0&&oldmusicvolume[0]<=0){ - PlayStreamEx( music1, strm[music1], NULL, true); - OPENAL_SetPaused(channels[music1], false); - } - if(musicvolume[1]>0&&oldmusicvolume[1]<=0){ - PlayStreamEx( stream_music2, strm[stream_music2], NULL, true); - OPENAL_SetPaused(channels[stream_music2], false); - } - if(musicvolume[2]>0&&oldmusicvolume[2]<=0){ - PlayStreamEx( stream_music3, strm[stream_music3], NULL, true); - OPENAL_SetPaused(channels[stream_music3], false); - } - } - - if(!musictoggle){ - OPENAL_SetPaused(channels[music1], true); - OPENAL_SetPaused(channels[stream_music2], true); - OPENAL_SetPaused(channels[stream_music3], true); + if(musicvolume[0]>0&&oldmusicvolume[0]<=0) + emit_stream_np(leveltheme, musicvolume[0]); + if(musicvolume[1]>0&&oldmusicvolume[1]<=0) + emit_stream_np(stream_fighttheme, musicvolume[1]); + if(musicvolume[2]>0&&oldmusicvolume[2]<=0) + emit_stream_np(stream_menutheme, musicvolume[2]); + if(musicvolume[0]<=0&&oldmusicvolume[0]>0) + pause_sound(leveltheme); + if(musicvolume[1]<=0&&oldmusicvolume[1]>0) + pause_sound(stream_fighttheme); + if(musicvolume[2]<=0&&oldmusicvolume[2]>0) + pause_sound(stream_menutheme); + + if(musicvolume[0]!=oldmusicvolume[0]) + OPENAL_SetVolume(channels[leveltheme], musicvolume[0]); + if(musicvolume[1]!=oldmusicvolume[1]) + OPENAL_SetVolume(channels[stream_fighttheme], musicvolume[1]); + if(musicvolume[2]!=oldmusicvolume[2]) + OPENAL_SetVolume(channels[stream_menutheme], musicvolume[2]); + + for(int i=0;i<3;i++) + oldmusicvolume[i]=musicvolume[i]; + } else { + pause_sound(leveltheme); + pause_sound(stream_fighttheme); + pause_sound(stream_menutheme); - for(i=0;i<4;i++){ + for(int i=0;i<4;i++){ oldmusicvolume[i]=0; musicvolume[i]=0; } } - if(musictoggle){ - if(musicvolume[0]<=0&&oldmusicvolume[0]>0){ - OPENAL_SetPaused(channels[music1], true); - } - if(musicvolume[1]<=0&&oldmusicvolume[1]>0){ - OPENAL_SetPaused(channels[stream_music2], true); + killhotspot=2; + for(int i=0;i10&&hotspottype[i]<20){ + if(player[hotspottype[i]-10].dead==0) + killhotspot=0; + else if(killhotspot==2) + killhotspot=1; } - if(musicvolume[2]<=0&&oldmusicvolume[2]>0){ - OPENAL_SetPaused(channels[stream_music3], true); + } + if(killhotspot==2) + killhotspot=0; + + + winhotspot=0; + for(int i=0;imaxalarmed) + maxalarmed=numalarmed; + + if(changedelay<=0&&!loading&&!editorenabled&&gameon&&!tutoriallevel&&changedelay!=-999&&!won){ + if(player[0].dead&&changedelay<=0){ + changedelay=1; + targetlevel=whichlevel; } + alldead=1; + for(int i=1;inumchallengelevels-1)targetlevel=0; } - if(musicvolume[2]!=oldmusicvolume[2]){ - OPENAL_SetVolume(channels[stream_music3], musicvolume[2]); + if(winhotspot||windialogue){ + changedelay=0.1; + targetlevel=whichlevel+1; + if(targetlevel>numchallengelevels-1)targetlevel=0; } - for(i=0;i<3;i++){ - oldmusicvolume[i]=musicvolume[i]; - } - } - killhotspot=2; - if(numhotspots) - for(i=0;i10&&hotspottype[i]<20){ - if(player[hotspottype[i]-10].dead==0){ - killhotspot=0; - } - else if(killhotspot==2) - killhotspot=1; - } + if(killhotspot){ + changedelay=1; + targetlevel=whichlevel+1; + if(targetlevel>numchallengelevels-1)targetlevel=0; } - if(killhotspot==2)killhotspot=0; - - winhotspot=0; - if(numhotspots) - for(i=0;i0&&!player[0].dead&&!won) { + //high scores, awards, win + if(campaign) { + accountactive->winCampaignLevel(whichchoice, bonustotal, leveltime); + scoreadded=1; + } else { + accountactive->winLevel(whichlevel,bonustotal-startbonustotal,leveltime); } + won=1; + } + } - int numalarmed=0; - if(numplayers>1) - for(i=1;imaxalarmed)maxalarmed=numalarmed; - - if(changedelay<=0&&!loading&&!editorenabled&&gameon&&!tutoriallevel&&changedelay!=-999&&!won){ - if(player[0].dead&&changedelay<=0){ - changedelay=1; - targetlevel=whichlevel; - } - alldead=1; - if(numplayers>1) - for(i=1;inumchallengelevels-1)targetlevel=0; - } - if(winhotspot||windialogue){ - changedelay=0.1; - targetlevel=whichlevel+1; - if(targetlevel>numchallengelevels-1)targetlevel=0; - } + if(leveltime<1){ + loading=0; + changedelay=.1; + alldead=0; + winhotspot=0; + killhotspot=0; + } + if(!editorenabled&&gameon&&!mainmenu) { + if(changedelay!=-999) + changedelay-=multiplier/7; + if(player[0].dead) + targetlevel=whichlevel; + if(loading==2&&!campaign){ + flash(); - if(killhotspot){ - changedelay=1; - targetlevel=whichlevel+1; - if(targetlevel>numchallengelevels-1)targetlevel=0; - } + fireSound(firestartsound); - if(changedelay>0&&!player[0].dead&&!won){ - //high scores, awards, win - if(campaign){ - won=1; - accountcampaignchoices[accountactive][accountcampaignchoicesmade[accountactive]]=whichchoice; - accountcampaignchoicesmade[accountactive]++; - accountcampaignscore[accountactive]+=bonustotal; - scoreadded=1; - accountcampaigntime[accountactive]+=leveltime; - if(accountcampaignscore[accountactive]>accountcampaignhighscore[accountactive])accountcampaignhighscore[accountactive]=accountcampaignscore[accountactive]; - - //if(accountprogress[accountactive]accounthighscore[accountactive][whichlevel])accounthighscore[accountactive][whichlevel]=bonustotal-startbonustotal; - if(accountfasttime[accountactive][whichlevel]==0||leveltimegetCampaignChoicesMade()].mapname.c_str()); - OPENAL_Sample_SetMinMaxDistance(samp[fireendsound], 9999.0f, 99999.0f); - PlaySoundEx( fireendsound, samp[fireendsound], NULL, true); - OPENAL_3D_SetAttributes(channels[fireendsound], gLoc, vel); - OPENAL_SetVolume(channels[fireendsound], 256); - OPENAL_SetPaused(channels[fireendsound], false); - OPENAL_Sample_SetMinMaxDistance(samp[fireendsound], 8.0f, 2000.0f); + fireSound(); - loading=3; - } - if(loading==2&&targetlevel==whichlevel){ - flashr=1; - flashg=0; - flashb=0; - flashamount=1; - flashdelay=1; - loadtime=0; - - float gLoc[3]={0,0,0}; - float vel[3]={0,0,0}; - OPENAL_Sample_SetMinMaxDistance(samp[firestartsound], 9999.0f, 99999.0f); - PlaySoundEx( firestartsound, samp[firestartsound], NULL, true); - OPENAL_3D_SetAttributes(channels[firestartsound], gLoc, vel); - OPENAL_SetVolume(channels[firestartsound], 256); - OPENAL_SetPaused(channels[firestartsound], false); - OPENAL_Sample_SetMinMaxDistance(samp[firestartsound], 8.0f, 2000.0f); - - for(i=0;i<255;i++){ - mapname[i]='\0'; - } - mapname[0]=':'; - mapname[1]='D'; - mapname[2]='a'; - mapname[3]='t'; - mapname[4]='a'; - mapname[5]=':'; - mapname[6]='M'; - mapname[7]='a'; - mapname[8]='p'; - mapname[9]='s'; - mapname[10]=':'; - strcat(mapname,campaignmapname[levelorder[accountcampaignchoicesmade[accountactive]]]);//[campaignchoicewhich[whichchoice]]); - Loadlevel(mapname); - - OPENAL_Sample_SetMinMaxDistance(samp[fireendsound], 9999.0f, 99999.0f); - PlaySoundEx( fireendsound, samp[fireendsound], NULL, true); - OPENAL_3D_SetAttributes(channels[fireendsound], gLoc, vel); - OPENAL_SetVolume(channels[fireendsound], 256); - OPENAL_SetPaused(channels[fireendsound], false); - OPENAL_Sample_SetMinMaxDistance(samp[fireendsound], 8.0f, 2000.0f); - - loading=3; - } - if(changedelay<=-999&&whichlevel!=-2&&!loading&&(player[0].dead||(alldead&&maptype==mapkilleveryone)||(winhotspot)||(killhotspot))&&!winfreeze)loading=1; - if((player[0].dead||(alldead&&maptype==mapkilleveryone)||(winhotspot)||(windialogue)||(killhotspot))&&changedelay<=0){ - { - if(whichlevel!=-2&&!loading&&!player[0].dead){ - winfreeze=1; - changedelay=-999; - } - if(player[0].dead)loading=1; - } - } - } + loading=3; + } + if(changedelay<=-999&& + whichlevel!=-2&& + !loading&& + (player[0].dead|| + (alldead&&maptype==mapkilleveryone)|| + (winhotspot)|| + (killhotspot))) + loading=1; + if((player[0].dead|| + (alldead&&maptype==mapkilleveryone)|| + (winhotspot)|| + (windialogue)|| + (killhotspot))&& + changedelay<=0) { + if(whichlevel!=-2&&!loading&&!player[0].dead) { + winfreeze=true; + changedelay=-999; + } + if(player[0].dead) + loading=1; + } + } - if(campaign) - if(mainmenu==0&&winfreeze&&(campaignchoosenext[campaignchoicewhich[whichchoice]])==1){ - if(campaignnumnext[campaignchoicewhich[whichchoice]]==0){ - endgame=1; - } - } - else if(mainmenu==0&&winfreeze){ - if(campaignchoosenext[campaignchoicewhich[whichchoice]]==2) - stealthloading=1; - else stealthloading=0; - - if(!stealthloading){ - float gLoc[3]={0,0,0}; - float vel[3]={0,0,0}; - OPENAL_Sample_SetMinMaxDistance(samp[firestartsound], 9999.0f, 99999.0f); - PlaySoundEx( firestartsound, samp[firestartsound], NULL, true); - OPENAL_3D_SetAttributes(channels[firestartsound], gLoc, vel); - OPENAL_SetVolume(channels[firestartsound], 256); - OPENAL_SetPaused(channels[firestartsound], false); - OPENAL_Sample_SetMinMaxDistance(samp[firestartsound], 8.0f, 2000.0f); - - flashr=1; - flashg=0; - flashb=0; - flashamount=1; - flashdelay=1; - } + if(campaign) { + // campaignchoosenext determines what to do when the level is complete: + // 0 = load next level + // 1 = go back to level select screen + // 2 = stealthload next level + if(mainmenu==0&&winfreeze&&(campaignlevels[actuallevel].choosenext)==1) { + if(campaignlevels[actuallevel].nextlevel.empty()) + endgame=1; + } else if(mainmenu==0&&winfreeze) { + stealthloading = (campaignlevels[actuallevel].choosenext==2); - startbonustotal=0; - - ifstream ipstream(ConvertFileName(":Data:Campaigns:main.txt")); - //campaignnumlevels=0; - //accountcampaignchoicesmade[accountactive]=0; - ipstream.ignore(256,':'); - ipstream >> campaignnumlevels; - for(i=0;i> campaignmapname[i]; - ipstream.ignore(256,':'); - ipstream >> campaigndescription[i]; - for(j=0;j<256;j++){ - if(campaigndescription[i][j]=='_')campaigndescription[i][j]=' '; - } - ipstream.ignore(256,':'); - ipstream >> campaignchoosenext[i]; - ipstream.ignore(256,':'); - ipstream >> campaignnumnext[i]; - if(campaignnumnext[i]) - for(j=0;j> campaignnextlevel[i][j]; - campaignnextlevel[i][j]-=1; - } - ipstream.ignore(256,':'); - ipstream >> campaignlocationx[i]; - ipstream.ignore(256,':'); - ipstream >> campaignlocationy[i]; - } - ipstream.close(); + if(!stealthloading){ + fireSound(firestartsound); - for(i=0;itarget.y) target.y=player[0].skeleton.joints[i].position.y*player[0].scale+player[0].coords.y; } @@ -9738,27 +7820,25 @@ void Game::TickOnceAfter(){ coltarget=cameraloc; objects.SphereCheckPossible(&colviewer, findDistance(&colviewer,&coltarget)); if(terrain.patchobjectnum[player[0].whichpatchx][player[0].whichpatchz]) - for(j=0;j.8)camerashake=.8; //if(woozy>10)woozy=10; @@ -9823,3 +7901,4 @@ void Game::TickOnceAfter(){ } } } +