]> git.jsancho.org Git - lugaru.git/commitdiff
Move player account handling into separate class
authorCôme BERNIGAUD <come.bernigaud@gmail.com>
Sat, 5 Jun 2010 20:51:18 +0000 (00:51 +0400)
committerCôme BERNIGAUD <come.bernigaud@gmail.com>
Sat, 5 Jun 2010 20:51:18 +0000 (00:51 +0400)
---
 CMakeLists.txt             |    2 +
 Source/Account.cpp         |  221 ++++++++++++++++++++++++++++++
 Source/Account.h           |   90 ++++++++++++
 Source/GameDraw.cpp        |  142 ++++++++-----------
 Source/GameInitDispose.cpp |  117 +----------------
 Source/GameTick.cpp        |  324 ++++++++++----------------------------------
 Source/Globals.cpp         |   14 --
 7 files changed, 452 insertions(+), 458 deletions(-)
 create mode 100644 Source/Account.cpp
 create mode 100644 Source/Account.h

CMakeLists.txt
Source/Account.cpp [new file with mode: 0644]
Source/Account.h [new file with mode: 0644]
Source/GameDraw.cpp
Source/GameInitDispose.cpp
Source/GameTick.cpp
Source/Globals.cpp

index 766bd3768640f4d3152b7458b5168d6b8a442499..d19e669fec7ad13cbf9bf921ef5499e4fe98acb6 100644 (file)
@@ -52,6 +52,7 @@ set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/")
 
 set(LUGARU_SRCS
        ${SRCDIR}/Frustum.cpp
+       ${SRCDIR}/Account.cpp
        ${SRCDIR}/GameDraw.cpp
        ${SRCDIR}/GameInitDispose.cpp
        ${SRCDIR}/GameTick.cpp
@@ -84,6 +85,7 @@ set(LUGARU_SRCS
 set(LUGARU_H
        ${SRCDIR}/Constants.h
        ${SRCDIR}/Frustum.h
+       ${SRCDIR}/Account.h
        ${SRCDIR}/Game.h
        ${SRCDIR}/Lights.h
        ${SRCDIR}/LinkedList.h
diff --git a/Source/Account.cpp b/Source/Account.cpp
new file mode 100644 (file)
index 0000000..90b585a
--- /dev/null
@@ -0,0 +1,221 @@
+/*
+Copyright (C) 2003, 2010 - Wolfire Games
+Copyright (C) 2010 - MCMic
+
+This file is part of Lugaru.
+
+Lugaru is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
+
+See the GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+*/
+
+#include "Account.h"
+#include "binio.h"
+#include <fstream>
+#include "MacCompatibility.h"
+#include "string.h"
+
+using namespace std;
+
+extern bool debugmode;
+
+vector<Account*> Account::accounts = vector<Account*>();
+
+Account::Account(string n) {
+       name = string(n);
+       difficulty = 0;
+       progress = 0;
+       points = 0;
+       memset(highscore, 0, sizeof(highscore));
+       memset(fasttime, 0, sizeof(fasttime));
+       memset(unlocked, 0, sizeof(unlocked));
+       campaignhighscore = 0;
+       campaignfasttime = 0;
+       campaignscore = 0;
+       campaigntime = 0;
+       campaignchoicesmade = 0;
+       memset(campaignchoices, 0, sizeof(campaignchoices));
+}
+
+Account* Account::add(string name) {
+       accounts.push_back(new Account(name));
+       return accounts.back();
+}
+
+Account* Account::get(int i) {
+       if(i<accounts.size()) {
+               return accounts[i];
+       } else
+               return NULL;
+}
+
+void Account::destroy(int i) {
+       accounts.erase(accounts.begin()+i);
+}
+Account* Account::destroy(Account* a) {
+       for(int i=0; i<accounts.size(); i++) {
+               if(accounts[i]==a) {
+                       accounts.erase(accounts.begin()+i);
+                       return NULL;
+               }
+       }
+       printf("Unexpected error : User %s not found %d\n",a->getName(),a);
+       return accounts.front();
+}
+
+int Account::getDifficulty() {
+       return difficulty;
+}
+
+void Account::endGame() {
+       campaignchoicesmade=0;
+       campaignscore=0;
+       campaigntime=0;
+}
+
+void Account::winCampaignLevel(int choice, float score, float time) {
+       campaignchoices[campaignchoicesmade++] = choice;
+       setCampaignScore(campaignscore+score);
+       campaigntime = time;
+}
+
+void Account::winLevel(int level, float score, float time) {
+       if(!debugmode) {
+               if(score>highscore[level])
+                       highscore[level]=score;
+               if(time<fasttime[level]||fasttime[level]==0)
+                       fasttime[level]=time;
+       }
+       if(progress<level+1)
+               progress=level+1;
+}
+
+Account* Account::loadFile(string filename) {
+       FILE *tfile;
+       int numaccounts;
+       int accountactive;
+       int j;
+       
+       tfile=fopen(ConvertFileName(filename.c_str()), "rb" );
+       
+       if(tfile)
+       {
+               funpackf(tfile, "Bi", &numaccounts);
+               funpackf(tfile, "Bi", &accountactive);
+               printf("number of accounts %d\n",numaccounts);
+               for(int i=0;i<numaccounts;i++)
+               {
+                       printf("loading account %d/%d\n",i,numaccounts);
+                       Account* acc = new Account();
+                       funpackf(tfile, "Bf", &(acc->campaigntime));
+                       funpackf(tfile, "Bf", &(acc->campaignscore));
+                       funpackf(tfile, "Bf", &(acc->campaignfasttime));
+                       funpackf(tfile, "Bf", &(acc->campaignhighscore));
+                       funpackf(tfile, "Bi", &(acc->difficulty));
+                       funpackf(tfile, "Bi", &(acc->progress));
+                       funpackf(tfile, "Bi", &(acc->campaignchoicesmade));
+                       for(j=0;j<acc->campaignchoicesmade;j++)
+                       {
+                               funpackf(tfile, "Bi", &(acc->campaignchoices[j]));
+                               if (acc->campaignchoices[j] >= 10)
+                               {
+                                       acc->campaignchoices[j] = 0;
+                               }
+                       }
+                       funpackf(tfile, "Bf", &(acc->points));
+                       for(j=0;j<50;j++)
+                       {
+                               funpackf(tfile, "Bf", &(acc->highscore[j]));
+                               funpackf(tfile, "Bf", &(acc->fasttime[j]));
+                       }
+                       for(j=0;j<60;j++)
+                       {
+                               funpackf(tfile, "Bb",  &(acc->unlocked[j]));
+                       }
+                       int temp;
+                       char ctemp;
+                       funpackf(tfile, "Bi",  &temp);
+                       for(j=0;j<temp;j++)
+                       {
+                               funpackf(tfile, "Bb",  &ctemp);
+                               acc->name.append(1,ctemp);
+                       }
+                       if(!strcmp(acc->name.c_str(),""))
+                               acc->name="Lugaru Player"; // no empty player name security.
+                       accounts.push_back(acc);
+               }
+
+               fclose(tfile);
+               return get(accountactive);
+       } else {
+               printf("filenotfound\n");
+               return NULL;
+       }
+}
+
+void Account::saveFile(string filename, Account* accountactive) {
+       FILE *tfile;
+       int numaccounts;
+       int j;
+       
+       tfile=fopen(ConvertFileName(filename.c_str()), "wb" );
+       if(tfile)
+       {
+               printf("writing %d accounts :\n",getNbAccounts());
+               fpackf(tfile, "Bi", getNbAccounts());
+               fpackf(tfile, "Bi", indice(accountactive));
+               
+               for(int i=0;i<getNbAccounts();i++)
+               {
+                       Account* a = Account::get(i);
+                       printf("writing account %d/%d (%s)\n",i+1,getNbAccounts(),a->getName());
+                       fpackf(tfile, "Bf", a->campaigntime);
+                       fpackf(tfile, "Bf", a->campaignscore);
+                       fpackf(tfile, "Bf", a->campaignfasttime);
+                       fpackf(tfile, "Bf", a->campaignhighscore);
+                       fpackf(tfile, "Bi", a->difficulty);
+                       fpackf(tfile, "Bi", a->progress);
+                       fpackf(tfile, "Bi", a->campaignchoicesmade);
+                       for(j=0;j<a->campaignchoicesmade;j++)
+                       {
+                               fpackf(tfile, "Bi", a->campaignchoices[j]);
+                       }
+                       fpackf(tfile, "Bf", a->points);
+                       for(j=0;j<50;j++)
+                       {
+                               fpackf(tfile, "Bf", a->highscore[j]);
+                               fpackf(tfile, "Bf", a->fasttime[j]);
+                       }
+                       for(j=0;j<60;j++)
+                       {
+                               fpackf(tfile, "Bb",  a->unlocked[j]);
+                       }
+                       fpackf(tfile, "Bi",  a->name.size());
+                       for(j=0;j<a->name.size();j++)
+                       {
+                               fpackf(tfile, "Bb",  a->name[j]);
+                       }
+               }
+
+               fclose(tfile);
+       }
+}
+
+int Account::indice(Account* a) {
+       for(int i=0; i < accounts.size(); i++) {
+               if(accounts[i]==a)
+                       return i;
+       }
+       return -1;
+}
diff --git a/Source/Account.h b/Source/Account.h
new file mode 100644 (file)
index 0000000..3cf94dd
--- /dev/null
@@ -0,0 +1,90 @@
+/*
+Copyright (C) 2003, 2010 - Wolfire Games
+Copyright (C) 2010 - MCMic
+
+This file is part of Lugaru.
+
+Lugaru is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
+
+See the GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+*/
+
+#ifndef _Account_H_
+#define _Account_H_
+
+#include <vector>
+#include <string>
+#include <fstream>
+
+
+class Account {
+       public:
+               static void destroy(int i);
+               static Account* destroy(Account* a);
+               static Account* add(std::string name);
+               static Account* get(int i);
+               static Account* loadFile(std::string filename);
+               static void saveFile(std::string filename, Account* accountactive);
+               static int indice(Account* a);
+               
+               void endGame();
+               void winCampaignLevel(int choice, float score, float time);
+               void winLevel(int level, float score, float time);
+               
+               // getter and setters
+               int getDifficulty();
+               void setDifficulty(int i) { difficulty = i; };
+               const char* getName() { return name.c_str(); };
+               float getCampaignScore() { return campaignscore; };
+               int getCampaignChoicesMade() { return campaignchoicesmade; };
+               int getCampaignChoice(int i) { return campaignchoices[i]; };
+               void setCampaignScore(int s) {
+                       campaignscore=s;
+                       if(s>campaignhighscore)
+                               campaignhighscore=s;
+               };
+               void setCampaignFinalTime(float t) {
+                               campaigntime = t;
+                               if((t<campaignfasttime) || (campaignfasttime==0) && (t!=0))
+                                       campaignfasttime = t;
+               };
+               float getCampaignFasttime() { return campaignfasttime; };
+               void resetFasttime() { campaignfasttime = 0; };
+               float getCampaignHighScore() { return campaignhighscore; };
+               float getHighScore(int i) { return highscore[i]; };
+               float getFastTime(int i) { return fasttime[i]; };
+               int getProgress() { return progress; };
+               
+               static int getNbAccounts() { return accounts.size(); };
+       private:
+               Account(std::string n="");
+               int difficulty;
+               int progress;
+               float points;
+               float highscore[50];
+               float fasttime[50];
+               bool unlocked[60];
+               std::string name;
+               float campaignhighscore;
+               float campaignfasttime;
+               float campaignscore;
+               float campaigntime;
+               int campaignchoicesmade;
+               int campaignchoices[5000]; // should really disappear. I'd use a vector or something like that.
+       
+       //statics
+               static std::vector<Account*> accounts;
+};
+
+#endif
index 083af9d86f8f8aa06c964e1b498749d29ec881e7..288022d32f2a6be934c427340605c69f339dbb81 100644 (file)
@@ -107,17 +107,7 @@ extern XYZ hotspot[40];
 extern int hotspottype[40];
 extern float hotspotsize[40];
 extern char hotspottext[40][256];
-extern int currenthotspot;
-
-extern int numaccounts;
-extern int accountactive;
-extern int accountdifficulty[10];
-extern int accountprogress[10];
-extern float accountpoints[10];
-extern float accounthighscore[10][50];
-extern float accountfasttime[10][50];
-extern bool accountunlocked[10][60];
-extern char accountname[10][256];
+extern int currenthotspot;;
 
 extern int numfalls;
 extern int numflipfail;
@@ -165,14 +155,6 @@ extern int directing;
 extern float dialoguetime;
 extern int dialoguegonethrough[20];
 
-extern int accountcampaignchoicesmade[10];
-extern int accountcampaignchoices[10][5000];
-
-extern float accountcampaignhighscore[10];
-extern float accountcampaignfasttime[10];
-extern float accountcampaignscore[10];
-extern float accountcampaigntime[10];
-
 extern bool gamestarted;
 
 extern bool showdamagebar;
@@ -1212,8 +1194,8 @@ int Game::DrawGLScene(StereoSide side)
 
                                if(!tutoriallevel&&!winfreeze&&indialogue==-1&&!mainmenu){
                                        if(campaign){
-                                               if(!scoreadded)sprintf (string, "Score: %d", (int)accountcampaignscore[accountactive]+(int)bonustotal);//(int)bonustotal);
-                                               if(scoreadded)sprintf (string, "Score: %d", (int)accountcampaignscore[accountactive]);//(int)bonustotal);
+                                               if(!scoreadded)sprintf (string, "Score: %d", (int)accountactive->getCampaignScore()+(int)bonustotal);//(int)bonustotal);
+                                               if(scoreadded)sprintf (string, "Score: %d", (int)accountactive->getCampaignScore());//(int)bonustotal);
                                        }
                                        if(!campaign)sprintf (string, "Score: %d", (int)bonustotal);
                                        glColor4f(0,0,0,1);
@@ -2355,7 +2337,7 @@ int Game::DrawGLScene(StereoSide side)
                        if(mainmenu==5){
                                ifstream ipstream(ConvertFileName(":Data:Campaigns:main.txt"));
                                //campaignnumlevels=0;
-                               //accountcampaignchoicesmade[accountactive]=0;
+                               //accountactive->getCampaignChoicesMade()=0;
                                ipstream.ignore(256,':');
                                ipstream >> campaignnumlevels;
                                for(i=0;i<campaignnumlevels;i++){
@@ -2394,16 +2376,16 @@ int Game::DrawGLScene(StereoSide side)
 
                                levelorder[0]=0;
                                levelvisible[0]=1;
-                               if(accountcampaignchoicesmade[accountactive])
-                                       for(i=0;i<accountcampaignchoicesmade[accountactive];i++){
-                                               levelorder[i+1]=campaignnextlevel[levelorder[i]][accountcampaignchoices[accountactive][i]];
+                               if(accountactive->getCampaignChoicesMade())
+                                       for(i=0;i<accountactive->getCampaignChoicesMade();i++){
+                                               levelorder[i+1]=campaignnextlevel[levelorder[i]][accountactive->getCampaignChoice(i)];
                                                levelvisible[levelorder[i+1]]=1;
                                        }
                                        int whichlevelstart;
-                                       whichlevelstart=accountcampaignchoicesmade[accountactive]-1;
+                                       whichlevelstart=accountactive->getCampaignChoicesMade()-1;
                                        if(whichlevelstart<0){
-                                               accountcampaignscore[accountactive]=0;
-                                               accountcampaignfasttime[accountactive]=0;
+                                               accountactive->setCampaignScore(0);
+                                               accountactive->resetFasttime();
                                                campaignchoicenum=1;
                                                campaignchoicewhich[0]=0;
                                        }
@@ -2411,8 +2393,7 @@ int Game::DrawGLScene(StereoSide side)
                                        {
                                                campaignchoicenum=campaignnumnext[levelorder[whichlevelstart]];
                                                if(campaignchoicenum==0){
-                                                       if(accountcampaignscore[accountactive]>accountcampaignhighscore[accountactive])accountcampaignhighscore[accountactive]=accountcampaignscore[accountactive];
-                                                       if(accountcampaignfasttime[accountactive]==0||accountcampaigntime[accountactive]<accountcampaignfasttime[accountactive])accountcampaignfasttime[accountactive]=accountcampaigntime[accountactive];              
+                                                       //if(accountactive->getCampaignFasttime()==0||accountcampaigntime[accountactive]<accountactive->getCampaignFasttime())accountactive->getCampaignFasttime()=accountcampaigntime[accountactive];          
                                                }
                                                if(campaignchoicenum)
                                                        for(i=0;i<campaignchoicenum;i++){
@@ -2719,9 +2700,9 @@ int Game::DrawGLScene(StereoSide side)
                                movey[9]=0;
                        }
                        if(mainmenu==5){                        
-                               nummenuitems=7+accountcampaignchoicesmade[accountactive]+campaignchoicenum;
+                               nummenuitems=7+accountactive->getCampaignChoicesMade()+campaignchoicenum;
 
-                               sprintf (menustring[0], "%s",accountname[accountactive]);
+                               sprintf (menustring[0], "%s",accountactive->getName());
                                startx[0]=5;
                                starty[0]=400;
                                endx[0]=startx[0]+strlen(menustring[0])*10;
@@ -2779,8 +2760,8 @@ int Game::DrawGLScene(StereoSide side)
                                movex[6]=0;
                                movey[6]=0;
 
-                               if(accountcampaignchoicesmade[accountactive])
-                                       for(i=0;i<accountcampaignchoicesmade[accountactive];i++){
+                               if(accountactive->getCampaignChoicesMade())
+                                       for(i=0;i<accountactive->getCampaignChoicesMade();i++){
                                                sprintf (menustring[7+i], "%s", campaigndescription[levelorder[i]]);
                                                startx[7+i]=30+120+campaignlocationx[levelorder[i]]*400/512;
                                                starty[7+i]=30+30+(512-campaignlocationy[levelorder[i]])*400/512;
@@ -2791,10 +2772,10 @@ int Game::DrawGLScene(StereoSide side)
                                        }
 
                                        if(campaignchoicenum>0)
-                                               for(i=accountcampaignchoicesmade[accountactive];i<accountcampaignchoicesmade[accountactive]+campaignchoicenum;i++){
+                                               for(i=accountactive->getCampaignChoicesMade();i<accountactive->getCampaignChoicesMade()+campaignchoicenum;i++){
                                                        sprintf (menustring[7+i], "%s", campaigndescription[levelorder[i]]);
-                                                       startx[7+i]=30+120+campaignlocationx[campaignchoicewhich[i-(accountcampaignchoicesmade[accountactive])]]*400/512;
-                                                       starty[7+i]=30+30+(512-campaignlocationy[campaignchoicewhich[i-(accountcampaignchoicesmade[accountactive])]])*400/512;
+                                                       startx[7+i]=30+120+campaignlocationx[campaignchoicewhich[i-(accountactive->getCampaignChoicesMade())]]*400/512;
+                                                       starty[7+i]=30+30+(512-campaignlocationy[campaignchoicewhich[i-(accountactive->getCampaignChoicesMade())]])*400/512;
                                                        endx[7+i]=startx[7+i]+10;
                                                        endy[7+i]=starty[7+i]+10;
                                                        movex[7+i]=0;
@@ -2894,12 +2875,12 @@ int Game::DrawGLScene(StereoSide side)
                                movey[5]=0;
                        }
 
-                       if(mainmenu==7){                        
-                               nummenuitems=numaccounts+2;
+                       if(mainmenu==7){        
+                               nummenuitems=Account::getNbAccounts()+2;
 
                                int num;
 
-                               if(numaccounts<8)
+                               if(Account::getNbAccounts()<8)
                                        sprintf (menustring[0], "New User");
                                else
                                        sprintf (menustring[0], "No More Users");
@@ -2915,26 +2896,25 @@ int Game::DrawGLScene(StereoSide side)
 
 
                                num=1;
-                               if(numaccounts)
-                                       for(i=0;i<numaccounts;i++){
-                                               sprintf (menustring[num], "%s",accountname[i]);
-                                               startx[num]=10;
-                                               starty[num]=360-20-20*num;
-                                               endx[num]=startx[num]+strlen(menustring[num])*10;
-                                               endy[num]=starty[num]+20;
-                                               movex[num]=0;
-                                               movey[num]=0;
-
-                                               num++;
-                                       }
-
-                                       sprintf (menustring[num], "Back");
+                               for(i=0;i<Account::getNbAccounts();i++){
+                                       sprintf (menustring[num], "%s",Account::get(i)->getName());
                                        startx[num]=10;
+                                       starty[num]=360-20-20*num;
                                        endx[num]=startx[num]+strlen(menustring[num])*10;
-                                       starty[num]=10;
                                        endy[num]=starty[num]+20;
                                        movex[num]=0;
                                        movey[num]=0;
+
+                                       num++;
+                               }
+
+                               sprintf (menustring[num], "Back");
+                               startx[num]=10;
+                               endx[num]=startx[num]+strlen(menustring[num])*10;
+                               starty[num]=10;
+                               endy[num]=starty[num]+20;
+                               movex[num]=0;
+                               movey[num]=0;
                        }
                        if(mainmenu==8){                        
                                nummenuitems=3;
@@ -2976,14 +2956,14 @@ int Game::DrawGLScene(StereoSide side)
                                        strcpy(menustring[j],temp);
                                        for(i=0;i<17;i++)if(menustring[j][i]=='\0')menustring[j][i]=' ';
                                        menustring[j][17]='\0';
-                                       sprintf (temp, "%d",(int)accounthighscore[accountactive][j]);
+                                       sprintf (temp, "%d",(int)accountactive->getHighScore(j));
                                        strcat(menustring[j],temp);
                                        for(i=18;i<32;i++)if(menustring[j][i]=='\0')menustring[j][i]=' ';
                                        menustring[j][32]='\0';
-                                       sprintf (temp, "%d:",(int)(((int)accountfasttime[accountactive][j]-(int)(accountfasttime[accountactive][j])%60)/60));
+                                       sprintf (temp, "%d:",(int)(((int)accountactive->getFastTime(j)-(int)(accountactive->getFastTime(j))%60)/60));
                                        strcat(menustring[j],temp);
-                                       if((int)(accountfasttime[accountactive][j])%60<10)strcat(menustring[j],"0");
-                                       sprintf (temp, "%d",(int)(accountfasttime[accountactive][j])%60);
+                                       if((int)(accountactive->getFastTime(j))%60<10)strcat(menustring[j],"0");
+                                       sprintf (temp, "%d",(int)(accountactive->getFastTime(j))%60);
                                        strcat(menustring[j],temp);
 
                                        startx[j]=10;
@@ -3023,14 +3003,14 @@ int Game::DrawGLScene(StereoSide side)
                                        strcpy(menustring[j],temp);
                                        for(i=0;i<17;i++)if(menustring[j][i]=='\0')menustring[j][i]=' ';
                                        menustring[j][17]='\0';
-                                       sprintf (temp, "%d",(int)accounthighscore[accountactive][j]);
+                                       sprintf (temp, "%d",(int)accountactive->getHighScore(j));
                                        strcat(menustring[j],temp);
                                        for(i=18;i<32;i++)if(menustring[j][i]=='\0')menustring[j][i]=' ';
                                        menustring[j][32]='\0';
-                                       sprintf (temp, "%d:",(int)(((int)accountfasttime[accountactive][j]-(int)(accountfasttime[accountactive][j])%60)/60));
+                                       sprintf (temp, "%d:",(int)(((int)accountactive->getFastTime(j)-(int)(accountactive->getFastTime(j))%60)/60));
                                        strcat(menustring[j],temp);
-                                       if((int)(accountfasttime[accountactive][j])%60<10)strcat(menustring[j],"0");
-                                       sprintf (temp, "%d",(int)(accountfasttime[accountactive][j])%60);
+                                       if((int)(accountactive->getFastTime(j))%60<10)strcat(menustring[j],"0");
+                                       sprintf (temp, "%d",(int)(accountactive->getFastTime(j))%60);
                                        strcat(menustring[j],temp);
 
                                        startx[j]=10;
@@ -3099,7 +3079,7 @@ int Game::DrawGLScene(StereoSide side)
                                strcpy(menustring[4],temp);
                                for(i=0;i<20;i++)if(menustring[4][i]=='\0')menustring[4][i]=' ';
                                menustring[4][20]='\0';
-                               sprintf (temp, "%d",(int)accountcampaignscore[accountactive]);
+                               sprintf (temp, "%d",(int)accountactive->getCampaignScore());
                                strcat(menustring[4],temp);
                                startx[4]=190;
                                endx[4]=startx[4]+strlen(menustring[4])*10;
@@ -3127,7 +3107,7 @@ int Game::DrawGLScene(StereoSide side)
                                strcpy(menustring[5],temp);
                                for(i=0;i<20;i++)if(menustring[5][i]=='\0')menustring[5][i]=' ';
                                menustring[5][20]='\0';
-                               sprintf (temp, "%d",(int)accountcampaignhighscore[accountactive]);
+                               sprintf (temp, "%d",(int)accountactive->getCampaignHighScore());
                                strcat(menustring[5],temp);
                                startx[5]=190;
                                endx[5]=startx[5]+strlen(menustring[5])*10;
@@ -3141,7 +3121,7 @@ int Game::DrawGLScene(StereoSide side)
                                strcpy(menustring[7],temp);
                                for(i=0;i<20;i++)if(menustring[7][i]=='\0')menustring[7][i]=' ';
                                menustring[7][20]='\0';
-                               sprintf (temp, "%d",(int)accountcampaignfasttime[accountactive]);
+                               sprintf (temp, "%d",(int)accountactive->getCampaignFasttime());
                                strcat(menustring[7],temp);
                                startx[7]=200;
                                endx[7]=startx[7]+strlen(menustring[7])*10;
@@ -3571,8 +3551,8 @@ int Game::DrawGLScene(StereoSide side)
                                                                                if(mainmenu!=5||j<6)
                                                                                {
                                                                                        glColor4f(1,0,0,1);
-                                                                                       if(mainmenu==9&&j>accountprogress[accountactive]&&j<numchallengelevels)glColor4f(0.5,0,0,1);
-                                                                                       if(mainmenu==11&&j>accountprogress[accountactive]&&j<numchallengelevels)glColor4f(0.5,0,0,1);
+                                                                                       if(mainmenu==9&&j>accountactive->getProgress()&&j<numchallengelevels)glColor4f(0.5,0,0,1);
+                                                                                       if(mainmenu==11&&j>accountactive->getProgress()&&j<numchallengelevels)glColor4f(0.5,0,0,1);
                                                                                        //if(1-((float)i)/10-(1-selectedlong[j])>0){
                                                                                        glMatrixMode(GL_MODELVIEW);                                                     // Select The Modelview Matrix
                                                                                        glPushMatrix();
@@ -3597,8 +3577,8 @@ int Game::DrawGLScene(StereoSide side)
                                                                                                if(1-((float)i)/15-(1-selectedlong[j])>0)
                                                                                                {
                                                                                                        glColor4f(1,0,0,(1-((float)i)/10-(1-selectedlong[j]))*.25);
-                                                                                                       if(mainmenu==9&&j>accountprogress[accountactive]&&j<numchallengelevels)glColor4f(0.5,0,0,(1-((float)i)/10-(1-selectedlong[j]))*.25);
-                                                                                                       if(mainmenu==11&&j>accountprogress[accountactive]&&j<numchallengelevels)glColor4f(0.5,0,0,(1-((float)i)/10-(1-selectedlong[j]))*.25);
+                                                                                                       if(mainmenu==9&&j>accountactive->getProgress()&&j<numchallengelevels)glColor4f(0.5,0,0,(1-((float)i)/10-(1-selectedlong[j]))*.25);
+                                                                                                       if(mainmenu==11&&j>accountactive->getProgress()&&j<numchallengelevels)glColor4f(0.5,0,0,(1-((float)i)/10-(1-selectedlong[j]))*.25);
                                                                                                        if(mainmenu==3)text.glPrint(startx[j]-((float)i)+offsetx[j]*((float)i)/4-((/*1*/+((float)i)/70)*strlen(menustring[j]))*3,starty[j]/*-i*1/2*/+offsety[j]*((float)i)/4,menustring[j],0,1+((float)i)/70,640,480);
                                                                                                        if(mainmenu==4)text.glPrint(startx[j]-((float)i)+offsetx[j]*((float)i)/4/*-((((float)i)/70)*strlen(menustring[j]))*3*/,starty[j]/*-i*1/2*/+offsety[j]*((float)i)/4,menustring[j],0,1+((float)i)/70,640,480);
                                                                                                        if(mainmenu==5)text.glPrint(startx[j]-((float)i)+offsetx[j]*((float)i)/4/*-((((float)i)/70)*strlen(menustring[j]))*3*/,starty[j]/*-i*1/2*/+offsety[j]*((float)i)/4,menustring[j],0,1+((float)i)/70,640,480);
@@ -3663,9 +3643,9 @@ int Game::DrawGLScene(StereoSide side)
                                                                                                                        //float linestartx,lineendx,linestarty,lineendy,offsetx,offsety;
                                                                                                                        linestart.x=(startx[j]+endx[j])/2;
                                                                                                                        linestart.y=(starty[j]+endy[j])/2;
-                                                                                                                       if(j>=6+accountcampaignchoicesmade[accountactive]){
-                                                                                                                               linestart.x=(startx[6+accountcampaignchoicesmade[accountactive]]+endx[6+accountcampaignchoicesmade[accountactive]])/2;
-                                                                                                                               linestart.y=(starty[6+accountcampaignchoicesmade[accountactive]]+endy[6+accountcampaignchoicesmade[accountactive]])/2;
+                                                                                                                       if(j>=6+accountactive->getCampaignChoicesMade()){
+                                                                                                                               linestart.x=(startx[6+accountactive->getCampaignChoicesMade()]+endx[6+accountactive->getCampaignChoicesMade()])/2;
+                                                                                                                               linestart.y=(starty[6+accountactive->getCampaignChoicesMade()]+endy[6+accountactive->getCampaignChoicesMade()])/2;
                                                                                                                        }
                                                                                                                        lineend.x=(startx[j+1]+endx[j+1])/2;
                                                                                                                        lineend.y=(starty[j+1]+endy[j+1])/2;
@@ -3676,12 +3656,12 @@ int Game::DrawGLScene(StereoSide side)
                                                                                                                        Normalise(&offset);
                                                                                                                        glDisable(GL_TEXTURE_2D);                                                       
 
-                                                                                                                       if(j<6+accountcampaignchoicesmade[accountactive]){
+                                                                                                                       if(j<6+accountactive->getCampaignChoicesMade()){
                                                                                                                                glColor4f(0.5,0,0,1);
                                                                                                                                startsize=.5;
                                                                                                                                endsize=.5;
                                                                                                                        }
-                                                                                                                       if(j>=6+accountcampaignchoicesmade[accountactive]){
+                                                                                                                       if(j>=6+accountactive->getCampaignChoicesMade()){
                                                                                                                                glColor4f(1,0,0,1);
                                                                                                                                endsize=1;
                                                                                                                                startsize=.5;
@@ -3690,7 +3670,7 @@ int Game::DrawGLScene(StereoSide side)
                                                                                                                        linestart+=fac*4*startsize;
                                                                                                                        lineend-=fac*4*endsize;
 
-                                                                                                                       if(!(j>7+accountcampaignchoicesmade[accountactive]+campaignchoicenum)){
+                                                                                                                       if(!(j>7+accountactive->getCampaignChoicesMade()+campaignchoicenum)){
                                                                                                                                glMatrixMode(GL_MODELVIEW);                                                     // Select The Modelview Matrix
                                                                                                                                glPushMatrix();
                                                                                                                                        glBegin(GL_QUADS);
@@ -3713,8 +3693,8 @@ int Game::DrawGLScene(StereoSide side)
                                                                                                                else glBindTexture( GL_TEXTURE_2D, Mapcircletexture);
                                                                                                                glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE );
                                                                                                                glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE );
-                                                                                                               if(j-7<accountcampaignchoicesmade[accountactive])glColor4f(0.5,0,0,1);
-                                                                                                               if(j-7>=accountcampaignchoicesmade[accountactive])glColor4f(1,0,0,1);
+                                                                                                               if(j-7<accountactive->getCampaignChoicesMade())glColor4f(0.5,0,0,1);
+                                                                                                               if(j-7>=accountactive->getCampaignChoicesMade())glColor4f(1,0,0,1);
                                                                                                                if(j==6)glColor4f(1,1,1,1);
                                                                                                                XYZ midpoint;
                                                                                                                float itemsize;
@@ -3722,8 +3702,8 @@ int Game::DrawGLScene(StereoSide side)
                                                                                                                midpoint=0;
                                                                                                                midpoint.x=(startx[j]+endx[j])/2;
                                                                                                                midpoint.y=(starty[j]+endy[j])/2;
-                                                                                                               if(j>6&&(j-7<accountcampaignchoicesmade[accountactive]))itemsize*=.5;
-                                                                                                               if(!(j-7>accountcampaignchoicesmade[accountactive]+campaignchoicenum))
+                                                                                                               if(j>6&&(j-7<accountactive->getCampaignChoicesMade()))itemsize*=.5;
+                                                                                                               if(!(j-7>accountactive->getCampaignChoicesMade()+campaignchoicenum))
                                                                                                                {
                                                                                                                        glMatrixMode(GL_MODELVIEW);                                                     // Select The Modelview Matrix
                                                                                                                        glPushMatrix();
@@ -3768,7 +3748,7 @@ int Game::DrawGLScene(StereoSide side)
                                                                                        glPopMatrix();
                                                                                        glMatrixMode(GL_MODELVIEW);                                                     // Select The Modelview Matrix
 
-                                                                                       if(j-7>=accountcampaignchoicesmade[accountactive]){
+                                                                                       if(j-7>=accountactive->getCampaignChoicesMade()){
                                                                                                //glColor4f(0,0,0,1);
                                                                                                //text.glPrintOutline(startx[j]+10-1.5,starty[j]-4-1.5,menustring[j],0,0.6*1.25,640,480);
                                                                                                //glColor4f(1,0,0,1);
index 9fb279bc52fb248185e73c9ff75ba664f9960c7b..402c76113e8f21bb07c1814ba84994378d17986a 100644 (file)
@@ -78,16 +78,6 @@ extern float slomospeed;
 extern char mapname[256];
 extern bool gamestarted;
 
-extern int numaccounts;
-extern int accountactive;
-extern int accountdifficulty[10];
-extern int accountprogress[10];
-extern float accountpoints[10];
-extern float accounthighscore[10][50];
-extern float accountfasttime[10][50];
-extern bool accountunlocked[10][60];
-extern char accountname[10][256];
-
 extern int numdialogues;
 extern int numdialogueboxes[20];
 extern int dialoguetype[20];
@@ -131,59 +121,11 @@ void Game::Dispose()
        LOGFUNC;
 
        if(endgame==2){
-               accountcampaignchoicesmade[accountactive]=0;
-               accountcampaignscore[accountactive]=0;
-               accountcampaigntime[accountactive]=0;
+               accountactive->endGame();
                endgame=0;
        }
 
-
-       sprintf (mapname, ":Data:Users");
-
-       FILE                    *tfile;
-       tfile=fopen( ConvertFileName(mapname), "wb" );
-       if (tfile)
-       {
-               fpackf(tfile, "Bi", numaccounts);
-               fpackf(tfile, "Bi", accountactive);
-               if(numaccounts>0)
-               {
-                       for(i=0;i<numaccounts;i++)
-                       {
-                               fpackf(tfile, "Bf", accountcampaigntime[i]);
-                               fpackf(tfile, "Bf", accountcampaignscore[i]);
-                               fpackf(tfile, "Bf", accountcampaignfasttime[i]);
-                               fpackf(tfile, "Bf", accountcampaignhighscore[i]);
-                               fpackf(tfile, "Bi", accountdifficulty[i]);
-                               fpackf(tfile, "Bi", accountprogress[i]);
-                               fpackf(tfile, "Bi", accountcampaignchoicesmade[i]);
-                               for(j=0;j<accountcampaignchoicesmade[i];j++)
-                               {
-                                       fpackf(tfile, "Bi", accountcampaignchoices[i][j]);
-                               }
-                               fpackf(tfile, "Bf", accountpoints[i]);
-                               for(j=0;j<50;j++)
-                               {
-                                       fpackf(tfile, "Bf", accounthighscore[i][j]);
-                                       fpackf(tfile, "Bf", accountfasttime[i][j]);
-                               }
-                               for(j=0;j<60;j++)
-                               {
-                                       fpackf(tfile, "Bb",  accountunlocked[i][j]);
-                               }
-                               fpackf(tfile, "Bi",  strlen(accountname[i]));
-                               if(strlen(accountname[i])>0)
-                               {
-                                       for(j=0;j<(int)strlen(accountname[i]);j++)
-                                       {
-                                               fpackf(tfile, "Bb",  accountname[i][j]);
-                                       }
-                               }
-                       }
-               }
-
-               fclose(tfile);
-       }
+       Account::saveFile(":Data:Users", accountactive);
 
        TexIter it = textures.begin();
        for (; it != textures.end(); ++it)
@@ -996,60 +938,7 @@ void Game::InitGame()
 
        numchallengelevels=14;
 
-
-       FILE                    *tfile;
-
-       accountactive=-1;
-
-       sprintf (mapname, ":Data:Users");
-       tfile=fopen( ConvertFileName(mapname), "rb" );
-       if(tfile)
-       {
-               funpackf(tfile, "Bi", &numaccounts);
-               funpackf(tfile, "Bi", &accountactive);
-               if(numaccounts>0)
-               {
-                       for(i=0;i<numaccounts;i++)
-                       {
-                               funpackf(tfile, "Bf", &accountcampaigntime[i]);
-                               funpackf(tfile, "Bf", &accountcampaignscore[i]);
-                               funpackf(tfile, "Bf", &accountcampaignfasttime[i]);
-                               funpackf(tfile, "Bf", &accountcampaignhighscore[i]);
-                               funpackf(tfile, "Bi", &accountdifficulty[i]);
-                               funpackf(tfile, "Bi", &accountprogress[i]);
-                               funpackf(tfile, "Bi", &accountcampaignchoicesmade[i]);
-                               for(j=0;j<accountcampaignchoicesmade[i];j++)
-                               {
-                                       funpackf(tfile, "Bi", &accountcampaignchoices[i][j]);
-                                       if (accountcampaignchoices[i][j] >= 10)
-                                       {
-                                               accountcampaignchoices[i][j] = 0;
-                                       }
-                               }
-                               funpackf(tfile, "Bf", &accountpoints[i]);
-                               for(j=0;j<50;j++)
-                               {
-                                       funpackf(tfile, "Bf", &accounthighscore[i][j]);
-                                       funpackf(tfile, "Bf", &accountfasttime[i][j]);
-                               }
-                               for(j=0;j<60;j++)
-                               {
-                                       funpackf(tfile, "Bb",  &accountunlocked[i][j]);
-                               }
-                               int temp;
-                               funpackf(tfile, "Bi",  &temp);
-                               if(temp>0)
-                               {
-                                       for(j=0;j<temp;j++)
-                                       {
-                                               funpackf(tfile, "Bb",  &accountname[i][j]);
-                                       }
-                               }
-                       }
-               }
-
-               fclose(tfile);
-       }
+       accountactive=Account::loadFile(":Data:Users");
 
        tintr=1;
        tintg=1;
index 38a0f0b7d3a45cf7a63ac447f8701610b31333a1..3115b4396611e592018e1fa3d51f763e8b09a1e6 100644 (file)
@@ -168,16 +168,6 @@ extern int currenthotspot;
 extern int kBitsPerPixel;
 extern int hostile;
 
-extern int numaccounts;
-extern int accountactive;
-extern int accountdifficulty[10];
-extern int accountprogress[10];
-extern float accountpoints[10];
-extern float accounthighscore[10][50];
-extern float accountfasttime[10][50];
-extern bool accountunlocked[10][60];
-extern char accountname[10][256];
-
 extern bool stillloading;
 extern bool winfreeze;
 
@@ -224,14 +214,6 @@ extern bool campaign;
 
 extern float oldgamespeed;
 
-extern float accountcampaignhighscore[10];
-extern float accountcampaignfasttime[10];
-extern float accountcampaignscore[10];
-extern float accountcampaigntime[10];
-
-extern int accountcampaignchoicesmade[10];
-extern int accountcampaignchoices[10][5000];
-
 static const char *rabbitskin[] = {
 ":Data:Textures:Fur3.jpg",
 ":Data:Textures:Fur.jpg",
@@ -1684,7 +1666,7 @@ void      Game::Loadlevel(char *name){
                damagedealt=0;
                damagetaken=0;
 
-               if(accountactive!=-1)difficulty=accountdifficulty[accountactive];
+               if(accountactive)difficulty=accountactive->getDifficulty();
 
                if(difficulty!=2)minimap=1;
                else minimap=0;
@@ -2536,23 +2518,23 @@ void    Game::Tick()
                        }
                        mainmenutogglekeydown=1;
                }
-               if(!IsKeyDown(theKeyMap, MAC_ESCAPE_KEY)){
+               if(!Input::isKeyDown(SDLK_ESCAPE)){
                        mainmenutogglekeydown=0;
                }
        }
 
        /*static bool minimaptogglekeydown;
-       if(IsKeyDown(theKeyMap, MAC_TAB_KEY)&&!minimaptogglekeydown){
+       if(Input::isKeyDown(SDLK_TAB)&&!minimaptogglekeydown){
        minimap=1-minimap;
        minimaptogglekeydown=1;
        }
-       if(!IsKeyDown(theKeyMap, MAC_TAB_KEY)){
+       if(!Input::isKeyDown(SDLK_TAB)){
        minimaptogglekeydown=0;
        }
        */
 
        static bool minimaptogglekeydown;
-       if(IsKeyDown(theKeyMap, MAC_TAB_KEY)&&!minimaptogglekeydown&&tutoriallevel){
+       if(Input::isKeyDown(SDLK_TAB)&&!minimaptogglekeydown&&tutoriallevel){
                if(tutorialstage!=51)
                        tutorialstagetime=tutorialmaxtime;
                PlaySoundEx( consolefailsound, samp[consolefailsound], NULL, true);
@@ -2560,46 +2542,26 @@ void    Game::Tick()
                OPENAL_SetPaused(channels[consolefailsound], false);
                minimaptogglekeydown=1;
        }
-       if(!IsKeyDown(theKeyMap, MAC_TAB_KEY)){
+       if(!Input::isKeyDown(SDLK_TAB)){
                minimaptogglekeydown=0;
        }
 
        if(mainmenu){
                //menu buttons
                if(mainmenu==1||mainmenu==2){
-                       if(Button()&&!oldbutton&&selected==1){
+                       if(Input::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;
+                                       fireSound(firestartsound);
+
+                                       flash();
 
                                        //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);
+                                       if(accountactive) {
+                                               mainmenu=5;
+                                       } else {
+                                               mainmenu=7;
                                        }
-                                       mainmenu=0;
-                                       gameon=1;
-                                       OPENAL_SetPaused(channels[music3], true);       */
+                                       selected=-1;
                                }
                                else
                                {
@@ -2610,21 +2572,10 @@ void    Game::Tick()
                                }
                        }
 
-                       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);
+                       if(Input::Button()&&!oldbutton&&selected==2){
+                               fireSound();
 
-                               flashr=1;
-                               flashg=0;
-                               flashb=0;
-                               flashamount=1;
-                               flashdelay=1;
+                               flash();
 
                                //options
 
@@ -2638,21 +2589,10 @@ void    Game::Tick()
                                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);
+                       if(Input::Button()&&!oldbutton&&selected==3){
+                               fireSound();
 
-                               flashr=1;
-                               flashg=0;
-                               flashb=0;
-                               flashamount=1;
-                               flashdelay=1;
+                               flash();
 
                                if(!gameon){
                                        //quit
@@ -2665,22 +2605,12 @@ void    Game::Tick()
                                        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(Input::Button()&&!oldbutton&&selected!=-1){
+                               fireSound();
                        }
-                       if(Button()&&!oldbutton&&selected==0){
+                       if(Input::Button()&&!oldbutton&&selected==0){
                        
                                extern SDL_Rect **resolutions;
                                bool isCustomResolution = true;
@@ -2924,9 +2854,7 @@ void      Game::Tick()
                if(mainmenu==5){
 
                        if(endgame==2){
-                               accountcampaignchoicesmade[accountactive]=0;
-                               accountcampaignscore[accountactive]=0;
-                               accountcampaigntime[accountactive]=0;
+                               accountactive->endGame();
                                endgame=0;
                        }
 
@@ -2998,8 +2926,8 @@ void      Game::Tick()
                                mapname[8]='p';
                                mapname[9]='s';
                                mapname[10]=':';
-                               strcat(mapname,campaignmapname[campaignchoicewhich[selected-7-accountcampaignchoicesmade[accountactive]]]);
-                               whichchoice=selected-7-accountcampaignchoicesmade[accountactive];
+                               strcat(mapname,campaignmapname[campaignchoicewhich[selected-7-accountactive->getCampaignChoicesMade()]]);
+                               whichchoice=selected-7-accountactive->getCampaignChoicesMade();
                                visibleloading=1;
                                stillloading=1;
                                Loadlevel(mapname);
@@ -3218,156 +3146,59 @@ void   Game::Tick()
                }
 
                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;i<numaccounts-1;i++){
-                                       accountdifficulty[i]=accountdifficulty[i+1];
-                                       accountcampaignchoicesmade[i]=accountcampaignchoicesmade[i+1];
-                                       for(j=0;j<accountcampaignchoicesmade[i+1];j++){
-                                               accountcampaignchoices[i][j]=accountcampaignchoices[i+1][j];
+                       if(Input::Button()&&!oldbutton) {
+                               if(selected>-1){
+                                       fireSound();
+                                       if(selected==1) {
+                                               flash();
+                                               accountactive = Account::destroy(accountactive);
+                                               mainmenu=7;
+                                       } else if(selected==2) {
+                                               flash();
+                                               mainmenu=5;
                                        }
-                                       accountpoints[i]=accountpoints[i+1];
-                                       for(j=0;j<50;j++){
-                                               accounthighscore[i][j]=accounthighscore[i+1][j];
-                                               accountfasttime[i][j]=accountfasttime[i+1][j];
-                                       }
-                                       for(j=0;j<60;j++){
-                                               accountunlocked[i][j]=accountunlocked[i+1][j];
-                                       }
-                                       for(j=0;j<256;j++){
-                                               accountname[i][j]=accountname[i+1][j];
-                                       }
-                                       accountcampaignhighscore[i]=accountcampaignhighscore[i+1];
-                                       accountprogress[i]=accountprogress[i+1];
-                                       accountcampaignfasttime[i]=accountcampaignfasttime[i+1];
-                                       accountcampaignscore[i]=accountcampaignscore[i+1];
-                                       accountcampaigntime[i]=accountcampaigntime[i+1];
                                }
-
-                               numaccounts--;
-                               accountactive=-1;
-
-
-                               mainmenu=7;
-                       }
-                       if(Button()&&!oldbutton&&selected==2){
-                               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==7){
-                       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&&numaccounts<8){
-                               entername=1;
-                       }
-                       if(Button()&&!oldbutton&&selected>0&&selected<numaccounts+1){
-                               accountactive=selected-1;
-                               mainmenu=5;
-                               flashr=1;
-                               flashg=0;
-                               flashb=0;
-                               flashamount=1;
-                               flashdelay=1;
-                       }
-                       if(Button()&&!oldbutton&&selected==numaccounts+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;
-
-                               mainmenu=1;
-
-                               for(j=0;j<255;j++){
-                                       displaytext[0][j]=' ';
+                       if(Input::Button()&&!oldbutton) {
+                               if(selected!=-1){
+                                       fireSound();
+                                       if(selected==0&&Account::getNbAccounts()<8){
+                                               entername=1;
+                                       } else if (selected<Account::getNbAccounts()+1) {
+                                               accountactive=Account::get(selected-1);
+                                               mainmenu=5;
+                                               flash();
+                                       } else if (selected==Account::getNbAccounts()+1) {
+                                               flash();
+
+                                               mainmenu=1;
+
+                                               for(j=0;j<255;j++){
+                                                       displaytext[0][j]=' ';
+                                               }
+                                               displaychars[0]=0;
+                                               displayselected=0;
+                                               entername=0;
+                                       }
                                }
-                               displaychars[0]=0;
-                               displayselected=0;
-                               entername=0;
                        }
                        if(Button())oldbutton=1;
                        else oldbutton=0;
                }
                if(mainmenu==8){
-                       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(Input::Button()&&!oldbutton&&selected>-1){
+                               fireSound();
 
-                               if(selected==0)accountdifficulty[accountactive]=0;
-                               if(selected==1)accountdifficulty[accountactive]=1;
-                               if(selected==2)accountdifficulty[accountactive]=2;
+                               if(selected<=2)
+                                       accountactive->setDifficulty(selected);
 
                                mainmenu=5;
 
-                               flashr=1;
-                               flashg=0;
-                               flashb=0;
-                               flashamount=1;
-                               flashdelay=1;
+                               flash();
 
                        }
                        if(Button())oldbutton=1;
@@ -8762,24 +8593,19 @@ void    Game::TickOnceAfter(){
                                                                //high scores, awards, win
                                                                if(campaign){
                                                                        won=1;
-                                                                       accountcampaignchoices[accountactive][accountcampaignchoicesmade[accountactive]]=whichchoice;
-                                                                       accountcampaignchoicesmade[accountactive]++;
+                                                                       accountactive->winCampaignLevel(whichchoice, bonustotal, leveltime);
+                                                                       /*accountcampaignchoices[accountactive][accountactive->getCampaignChoicesMade()]=whichchoice;
+                                                                       accountactive->getCampaignChoicesMade()++;
                                                                        accountcampaignscore[accountactive]+=bonustotal;
-                                                                       scoreadded=1;
                                                                        accountcampaigntime[accountactive]+=leveltime;
-                                                                       if(accountcampaignscore[accountactive]>accountcampaignhighscore[accountactive])accountcampaignhighscore[accountactive]=accountcampaignscore[accountactive];
-
-                                                                       //if(accountprogress[accountactive]<whichlevel+1)accountprogress[accountactive]=whichlevel+1;
+                                                                       if(accountcampaignscore[accountactive]>accountcampaignhighscore[accountactive])
+                                                                               accountcampaignhighscore[accountactive]=accountcampaignscore[accountactive];*/
+                                                                       scoreadded=1;
                                                                }
                                                                else
                                                                {
                                                                        won=1;
-                                                                       if(!debugmode){
-                                                                               if(bonustotal-startbonustotal>accounthighscore[accountactive][whichlevel])accounthighscore[accountactive][whichlevel]=bonustotal-startbonustotal;
-                                                                               if(accountfasttime[accountactive][whichlevel]==0||leveltime<accountfasttime[accountactive][whichlevel])accountfasttime[accountactive][whichlevel]=leveltime;
-                                                                       }
-                                                                       if(accountprogress[accountactive]<whichlevel+1)accountprogress[accountactive]=whichlevel+1;
-
+                                                                       accountactive->winLevel(whichlevel,bonustotal-startbonustotal,leveltime);
                                                                }
                                                        }
                                        }
@@ -8860,7 +8686,7 @@ void      Game::TickOnceAfter(){
                                                                mapname[8]='p';
                                                                mapname[9]='s';
                                                                mapname[10]=':';
-                                                               strcat(mapname,campaignmapname[levelorder[accountcampaignchoicesmade[accountactive]]]);//[campaignchoicewhich[whichchoice]]);
+                                                               strcat(mapname,campaignmapname[levelorder[accountactive->getCampaignChoicesMade()]]);//[campaignchoicewhich[whichchoice]]);
                                                                Loadlevel(mapname);
 
                                                                OPENAL_Sample_SetMinMaxDistance(samp[fireendsound], 9999.0f, 99999.0f);
@@ -8957,13 +8783,13 @@ void    Game::TickOnceAfter(){
 
                                                                levelorder[0]=0;
                                                                levelvisible[0]=1;
-                                                               if(accountcampaignchoicesmade[accountactive])
-                                                                       for(i=0;i<accountcampaignchoicesmade[accountactive];i++){
-                                                                               levelorder[i+1]=campaignnextlevel[levelorder[i]][accountcampaignchoices[accountactive][i]];
+                                                               if(accountactive->getCampaignChoicesMade())
+                                                                       for(i=0;i<accountactive->getCampaignChoicesMade();i++){
+                                                                               levelorder[i+1]=campaignnextlevel[levelorder[i]][accountactive->getCampaignChoice(i)];
                                                                                levelvisible[levelorder[i+1]]=1;
                                                                        }
                                                                        int whichlevelstart;
-                                                                       whichlevelstart=accountcampaignchoicesmade[accountactive]-1;
+                                                                       whichlevelstart=accountactive->getCampaignChoicesMade()-1;
                                                                        if(whichlevelstart<0){
                                                                                campaignchoicenum=1;
                                                                                campaignchoicewhich[0]=0;
index 6c59eb28b75d06684f52f7e0a908ce472a7016b3..f272cc9cd98b47021e3f3bfb36d29df6c45e2308 100644 (file)
@@ -229,20 +229,6 @@ float bonustotal = 0;
 float startbonustotal = 0;
 float bonustime = 0;
 
-int numaccounts = 0;
-int accountactive = 0;
-int accountdifficulty[10] = {0};
-int accountprogress[10] = {0};
-float accountpoints[10] = {0};
-float accounthighscore[10][50] = {0};
-float accountfasttime[10][50] = {0};
-bool accountunlocked[10][60] = {0};
-char accountname[10][256] = {0};
-float accountcampaignhighscore[10] = {0};
-float accountcampaignfasttime[10] = {0};
-float accountcampaignscore[10] = {0};
-float accountcampaigntime[10] = {0};
-int accountcampaignchoicesmade[10] = {0};int accountcampaignchoices[10][5000] = {0};
 bool won = 0;