/* Copyright (C) 2003, 2010 - Wolfire Games This file is part of Lugaru. Lugaru is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #if PLATFORM_UNIX #include #include #include #else #include #endif #include #include "Game.h" #include "openal_wrapper.h" using namespace std; 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; extern float texdetail; extern Objects objects; 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; extern float precipdelay; extern XYZ viewerfacing; 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; 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 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; extern float skyboxb; extern float skyboxlightr; extern float skyboxlightg; extern float skyboxlightb; extern float fadestart; extern float slomospeed; extern float slomofreq; extern int tutoriallevel; extern float smoketex; extern float tutorialstagetime; extern int tutorialstage; extern float tutorialmaxtime; extern float tutorialsuccess; extern bool againbonus; 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; extern bool gamestarted; extern int numhotspots; extern int winhotspot; extern int windialogue; extern int killhotspot; extern XYZ hotspot[40]; extern int hotspottype[40]; 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", ":Data:Textures:Fur2.jpg", ":Data:Textures:Lynx.jpg", ":Data:Textures:Otter.jpg", ":Data:Textures:Opal.jpg", ":Data:Textures:Sable.jpg", ":Data:Textures:Chocolate.jpg", ":Data:Textures:BW2.jpg", ":Data:Textures:WB2.jpg" }; static const char *wolfskin[] = { ":Data:Textures:Wolf.jpg", ":Data:Textures:Darkwolf.jpg", ":Data:Textures:Snowwolf.jpg" }; #define STATIC_ASSERT(x) extern int s_a_dummy[2 * (!!(x)) - 1]; STATIC_ASSERT (rabbittype == 0 && wolftype == 1) static const char **creatureskin[] = {rabbitskin, wolfskin}; /********************> Tick() <*****/ 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); extern void ScreenShot(const char * fname); void Screenshot (void) { char temp[1024]; time_t t = time(NULL); struct tm *tme = localtime(&t); sprintf(temp, "Screenshots\\Screenshot_%04d_%02d_%02d--%02d_%02d_%02d.png", tme->tm_year + 1900, tme->tm_mon + 1, tme->tm_mday, tme->tm_hour, tme->tm_min, tme->tm_sec); #if defined(_WIN32) mkdir("Screenshots"); #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;*/ } 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; } 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; */ } int Game::findPathDist(int start,int end){ int i,j,k,smallestcount,count,connected; int last,last2,last3,last4; int closest; smallestcount=1000; for(i=0;i<50;i++){ count=0; last=start; last2=-1; last3=-1; 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].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].z1)texdetail=4; skybox.load( ":Data:Textures:Skybox(snow):Front.jpg", ":Data:Textures:Skybox(snow):Left.jpg", ":Data:Textures:Skybox(snow):Back.jpg", ":Data:Textures:Skybox(snow):Right.jpg", ":Data:Textures:Skybox(snow):Up.jpg", ":Data:Textures:Skybox(snow):Down.jpg", ":Data:Textures:Skybox(snow):Cloud.jpg", ":Data:Textures:Skybox(snow):Reflect.jpg"); texdetail=temptexdetail; } if(environment==desertenvironment){ windvector=0; windvector.z=2; LoadTexture(":Data:Textures:deserttree.png",&objects.treetextureptr,0,1); LoadTexture(":Data:Textures:bushdesert.png",&objects.bushtextureptr,0,1); LoadTexture(":Data:Textures:boulderdesert.jpg",&objects.rocktextureptr,1,0); LoadTexture(":Data:Textures:desertbox.jpg",&objects.boxtextureptr,1,0); if(ambientsound){ //PlaySoundEx( desertambient, samp[desertambient], NULL, true); PlayStreamEx( stream_desertambient, strm[stream_desertambient], NULL, true); OPENAL_SetPaused(channels[stream_desertambient], false); OPENAL_SetVolume(channels[stream_desertambient], 256); } OPENAL_Sample_Free(samp[footstepsound]); OPENAL_Sample_Free(samp[footstepsound2]); OPENAL_Sample_Free(samp[footstepsound3]); OPENAL_Sample_Free(samp[footstepsound4]); samp[footstepsound] = OPENAL_Sample_Load(OPENAL_FREE, ConvertFileName(":Data:Sounds:footstepsnow1.ogg"), OPENAL_HW3D, 0, 0); samp[footstepsound2] = OPENAL_Sample_Load(OPENAL_FREE, ConvertFileName(":Data:Sounds:footstepsnow2.ogg"), OPENAL_HW3D, 0, 0); samp[footstepsound3] = OPENAL_Sample_Load(OPENAL_FREE, ConvertFileName(":Data:Sounds:footstepsnow1.ogg"), OPENAL_HW3D, 0, 0); samp[footstepsound4] = OPENAL_Sample_Load(OPENAL_FREE, ConvertFileName(":Data:Sounds:footstepsnow2.ogg"), OPENAL_HW3D, 0, 0); OPENAL_Sample_SetMinMaxDistance(samp[footstepsound], 4.0f, 1000.0f); OPENAL_Sample_SetMinMaxDistance(samp[footstepsound2], 4.0f, 1000.0f); OPENAL_Sample_SetMinMaxDistance(samp[footstepsound3], 4.0f, 1000.0f); OPENAL_Sample_SetMinMaxDistance(samp[footstepsound4], 4.0f, 1000.0f); LoadTexture(":Data:Textures:sand.jpg",&terraintexture,1,0); LoadTexture(":Data:Textures:sandslope.jpg",&terraintexture2,1,0); //LoadTexture(":Data:Textures:detailgrain.png",&terraintexture3,1); temptexdetail=texdetail; if(texdetail>1)texdetail=4; skybox.load( ":Data:Textures:Skybox(sand):Front.jpg", ":Data:Textures:Skybox(sand):Left.jpg", ":Data:Textures:Skybox(sand):Back.jpg", ":Data:Textures:Skybox(sand):Right.jpg", ":Data:Textures:Skybox(sand):Up.jpg", ":Data:Textures:Skybox(sand):Down.jpg", ":Data:Textures:Skybox(sand):Cloud.jpg", ":Data:Textures:Skybox(sand):Reflect.jpg"); texdetail=temptexdetail; } if(environment==grassyenvironment){ windvector=0; windvector.z=2; LoadTexture(":Data:Textures:tree.png",&objects.treetextureptr,0,1); LoadTexture(":Data:Textures:bush.png",&objects.bushtextureptr,0,1); LoadTexture(":Data:Textures:boulder.jpg",&objects.rocktextureptr,1,0); LoadTexture(":Data:Textures:grassbox.jpg",&objects.boxtextureptr,1,0); if(ambientsound){ PlayStreamEx( stream_wind, strm[stream_wind], NULL, true); OPENAL_SetPaused(channels[stream_wind], false); OPENAL_SetVolume(channels[stream_wind], 100); } OPENAL_Sample_Free(samp[footstepsound]); OPENAL_Sample_Free(samp[footstepsound2]); OPENAL_Sample_Free(samp[footstepsound3]); OPENAL_Sample_Free(samp[footstepsound4]); samp[footstepsound] = OPENAL_Sample_Load(OPENAL_FREE, ConvertFileName(":Data:Sounds:footstepgrass1.ogg"), OPENAL_HW3D, 0, 0); samp[footstepsound2] = OPENAL_Sample_Load(OPENAL_FREE, ConvertFileName(":Data:Sounds:footstepgrass2.ogg"), OPENAL_HW3D, 0, 0); samp[footstepsound3] = OPENAL_Sample_Load(OPENAL_FREE, ConvertFileName(":Data:Sounds:footstepstone1.ogg"), OPENAL_HW3D, 0, 0); samp[footstepsound4] = OPENAL_Sample_Load(OPENAL_FREE, ConvertFileName(":Data:Sounds:footstepstone2.ogg"), OPENAL_HW3D, 0, 0); OPENAL_Sample_SetMinMaxDistance(samp[footstepsound], 4.0f, 1000.0f); OPENAL_Sample_SetMinMaxDistance(samp[footstepsound2], 4.0f, 1000.0f); OPENAL_Sample_SetMinMaxDistance(samp[footstepsound3], 4.0f, 1000.0f); OPENAL_Sample_SetMinMaxDistance(samp[footstepsound4], 4.0f, 1000.0f); LoadTexture(":Data:Textures:grassdirt.jpg",&terraintexture,1,0); LoadTexture(":Data:Textures:mossrock.jpg",&terraintexture2,1,0); //LoadTexture(":Data:Textures:detail.png",&terraintexture3,1); temptexdetail=texdetail; if(texdetail>1)texdetail=4; skybox.load( ":Data:Textures:Skybox(grass):Front.jpg", ":Data:Textures:Skybox(grass):Left.jpg", ":Data:Textures:Skybox(grass):Back.jpg", ":Data:Textures:Skybox(grass):Right.jpg", ":Data:Textures:Skybox(grass):Up.jpg", ":Data:Textures:Skybox(grass):Down.jpg", ":Data:Textures:Skybox(grass):Cloud.jpg", ":Data:Textures:Skybox(grass):Reflect.jpg"); texdetail=temptexdetail; } temptexdetail=texdetail; texdetail=1; terrain.load(":Data:Textures:heightmap.png"); texdetail=temptexdetail; } void Game::Loadlevel(int which){ stealthloading=0; if(which==0)Loadlevel((char *)":Data:Maps:map1"); else if(which==1)Loadlevel((char *)":Data:Maps:map2"); else if(which==2)Loadlevel((char *)":Data:Maps:map3"); else if(which==3)Loadlevel((char *)":Data:Maps:map4"); else if(which==4)Loadlevel((char *)":Data:Maps:map5"); else if(which==5)Loadlevel((char *)":Data:Maps:map6"); else if(which==6)Loadlevel((char *)":Data:Maps:map7"); else if(which==7)Loadlevel((char *)":Data:Maps:map8"); else if(which==8)Loadlevel((char *)":Data:Maps:map9"); else if(which==9)Loadlevel((char *)":Data:Maps:map10"); else if(which==10)Loadlevel((char *)":Data:Maps:map11"); else if(which==11)Loadlevel((char *)":Data:Maps:map12"); else if(which==12)Loadlevel((char *)":Data:Maps:map13"); else if(which==13)Loadlevel((char *)":Data:Maps:map14"); else if(which==14)Loadlevel((char *)":Data:Maps:map15"); else if(which==15)Loadlevel((char *)":Data:Maps:map16"); else if(which==-1){tutoriallevel=-1;Loadlevel((char *)":Data:Maps:tutorial");} else Loadlevel((char *)":Data:Maps:mapsave"); whichlevel=which; } /*char * Game::MD5_string (unsigned char *string){ char temp[50]; char temp2[100]; strcpy(temp2,(const char *)string); strcat((char *)temp2,(const char *)"Lugaru"); sprintf (temp, "%d",strlen((char *)temp2)); strcat((char *)temp2,temp); MD5 context; unsigned int len = strlen ( (char *)temp2); context.update ((unsigned char *)temp2, len); context.finalize (); return context.hex_digest(); }*/ void Game::Loadlevel(char *name){ int i,j,k,l,m; static int oldlevel; int templength; float lamefloat; int lameint; float headprop,legprop,armprop,bodyprop; LOGFUNC; LOG(std::string("Loading level...") + name); 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){ tutorialstagetime=0; tutorialmaxtime=1; } loadingstuff=1; if(!firstload){ oldlevel=50; } OPENAL_SetPaused(channels[whooshsound], true); OPENAL_SetPaused(channels[stream_firesound], true); // Change the map filename into something that is os specific char *FixedFN = ConvertFileName(name); int mapvers; FILE *tfile; tfile=fopen( FixedFN, "rb" ); if(tfile) { OPENAL_SetPaused(channels[stream_firesound], true); scoreadded=0; windialogue=0; hostiletime=0; won=0; //campaign=0; animation[bounceidleanim].Load((char *)":Data:Animations:Idle",middleheight,neutral); numdialogues=0; for(i=0;i<20;i++) { dialoguegonethrough[i]=0; } indialogue=-1; cameramode=0; damagedealt=0; damagetaken=0; if(accountactive!=-1)difficulty=accountdifficulty[accountactive]; if(difficulty!=2)minimap=1; else minimap=0; numhotspots=0; currenthotspot=-1; bonustime=1; skyboxtexture=1; skyboxr=1; skyboxg=1; skyboxb=1; freeze=0; winfreeze=0; for(i=0;i<100;i++) { bonusnum[i]=0; } numfalls=0; numflipfail=0; numseen=0; numstaffattack=0; numswordattack=0; numknifeattack=0; numunarmedattack=0; numescaped=0; numflipped=0; numwallflipped=0; numthrowkill=0; numafterkill=0; numreversals=0; numattacks=0; maxalarmed=0; numresponded=0; bonustotal=startbonustotal; bonus=0; gameon=1; changedelay=0; if(console) { PlaySoundEx( consolesuccesssound, samp[consolesuccesssound], NULL, true); OPENAL_SetVolume(channels[consolesuccesssound], 256); OPENAL_SetPaused(channels[consolesuccesssound], false); freeze=0; console=0; } 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); else { viewdistance=100; fadestart=.6; } 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 { 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); 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 { player[0].whichskin=0; player[0].creature=rabbittype; } for(i=0;i=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;m=7) { funpackf(tfile, "Bi", &numhotspots); if(numhotspots) { for(i=0;imaxdistance) { whichclosest=i; maxdistance=tempdist; } } objects.radius=fast_sqrt(maxdistance); } if(visibleloading){loadscreencolor=4; LoadingScreen();} //mapcenter=objects.center; //mapradius=objects.radius; funpackf(tfile, "Bi", &numplayers); int howmanyremoved=0; bool removeanother=0; if(numplayers>1&&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; 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;j=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; 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 { headprop=1; bodyprop=1; armprop=1; legprop=1; } 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) { player[i-howmanyremoved].proportionhead=1.2*headprop; player[i-howmanyremoved].proportionbody=1.05*bodyprop; player[i-howmanyremoved].proportionarms=1.00*armprop; player[i-howmanyremoved].proportionlegs=1.1*legprop; player[i-howmanyremoved].proportionlegs.y=1.05*legprop; } 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;i20) OPENAL_StopSound(i); } */ LOG("Starting background music..."); OPENAL_StopSound(OPENAL_ALL); if(environment==snowyenvironment) { if(ambientsound) { PlayStreamEx(stream_wind, strm[stream_wind], NULL, true); OPENAL_SetPaused(channels[stream_wind], false); OPENAL_SetVolume(channels[stream_wind], 256); } } else if(environment==desertenvironment) { if(ambientsound) { //PlaySoundEx(desertambient, // samp[desertambient], NULL, true); PlayStreamEx(stream_desertambient, strm[stream_desertambient], NULL, true); OPENAL_SetPaused(channels[stream_desertambient], false); OPENAL_SetVolume(channels[stream_desertambient], 256); } } else if(environment==grassyenvironment) { if(ambientsound) { //PlaySoundEx(wind, samp[wind], NULL, true); PlayStreamEx(stream_wind, strm[stream_wind], NULL, true); OPENAL_SetPaused(channels[stream_wind], false); OPENAL_SetVolume(channels[stream_wind], 100); } } oldmusicvolume[0]=0; oldmusicvolume[1]=0; oldmusicvolume[2]=0; oldmusicvolume[3]=0; /*LoadTexture(":Data:Textures:cloud.png",&sprites.cloudtexture,1,1); LoadTexture(":Data:Textures:cloudimpact.png",&sprites.cloudimpacttexture,1,1); LoadTexture(":Data:Textures:bloodparticle.png",&sprites.bloodtexture,1,1); LoadTexture(":Data:Textures:snowflake.png",&sprites.snowflaketexture,1,1); LoadTexture(":Data:Textures:flame.png",&sprites.flametexture,1,1); LoadTexture(":Data:Textures:bloodflame.png",&sprites.bloodflametexture,1,1); LoadTexture(":Data:Textures:smoke.png",&sprites.smoketexture,1,1); LoadTexture(":Data:Textures:shine.png",&sprites.shinetexture,1,0); */ if(!firstload) { firstload=1; } } leveltime=0; loadingstuff=0; visibleloading=0; } void Game::Tick() { static int i,k,j,l,m; static XYZ facing,flatfacing,absflatfacing; static XYZ rotatetarget; static bool oldkey; static float oldtargetrotation; static int target, numgood; static XYZ tempcoords1,tempcoords2; static XYZ test; static XYZ test2; static XYZ lowpoint,lowpointtarget,lowpoint2,lowpointtarget2,lowpoint3,lowpointtarget3,lowpoint4,lowpointtarget4,lowpoint5,lowpointtarget5,lowpoint6,lowpointtarget6,lowpoint7,lowpointtarget7,colpoint,colpoint2; static int whichhit; static bool donesomething; static bool oldjumpkeydown; int templength; float headprop,bodyprop,armprop,legprop; for(i=0;i<15;i++){ displaytime[i]+=multiplier; } static unsigned char theKeyMap[16]; GetKeys( theKeyMap ); keyboardfrozen=0; static bool mainmenutogglekeydown; if(!console){ if(mainmenu&&endgame==1)mainmenu=10; if(IsKeyDown(theKeyMap, MAC_ESCAPE_KEY)&&!mainmenutogglekeydown&&(mainmenu==7&&entername)){ for(j=0;j<255;j++){ displaytext[0][j]=' '; } displaychars[0]=0; displayselected=0; entername=0; mainmenutogglekeydown=1; } if((IsKeyDown(theKeyMap, MAC_ESCAPE_KEY)||(mainmenu==0&&((IsKeyDown(theKeyMap, jumpkey)||IsKeyDown(theKeyMap, MAC_SPACE_KEY)||(campaign)))&&!oldjumpkeydown&&campaign&&winfreeze))&&!mainmenutogglekeydown&&(!mainmenu||gameon||mainmenu==3||mainmenu==4||mainmenu==5||mainmenu==6||(mainmenu==7&&!entername)||mainmenu==9||mainmenu==11||mainmenu==13||mainmenu==17||mainmenu==10)){ selected=-1; if(mainmenu==1||mainmenu==2||mainmenu==0){ if(mainmenu==0&&!winfreeze)mainmenu=2; else if(mainmenu==0&&winfreeze&&(campaignchoosenext[campaignchoicewhich[whichchoice]])==1)mainmenu=100; 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; } startbonustotal=0; for(i=0;i2)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(); } 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; 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(); 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&&selected2)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(); } } if(mainmenu==1||mainmenu==2){ if(loaddistrib>4)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&&displayselected.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&&consoleselected32)numchars=32; for(j=5;j0){ 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]=' '; } if(v!=-4994)sprintf (consoletext[0], "Error #%d!!!",v); else sprintf (consoletext[0], "Could not open connection"); consolechars[0]=255; consoleselected=0; } } else { donesomething=1; PlaySoundEx( consolesuccesssound, samp[consolesuccesssound], NULL, true); OPENAL_SetVolume(channels[consolesuccesssound], 256); OPENAL_SetPaused(channels[consolesuccesssound], false); if(consolechars[0]>0){ 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]=' '; } sprintf (consoletext[0], "Connected to %s",theIPAddress); consolechars[0]=255; consoleselected=0; } } } if(Compare(consoletext[0],"host ",0,4)){ unsigned char gameNameStr[32], playerNameStr[32]; char gameName[32];//, playerName[32]; NMUInt32 port; int players; int v; port = 25710; players =4; strcpy(gameName, "Host's game"); strcpy(playerName, "Host"); GameC2PStr( gameName, gameNameStr ); GameC2PStr( playerName, playerNameStr ); v=NetworkStartServer( (NMUInt16)port, players, gameNameStr, playerNameStr ); if(v) { if(consolechars[0]>0){ 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]=' '; } sprintf (consoletext[0], "Error #%d!!!",v); consolechars[0]=255; consoleselected=0; } } else { donesomething=1; PlaySoundEx( consolesuccesssound, samp[consolesuccesssound], NULL, true); OPENAL_SetVolume(channels[consolesuccesssound], 256); OPENAL_SetPaused(channels[consolesuccesssound], false); if(consolechars[0]>0){ 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]=' '; } sprintf (consoletext[0], "Game hosted"); consolechars[0]=255; consoleselected=0; } } } */ if(Compare(consoletext[0],"save ",0,4)){ 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]=':'; for(j=5;j0&&player[0].num_weapons<5) for(j=0;j1&&numplayers0&&player[j].num_weapons<5) for(k=0;k0&&player[0].num_weapons<5) for(j=0;j1&&numplayers0&&player[j].num_weapons<5) for(k=0;k0&&player[0].num_weapons<5) for(j=0;j1&&numplayers0&&player[j].num_weapons<5) for(k=0;k1) for(i=1;i1) for(i=1;i> numdialogueboxes[numdialogues]; for(i=0;i> dialogueboxlocation[numdialogues][i]; ipstream.ignore(256,':'); ipstream >> dialogueboxcolor[numdialogues][i][0]; ipstream >> dialogueboxcolor[numdialogues][i][1]; ipstream >> dialogueboxcolor[numdialogues][i][2]; ipstream.ignore(256,':'); ipstream.getline(dialoguename[numdialogues][i],64); ipstream.ignore(256,':'); ipstream.ignore(256,' '); ipstream.getline(dialoguetext[numdialogues][i],128); for(j=0;j<128;j++){ if(dialoguetext[numdialogues][i][j]=='\\')dialoguetext[numdialogues][i][j]='\n'; } ipstream.ignore(256,':'); ipstream >> dialogueboxsound[numdialogues][i]; } for(i=0;i> numdialogueboxes[whichdi]; for(i=0;i> dialogueboxlocation[whichdi][i]; ipstream.ignore(256,':'); ipstream >> dialogueboxcolor[whichdi][i][0]; ipstream >> dialogueboxcolor[whichdi][i][1]; ipstream >> dialogueboxcolor[whichdi][i][2]; ipstream.ignore(256,':'); ipstream.getline(dialoguename[whichdi][i],64); ipstream.ignore(256,':'); ipstream.ignore(256,' '); ipstream.getline(dialoguetext[whichdi][i],128); for(j=0;j<128;j++){ if(dialoguetext[whichdi][i][j]=='\\')dialoguetext[whichdi][i][j]='\n'; } ipstream.ignore(256,':'); ipstream >> dialogueboxsound[whichdi][i]; } ipstream.close(); donesomething=1; } if(Compare(consoletext[0],"fixtype ",0,7)){ int startpoint; int alldone; int whichdi; alldone=0; startpoint=8; j=startpoint; while(consoletext[0][j]!='\0'&&consoletext[0][j]!=' '&&!alldone&&j<255){ mapname[j-startpoint]=consoletext[0][j]; j++; if(consoletext[0][j]=='\0')alldone=1; } mapname[j-startpoint]='\0'; dialoguetype[0]=atoi(mapname); startpoint=j+1; donesomething=1; } if(Compare(consoletext[0],"fixrotation ",0,11)){ participantrotation[whichdialogue][participantfocus[whichdialogue][indialogue]]=player[participantfocus[whichdialogue][indialogue]].rotation; donesomething=1; } if(Compare(consoletext[0],"ddialogue ",0,9)){ numdialogues--; if(numdialogues<0)numdialogues=0; donesomething=1; } if(Compare(consoletext[0],"immobile ",0,8)){ player[0].immobile=1; donesomething=1; } if(Compare(consoletext[0],"mobile ",0,6)){ player[0].immobile=0; donesomething=1; } if(Compare(consoletext[0],"play ",0,4)){ int startpoint; int alldone; alldone=0; startpoint=5; j=startpoint; while(consoletext[0][j]!='\0'&&consoletext[0][j]!=' '&&!alldone&&j<255){ mapname[j-startpoint]=consoletext[0][j]; j++; if(consoletext[0][j]=='\0')alldone=1; } mapname[j-startpoint]='\0'; startpoint=j+1; whichdialogue=atoi(mapname); if(numdialogues>whichdialogue){ for(i=0;i0)player[i].immobile=1; } donesomething=1; } if(Compare(consoletext[0],"default ",0,7)||Compare(consoletext[0],"Default ",0,7)){ player[0].armorhead=1; player[0].armorhigh=1; player[0].armorlow=1; player[0].protectionhead=1; player[0].protectionhigh=1; player[0].protectionlow=1; player[0].metalhead=1; player[0].metalhigh=1; player[0].metallow=1; player[0].power=1; player[0].speedmult=1; player[0].scale=1; if(player[0].creature==wolftype){ player[0].proportionhead=1.1; player[0].proportionbody=1.1; player[0].proportionarms=1.1; player[0].proportionlegs=1.1; } if(player[0].creature==rabbittype){ player[0].proportionhead=1.2; player[0].proportionbody=1.05; player[0].proportionarms=1.00; player[0].proportionlegs=1.1; player[0].proportionlegs.y=1.05; } player[0].numclothes=0; LoadTextureSave(creatureskin[player[0].creature][player[0].whichskin], &player[0].skeleton.drawmodel.textureptr,1,&player[0].skeleton.skinText[0],&player[0].skeleton.skinsize); editoractive=typeactive; player[0].immobile=0; donesomething=1; } if(Compare(consoletext[0],"tint ",0,4)||Compare(consoletext[0],"Tint ",0,4)){ int startpoint; int alldone; alldone=0; startpoint=5; j=startpoint; while(consoletext[0][j]!='\0'&&consoletext[0][j]!=' '&&!alldone&&j<255){ mapname[j-startpoint]=consoletext[0][j]; j++; if(consoletext[0][j]=='\0')alldone=1; } mapname[j-startpoint]='\0'; tintr=atof(mapname); j++; startpoint=j; while(consoletext[0][j]!='\0'&&consoletext[0][j]!=' '&&!alldone&&j<255){ mapname[j-startpoint]=consoletext[0][j]; j++; if(consoletext[0][j]=='\0')alldone=1; } mapname[j-startpoint]='\0'; tintg=atof(mapname); j++; startpoint=j; while(consoletext[0][j]!='\0'&&consoletext[0][j]!=' '&&!alldone&&j<255){ mapname[j-startpoint]=consoletext[0][j]; j++; if(consoletext[0][j]=='\0')alldone=1; } mapname[j-startpoint]='\0'; tintb=atof(mapname); donesomething=1; } if(Compare(consoletext[0],"sky tint ",0,8)||Compare(consoletext[0],"Sky Tint ",0,8)){ int startpoint; int alldone; alldone=0; startpoint=9; j=startpoint; while(consoletext[0][j]!='\0'&&consoletext[0][j]!=' '&&!alldone&&j<255){ mapname[j-startpoint]=consoletext[0][j]; j++; if(consoletext[0][j]=='\0')alldone=1; } mapname[j-startpoint]='\0'; skyboxr=atof(mapname); j++; startpoint=j; while(consoletext[0][j]!='\0'&&consoletext[0][j]!=' '&&!alldone&&j<255){ mapname[j-startpoint]=consoletext[0][j]; j++; if(consoletext[0][j]=='\0')alldone=1; } mapname[j-startpoint]='\0'; skyboxg=atof(mapname); j++; startpoint=j; while(consoletext[0][j]!='\0'&&consoletext[0][j]!=' '&&!alldone&&j<255){ mapname[j-startpoint]=consoletext[0][j]; j++; if(consoletext[0][j]=='\0')alldone=1; } mapname[j-startpoint]='\0'; skyboxb=atof(mapname); skyboxlightr=skyboxr; skyboxlightg=skyboxg; skyboxlightb=skyboxb; SetUpLighting(); //if(skyboxtexture){ terrain.DoShadows(); objects.DoShadows(); /*} else terrain.DoLighting(); */ donesomething=1; } if(Compare(consoletext[0],"sky light ",0,9)||Compare(consoletext[0],"Sky Light ",0,9)){ int startpoint; int alldone; alldone=0; startpoint=10; j=startpoint; while(consoletext[0][j]!='\0'&&consoletext[0][j]!=' '&&!alldone&&j<255){ mapname[j-startpoint]=consoletext[0][j]; j++; if(consoletext[0][j]=='\0')alldone=1; } mapname[j-startpoint]='\0'; skyboxlightr=atof(mapname); j++; startpoint=j; while(consoletext[0][j]!='\0'&&consoletext[0][j]!=' '&&!alldone&&j<255){ mapname[j-startpoint]=consoletext[0][j]; j++; if(consoletext[0][j]=='\0')alldone=1; } mapname[j-startpoint]='\0'; skyboxlightg=atof(mapname); j++; startpoint=j; while(consoletext[0][j]!='\0'&&consoletext[0][j]!=' '&&!alldone&&j<255){ mapname[j-startpoint]=consoletext[0][j]; j++; if(consoletext[0][j]=='\0')alldone=1; } mapname[j-startpoint]='\0'; skyboxlightb=atof(mapname); SetUpLighting(); //if(skyboxtexture){ terrain.DoShadows(); objects.DoShadows(); /*} else terrain.DoLighting(); */ donesomething=1; } if(Compare(consoletext[0],"skybox ",0,6)||Compare(consoletext[0],"Skybox ",0,6)){ skyboxtexture=1-skyboxtexture; SetUpLighting(); //if(skyboxtexture){ terrain.DoShadows(); objects.DoShadows(); /*} else terrain.DoLighting(); */ donesomething=1; } if(Compare(consoletext[0],"protection ",0,10)||Compare(consoletext[0],"Protection ",0,10)){ int startpoint; int alldone; alldone=0; startpoint=11; j=startpoint; while(consoletext[0][j]!='\0'&&consoletext[0][j]!=' '&&!alldone&&j<255){ mapname[j-startpoint]=consoletext[0][j]; j++; if(consoletext[0][j]=='\0')alldone=1; } mapname[j-startpoint]='\0'; player[0].protectionhead=atof(mapname); j++; startpoint=j; while(consoletext[0][j]!='\0'&&consoletext[0][j]!=' '&&!alldone&&j<255){ mapname[j-startpoint]=consoletext[0][j]; j++; if(consoletext[0][j]=='\0')alldone=1; } mapname[j-startpoint]='\0'; player[0].protectionhigh=atof(mapname); j++; startpoint=j; while(consoletext[0][j]!='\0'&&consoletext[0][j]!=' '&&!alldone&&j<255){ mapname[j-startpoint]=consoletext[0][j]; j++; if(consoletext[0][j]=='\0')alldone=1; } mapname[j-startpoint]='\0'; player[0].protectionlow=atof(mapname); donesomething=1; } if(Compare(consoletext[0],"armor ",0,5)||Compare(consoletext[0],"Armor ",0,5)){ int startpoint; int alldone; alldone=0; startpoint=6; j=startpoint; while(consoletext[0][j]!='\0'&&consoletext[0][j]!=' '&&!alldone&&j<255){ mapname[j-startpoint]=consoletext[0][j]; j++; if(consoletext[0][j]=='\0')alldone=1; } mapname[j-startpoint]='\0'; player[0].armorhead=atof(mapname); j++; startpoint=j; while(consoletext[0][j]!='\0'&&consoletext[0][j]!=' '&&!alldone&&j<255){ mapname[j-startpoint]=consoletext[0][j]; j++; if(consoletext[0][j]=='\0')alldone=1; } mapname[j-startpoint]='\0'; player[0].armorhigh=atof(mapname); j++; startpoint=j; while(consoletext[0][j]!='\0'&&consoletext[0][j]!=' '&&!alldone&&j<255){ mapname[j-startpoint]=consoletext[0][j]; j++; if(consoletext[0][j]=='\0')alldone=1; } mapname[j-startpoint]='\0'; player[0].armorlow=atof(mapname); donesomething=1; } if(Compare(consoletext[0],"protectionreset ",0,15)||Compare(consoletext[0],"Protectionreset ",0,15)){ for(i=0;i1) for(i=1;i1) for(i=1;i1) for(i=1;i1) for(i=1;i0){ 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; if(!donesomething){ PlaySoundEx( consolefailsound, samp[consolefailsound], NULL, true); OPENAL_SetVolume(channels[consolefailsound], 256); OPENAL_SetPaused(channels[consolefailsound], false); } } } } 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;lnumchallengelevels-1)targetlevel=0; loading=1; leveltime=5; slomotogglekeydown=1; } /* if(IsKeyDown(theKeyMap, MAC_Z_KEY)){ //Respawn OPENAL_SetPaused(channels[whooshsound], true); changedelay=0; for(k=0;k.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; } 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; 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; } //Rotation for(k=0;k180){ if(player[k].rotation>player[k].targetrotation)player[k].rotation-=360; else player[k].rotation+=360; } 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(player[k].isRun()){ player[k].targettilt=(player[k].rotation-player[k].targetrotation)/4; } 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;i90)rotation2=90; if(rotation2<-70)rotation2=-70; } if(mainmenu)rotation+=multiplier*5; //} } 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; static float cameraspeed; if(!mainmenu){ if(environment==snowyenvironment)music1=stream_music1snow; if(environment==grassyenvironment)music1=stream_music1grass; if(environment==desertenvironment)music1=stream_music1desert; realthreat=0; musictype=music1; for(i=0;i0){ musictype=stream_music2; } } if(loading==2){ musictype=stream_music3; 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); } } 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(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); for(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); } if(musicvolume[2]<=0&&oldmusicvolume[2]>0){ OPENAL_SetPaused(channels[stream_music3], true); } if(musicvolume[0]!=oldmusicvolume[0]){ OPENAL_SetVolume(channels[music1], musicvolume[0]); } if(musicvolume[1]!=oldmusicvolume[1]){ OPENAL_SetVolume(channels[stream_music2], musicvolume[1]); } if(musicvolume[2]!=oldmusicvolume[2]){ OPENAL_SetVolume(channels[stream_music3], musicvolume[2]); } 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==2)killhotspot=0; winhotspot=0; if(numhotspots) for(i=0;i1) 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(killhotspot){ changedelay=1; targetlevel=whichlevel+1; if(targetlevel>numchallengelevels-1)targetlevel=0; } 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||leveltime> 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(); for(i=0;itarget.y) target.y=player[0].skeleton.joints[i].position.y*player[0].scale+player[0].coords.y; } target.y+=.1; } if(player[0].skeleton.free!=2&&!autocam){ cameraspeed=20; if(findLengthfast(&player[0].velocity)>400){ cameraspeed=20+(findLength(&player[0].velocity)-20)*.96; } if(player[0].skeleton.free==0&&player[0].targetanimation!=hanganim&&player[0].targetanimation!=climbanim)target.y+=1.4; coltarget=target-cameraloc; if(findLengthfast(&coltarget)2.3)cameradist=2.3; viewer=cameraloc-facing*cameradist; colviewer=viewer; coltarget=cameraloc; objects.SphereCheckPossible(&colviewer, findDistance(&colviewer,&coltarget)); if(terrain.patchobjectnum[player[0].whichpatchx][player[0].whichpatchz]) for(j=0;j400){ cameraspeed=20+(findLength(&player[0].velocity)-20)*.96; } if(player[0].skeleton.free==0&&player[0].targetanimation!=hanganim&&player[0].targetanimation!=climbanim)target.y+=1.4; cameradist+=multiplier*5; if(cameradist>3.3)cameradist=3.3; coltarget=target-cameraloc; if(findLengthfast(&coltarget)1) { Normalise(&coltarget); if(player[0].targetanimation!=hanganim&&player[0].targetanimation!=climbanim&&player[0].currentanimation!=climbanim&&player[0].currentoffset.x==0)cameraloc=cameraloc+coltarget*multiplier*cameraspeed; else cameraloc=cameraloc+coltarget*multiplier*8; } if(editorenabled)cameraloc=target; viewer=cameraloc; colviewer=viewer; coltarget=cameraloc; objects.SphereCheckPossible(&colviewer, findDistance(&colviewer,&coltarget)); if(terrain.patchobjectnum[player[0].whichpatchx][player[0].whichpatchz]) for(j=0;j.8)camerashake=.8; //if(woozy>10)woozy=10; //woozy+=multiplier; woozy+=multiplier; if(player[0].dead)camerashake=0; if(player[0].dead)woozy=0; camerashake-=multiplier*2; blackout-=multiplier*2; //if(player[0].isCrouch())woozy-=multiplier*8; if(camerashake<0)camerashake=0; if(blackout<0)blackout=0; //if(woozy<0)woozy=0; if(camerashake){ viewer.x+=(float)(Random()%100)*.0005*camerashake; viewer.y+=(float)(Random()%100)*.0005*camerashake; viewer.z+=(float)(Random()%100)*.0005*camerashake; } } }