X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;f=Source%2FGameInitDispose.cpp;h=a1e96031da4ccf4d13245e7a971ca721384b8097;hb=77f22d0571ddca7bbfd1d1f621d61785d375c889;hp=a02c05b0cb34b769224f36c1dcd99dc0a0b783ac;hpb=25e3d5e35a7fd7efdffc420efe3c41a91cefe43f;p=lugaru.git diff --git a/Source/GameInitDispose.cpp b/Source/GameInitDispose.cpp index a02c05b..a1e9603 100644 --- a/Source/GameInitDispose.cpp +++ b/Source/GameInitDispose.cpp @@ -1,53 +1,47 @@ /* Copyright (C) 2003, 2010 - Wolfire Games +Copyright (C) 2010-2017 - Lugaru contributors (see AUTHORS file) This file is part of Lugaru. -Lugaru is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. +Lugaru is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. -This program is distributed in the hope that it will be useful, +Lugaru is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -See the GNU General Public License for more details. +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +along with Lugaru. If not, see . */ -#include "Game.h" -#include "openal_wrapper.h" -#include "Animation.h" -#include "Texture.h" +#include "Game.hpp" + +#include "Animation/Animation.hpp" +#include "Audio/openal_wrapper.hpp" +#include "Graphic/Texture.hpp" +#include "Menu/Menu.hpp" +#include "Utils/Folders.hpp" extern float screenwidth, screenheight; extern float viewdistance; extern XYZ viewer; -extern XYZ lightlocation; extern float fadestart; extern float texscale; extern float gravity; extern Light light; -extern Skeleton testskeleton; -extern int numsounds; extern Terrain terrain; -//extern Sprites sprites; extern int kTextureSize; extern float texdetail; extern float realtexdetail; extern float volume; -extern Objects objects; extern int detail; extern bool cellophane; -extern GLubyte bloodText[512 * 512 * 3]; -extern GLubyte wolfbloodText[512 * 512 * 3]; extern bool ismotionblur; extern bool trilinear; -extern bool osx; extern bool musictoggle; extern int environment; extern bool ambientsound; @@ -55,35 +49,15 @@ extern float multiplier; extern int netdatanew; extern float mapinfo; extern bool stillloading; -extern TGAImageRec texture; -extern short vRefNum; -extern long dirID; extern int mainmenu; extern bool visibleloading; extern float flashamount, flashr, flashg, flashb; extern int flashdelay; extern int whichjointstartarray[26]; extern int whichjointendarray[26]; -extern int difficulty; -extern float tintr, tintg, tintb; extern float slomospeed; extern bool gamestarted; -extern int numdialogues; -extern int numdialogueboxes[20]; -extern int dialoguetype[20]; -extern int dialogueboxlocation[20][20]; -extern float dialogueboxcolor[20][20][3]; -extern int dialogueboxsound[20][20]; -extern char dialoguetext[20][20][128]; -extern char dialoguename[20][20][64]; -extern XYZ dialoguecamera[20][20]; -extern float dialoguecamerayaw[20][20]; -extern float dialoguecamerapitch[20][20]; -extern int indialogue; -extern int whichdialogue; -extern float dialoguetime; - extern float accountcampaignhighscore[10]; extern float accountcampaignfasttime[10]; extern float accountcampaignscore[10]; @@ -92,7 +66,7 @@ extern float accountcampaigntime[10]; extern int accountcampaignchoicesmade[10]; extern int accountcampaignchoices[10][5000]; -void LOG(const std::string &fmt, ...) +void LOG(const std::string&, ...) { // !!! FIXME: write me. } @@ -102,11 +76,11 @@ void Dispose() LOGFUNC; if (Game::endgame == 2) { - Game::accountactive->endGame(); + Account::active().endGame(); Game::endgame = 0; } - Account::saveFile(":Data:Users", Game::accountactive); + Account::saveFile(Folders::getUserSavePath()); //textures.clear(); @@ -123,36 +97,21 @@ void Dispose() } OPENAL_Close(); - if (texture.data) { - free(texture.data); - } - texture.data = 0; #endif } void Game::newGame() { text = new Text(); + textmono = new Text(); skybox = new SkyBox(); } void Game::deleteGame() { - if (skybox) - delete skybox; - if (text) - delete text; - terraintexture.destroy(); - terraintexture2.destroy(); - cursortexture.destroy(); - Maparrowtexture.destroy(); - Mapboxtexture.destroy(); - Mapcircletexture.destroy(); - hawktexture.destroy(); - loadscreentexture.destroy(); - - for (int i = 0; i < 10; i++) - Mainmenuitems[i].destroy(); + delete skybox; + delete text; + delete textmono; glDeleteTextures(1, &screentexture); glDeleteTextures(1, &screentexture2); @@ -160,13 +119,8 @@ void Game::deleteGame() Dispose(); } - - -void LoadSave(const char *fileName, GLuint *textureid, bool mipmap, GLubyte *array, int *skinsize) +void LoadSave(const std::string& fileName, GLubyte* array) { - int i; - int bytesPerPixel; - LOGFUNC; LOG(std::string("Loading (S)...") + fileName); @@ -174,35 +128,26 @@ void LoadSave(const char *fileName, GLuint *textureid, bool mipmap, GLubyte *arr //Load Image float temptexdetail = texdetail; texdetail = 1; - //upload_image( fileName ); - //LoadTGA( fileName ); - // Converting file to something os specific - char * fixedFN = ConvertFileName(fileName); - - //Load Image - unsigned char fileNamep[256]; - CopyCStringToPascal(fixedFN, fileNamep); //Load Image - upload_image( fileNamep , 0); + ImageRec texture; + if (!load_image(Folders::getResourcePath(fileName).c_str(), texture)) { + texdetail = temptexdetail; + return; + } texdetail = temptexdetail; - //Is it valid? - if (1 == 1) { - bytesPerPixel = texture.bpp / 8; + int bytesPerPixel = texture.bpp / 8; - int tempnum = 0; - for (i = 0; i < (int)(texture.sizeY * texture.sizeX * bytesPerPixel); i++) { - if ((i + 1) % 4 || bytesPerPixel == 3) { - array[tempnum] = texture.data[i]; - tempnum++; - } + int tempnum = 0; + for (int i = 0; i < (int)(texture.sizeY * texture.sizeX * bytesPerPixel); i++) { + if ((i + 1) % 4 || bytesPerPixel == 3) { + array[tempnum] = texture.data[i]; + tempnum++; } } } - - //***************> ResizeGLScene() <******/ GLvoid Game::ReSizeGLScene(float fov, float pnear) { @@ -223,22 +168,28 @@ GLvoid Game::ReSizeGLScene(float fov, float pnear) void Game::LoadingScreen() { + if (!visibleloading) { + return; + } + static float loadprogress; - static AbsoluteTime time = {0, 0}; - static AbsoluteTime frametime = {0, 0}; - AbsoluteTime currTime = UpTime (); - double deltaTime = (float) AbsoluteDeltaToDuration (currTime, frametime); + static AbsoluteTime frametime = { 0, 0 }; + AbsoluteTime currTime = UpTime(); + double deltaTime = (float)AbsoluteDeltaToDuration(currTime, frametime); - if (0 > deltaTime) // if negative microseconds + if (0 > deltaTime) { // if negative microseconds deltaTime /= -1000000.0; - else // else milliseconds + } else { // else milliseconds deltaTime /= 1000.0; + } multiplier = deltaTime; - if (multiplier < .001) + if (multiplier < .001) { multiplier = .001; - if (multiplier > 10) + } + if (multiplier > 10) { multiplier = 10; + } if (multiplier > .05) { frametime = currTime; // reset for next time interval @@ -247,21 +198,19 @@ void Game::LoadingScreen() glClearColor(0, 0, 0, 1); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - loadtime += multiplier * 4; loadprogress = loadtime; - if (loadprogress > 100) + if (loadprogress > 100) { loadprogress = 100; - - //loadprogress=abs(Random()%100); + } //Background glEnable(GL_TEXTURE_2D); loadscreentexture.bind(); - glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT ); - glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT ); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glDisable(GL_DEPTH_TEST); glDisable(GL_CULL_FACE); glDisable(GL_LIGHTING); @@ -279,7 +228,6 @@ void Game::LoadingScreen() glDisable(GL_BLEND); glColor4f(loadprogress / 100, loadprogress / 100, loadprogress / 100, 1); glPushMatrix(); - //glScalef(.25,.25,.25); glBegin(GL_QUADS); glTexCoord2f(.1 - loadprogress / 100, 0 + loadprogress / 100 + .3); glVertex3f(-1, -1, 0.0f); @@ -293,7 +241,6 @@ void Game::LoadingScreen() glPopMatrix(); glEnable(GL_BLEND); glPushMatrix(); - //glScalef(.25,.25,.25); glBegin(GL_QUADS); glTexCoord2f(.4 + loadprogress / 100, 0 + loadprogress / 100); glVertex3f(-1, -1, 0.0f); @@ -315,8 +262,8 @@ void Game::LoadingScreen() glEnable(GL_TEXTURE_2D); loadscreentexture.bind(); - glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT ); - glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT ); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glDisable(GL_DEPTH_TEST); glDisable(GL_CULL_FACE); glDisable(GL_LIGHTING); @@ -332,10 +279,8 @@ void Game::LoadingScreen() glScalef((float)screenwidth / 2 * (1.5 - (loadprogress) / 200), (float)screenheight / 2 * (1.5 - (loadprogress) / 200), 1); glBlendFunc(GL_SRC_ALPHA, GL_ONE); glEnable(GL_BLEND); - //glColor4f(loadprogress/100,loadprogress/100,loadprogress/100,1); glColor4f(loadprogress / 100, loadprogress / 100, loadprogress / 100, 1); glPushMatrix(); - //glScalef(.25,.25,.25); glBegin(GL_QUADS); glTexCoord2f(0 + .5, 0 + .5); glVertex3f(-1, -1, 0.0f); @@ -357,8 +302,8 @@ void Game::LoadingScreen() glEnable(GL_TEXTURE_2D); loadscreentexture.bind(); - glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT ); - glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT ); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glDisable(GL_DEPTH_TEST); glDisable(GL_CULL_FACE); glDisable(GL_LIGHTING); @@ -376,7 +321,6 @@ void Game::LoadingScreen() glEnable(GL_BLEND); glColor4f(loadprogress / 100, loadprogress / 100, loadprogress / 100, .4); glPushMatrix(); - //glScalef(.25,.25,.25); glBegin(GL_QUADS); glTexCoord2f(0 + .2, 0 + .8); glVertex3f(-1, -1, 0.0f); @@ -399,13 +343,16 @@ void Game::LoadingScreen() //Text if (flashamount > 0) { - if (flashamount > 1) + if (flashamount > 1) { flashamount = 1; - if (flashdelay <= 0) + } + if (flashdelay <= 0) { flashamount -= multiplier; + } flashdelay--; - if (flashamount < 0) + if (flashamount < 0) { flashamount = 0; + } glDisable(GL_DEPTH_TEST); glDisable(GL_CULL_FACE); glDisable(GL_LIGHTING); @@ -453,15 +400,11 @@ void FadeLoadingScreen(float howmuch) loadprogress = howmuch; - //loadprogress=abs(Random()%100); - //Background - //glEnable(GL_TEXTURE_2D); glDisable(GL_TEXTURE_2D); - //glBindTexture( GL_TEXTURE_2D, loadscreentexture); - glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE ); - glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE ); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); glDisable(GL_DEPTH_TEST); glDisable(GL_CULL_FACE); glDisable(GL_LIGHTING); @@ -479,7 +422,6 @@ void FadeLoadingScreen(float howmuch) glDisable(GL_BLEND); glColor4f(loadprogress / 100, 0, 0, 1); glPushMatrix(); - //glScalef(.25,.25,.25); glBegin(GL_QUADS); glTexCoord2f(0, 0); glVertex3f(-1, -1, 0.0f); @@ -502,40 +444,13 @@ void FadeLoadingScreen(float howmuch) swap_gl_buffers(); } - -extern bool cmdline(const char *cmd); - void Game::InitGame() { -#if PLATFORM_MACOSX - ProcessSerialNumber PSN; - ProcessInfoRec pinfo; - FSSpec pspec; - OSStatus err; - /* set up process serial number */ - PSN.highLongOfPSN = 0; - PSN.lowLongOfPSN = kCurrentProcess; - /* set up info block */ - pinfo.processInfoLength = sizeof(pinfo); - pinfo.processName = NULL; - pinfo.processAppSpec = &pspec; - /* grab the vrefnum and directory */ - err = GetProcessInformation(&PSN, &pinfo); - if (err == noErr) { - vRefNum = pspec.vRefNum; - dirID = pspec.parID; - } -#endif - LOGFUNC; numchallengelevels = 14; - accountactive = Account::loadFile(":Data:Users"); - - tintr = 1; - tintg = 1; - tintb = 1; + Account::loadFile(Folders::getUserSavePath()); whichjointstartarray[0] = righthip; whichjointendarray[0] = rightfoot; @@ -619,12 +534,12 @@ void Game::InitGame() stillloading = 1; - texture.data = ( GLubyte* )malloc( 1024 * 1024 * 4 ); - int temptexdetail = texdetail; texdetail = 1; - text->LoadFontTexture(":Data:Textures:Font.png"); + text->LoadFontTexture("Textures/Font.png"); text->BuildFont(); + textmono->LoadFontTexture("Textures/FontMono.png"); + textmono->BuildFont(); texdetail = temptexdetail; FadeLoadingScreen(10); @@ -641,104 +556,79 @@ void Game::InitGame() LOG("Initializing sound system..."); -#if PLATFORM_LINUX - int output = -1; - - unsigned char rc = 0; - output = OPENAL_OUTPUT_ALSA; // Try alsa first... - if (cmdline("forceoss")) // ...but let user override that. - output = OPENAL_OUTPUT_OSS; - else if (cmdline("nosound")) - output = OPENAL_OUTPUT_NOSOUND; - - OPENAL_SetOutput(output); - if ((rc = OPENAL_Init(44100, 32, 0)) == false) { - // if we tried ALSA and failed, fall back to OSS. - if ( (output == OPENAL_OUTPUT_ALSA) && (!cmdline("forcealsa")) ) { - OPENAL_Close(); - output = OPENAL_OUTPUT_OSS; - OPENAL_SetOutput(output); - rc = OPENAL_Init(44100, 32, 0); - } - } - - if (rc == false) { - OPENAL_Close(); - output = OPENAL_OUTPUT_NOSOUND; // we tried! just do silence. - OPENAL_SetOutput(output); - rc = OPENAL_Init(44100, 32, 0); - } -#else OPENAL_Init(44100, 32, 0); -#endif OPENAL_SetSFXMasterVolume((int)(volume * 255)); loadAllSounds(); - if (musictoggle) + if (musictoggle) { emit_stream_np(stream_menutheme); + } - cursortexture.load(":Data:Textures:Cursor.png", 0, 1); + cursortexture.load("Textures/Cursor.png", 0); - Mapcircletexture.load(":Data:Textures:MapCircle.png", 0, 1); - Mapboxtexture.load(":Data:Textures:MapBox.png", 0, 1); - Maparrowtexture.load(":Data:Textures:MapArrow.png", 0, 1); + Mapcircletexture.load("Textures/MapCircle.png", 0); + Mapboxtexture.load("Textures/MapBox.png", 0); + Maparrowtexture.load("Textures/MapArrow.png", 0); temptexdetail = texdetail; - if (texdetail > 2) + if (texdetail > 2) { texdetail = 2; - Mainmenuitems[0].load(":Data:Textures:Lugaru.png", 0, 0); - Mainmenuitems[1].load(":Data:Textures:Newgame.png", 0, 0); - Mainmenuitems[2].load(":Data:Textures:Options.png", 0, 0); - Mainmenuitems[3].load(":Data:Textures:Quit.png", 0, 0); - Mainmenuitems[4].load(":Data:Textures:Eyelid.png", 0, 1); - Mainmenuitems[5].load(":Data:Textures:Resume.png", 0, 0); - Mainmenuitems[6].load(":Data:Textures:Endgame.png", 0, 0); - - //LoadTexture(":Data:Textures:Eye.jpg",&Mainmenuitems[5],0,1); - //~ LoadTexture(":Data:Textures:World.png",&Mainmenuitems[7],0,0); // LoadCampaign will take care of that + } + Mainmenuitems[0].load("Textures/Lugaru.png", 0); + Mainmenuitems[1].load("Textures/NewGame.png", 0); + Mainmenuitems[2].load("Textures/Options.png", 0); + Mainmenuitems[3].load("Textures/Quit.png", 0); + Mainmenuitems[4].load("Textures/Eyelid.png", 0); + Mainmenuitems[5].load("Textures/Resume.png", 0); + Mainmenuitems[6].load("Textures/EndGame.png", 0); + texdetail = temptexdetail; FadeLoadingScreen(95); - gameon = 0; mainmenu = 1; stillloading = 0; - firstload = 0; + firstLoadDone = false; newdetail = detail; newscreenwidth = screenwidth; newscreenheight = screenheight; - LoadMenu(); -} + Menu::Load(); + Animation::loadAll(); + + PersonType::Load(); + + Person::players.emplace_back(new Person()); +} void Game::LoadScreenTexture() { - glPixelStorei( GL_UNPACK_ALIGNMENT, 1 ); - - if (!Game::screentexture) - glGenTextures( 1, &Game::screentexture ); - glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE ); + glPixelStorei(GL_UNPACK_ALIGNMENT, 1); + if (!Game::screentexture) { + glGenTextures(1, &Game::screentexture); + } + glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); glEnable(GL_TEXTURE_2D); - glBindTexture( GL_TEXTURE_2D, Game::screentexture); - glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR ); - glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR ); + glBindTexture(GL_TEXTURE_2D, Game::screentexture); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 0, 0, kTextureSize, kTextureSize, 0); } -//TODO: move LoadStuff() closer to GameTick.cpp to get rid of various vars shared in Game.h +//TODO: move LoadStuff() closer to GameTick.cpp to get rid of various vars shared in Game.hpp +/* Loads models and textures which only needs to be loaded once */ void Game::LoadStuff() { - static float temptexdetail; - static float viewdistdetail; - static int i, j; + float temptexdetail; + float viewdistdetail; float megascale = 1; LOGFUNC; @@ -747,101 +637,56 @@ void Game::LoadStuff() stillloading = 1; - for (i = 0; i < maxplayers; i++) - player[i].skeleton.drawmodel.textureptr.destroy(); - - i = abs(Random() % 4); - visibleloading = 0; //don't use loadscreentexture yet - loadscreentexture.load(":Data:Textures:fire.jpg", 1, 0); - visibleloading = 1; + visibleloading = false; //don't use loadscreentexture yet + loadscreentexture.load("Textures/Fire.jpg", 1); + visibleloading = true; temptexdetail = texdetail; texdetail = 1; - text->LoadFontTexture(":Data:Textures:Font.png"); + text->LoadFontTexture("Textures/Font.png"); text->BuildFont(); + textmono->LoadFontTexture("Textures/FontMono.png"); + textmono->BuildFont(); texdetail = temptexdetail; - numsounds = 71; - viewdistdetail = 2; viewdistance = 50 * megascale * viewdistdetail; if (detail == 2) { texdetail = 1; - } - if (detail == 1) { + kTextureSize = 1024; + } else if (detail == 1) { texdetail = 2; - } - if (detail == 0) { + kTextureSize = 512; + } else { texdetail = 4; + kTextureSize = 256; } realtexdetail = texdetail; - numplayers = 1; - - - LOG("Loading weapon data..."); - - Weapon::knifetextureptr.load(":Data:Textures:knife.png", 0, 1); - Weapon::bloodknifetextureptr.load(":Data:Textures:bloodknife.png", 0, 1); - Weapon::lightbloodknifetextureptr.load(":Data:Textures:lightbloodknife.png", 0, 1); - Weapon::swordtextureptr.load(":Data:Textures:sword.jpg", 1, 0); - Weapon::bloodswordtextureptr.load(":Data:Textures:Swordblood.jpg", 1, 0); - Weapon::lightbloodswordtextureptr.load(":Data:Textures:Swordbloodlight.jpg", 1, 0); - Weapon::stafftextureptr.load(":Data:Textures:Staff.jpg", 1, 0); - - Weapon::throwingknifemodel.load((char *)":Data:Models:throwingknife.solid", 1); - Weapon::throwingknifemodel.Scale(.001, .001, .001); - //Weapon::throwingknifemodel.Rotate(0,0,-90); - Weapon::throwingknifemodel.Rotate(90, 0, 0); - Weapon::throwingknifemodel.Rotate(0, 90, 0); - Weapon::throwingknifemodel.flat = 0; - Weapon::throwingknifemodel.CalculateNormals(1); - //Weapon::throwingknifemodel.ScaleNormals(-1,-1,-1); - - Weapon::swordmodel.load((char *)":Data:Models:sword.solid", 1); - Weapon::swordmodel.Scale(.001, .001, .001); - //Weapon::swordmodel.Rotate(0,0,-90); - Weapon::swordmodel.Rotate(90, 0, 0); - Weapon::swordmodel.Rotate(0, 90, 0); - Weapon::swordmodel.Rotate(0, 0, 90); - Weapon::swordmodel.flat = 1; - Weapon::swordmodel.CalculateNormals(1); - //Weapon::swordmodel.ScaleNormals(-1,-1,-1); - - Weapon::staffmodel.load((char *)":Data:Models:staff.solid", 1); - Weapon::staffmodel.Scale(.005, .005, .005); - //Weapon::staffmodel.Rotate(0,0,-90); - Weapon::staffmodel.Rotate(90, 0, 0); - Weapon::staffmodel.Rotate(0, 90, 0); - Weapon::staffmodel.Rotate(0, 0, 90); - Weapon::staffmodel.flat = 1; - Weapon::staffmodel.CalculateNormals(1); - //Weapon::staffmodel.ScaleNormals(-1,-1,-1); - - terrain.shadowtexture.load(":Data:Textures:shadow.png", 0, 1); - terrain.bloodtexture.load(":Data:Textures:blood.png", 0, 1); - terrain.breaktexture.load(":Data:Textures:break.png", 0, 1); - terrain.bloodtexture2.load(":Data:Textures:blood.png", 0, 1); - - - terrain.footprinttexture.load(":Data:Textures:footprint.png", 0, 1); - terrain.bodyprinttexture.load(":Data:Textures:bodyprint.png", 0, 1); - hawktexture.load(":Data:Textures:hawk.png", 0, 1); - - - Sprite::cloudtexture.load(":Data:Textures:cloud.png", 1, 1); - Sprite::cloudimpacttexture.load(":Data:Textures:cloudimpact.png", 1, 1); - Sprite::bloodtexture.load(":Data:Textures:bloodparticle.png", 1, 1); - Sprite::snowflaketexture.load(":Data:Textures:snowflake.png", 1, 1); - Sprite::flametexture.load(":Data:Textures:flame.png", 1, 1); - Sprite::bloodflametexture.load(":Data:Textures:bloodflame.png", 1, 1); - Sprite::smoketexture.load(":Data:Textures:smoke.png", 1, 1); - Sprite::shinetexture.load(":Data:Textures:shine.png", 1, 0); - Sprite::splintertexture.load(":Data:Textures:splinter.png", 1, 1); - Sprite::leaftexture.load(":Data:Textures:leaf.png", 1, 1); - Sprite::toothtexture.load(":Data:Textures:tooth.png", 1, 1); + Weapon::Load(); + + terrain.shadowtexture.load("Textures/Shadow.png", 0); + terrain.bloodtexture.load("Textures/Blood.png", 0); + terrain.breaktexture.load("Textures/Break.png", 0); + terrain.bloodtexture2.load("Textures/Blood.png", 0); + + terrain.footprinttexture.load("Textures/Footprint.png", 0); + terrain.bodyprinttexture.load("Textures/Bodyprint.png", 0); + hawktexture.load("Textures/Hawk.png", 0); + + Sprite::cloudtexture.load("Textures/Cloud.png", 1); + Sprite::cloudimpacttexture.load("Textures/CloudImpact.png", 1); + Sprite::bloodtexture.load("Textures/BloodParticle.png", 1); + Sprite::snowflaketexture.load("Textures/SnowFlake.png", 1); + Sprite::flametexture.load("Textures/Flame.png", 1); + Sprite::bloodflametexture.load("Textures/BloodFlame.png", 1); + Sprite::smoketexture.load("Textures/Smoke.png", 1); + Sprite::shinetexture.load("Textures/Shine.png", 1); + Sprite::splintertexture.load("Textures/Splinter.png", 1); + Sprite::leaftexture.load("Textures/Leaf.png", 1); + Sprite::toothtexture.load("Textures/Tooth.png", 1); yaw = 0; pitch = 0; @@ -849,14 +694,6 @@ void Game::LoadStuff() viewer = 0; - - if (detail) - kTextureSize = 1024; - if (detail == 1) - kTextureSize = 512; - if (detail == 0) - kTextureSize = 256; - //Set up distant light light.color[0] = .95; light.color[1] = .95; @@ -873,7 +710,6 @@ void Game::LoadStuff() SetUpLighting(); - fadestart = .6; gravity = -10; @@ -883,7 +719,7 @@ void Game::LoadStuff() viewer.x = terrain.size / 2 * terrain.scale; viewer.z = terrain.size / 2 * terrain.scale; - hawk.load((char *)":Data:Models:hawk.solid", 1); + hawk.load("Models/Hawk.solid"); hawk.Scale(.03, .03, .03); hawk.Rotate(90, 1, 1); hawk.CalculateNormals(0); @@ -892,88 +728,82 @@ void Game::LoadStuff() hawkcoords.z = terrain.size / 2 * terrain.scale - 5 - 7; hawkcoords.y = terrain.getHeight(hawkcoords.x, hawkcoords.z) + 25; - eye.load((char *)":Data:Models:eye.solid", 1); + eye.load("Models/Eye.solid"); eye.Scale(.03, .03, .03); eye.CalculateNormals(0); - cornea.load((char *)":Data:Models:cornea.solid", 1); + cornea.load("Models/Cornea.solid"); cornea.Scale(.03, .03, .03); cornea.CalculateNormals(0); - iris.load((char *)":Data:Models:iris.solid", 1); + iris.load("Models/Iris.solid"); iris.Scale(.03, .03, .03); iris.CalculateNormals(0); - LoadSave(":Data:Textures:Bloodfur.png", 0, 1, &bloodText[0], 0); - LoadSave(":Data:Textures:Wolfbloodfur.png", 0, 1, &wolfbloodText[0], 0); + LoadSave("Textures/WolfBloodFur.png", &PersonType::types[wolftype].bloodText[0]); + LoadSave("Textures/BloodFur.png", &PersonType::types[rabbittype].bloodText[0]); oldenvironment = -4; gameon = 1; mainmenu = 0; - firstload = 0; - - loadAllAnimations(); //Fix knife stab, too lazy to do it manually XYZ moveamount; moveamount = 0; moveamount.z = 2; - for (i = 0; i < player[0].skeleton.num_joints; i++) { - for (j = 0; j < animation[knifesneakattackanim].numframes; j++) { - animation[knifesneakattackanim].position[i][j] += moveamount; + // FIXME - Why this uses skeleton.joints.size() and not Animation::numjoints? (are they equal?) + // It seems skeleton.joints.size() is 0 at this point, so this is useless. + for (unsigned i = 0; i < Person::players[0]->skeleton.joints.size(); i++) { + for (unsigned j = 0; j < Animation::animations[knifesneakattackanim].frames.size(); j++) { + Animation::animations[knifesneakattackanim].frames[j].joints[i].position += moveamount; } } LoadingScreen(); - for (i = 0; i < player[0].skeleton.num_joints; i++) { - for (j = 0; j < animation[knifesneakattackedanim].numframes; j++) { - animation[knifesneakattackedanim].position[i][j] += moveamount; + for (unsigned i = 0; i < Person::players[0]->skeleton.joints.size(); i++) { + for (unsigned j = 0; j < Animation::animations[knifesneakattackedanim].frames.size(); j++) { + Animation::animations[knifesneakattackedanim].frames[j].joints[i].position += moveamount; } } LoadingScreen(); - for (i = 0; i < player[0].skeleton.num_joints; i++) { - animation[dead1anim].position[i][1] = animation[dead1anim].position[i][0]; - animation[dead2anim].position[i][1] = animation[dead2anim].position[i][0]; - animation[dead3anim].position[i][1] = animation[dead3anim].position[i][0]; - animation[dead4anim].position[i][1] = animation[dead4anim].position[i][0]; + for (unsigned i = 0; i < Person::players[0]->skeleton.joints.size(); i++) { + Animation::animations[dead1anim].frames[1].joints[i].position = Animation::animations[dead1anim].frames[0].joints[i].position; + Animation::animations[dead2anim].frames[1].joints[i].position = Animation::animations[dead2anim].frames[0].joints[i].position; + Animation::animations[dead3anim].frames[1].joints[i].position = Animation::animations[dead3anim].frames[0].joints[i].position; + Animation::animations[dead4anim].frames[1].joints[i].position = Animation::animations[dead4anim].frames[0].joints[i].position; } - animation[dead1anim].speed[0] = 0.001; - animation[dead2anim].speed[0] = 0.001; - animation[dead3anim].speed[0] = 0.001; - animation[dead4anim].speed[0] = 0.001; - - animation[dead1anim].speed[1] = 0.001; - animation[dead2anim].speed[1] = 0.001; - animation[dead3anim].speed[1] = 0.001; - animation[dead4anim].speed[1] = 0.001; - - for (i = 0; i < player[0].skeleton.num_joints; i++) { - for (j = 0; j < animation[swordsneakattackanim].numframes; j++) { - animation[swordsneakattackanim].position[i][j] += moveamount; + Animation::animations[dead1anim].frames[0].speed = 0.001; + Animation::animations[dead2anim].frames[0].speed = 0.001; + Animation::animations[dead3anim].frames[0].speed = 0.001; + Animation::animations[dead4anim].frames[0].speed = 0.001; + + Animation::animations[dead1anim].frames[1].speed = 0.001; + Animation::animations[dead2anim].frames[1].speed = 0.001; + Animation::animations[dead3anim].frames[1].speed = 0.001; + Animation::animations[dead4anim].frames[1].speed = 0.001; + + for (unsigned i = 0; i < Person::players[0]->skeleton.joints.size(); i++) { + for (unsigned j = 0; j < Animation::animations[swordsneakattackanim].frames.size(); j++) { + Animation::animations[swordsneakattackanim].frames[j].joints[i].position += moveamount; } } LoadingScreen(); - for (j = 0; j < animation[swordsneakattackanim].numframes; j++) { - animation[swordsneakattackanim].weapontarget[j] += moveamount; + for (unsigned j = 0; j < Animation::animations[swordsneakattackanim].frames.size(); j++) { + Animation::animations[swordsneakattackanim].frames[j].weapontarget += moveamount; } LoadingScreen(); - for (i = 0; i < player[0].skeleton.num_joints; i++) { - for (j = 0; j < animation[swordsneakattackedanim].numframes; j++) { - animation[swordsneakattackedanim].position[i][j] += moveamount; + for (unsigned i = 0; i < Person::players[0]->skeleton.joints.size(); i++) { + for (unsigned j = 0; j < Animation::animations[swordsneakattackedanim].frames.size(); j++) { + Animation::animations[swordsneakattackedanim].frames[j].joints[i].position += moveamount; } } - LoadingScreen(); - temptexdetail = texdetail; - texdetail = 1; - texdetail = temptexdetail; - LoadingScreen(); if (!screentexture) { @@ -988,6 +818,6 @@ void Game::LoadStuff() loading = 0; changedelay = 1; - visibleloading = 0; + visibleloading = false; + firstLoadDone = true; } -