X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;f=Source%2FGame.h;h=bc7ac539fc62b39b1c5fb650cdc489c1dd7a4e72;hb=42bf932baf8cecf12b4daba00c4453093aa4971a;hp=babc7413fff904f0d9ceb9657ae017344d52b0f4;hpb=4ee4eeed40f5f6a5e1811608ca53b2b8bdae5926;p=lugaru.git diff --git a/Source/Game.h b/Source/Game.h index babc741..bc7ac53 100644 --- a/Source/Game.h +++ b/Source/Game.h @@ -46,7 +46,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "Models.h" #include "Lights.h" #include "Person.h" -#include "Constants.h" #include "Sprite.h" //#include #include "Text.h" @@ -58,17 +57,104 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "gamegl.h" #include "Stereo.h" #include "Account.h" +#include "Sounds.h" + +#define NB_CAMPAIGN_MENU_ITEM 7 extern GLuint rabbittexture; +struct TextureInfo; + +class CampaignLevel +{ +private: + int width; + struct Position + { + int x; + int y; + }; +public: + std::string mapname; + std::string description; + int choosenext; + /* + 0 = Immediately load next level at the end of this one. + 1 = Go back to the world map. + 2 = Don't bring up the Fiery loading screen. Maybe other things, I've not investigated. + */ + //int numnext; // 0 on final level. As David said: he meant to add story branching, but he eventually hadn't. + std::vector nextlevel; + Position location; + + CampaignLevel() : width(10) { + choosenext = 1; + location.x = 0; + location.y = 0; + } + + int getStartX() { + return 30+120+location.x*400/512; + } + + int getStartY() { + return 30+30+(512-location.y)*400/512; + } + + int getEndX() { + return getStartX()+width; + } + + int getEndY() { + return getStartY()+width; + } + + XYZ getCenter() { + XYZ center; + center.x=getStartX()+width/2; + center.y=getStartY()+width/2; + return center; + } + + int getWidth() { + return width; + } + + istream& operator<< (istream& is) { + is.ignore(256,':'); + is.ignore(256,':'); + is.ignore(256,' '); + is >> mapname; + is.ignore(256,':'); + is >> description; + for(int pos = description.find('_');pos!=string::npos;pos = description.find('_',pos)) { + description.replace(pos,1,1,' '); + } + is.ignore(256,':'); + is >> choosenext; + is.ignore(256,':'); + int numnext,next; + is >> numnext; + for(int j=0;j> next; + nextlevel.push_back(next-1); + } + is.ignore(256,':'); + is >> location.x; + is.ignore(256,':'); + is >> location.y; + return is; + } + + friend istream& operator>> (istream& is, CampaignLevel& cl) { + return cl << is; + } +}; + class Game { public: - typedef std::map TextureList; - typedef std::map GLTextureList; - typedef TextureList::iterator TexIter; - static TextureList textures; - GLuint terraintexture; GLuint terraintexture2; GLuint terraintexture3; @@ -82,21 +168,8 @@ class Game GLuint cursortexture; GLuint Mainmenuitems[10]; - int nummenuitems; - int startx[100]; - int starty[100]; - int endx[100]; - int endy[100]; - float selectedlong[100]; - float offsetx[100]; - float offsety[100]; - float movex[100]; - float movey[100]; - float transition; - int anim; int selected; int keyselect; - int loaddistrib; int indemo; bool won; @@ -118,13 +191,8 @@ class Game float rotation,rotation2; SkyBox skybox; bool cameramode; - bool cameratogglekeydown; - bool chattogglekeydown; int olddrawmode; int drawmode; - bool drawmodetogglekeydown; - bool explodetogglekeydown; - bool detailtogglekeydown; bool firstload; bool oldbutton; @@ -144,24 +212,11 @@ class Game bool stealthloading; - int campaignnumlevels; - char campaignmapname[50][256]; - char campaigndescription[50][256]; - int campaignchoosenext[50]; - int campaignnumnext[50]; - int campaignnextlevel[50][10]; - int campaignchoicesmade; - int campaignchoices[5000]; - int campaignlocationx[50]; - int campaignlocationy[50]; - int campaignchoicenum; - int campaignchoicewhich[10]; + std::vector campaignlevels; int whichchoice; - - int numlevelspassed; - int levelorder[5000]; - int levelvisible[50]; - int levelhighlight[50]; + int actuallevel; + bool winhotspot; + bool windialogue; bool minimap; @@ -180,10 +235,6 @@ class Game XYZ cameraloc; float cameradist; - bool envtogglekeydown; - bool slomotogglekeydown; - bool texturesizetogglekeydown; - bool freezetogglekeydown; int drawtoggle; bool editorenabled; @@ -219,35 +270,46 @@ class Game bool displayblink; int displayselected; bool consolekeydown; - bool consoletogglekeydown; float consoleblinkdelay; bool consoleblink; int consoleselected; - //int togglekey[140]; - //float togglekeydelay[140]; - bool registernow; bool autocam; unsigned short crouchkey,jumpkey,forwardkey,chatkey,backkey,leftkey,rightkey,drawkey,throwkey,attackkey; + unsigned short consolekey; bool oldattackkey; - static void LoadTexture(const char *fileName, GLuint *textureid,int mipmap, bool hasalpha); - static void LoadTextureSave(const char *fileName, GLuint *textureid,int mipmap,GLubyte *array, int *skinsize); + static void LoadTexture(const string fileName, GLuint *textureid,int mipmap, bool hasalpha); + static void LoadTextureSave(const string fileName, GLuint *textureid,int mipmap,GLubyte *array, int *skinsize); void LoadSave(const char *fileName, GLuint *textureid,bool mipmap,GLubyte *array, int *skinsize); - bool AddClothes(const char *fileName, GLuint *textureid,bool mipmap,GLubyte *array, int *skinsize); + bool AddClothes(const char *fileName, GLubyte *array); void InitGame(); + void LoadScreenTexture(); void LoadStuff(); void LoadingScreen(); + void LoadCampaign(); + static std::vector ListCampaigns(); void FadeLoadingScreen(float howmuch); void Dispose(); int DrawGLScene(StereoSide side); + void DrawMenu(); + void DrawGL(); + //factored from Tick() -sf17k + void MenuTick(); + void doTutorial(); + void doDebugKeys(); + void doJumpReversals(); + void doAerialAcrobatics(); + void doAttacks(); + void doPlayerCollisions(); + void doAI(int i); + //end factored void Tick(); void TickOnce(); void TickOnceAfter(); void SetUpLighting(); void Loadlevel(int which); - void Loadlevel(char *name); - void LoadSounds(); + void Loadlevel(const char *name); void Setenvironment(int which); GLvoid ReSizeGLScene(float fov, float near); int findPathDist(int start,int end); @@ -297,7 +359,6 @@ class Game void inputText(char* str, int* charselected, int* nb_chars); void flash(); bool waiting; - bool mainmenutogglekeydown; //int mainmenu; Account* accountactive; }; @@ -318,4 +379,47 @@ extern "C" { void UndefinedSymbolToExposeStubbedCode(void); } #define STUBBED(x) { static bool seen = false; if (!seen) { seen = true; fprintf(stderr, "STUBBED: %s at %s:%d\n", x, __FILE__, __LINE__); } } //#define STUBBED(x) +extern int numplayers; + +extern int numdialogues; +const int max_dialogues = 20; +const int max_dialoguelength = 20; +extern int numdialogueboxes[max_dialogues]; +extern int dialoguetype[max_dialogues]; +extern int dialogueboxlocation[max_dialogues][max_dialoguelength]; +extern float dialogueboxcolor[max_dialogues][max_dialoguelength][3]; +extern int dialogueboxsound[max_dialogues][max_dialoguelength]; +extern char dialoguetext[max_dialogues][max_dialoguelength][128]; +extern char dialoguename[max_dialogues][max_dialoguelength][64]; +extern XYZ dialoguecamera[max_dialogues][max_dialoguelength]; +extern XYZ participantlocation[max_dialogues][10]; +extern int participantfocus[max_dialogues][max_dialoguelength]; +extern int participantaction[max_dialogues][max_dialoguelength]; +extern float participantrotation[max_dialogues][10]; +extern XYZ participantfacing[max_dialogues][max_dialoguelength][10]; +extern float dialoguecamerarotation[max_dialogues][max_dialoguelength]; +extern float dialoguecamerarotation2[max_dialogues][max_dialoguelength]; +extern int indialogue; +extern int whichdialogue; +extern int directing; +extern float dialoguetime; +extern int dialoguegonethrough[20]; + +enum maptypes { + mapkilleveryone, mapgosomewhere, + mapkillsomeone, mapkillmost // These two are unused +}; + +enum pathtypes {wpkeepwalking, wppause}; + +static const char *pathtypenames[] = {"keepwalking", "pause"}; + +enum editortypes {typeactive, typesitting, typesittingwall, typesleeping, + typedead1, typedead2, typedead3, typedead4}; + +static const char *editortypenames[] = { + "active", "sitting", "sitting wall", "sleeping", + "dead1", "dead2", "dead3", "dead4" +}; + #endif