+
+
+void Loadlevel(int which);
+void Loadlevel(const char *name);
+
+
+
+class CampaignLevel {
+private:
+ int width;
+ struct Position { int x,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<int> 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<numnext;j++) {
+ is.ignore(256,':');
+ is >> 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;
+ }
+};
+
+int indemo = 0;
+bool won = false;
+int entername = 0;
+vector<CampaignLevel> campaignlevels;
+int whichchoice = 0;
+int actuallevel = 0;
+bool winhotspot = false;
+bool windialogue = false;
+bool realthreat = 0;
+XYZ cameraloc;
+float cameradist = 0;
+bool oldattackkey = 0;
+int whichlevel = 0;
+float musicvolume[4] = {};
+float oldmusicvolume[4] = {};
+int musicselected = 0;
+
+
+