From: Vadim Trochinsky Date: Sun, 16 May 2010 19:51:31 +0000 (+0400) Subject: Merge X-Git-Url: https://git.jsancho.org/?a=commitdiff_plain;h=981c1179fab6849d216942a7053a24a36f36078c;p=lugaru.git Merge --- 981c1179fab6849d216942a7053a24a36f36078c diff --cc Source/GameTick.cpp index 4bcb66c,1d2fea2..4a055ad --- a/Source/GameTick.cpp +++ b/Source/GameTick.cpp @@@ -252,5037 -257,3919 +257,3956 @@@ 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 + static const char *cmd_names[] = { + #define DECLARE_COMMAND(cmd) #cmd " ", + #include "ConsoleCmds.h" + #undef DECLARE_COMMAND + }; - ScreenShot(temp/*"Screenshots\\Screenshot.png"*/); + typedef void (*console_handler)(Game *game, const char *args); - /*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; + #define DECLARE_COMMAND(cmd) static void ch_##cmd(Game *game, const char *args); + #include "ConsoleCmds.h" + #undef DECLARE_COMMAND - static int numscreenshots=0; + static console_handler cmd_handlers[] = { + #define DECLARE_COMMAND(cmd) ch_##cmd, + #include "ConsoleCmds.h" + #undef DECLARE_COMMAND + }; - // 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'; - } + static void ch_quit(Game *game, const char *args) + { + game->tryquit = 1; + } - 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'; - } + static void ch_map(Game *game, const char *args) + { + char buf[64]; + snprintf(buf, 63, ":Data:Maps:%s", args); + game->Loadlevel(buf); + game->whichlevel = -2; + campaign = 0; + } + + static void ch_save(Game *game, const char *args) + { + char buf[64]; + int i, j, k, l, m, templength; + float headprop, bodyprop, armprop, legprop; + snprintf(buf, 63, ":Data:Maps:%s", args); + + + int mapvers = 12;; + + FILE *tfile; + tfile=fopen( ConvertFileName(buf), "wb" ); + fpackf(tfile, "Bi", mapvers); + fpackf(tfile, "Bi", maptype); + fpackf(tfile, "Bi", hostile); + fpackf(tfile, "Bf Bf", viewdistance, fadestart); + fpackf(tfile, "Bb Bf Bf Bf", skyboxtexture, skyboxr, skyboxg, skyboxb); + fpackf(tfile, "Bf Bf Bf", skyboxlightr, skyboxlightg, skyboxlightb); + fpackf(tfile, "Bf Bf Bf Bf Bf Bi", player[0].coords.x, player[0].coords.y, player[0].coords.z, player[0].rotation, player[0].targetrotation, player[0].num_weapons); + if(player[0].num_weapons>0&&player[0].num_weapons<5) + for(j=0;j1&&numplayers0&&player[j].num_weapons<5) + for(k=0;knumpathpoints); + if(game->numpathpoints) + for(j=0;jnumpathpoints;j++){ + fpackf(tfile, "Bf Bf Bf Bi", game->pathpoint[j].x, game->pathpoint[j].y, game->pathpoint[j].z, game->numpathpointconnect[j]); + for(k=0;knumpathpointconnect[j];k++){ + fpackf(tfile, "Bi", game->pathpointconnect[j][k]); + } + } - // Get the GWorld - GWorldPtr MAC_gWorld = (CGrafPtr) FrontWindow(); - //assert(MAC_gWorld != NULL); + fpackf(tfile, "Bf Bf Bf Bf", game->mapcenter.x, game->mapcenter.y, game->mapcenter.z, game->mapradius); - // 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; - } + fclose(tfile); + } - // Get GWorld - ::GetGWorld(&MAC_currentPort, &MAC_currentDevice); + static void ch_cellar(Game *game, const char *args) + { + game->LoadTextureSave(":Data:Textures:Furdarko.jpg",&player[0].skeleton.drawmodel.textureptr,1,&player[0].skeleton.skinText[0],&player[0].skeleton.skinsize); + } - // Make a picture Rectangle - MAC_picture_rectangle.left = 0; - MAC_picture_rectangle.right = screenwidth; - MAC_picture_rectangle.top = 0; - MAC_picture_rectangle.bottom = screenheight; + static void ch_tint(Game *game, const char *args) + { + sscanf(args, "%f%f%f", &tintr, &tintg, &tintb); + } - // 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; + static void ch_tintr(Game *game, const char *args) + { + tintr = atof(args); + } - } + static void ch_tintg(Game *game, const char *args) + { + tintg = atof(args); + } - // Copy OpenGL Context to new GWorld - glReadBuffer(GL_FRONT); - glReadPixels(0,0,screenwidth,screenheight,GL_RGBA,GL_UNSIGNED_BYTE,MAC_pixels); + static void ch_tintb(Game *game, const char *args) + { + tintb = atof(args); + } - // 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; - } + static void ch_speed(Game *game, const char *args) + { + player[0].speedmult = atof(args); + } - // 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; + static void ch_strength(Game *game, const char *args) + { + player[0].power = atof(args); + } - temp=MAC_pixels[src_index+0]; - MAC_pixels[src_index+0]=MAC_pixels[dst_index+0]; - MAC_pixels[dst_index+0]=temp; + static void ch_power(Game *game, const char *args) + { + player[0].power = atof(args); + } - temp=MAC_pixels[src_index+1]; - MAC_pixels[src_index+1]=MAC_pixels[dst_index+1]; - MAC_pixels[dst_index+1]=temp; + static void ch_size(Game *game, const char *args) + { + player[0].scale = atof(args) * .2; + } - temp=MAC_pixels[src_index+2]; - MAC_pixels[src_index+2]=MAC_pixels[dst_index+2]; - MAC_pixels[dst_index+2]=temp; + static int find_closest() + { + int closest = 0; + float closestdist = 1.0/0.0; + + for (int i = 1; i < numplayers; i++) { + float distance; + distance = findDistancefast(&player[i].coords,&player[0].coords); + if (distance < closestdist) { + closestdist = distance; + closest = i; + } + } + return closest; + } - temp=MAC_pixels[src_index+3]; - MAC_pixels[src_index+3]=MAC_pixels[dst_index+3]; - MAC_pixels[dst_index+3]=temp; - } + static void ch_sizenear(Game *game, const char *args) + { + int closest = find_closest(); + if (closest) + player[closest].scale = atof(args) * .2; + } + static void set_proportion(int pnum, const char *args) + { + float headprop,bodyprop,armprop,legprop; + + sscanf(args, "%f%f%f%f", &headprop, &bodyprop, &armprop, &legprop); + + if(player[pnum].creature==wolftype){ + player[pnum].proportionhead=1.1*headprop; + player[pnum].proportionbody=1.1*bodyprop; + player[pnum].proportionarms=1.1*armprop; + player[pnum].proportionlegs=1.1*legprop; + } + + if(player[pnum].creature==rabbittype){ + player[pnum].proportionhead=1.2*headprop; + player[pnum].proportionbody=1.05*bodyprop; + player[pnum].proportionarms=1.00*armprop; + player[pnum].proportionlegs=1.1*legprop; + player[pnum].proportionlegs.y=1.05*legprop; + } + } - // 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; - } + static void ch_proportion(Game *game, const char *args) + { + set_proportion(0, args); + } - 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; - } + static void ch_proportionnear(Game *game, const char *args) + { + int closest = find_closest(); + if (closest) + set_proportion(closest, args); + } - 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; - } + static void set_protection(int pnum, const char *args) + { + float head, high, low; + sscanf(args, "%f%f%f", &head, &high, &low); - 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; - } + player[pnum].protectionhead = head; + player[pnum].protectionhigh = high; + player[pnum].protectionlow = low; + } - ::CloseComponent(QT_exporter); - ::SetGWorld(MAC_currentPort, MAC_currentDevice); - ::DisposeGWorld(MAC_offscreen_graphics_port); + static void ch_protection(Game *game, const char *args) + { + set_protection(0, args); + } - delete MAC_pixels;*/ + static void ch_protectionnear(Game *game, const char *args) + { + int closest = find_closest(); + if (closest) + set_protection(closest, args); } + static void set_armor(int pnum, const char *args) + { + float head, high, low; + sscanf(args, "%f%f%f", &head, &high, &low); + player[pnum].armorhead = head; + player[pnum].armorhigh = high; + player[pnum].armorlow = low; + } - 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; - } + static void ch_armor(Game *game, const char *args) + { + set_armor(0, args); + } - 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; */ + static void ch_armornear(Game *game, const char *args) + { + int closest = find_closest(); + if (closest) + set_armor(closest, args); } - int Game::findPathDist(int start,int end){ - int i,j,k,smallestcount,count,connected; - int last,last2,last3,last4; - int closest; + static void ch_protectionreset(Game *game, const char *args) + { + set_protection(0, "1 1 1"); + set_armor(0, "1 1 1"); + } - 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;jLoadTextureSave(creatureskin[player[pnum].creature][player[pnum].whichskin], + &player[pnum].skeleton.drawmodel.textureptr,1, + &player[pnum].skeleton.skinText[0],&player[pnum].skeleton.skinsize); + } - minx=startpoint.x; - if(minx>endpoint.x)minx=endpoint.x; - miny=startpoint.y; - if(miny>endpoint.y)miny=endpoint.y; - minz=startpoint.z; - if(minz>endpoint.z)minz=endpoint.z; + static void ch_noclothes(Game *game, const char *args) + { + set_noclothes(0, game, args); + } - 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].zAddClothes(buf,0,1,&player[pnum].skeleton.skinText[pnum],&player[pnum].skeleton.skinsize)) + return; + + player[pnum].DoMipmaps(5,0,0,player[pnum].skeleton.skinsize,player[pnum].skeleton.skinsize); + strcpy(player[pnum].clothes[player[pnum].numclothes],buf); + player[pnum].clothestintr[player[pnum].numclothes]=tintr; + player[pnum].clothestintg[player[pnum].numclothes]=tintg; + player[pnum].clothestintb[player[pnum].numclothes]=tintb; + player[pnum].numclothes++; + } - //if(terrain.lineTerrain(startpoint,endpoint,&colpoint)!=-1)return 1000; + static void ch_clothes(Game *game, const char *args) + { + set_clothes(0, game, args); + } - return -1; + static void ch_clothesnear(Game *game, const char *args) + { + int closest = find_closest(); + if (closest) + set_clothes(closest, game, args); } - int Game::checkcollide(XYZ startpoint,XYZ endpoint,int what){ - static XYZ colpoint,colviewer,coltarget; - static float minx,minz,maxx,maxz,miny,maxy; - static int i; + static void ch_belt(Game *game, const char *args) + { + player[0].skeleton.clothes = !player[0].skeleton.clothes; + } - //startpoint.y+=.7; - //endpoint.y+=.7; - //startpoint.y-=.1; - //endpoint.y-=.1; - minx=startpoint.x; - if(minx>endpoint.x)minx=endpoint.x; - miny=startpoint.y; - if(miny>endpoint.y)miny=endpoint.y; - minz=startpoint.z; - if(minz>endpoint.z)minz=endpoint.z; + static void ch_cellophane(Game *game, const char *args) + { + cellophane = !cellophane; + float mul = cellophane ? 0 : 1; + + for (int i = 0; i < numplayers; i++) { + player[i].proportionhead.z = player[i].proportionhead.x * mul; + player[i].proportionbody.z = player[i].proportionbody.x * mul; + player[i].proportionarms.z = player[i].proportionarms.x * mul; + player[i].proportionlegs.z = player[i].proportionlegs.x * mul; + } + } - maxx=startpoint.x; - if(maxxLoadTextureSave(":Data:Textures:fur3.jpg",&player[0].skeleton.drawmodel.textureptr,1, + &player[0].skeleton.skinText[0],&player[0].skeleton.skinsize); + player[0].creature=rabbittype; + player[0].scale=.2; + player[0].headless=0; + player[0].damagetolerance=200; + set_proportion(0, "1 1 1 1"); + } - minx-=1; - miny-=1; - minz-=1; - maxx+=1; - maxy+=1; - maxz+=1; + static void ch_wolfie(Game *game, const char *args) + { + player[0].skeleton.id=0; + player[0].skeleton.Load(":Data:Skeleton:Basic Figure Wolf",":Data:Skeleton:Basic Figure Wolf Low", + ":Data:Skeleton:Rabbitbelt",":Data:Models:Wolf.solid", + ":Data:Models:Wolf2.solid",":Data:Models:Wolf3.solid", + ":Data:Models:Wolf4.solid",":Data:Models:Wolf5.solid", + ":Data:Models:Wolf6.solid",":Data:Models:Wolf7.solid", + ":Data:Models:Wolflow.solid",":Data:Models:Belt.solid",0); + game->LoadTextureSave(":Data:Textures:Wolf.jpg",&player[0].skeleton.drawmodel.textureptr,1, + &player[0].skeleton.skinText[0],&player[0].skeleton.skinsize); + player[0].creature=wolftype; + player[0].damagetolerance=300; + set_proportion(0, "1 1 1 1"); + } - if(what!=1000){ - if(objects.position[what].x>minx-objects.model[what].boundingsphereradius&&objects.position[what].xminy-objects.model[what].boundingsphereradius&&objects.position[what].yminz-objects.model[what].boundingsphereradius&&objects.position[what].zLoadTextureSave(":Data:Textures:Wolf.jpg",&player[0].skeleton.drawmodel.textureptr,1, + &player[0].skeleton.skinText[0],&player[0].skeleton.skinsize); + } - if(what==1000)if(terrain.lineTerrain(startpoint,endpoint,&colpoint)!=-1)return 1000; + static void ch_snowwolf(Game *game, const char *args) + { + game->LoadTextureSave(":Data:Textures:SnowWolf.jpg",&player[0].skeleton.drawmodel.textureptr,1, + &player[0].skeleton.skinText[0],&player[0].skeleton.skinsize); + } - return -1; + static void ch_darkwolf(Game *game, const char *args) + { + game->LoadTextureSave(":Data:Textures:DarkWolf.jpg",&player[0].skeleton.drawmodel.textureptr,1, + &player[0].skeleton.skinText[0],&player[0].skeleton.skinsize); } - void Game::Setenvironment(int which) + static void ch_white(Game *game, const char *args) { - LOGFUNC; + game->LoadTextureSave(":Data:Textures:fur.jpg",&player[0].skeleton.drawmodel.textureptr,1, + &player[0].skeleton.skinText[0],&player[0].skeleton.skinsize); + } - LOG(" Setting environment..."); + static void ch_brown(Game *game, const char *args) + { + game->LoadTextureSave(":Data:Textures:fur3.jpg",&player[0].skeleton.drawmodel.textureptr,1, + &player[0].skeleton.skinText[0],&player[0].skeleton.skinsize); + } - float temptexdetail; - environment=which; - /* - OPENAL_SetPaused(channels[music1snow], true); - OPENAL_SetPaused(channels[music1grass], true); - OPENAL_SetPaused(channels[music1desert], true); - OPENAL_SetPaused(channels[wind], true); - OPENAL_SetPaused(channels[desertambient], true); - */ - OPENAL_SetPaused(channels[stream_music1snow], true); - OPENAL_SetPaused(channels[stream_music1grass], true); - OPENAL_SetPaused(channels[stream_music1desert], true); - OPENAL_SetPaused(channels[stream_wind], true); - OPENAL_SetPaused(channels[stream_desertambient], true); + static void ch_black(Game *game, const char *args) + { + game->LoadTextureSave(":Data:Textures:fur2.jpg",&player[0].skeleton.drawmodel.textureptr,1, + &player[0].skeleton.skinText[0],&player[0].skeleton.skinsize); + } + static void ch_sizemin(Game *game, const char *args) + { + int i; + for (i = 1; i < numplayers; i++) + if (player[i].scale < 0.8 * 0.2) + player[i].scale = 0.8 * 0.2; + } - if(environment==snowyenvironment){ - windvector=0; - windvector.z=3; - if(ambientsound){ - //PlaySoundEx( wind, samp[wind], NULL, true); - PlayStreamEx(stream_wind, strm[stream_wind], 0, true); - OPENAL_SetPaused(channels[stream_wind], false); - OPENAL_SetVolume(channels[stream_wind], 256); - } + static void ch_tutorial(Game *game, const char *args) + { + tutoriallevel = atoi(args); + } - LoadTexture(":Data:Textures:snowtree.png",&objects.treetextureptr,0,1); - LoadTexture(":Data:Textures:bushsnow.png",&objects.bushtextureptr,0,1); - LoadTexture(":Data:Textures:bouldersnow.jpg",&objects.rocktextureptr,1,0); - LoadTexture(":Data:Textures:snowbox.jpg",&objects.boxtextureptr,1,0); + static void ch_hostile(Game *game, const char *args) + { + hostile = atoi(args); + } - 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: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); + static void ch_indemo(Game *game, const char *args) + { + game->indemo=1; + hotspot[numhotspots]=player[0].coords; + hotspotsize[numhotspots]=0; + hotspottype[numhotspots]=-111; + strcpy(hotspottext[numhotspots],"mapname"); + numhotspots++; + } - LoadTexture(":Data:Textures:snow.jpg",&terraintexture,1,0); + static void ch_notindemo(Game *game, const char *args) + { + game->indemo=0; + numhotspots--; + } - LoadTexture(":Data:Textures:rock.jpg",&terraintexture2,1,0); + static void ch_type(Game *game, const char *args) + { + int i, n = sizeof(editortypenames) / sizeof(editortypenames[0]); + for (i = 0; i < n; i++) + if (stripfx(args, editortypenames[i])) + { + editoractive = i; + break; + } + } - //LoadTexture(":Data:Textures:detailgrain.png",&terraintexture3,1); + static void ch_path(Game *game, const char *args) + { + int i, n = sizeof(pathtypenames) / sizeof(pathtypenames[0]); + for (i = 0; i < n; i++) + if (stripfx(args, pathtypenames[i])) + { + editorpathtype = i; + break; + } + } + static void ch_hs(Game *game, const char *args) + { + hotspot[numhotspots]=player[0].coords; + float size; + int type, shift; + sscanf(args, "%f%d %n", &size, &type, &shift); + hotspotsize[numhotspots] = size; + hotspottype[numhotspots] = type; - temptexdetail=texdetail; - if(texdetail>1)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"); + strcpy(hotspottext[numhotspots], args + shift); + strcat(hotspottext[numhotspots], "\n"); + numhotspots++; + } + static void ch_dialogue(Game *game, const char *args) + { + int dlg, i, j; + char buf1[32], buf2[64]; + + sscanf(args, "%d %31s", &dlg, buf1); + snprintf(buf2, 63, ":Data:Dialogues:%s.txt", buf1); + + dialoguetype[numdialogues] = dlg; + + memset(dialoguetext[numdialogues], 0, sizeof(dialoguetext[numdialogues])); + memset(dialoguename[numdialogues], 0, sizeof(dialoguename[numdialogues])); + + ifstream ipstream(ConvertFileName(buf2)); + ipstream.ignore(256,':'); + ipstream >> numdialogueboxes[numdialogues]; + for(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(); + } - 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); + static void ch_fixtype(Game *game, const char *args) + { + int dlg; + sscanf(args, "%d", &dlg); + dialoguetype[0] = dlg; + } + static void ch_fixrotation(Game *game, const char *args) + { + participantrotation[whichdialogue][participantfocus[whichdialogue][indialogue]]=player[participantfocus[whichdialogue][indialogue]].rotation; + } - 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); - } + static void ch_ddialogue(Game *game, const char *args) + { + if (numdialogues) + numdialogues--; + } - 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); + static void ch_dhs(Game *game, const char *args) + { + if (numhotspots) + numhotspots--; + } - //LoadTexture(":Data:Textures:detailgrain.png",&terraintexture3,1); + static void ch_immobile(Game *game, const char *args) + { + player[0].immobile = 1; + } + static void ch_allimmobile(Game *game, const char *args) + { + for (int i = 1; i < numplayers; i++) + player[i].immobile = 1; + } + static void ch_mobile(Game *game, const char *args) + { + player[0].immobile = 0; + } - 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"); + static void ch_default(Game *game, const char *args) + { + 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; + game->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; + } + static void ch_play(Game *game, const char *args) + { + int dlg, i; + sscanf(args, "%d", &dlg); + whichdialogue = dlg; + + if (whichdialogue >= numdialogues) + return; + + for(i=0;i1)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"); + game->SetUpLighting(); + terrain.DoShadows(); + objects.DoShadows(); + } + static void ch_skylight(Game *game, const char *args) + { + sscanf(args, "%f%f%f", &skyboxlightr, &skyboxlightg, &skyboxlightb); - texdetail=temptexdetail; - } - temptexdetail=texdetail; - texdetail=1; - terrain.load(":Data:Textures:heightmap.png"); + game->SetUpLighting(); - texdetail=temptexdetail; + terrain.DoShadows(); + objects.DoShadows(); } + static void ch_skybox(Game *game, const char *args) + { + skyboxtexture = !skyboxtexture; - void Game::Loadlevel(int which){ - stealthloading=0; + game->SetUpLighting(); - 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"); + terrain.DoShadows(); + objects.DoShadows(); + } - whichlevel=which; + static void cmd_dispatch(Game *game, const char *cmd) + { + int i, n_cmds = sizeof(cmd_names) / sizeof(cmd_names[0]); + + for (i = 0; i < n_cmds; i++) + if (stripfx(cmd, cmd_names[i])) + { + cmd_handlers[i](game, cmd + strlen(cmd_names[i])); + break; + } + if (i < n_cmds) + { + PlaySoundEx(consolesuccesssound, samp[consolesuccesssound], NULL, true); + OPENAL_SetVolume(channels[consolesuccesssound], 256); + OPENAL_SetPaused(channels[consolesuccesssound], false); + } + else + { + PlaySoundEx(consolefailsound, samp[consolefailsound], NULL, true); + OPENAL_SetVolume(channels[consolefailsound], 256); + OPENAL_SetPaused(channels[consolefailsound], false); + } } - /*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); + /********************> Tick() <*****/ + 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); - context.update ((unsigned char *)temp2, len); - context.finalize (); + #if defined(_WIN32) + mkdir("Screenshots"); + #else + mkdir("Screenshots", S_IRWXU); + #endif - return context.hex_digest(); - }*/ + 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; - void Game::Loadlevel(char *name){ - int i,j,k,l,m; - static int oldlevel; - int templength; - float lamefloat; - int lameint; + // 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'; + } - float headprop,legprop,armprop,bodyprop; + 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'; + } + } + } + } + } - LOGFUNC; - LOG(std::string("Loading level...") + name); + // Get the GWorld + GWorldPtr MAC_gWorld = (CGrafPtr) FrontWindow(); + //assert(MAC_gWorld != NULL); - if(!gameon)visibleloading=1; + // 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; + } - if(stealthloading)visibleloading=0; + // Get GWorld + ::GetGWorld(&MAC_currentPort, &MAC_currentDevice); - if(!stillloading)loadtime=0; - gamestarted=1; + // Make a picture Rectangle + MAC_picture_rectangle.left = 0; + MAC_picture_rectangle.right = screenwidth; + MAC_picture_rectangle.top = 0; + MAC_picture_rectangle.bottom = screenheight; - numenvsounds=0; - //visibleloading=1; - if(tutoriallevel!=-1)tutoriallevel=0; - else tutoriallevel=1; + // 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; - 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); + // 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; + } - scoreadded=0; - windialogue=0; + // 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; - hostiletime=0; + temp=MAC_pixels[src_index+0]; + MAC_pixels[src_index+0]=MAC_pixels[dst_index+0]; + MAC_pixels[dst_index+0]=temp; - won=0; + temp=MAC_pixels[src_index+1]; + MAC_pixels[src_index+1]=MAC_pixels[dst_index+1]; + MAC_pixels[dst_index+1]=temp; - //campaign=0; - animation[bounceidleanim].Load((char *)":Data:Animations:Idle",middleheight,neutral); + temp=MAC_pixels[src_index+2]; + MAC_pixels[src_index+2]=MAC_pixels[dst_index+2]; + MAC_pixels[dst_index+2]=temp; - numdialogues=0; + temp=MAC_pixels[src_index+3]; + MAC_pixels[src_index+3]=MAC_pixels[dst_index+3]; + MAC_pixels[dst_index+3]=temp; + } - for(i=0;i<20;i++) - { - dialoguegonethrough[i]=0; - } - indialogue=-1; - cameramode=0; - damagedealt=0; - damagetaken=0; + // 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; + } - if(accountactive!=-1)difficulty=accountdifficulty[accountactive]; + 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; + } - if(difficulty!=2)minimap=1; - else minimap=0; + 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; + } - numhotspots=0; - currenthotspot=-1; - bonustime=1; + 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; + } - skyboxtexture=1; - skyboxr=1; - skyboxg=1; - skyboxb=1; + ::CloseComponent(QT_exporter); + ::SetGWorld(MAC_currentPort, MAC_currentDevice); + ::DisposeGWorld(MAC_offscreen_graphics_port); - freeze=0; - winfreeze=0; + delete MAC_pixels;*/ + } - 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; - } + 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(!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;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; - funpackf(tfile, "Bi", &player[0].numclothes); + maxx=startpoint.x; + if(maxx=9) - { - funpackf(tfile, "Bi Bi", &player[0].whichskin, &player[0].creature); - } - else - { - player[0].whichskin=0; - player[0].creature=rabbittype; - } + minx-=1; + miny-=1; + minz-=1; + maxx+=1; + maxy+=1; + maxz+=1; - for(i=0;iminx-objects.model[i].boundingsphereradius&&objects.position[i].xminy-objects.model[i].boundingsphereradius&&objects.position[i].yminz-objects.model[i].boundingsphereradius&&objects.position[i].z=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;mendpoint.x)minx=endpoint.x; + miny=startpoint.y; + if(miny>endpoint.y)miny=endpoint.y; + minz=startpoint.z; + if(minz>endpoint.z)minz=endpoint.z; - for(m=0;m<10;m++) - funpackf(tfile, "Bf Bf Bf", &participantfacing[k][l][m].x, &participantfacing[k][l][m].y, &participantfacing[k][l][m].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].z=7) - { - funpackf(tfile, "Bi", &numhotspots); - if(numhotspots) - { - for(i=0;imaxdistance) - { - whichclosest=i; - maxdistance=tempdist; - } - } - objects.radius=fast_sqrt(maxdistance); + if(environment==snowyenvironment){ + windvector=0; + windvector.z=3; + if(ambientsound){ + //PlaySoundEx( wind, samp[wind], NULL, true); + PlayStreamEx(stream_wind, strm[stream_wind], 0, true); + OPENAL_SetPaused(channels[stream_wind], false); + OPENAL_SetVolume(channels[stream_wind], 256); } - if(visibleloading){loadscreencolor=4; LoadingScreen();} - //mapcenter=objects.center; - //mapradius=objects.radius; + LoadTexture(":Data:Textures:snowtree.png",&objects.treetextureptr,0,1); + LoadTexture(":Data:Textures:bushsnow.png",&objects.bushtextureptr,0,1); + LoadTexture(":Data:Textures:bouldersnow.jpg",&objects.rocktextureptr,1,0); + LoadTexture(":Data:Textures:snowbox.jpg",&objects.boxtextureptr,1,0); - 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; - } + LoadTexture(":Data:Textures:snow.jpg",&terraintexture,1,0); - funpackf(tfile, "Bi", &player[i-howmanyremoved].waypoint); - if(player[i-howmanyremoved].waypoint>player[i-howmanyremoved].numwaypoints-1)player[i-howmanyremoved].waypoint=0; + LoadTexture(":Data:Textures:rock.jpg",&terraintexture2,1,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); + //LoadTexture(":Data:Textures:detailgrain.png",&terraintexture3,1); - 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;j1)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"); - funpackf(tfile, "Bf Bf Bf Bf", &mapcenter.x,&mapcenter.y,&mapcenter.z,&mapradius); - SetUpLighting(); - if(environment!=oldenvironment)Setenvironment(environment); - oldenvironment=environment; - if(!stealthloading) - { - j=objects.numobjects; - objects.numobjects=0; - for(i=0;imaxplayers-1)numplayers=maxplayers-1; - for(i=0;i1)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"); - player[i].velocity=0; - player[i].oldcoords=player[i].coords; - player[i].realoldcoords=player[i].coords; - player[i].id=i; - player[i].skeleton.id=i; - player[i].updatedelay=0; - player[i].normalsupdatedelay=0; - player[i].aitype=passivetype; - player[i].aitarget=0; - player[i].madskills=0; - if(i==0) - { - player[i].proportionhead=1.2; - player[i].proportionbody=1.05; - player[i].proportionarms=1.00; - player[i].proportionlegs=1.1; - player[i].proportionlegs.y=1.05; - } - player[i].headless=0; - player[i].currentoffset=0; - player[i].targetoffset=0; - /*player[i].armorhead=1; - player[i].armorhigh=1; - player[i].armorlow=1; - player[i].protectionhead=1; - player[i].protectionhigh=1; - player[i].protectionlow=1; - player[i].metalhead=1; - player[i].metalhigh=1; - player[i].metallow=1; - player[i].power=1; - player[i].speedmult=1;*/ + 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); - player[i].damagetolerance=200; + if(ambientsound){ + PlayStreamEx( stream_wind, strm[stream_wind], NULL, true); + OPENAL_SetPaused(channels[stream_wind], false); + OPENAL_SetVolume(channels[stream_wind], 100); + } - if(player[i].creature==wolftype) - { - /*player[i].proportionhead=1.1; - player[i].proportionbody=1.1; - player[i].proportionarms=1.1; - player[i].proportionlegs=1.1; - player[i].proportionlegs.y=1.1;*/ - if(i==0||player[i].scale<0)player[i].scale=.23; + 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); - player[i].damagetolerance=300; - } + LoadTexture(":Data:Textures:grassdirt.jpg",&terraintexture,1,0); - if(visibleloading){loadscreencolor=4; LoadingScreen();} - if(cellophane) - { - player[i].proportionhead.z=0; - player[i].proportionbody.z=0; - player[i].proportionarms.z=0; - player[i].proportionlegs.z=0; - } + LoadTexture(":Data:Textures:mossrock.jpg",&terraintexture2,1,0); - player[i].tempanimation.Load((char *)":Data:Animations:Tempanim",0,0); + //LoadTexture(":Data:Textures:detail.png",&terraintexture3,1); - player[i].headmorphness=0; - player[i].targetheadmorphness=1; - player[i].headmorphstart=0; - player[i].headmorphend=0; - player[i].pausetime=0; - player[i].dead=0; - player[i].jumppower=5; - player[i].damage=0; - player[i].permanentdamage=0; - player[i].superpermanentdamage=0; + 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"); - 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].throwkeydown=0; - player[i].collided=-10; - player[i].loaded=1; - player[i].bloodloss=0; - player[i].weaponactive=-1; - player[i].weaponstuck=-1; - player[i].bleeding=0; - player[i].deathbleeding=0; - player[i].stunned=0; - player[i].hasvictim=0; - player[i].wentforweapon=0; - } - player[0].aitype=playercontrolled; - player[0].weaponactive=-1; + texdetail=temptexdetail; + } + temptexdetail=texdetail; + texdetail=1; + terrain.load(":Data:Textures:heightmap.png"); - if(difficulty==1) - { - //player[0].speedmult=1/.9; - player[0].power=1/.9; - } + texdetail=temptexdetail; + } - if(difficulty==0) - { - //player[0].speedmult=1/.8; - player[0].power=1/.8; - } - //player[0].weaponstuck=1; + void Game::Loadlevel(int which){ + stealthloading=0; - if(difficulty==1)player[0].damagetolerance=250; - if(difficulty==0)player[0].damagetolerance=300; - if(difficulty==0)player[0].armorhead*=1.5; - if(difficulty==0)player[0].armorhigh*=1.5; - if(difficulty==0)player[0].armorlow*=1.5; - cameraloc=player[0].coords; - cameraloc.y+=5; - rotation=player[0].rotation; + 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"); - hawkcoords=player[0].coords; - hawkcoords.y+=30; + whichlevel=which; + } - if(visibleloading){loadscreencolor=4; LoadingScreen();} - //weapons.numweapons=numplayers; - for(i=0;i20) - OPENAL_StopSound(i); - } - */ - LOG("Starting background music..."); + strcpy(temp2,(const char *)string); + strcat((char *)temp2,(const char *)"Lugaru"); + sprintf (temp, "%d",strlen((char *)temp2)); + strcat((char *)temp2,temp); - 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; + MD5 context; + unsigned int len = strlen ( (char *)temp2); + context.update ((unsigned char *)temp2, len); + context.finalize (); - /*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); - */ + return context.hex_digest(); + }*/ - 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; + void Game::Loadlevel(char *name){ + int i,j,k,l,m; + static int oldlevel; int templength; + float lamefloat; + int lameint; - float headprop,bodyprop,armprop,legprop; + float headprop,legprop,armprop,bodyprop; - for(i=0;i<15;i++){ - displaytime[i]+=multiplier; - } + LOGFUNC; - static unsigned char theKeyMap[16]; - GetKeys( theKeyMap ); + LOG(std::string("Loading level...") + name); - keyboardfrozen=0; + if(!gameon)visibleloading=1; + if(stealthloading)visibleloading=0; - static bool mainmenutogglekeydown; + if(!stillloading)loadtime=0; + gamestarted=1; - if (IsKeyDown(theKeyMap, MAC_F6_KEY) && !freezetogglekeydown) { - if (IsKeyDown(theKeyMap, MAC_SHIFT_KEY)) { - stereoreverse=true; - } else { - stereoreverse=false; - } + numenvsounds=0; + //visibleloading=1; + if(tutoriallevel!=-1)tutoriallevel=0; + else tutoriallevel=1; - if (stereoreverse) { - printf("Stereo reversed\n"); - } else { - printf("Stereo unreversed\n"); - } - freezetogglekeydown=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); - if (IsKeyDown(theKeyMap, MAC_F7_KEY)) { - if (IsKeyDown(theKeyMap, MAC_SHIFT_KEY)) { - stereoseparation -= 0.001; - } else { - stereoseparation -= 0.010; - } + // Change the map filename into something that is os specific + char *FixedFN = ConvertFileName(name); - printf("Stereo decreased increased to %f\n", stereoseparation); - } + int mapvers; + FILE *tfile; + tfile=fopen( FixedFN, "rb" ); + if(tfile) + { + OPENAL_SetPaused(channels[stream_firesound], true); - if (IsKeyDown(theKeyMap, MAC_F8_KEY)) { - if (IsKeyDown(theKeyMap, MAC_SHIFT_KEY)) { - stereoseparation += 0.001; - } else { - stereoseparation += 0.010; - } - printf("Stereo separation increased to %f\n", stereoseparation); - } + scoreadded=0; + windialogue=0; + hostiletime=0; - 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; + won=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); + //campaign=0; + animation[bounceidleanim].Load((char *)":Data:Animations:Idle",middleheight,neutral); - flashr=1; - flashg=0; - flashb=0; - flashamount=1; - flashdelay=1; - } + numdialogues=0; - startbonustotal=0; + for(i=0;i<20;i++) + { + dialoguegonethrough[i]=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; + freeze=0; + winfreeze=0; - strcpy(gameName, "Host's game"); - strcpy(playerName, "Host"); - GameC2PStr( gameName, gameNameStr ); - GameC2PStr( playerName, playerNameStr ); + for(i=0;i<100;i++) + { + bonusnum[i]=0; + } - 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); + 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; - consolechars[0]=255; - consoleselected=0; - } - } - else - { - donesomething=1; - PlaySoundEx( consolesuccesssound, samp[consolesuccesssound], NULL, true); - OPENAL_SetVolume(channels[consolesuccesssound], 256); - OPENAL_SetPaused(channels[consolesuccesssound], false); + 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(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"); + if(!stealthloading) + { + terrain.numdecals=0; + sprites.numsprites=0; + for(i=0;i0&&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;k=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; + } - player[0].power=atof(mapname); + 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;i1) - for(i=1;imaxdistance) + { + whichclosest=i; + maxdistance=tempdist; + } + } + objects.radius=fast_sqrt(maxdistance); + } - for(j=9;j1&&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; + } - if(Compare(consoletext[0],"proportionnear ",0,14)||Compare(consoletext[0],"Proportionnear ",0,14)){ - int startpoint; - int alldone; - - int closest=-1; - float closestdist=-1; - float distance; - if(numplayers>1) - for(i=1;iplayer[i-howmanyremoved].numwaypoints-1)player[i-howmanyremoved].waypoint=0; - alldone=0; - startpoint=15; - 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'; + 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); - headprop=atof(mapname); + 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; + } - 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'; + 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; + } - bodyprop=atof(mapname); + 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..."); - donesomething=1; - } - if(Compare(consoletext[0],"type dead2 ",0,10)){ - editoractive=typedead2; + 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; - donesomething=1; - } - if(Compare(consoletext[0],"type dead3 ",0,10)){ - editoractive=typedead3; - donesomething=1; - } - if(Compare(consoletext[0],"type dead4 ",0,10)){ - editoractive=typedead4; - donesomething=1; - } + /*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(Compare(consoletext[0],"path keepwalking ",0,16)){ - editorpathtype=wpkeepwalking; + if(!firstload) + { + firstload=1; + } + } + leveltime=0; + loadingstuff=0; + visibleloading=0; + } - donesomething=1; - } + 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 oldjumpkeydown; - if(Compare(consoletext[0],"path pause ",0,10)){ - editorpathtype=wppause; + int templength; - donesomething=1; - } + float headprop,bodyprop,armprop,legprop; - if(Compare(consoletext[0],"mapkilleveryone ",0,15)){ - maptype=mapkilleveryone; + for(i=0;i<15;i++){ + displaytime[i]+=multiplier; + } - donesomething=1; - } + static unsigned char theKeyMap[16]; + GetKeys( theKeyMap ); - if(Compare(consoletext[0],"mapgosomewhere ",0,14)){ - maptype=mapgosomewhere; + keyboardfrozen=0; - donesomething=1; - } - if(Compare(consoletext[0],"mapkillsomeone ",0,14)){ - maptype=mapkillsomeone; + static bool mainmenutogglekeydown; + - donesomething=1; ++ if (IsKeyDown(theKeyMap, MAC_F6_KEY) && !freezetogglekeydown) { ++ if (IsKeyDown(theKeyMap, MAC_SHIFT_KEY)) { ++ stereoreverse=true; ++ } else { ++ stereoreverse=false; ++ } + - } ++ if (stereoreverse) { ++ printf("Stereo reversed\n"); ++ } else { ++ printf("Stereo unreversed\n"); ++ } ++ freezetogglekeydown=1; ++ } + - if(Compare(consoletext[0],"mapkillmost ",0,11)){ - maptype=mapkillmost; ++ if (IsKeyDown(theKeyMap, MAC_F7_KEY)) { ++ if (IsKeyDown(theKeyMap, MAC_SHIFT_KEY)) { ++ stereoseparation -= 0.001; ++ } else { ++ stereoseparation -= 0.010; ++ } + - donesomething=1; ++ printf("Stereo decreased increased to %f\n", stereoseparation); ++ } + - } ++ if (IsKeyDown(theKeyMap, MAC_F8_KEY)) { ++ if (IsKeyDown(theKeyMap, MAC_SHIFT_KEY)) { ++ stereoseparation += 0.001; ++ } else { ++ stereoseparation += 0.010; ++ } + - if(Compare(consoletext[0],"hs ",0,2)){ - int startpoint; - int alldone; ++ printf("Stereo separation increased to %f\n", stereoseparation); ++ } + - hotspot[numhotspots]=player[0].coords; + - alldone=0; - startpoint=3; - 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'; + 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; - hotspotsize[numhotspots]=atof(mapname); + 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); - 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'; + flashr=1; + flashg=0; + flashb=0; + flashamount=1; + flashdelay=1; + } - hotspottype[numhotspots]=atoi(mapname); + startbonustotal=0; - j++; - startpoint=j; - while(consoletext[0][j]!='\0'&&!alldone&&j<255){ - mapname[j-startpoint]=consoletext[0][j]; - j++; - if(consoletext[0][j]=='\0')alldone=1; - } - mapname[j-startpoint]='\n'; - mapname[j-startpoint+1]='\0'; + for(i=0;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]; - } + strcat(mapname,campaignmapname[campaignchoicewhich[0]]); + whichchoice=0; + visibleloading=1; + stillloading=1; + Loadlevel(mapname); + campaign=1; + mainmenu=0; + gameon=1; + OPENAL_SetPaused(channels[music3], true); - for(i=0;i2)newdetail=detail; + if(newdetail<0)newdetail=detail; + if(newscreenwidth<0)newscreenwidth=screenwidth; + if(newscreenheight<0)newscreenheight=screenheight; - numdialogues++; + 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); - donesomething=1; - } + 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; + } + } - if(Compare(consoletext[0],"fixdialogue ",0,11)){ - int startpoint; - int alldone; - int whichdi; - - alldone=0; - startpoint=12; - 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; - - whichdi=atoi(mapname); - - mapname[0]=':'; - mapname[1]='D'; - mapname[2]='a'; - mapname[3]='t'; - mapname[4]='a'; - mapname[5]=':'; - mapname[6]='D'; - mapname[7]='i'; - mapname[8]='a'; - mapname[9]='l'; - mapname[10]='o'; - mapname[11]='g'; - mapname[12]='u'; - mapname[13]='e'; - mapname[14]='s'; - mapname[15]=':'; - for(j=startpoint;j> 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]; - } + 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; + } - ipstream.close(); + 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); - donesomething=1; - } + flashr=1; + flashg=0; + flashb=0; + flashamount=1; + flashdelay=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); + //new game + if(accountactive!=-1)mainmenu=5; + else mainmenu=7; + /* + startbonustotal=0; - startpoint=j+1; + 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); + } + } - donesomething=1; - } + 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; - if(Compare(consoletext[0],"fixrotation ",0,11)){ - participantrotation[whichdialogue][participantfocus[whichdialogue][indialogue]]=player[participantfocus[whichdialogue][indialogue]].rotation; + //options - donesomething=1; - } + mainmenu=3; - if(Compare(consoletext[0],"ddialogue ",0,9)){ - numdialogues--; - if(numdialogues<0)numdialogues=0; + 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; + } - donesomething=1; - } + 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); - if(Compare(consoletext[0],"immobile ",0,8)){ - player[0].immobile=1; - donesomething=1; - } + flashr=1; + flashg=0; + flashb=0; + flashamount=1; + flashdelay=1; - if(Compare(consoletext[0],"mobile ",0,6)){ - player[0].immobile=0; - donesomething=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(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;iw == screenwidth) && (resolutions[i]->h == screenwidth)) + isCustomResolution = false; - directing=0; - indialogue=0; - - donesomething=1; - - //if(dialogueboxsound[whichdialogue][indialogue]!=0){ - float gLoc[3]; - float vel[3]; - XYZ temppos; - temppos=player[participantfocus[whichdialogue][indialogue]].coords; - temppos=temppos-viewer; - Normalise(&temppos); - temppos+=viewer; - - gLoc[0]=temppos.x; - gLoc[1]=temppos.y; - gLoc[2]=temppos.z; - vel[0]=0; - vel[1]=0; - vel[2]=0; - int whichsoundplay; - whichsoundplay=rabbitchitter; - if(dialogueboxsound[whichdialogue][indialogue]==2)whichsoundplay=rabbitchitter2; - if(dialogueboxsound[whichdialogue][indialogue]==3)whichsoundplay=rabbitpainsound; - if(dialogueboxsound[whichdialogue][indialogue]==4)whichsoundplay=rabbitpain1sound; - if(dialogueboxsound[whichdialogue][indialogue]==5)whichsoundplay=rabbitattacksound; - if(dialogueboxsound[whichdialogue][indialogue]==6)whichsoundplay=rabbitattack2sound; - if(dialogueboxsound[whichdialogue][indialogue]==7)whichsoundplay=rabbitattack3sound; - if(dialogueboxsound[whichdialogue][indialogue]==8)whichsoundplay=rabbitattack4sound; - if(dialogueboxsound[whichdialogue][indialogue]==9)whichsoundplay=growlsound; - if(dialogueboxsound[whichdialogue][indialogue]==10)whichsoundplay=growl2sound; - if(dialogueboxsound[whichdialogue][indialogue]==11)whichsoundplay=snarlsound; - if(dialogueboxsound[whichdialogue][indialogue]==12)whichsoundplay=snarl2sound; - if(dialogueboxsound[whichdialogue][indialogue]==13)whichsoundplay=barksound; - if(dialogueboxsound[whichdialogue][indialogue]==14)whichsoundplay=bark2sound; - if(dialogueboxsound[whichdialogue][indialogue]==15)whichsoundplay=bark3sound; - if(dialogueboxsound[whichdialogue][indialogue]==16)whichsoundplay=barkgrowlsound; - if(dialogueboxsound[whichdialogue][indialogue]==-1)whichsoundplay=fireendsound; - if(dialogueboxsound[whichdialogue][indialogue]==-2)whichsoundplay=firestartsound; - if(dialogueboxsound[whichdialogue][indialogue]==-3)whichsoundplay=consolesuccesssound; - if(dialogueboxsound[whichdialogue][indialogue]==-4)whichsoundplay=consolefailsound; - PlaySoundEx( whichsoundplay, samp[whichsoundplay], NULL, true); - OPENAL_3D_SetAttributes(channels[whichsoundplay], gLoc, vel); - OPENAL_SetVolume(channels[whichsoundplay], 256); - OPENAL_SetPaused(channels[whichsoundplay], 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; } - - - - - if(Compare(consoletext[0],"dhs ",0,3)){ - numhotspots--; - if(numhotspots<0)numhotspots=0; - donesomething=1; + 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(Compare(consoletext[0],"proportion ",0,10)||Compare(consoletext[0],"Proportion ",0,4)){ - int startpoint; - int alldone; + + } + 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; - 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'; + if(!musictoggle){ + OPENAL_SetPaused(channels[music1], true); + OPENAL_SetPaused(channels[stream_music2], true); + OPENAL_SetPaused(channels[stream_music3], true); - headprop=atof(mapname); + for(i=0;i<4;i++){ + oldmusicvolume[i]=0; + musicvolume[i]=0; + } + } - 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'; + 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; - bodyprop=atof(mapname); + //options - 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'; + 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); - armprop=atof(mapname); + flashr=1; + flashg=0; + flashb=0; + flashamount=1; + flashdelay=1; - 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'; + if(newdetail>2)newdetail=detail; + if(newdetail<0)newdetail=detail; + if(newscreenwidth<0)newscreenwidth=screenwidth; + if(newscreenheight<0)newscreenheight=screenheight; - legprop=atof(mapname); - if(player[0].creature==wolftype){ - player[0].proportionhead=1.1*headprop; - player[0].proportionbody=1.1*bodyprop; - player[0].proportionarms=1.1*armprop; - player[0].proportionlegs=1.1*legprop; - } + 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(player[0].creature==rabbittype){ - player[0].proportionhead=1.2*headprop; - player[0].proportionbody=1.05*bodyprop; - player[0].proportionarms=1.00*armprop; - player[0].proportionlegs=1.1*legprop; - player[0].proportionlegs.y=1.05*legprop; - } + 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); - donesomething=1; - } + int keynum; + keynum=i; + if(buttons[0]&&!oldbuttons[0])keynum=MAC_MOUSEBUTTON1; + if(buttons[1]&&!oldbuttons[1])keynum=MAC_MOUSEBUTTON2; - if(Compare(consoletext[0],"allimmobile ",0,11)||Compare(consoletext[0],"Allimmobile ",0,11)){ - 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(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); - 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; - } + flashr=1; + flashg=0; + flashb=0; + flashamount=1; + flashdelay=1; - 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); + mainmenu=3; - editoractive=typeactive; - player[0].immobile=0; + 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; + } - donesomething=1; - } + 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(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'; + flashr=1; + flashg=0; + flashb=0; + flashamount=1; + flashdelay=1; - tintr=atof(mapname); + startbonustotal=0; - 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'; + loading=2; + loadtime=0; + targetlevel=-1; + if(firstload)TickOnceAfter(); + if(!firstload)LoadStuff(); + else { + Loadlevel(-1); + } - tintg=atof(mapname); + 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); - 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'; + flashr=1; + flashg=0; + flashb=0; + flashamount=1; + flashdelay=1; - tintb=atof(mapname); + startbonustotal=0; - donesomething=1; - } + 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); - 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'; + flashr=1; + flashg=0; + flashb=0; + flashamount=1; + flashdelay=1; - skyboxr=atof(mapname); + 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); - 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'; + flashr=1; + flashg=0; + flashb=0; + flashamount=1; + flashdelay=1; - skyboxg=atof(mapname); + 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); - 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'; + flashr=1; + flashg=0; + flashb=0; + flashamount=1; + flashdelay=1; - skyboxb=atof(mapname); + 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); - skyboxlightr=skyboxr; - skyboxlightg=skyboxg; - skyboxlightb=skyboxb; + flashr=1; + flashg=0; + flashb=0; + flashamount=1; + flashdelay=1; - SetUpLighting(); + 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); - //if(skyboxtexture){ - terrain.DoShadows(); - objects.DoShadows(); - /*} - else terrain.DoLighting(); - */ - donesomething=1; - } + flashr=1; + flashg=0; + flashb=0; + flashamount=1; + flashdelay=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'; + startbonustotal=0; - skyboxlightr=atof(mapname); + loading=2; + loadtime=0; + targetlevel=selected; + if(firstload)TickOnceAfter(); + if(!firstload)LoadStuff(); + else { + Loadlevel(selected); + } + campaign=0; - 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'; + 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); - skyboxlightg=atof(mapname); + flashr=1; + flashg=0; + flashb=0; + flashamount=1; + flashdelay=1; - 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'; + 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); - skyboxlightb=atof(mapname); + flashr=1; + flashg=0; + flashb=0; + flashamount=1; + flashdelay=1; - SetUpLighting(); + startbonustotal=0; - //if(skyboxtexture){ - terrain.DoShadows(); - objects.DoShadows(); - /*} - else terrain.DoLighting(); - */ - donesomething=1; - } + loading=2; + loadtime=0; + targetlevel=selected; + if(firstload)TickOnceAfter(); + if(!firstload)LoadStuff(); + else { + Loadlevel(selected); + } + campaign=0; - if(Compare(consoletext[0],"skybox ",0,6)||Compare(consoletext[0],"Skybox ",0,6)){ - skyboxtexture=1-skyboxtexture; + 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); - SetUpLighting(); - //if(skyboxtexture){ - terrain.DoShadows(); - objects.DoShadows(); - /*} - else terrain.DoLighting(); - */ - donesomething=1; - } + flashr=1; + flashg=0; + flashb=0; + flashamount=1; + flashdelay=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'; + 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); - player[0].protectionhead=atof(mapname); + flashr=1; + flashg=0; + flashb=0; + flashamount=1; + flashdelay=1; - 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'; + mainmenu=5; + } + if(Button())oldbutton=1; + else oldbutton=0; + } - player[0].protectionhigh=atof(mapname); + 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); - 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'; + flashr=1; + flashg=0; + flashb=0; + flashamount=1; + flashdelay=1; - player[0].protectionlow=atof(mapname); + for(i=accountactive;i0&&selected1) - for(i=1;i2)newdetail=detail; + if(newdetail<0)newdetail=detail; + if(newscreenwidth<0)newscreenwidth=screenwidth; + if(newscreenheight<0)newscreenheight=screenheight; - 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'; + 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(); + } + } - player[closest].protectionlow=atof(mapname); + 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); - donesomething=1; + 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&&displayselected1) - for(i=1;i1) - for(i=1;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]; } - - if(Compare(consoletext[0],"noclothes ",0,9)||Compare(consoletext[0],"Noclothes ",0,9)){ - int closest=0; - - player[closest].numclothes=0; - LoadTextureSave(creatureskin[player[closest].creature][player[closest].whichskin], - &player[closest].skeleton.drawmodel.textureptr,1,&player[closest].skeleton.skinText[0],&player[closest].skeleton.skinsize); - donesomething=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]; } - - if((Compare(consoletext[0],"Clothes ",0,7)||Compare(consoletext[0],"clothes ",0,7))){ - mapname[0]=':'; - mapname[1]='D'; - mapname[2]='a'; - mapname[3]='t'; - mapname[4]='a'; - mapname[5]=':'; - mapname[6]='T'; - mapname[7]='e'; - mapname[8]='x'; - mapname[9]='t'; - mapname[10]='u'; - mapname[11]='r'; - mapname[12]='e'; - mapname[13]='s'; - mapname[14]=':'; - for(j=8;j1) - for(i=1;i.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]; } - if(Compare(consoletext[0],"darkwolf ",0,8)){ - LoadTextureSave(":Data:Textures:DarkWolf.jpg",&player[0].skeleton.drawmodel.textureptr,1,&player[0].skeleton.skinText[0],&player[0].skeleton.skinsize); - donesomething=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]; } - if(Compare(consoletext[0],"snowwolf ",0,8)){ - LoadTextureSave(":Data:Textures:Snowwolf.jpg",&player[0].skeleton.drawmodel.textureptr,1,&player[0].skeleton.skinText[0],&player[0].skeleton.skinsize); - donesomething=1; - }/* - if(Compare(consoletext[0],"lizardwolf ",0,10)){ - LoadTextureSave(":Data:Textures:Lizardwolf.jpg",&player[0].skeleton.drawmodel.textureptr,1,&player[0].skeleton.skinText[0],&player[0].skeleton.skinsize); - donesomething=1; - }*/ - if(Compare(consoletext[0],"white ",0,5)){ - LoadTextureSave(":Data:Textures:fur.jpg",&player[0].skeleton.drawmodel.textureptr,1,&player[0].skeleton.skinText[0],&player[0].skeleton.skinsize); - donesomething=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]; } - if(Compare(consoletext[0],"brown ",0,5)){ - LoadTextureSave(":Data:Textures:fur3.jpg",&player[0].skeleton.drawmodel.textureptr,1,&player[0].skeleton.skinText[0],&player[0].skeleton.skinsize); - donesomething=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(Compare(consoletext[0],"black ",0,5)){ - LoadTextureSave(":Data:Textures:fur2.jpg",&player[0].skeleton.drawmodel.textureptr,1,&player[0].skeleton.skinText[0],&player[0].skeleton.skinsize); - donesomething=1; + } + if(i==MAC_ARROW_DOWN_KEY){ + if(archiveselected>0)archiveselected--; + for(j=0;j<255;j++){ + consolechars[0]=consolechars[archiveselected]; + consoletext[0][j]=consoletext[archiveselected][j]; + consoleselected=consolechars[0]; } + } + if(i==MAC_ARROW_LEFT_KEY&&consoleselected!=0){ + consoleselected--; + } + if(i==MAC_ARROW_RIGHT_KEY&&consoleselected0){ for(k=14;k>=1;k--){ for(j=0;j<255;j++){