2 Copyright (C) 2003, 2010 - Wolfire Games
4 This file is part of Lugaru.
6 Lugaru is free software; you can redistribute it and/or
7 modify it under the terms of the GNU General Public License
8 as published by the Free Software Foundation; either version 2
9 of the License, or (at your option) any later version.
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
15 See the GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
27 #if (defined(__APPLE__) && defined(__MACH__))
28 # ifdef PLATFORM_MACOSX
29 # error Do not define PLATFORM_MACOSX for new builds. It is for the old Carbonized build.
33 #ifdef PLATFORM_MACOSX
35 #include "Quicktime.h"
38 //Jordan included glut.h
41 #include "TGALoader.h"
53 //#include <DrawSprocket.h>
62 #define NB_CAMPAIGN_MENU_ITEM 7
64 extern GLuint rabbittexture;
79 std::string description;
82 0 = Immediately load next level at the end of this one.
83 1 = Go back to the world map.
84 2 = Don't bring up the Fiery loading screen. Maybe other things, I've not investigated.
86 //int numnext; // 0 on final level. As David said: he meant to add story branching, but he eventually hadn't.
87 std::vector<int> nextlevel;
90 CampaignLevel() : width(10) {
97 return 30+120+location.x*400/512;
101 return 30+30+(512-location.y)*400/512;
105 return getStartX()+width;
109 return getStartY()+width;
114 center.x=getStartX()+width/2;
115 center.y=getStartY()+width/2;
123 istream& operator<< (istream& is) {
130 for(int pos = description.find('_');pos!=string::npos;pos = description.find('_',pos)) {
131 description.replace(pos,1,1,' ');
138 for(int j=0;j<numnext;j++) {
141 nextlevel.push_back(next-1);
150 friend istream& operator>> (istream& is, CampaignLevel& cl) {
158 extern GLuint terraintexture;
159 extern GLuint terraintexture2;
160 extern GLuint terraintexture3;
161 extern GLuint screentexture;
162 extern GLuint screentexture2;
163 extern GLuint logotexture;
164 extern GLuint loadscreentexture;
165 extern GLuint Maparrowtexture;
166 extern GLuint Mapboxtexture;
167 extern GLuint Mapcircletexture;
168 extern GLuint cursortexture;
169 extern GLuint Mainmenuitems[10];
172 extern int keyselect;
177 extern bool entername;
179 extern char menustring[100][256];
180 extern char registrationname[256];
181 extern float registrationnumber;
183 extern int newdetail;
184 extern int newscreenwidth;
185 extern int newscreenheight;
188 extern float deltah,deltav;
189 extern int mousecoordh,mousecoordv;
190 extern int oldmousecoordh,oldmousecoordv;
191 extern float rotation,rotation2;
192 extern SkyBox skybox;
193 extern bool cameramode;
194 extern int olddrawmode;
196 extern bool firstload;
197 extern bool oldbutton;
199 extern float leveltime;
200 extern float loadtime;
203 extern XYZ hawkcoords;
204 extern XYZ realhawkcoords;
205 extern GLuint hawktexture;
206 extern float hawkrotation;
207 extern float hawkcalldelay;
213 extern bool stealthloading;
215 extern std::vector<CampaignLevel> campaignlevels;
216 extern int whichchoice;
217 extern int actuallevel;
218 extern bool winhotspot;
219 extern bool windialogue;
223 extern int musictype,oldmusictype,oldoldmusictype;
224 extern bool realthreat;
227 extern XYZ rabbitcoords;
229 extern XYZ mapcenter;
230 extern float mapradius;
235 extern XYZ cameraloc;
236 extern float cameradist;
238 extern int drawtoggle;
240 extern bool editorenabled;
241 extern int editortype;
242 extern float editorsize;
243 extern float editorrotation;
244 extern float editorrotation2;
246 extern float brightness;
251 extern XYZ pathpoint[30];
252 extern int numpathpoints;
253 extern int numpathpointconnect[30];
254 extern int pathpointconnect[30][30];
255 extern int pathpointselected;
258 extern bool scoreadded;
259 extern int numchallengelevels;
262 extern int archiveselected;
263 extern char consoletext[15][256];
264 extern int consolechars[15];
265 extern bool chatting;
266 extern char displaytext[15][256];
267 extern int displaychars[15];
268 extern float displaytime[15];
269 extern float displayblinkdelay;
270 extern bool displayblink;
271 extern int displayselected;
272 extern bool consolekeydown;
273 extern float consoleblinkdelay;
274 extern bool consoleblink;
275 extern int consoleselected;
278 extern unsigned short crouchkey,jumpkey,forwardkey,chatkey,backkey,leftkey,rightkey,drawkey,throwkey,attackkey;
279 extern unsigned short consolekey;
280 extern bool oldattackkey;
282 void LoadTexture(const string fileName, GLuint *textureid,int mipmap, bool hasalpha);
283 void LoadTextureSave(const string fileName, GLuint *textureid,int mipmap,GLubyte *array, int *skinsize);
284 void LoadSave(const char *fileName, GLuint *textureid,bool mipmap,GLubyte *array, int *skinsize);
285 bool AddClothes(const char *fileName, GLubyte *array);
287 void LoadScreenTexture();
289 void LoadingScreen();
291 std::vector<std::string> ListCampaigns();
292 void FadeLoadingScreen(float howmuch);
294 int DrawGLScene(StereoSide side);
297 //factored from Tick() -sf17k
301 void doJumpReversals();
302 void doAerialAcrobatics();
304 void doPlayerCollisions();
309 void TickOnceAfter();
310 void SetUpLighting();
311 void Loadlevel(int which);
312 void Loadlevel(const char *name);
313 void Setenvironment(int which);
314 GLvoid ReSizeGLScene(float fov, float near);
315 int findPathDist(int start,int end);
316 int checkcollide(XYZ startpoint, XYZ endpoint);
317 int checkcollide(XYZ startpoint, XYZ endpoint, int what);
319 extern float talkdelay;
321 void fireSound(int sound=fireendsound);
322 void setKeySelected();
324 extern int numboundaries;
325 extern XYZ boundary[360];
327 extern int whichlevel;
328 extern int oldenvironment;
329 extern int targetlevel;
330 extern float changedelay;
332 extern float musicvolume[4];
333 extern float oldmusicvolume[4];
334 extern int musicselected;
340 int setKeySelected_thread(void*);
341 int thread(void *data);
342 void inputText(char* str, int* charselected, int* nb_chars);
345 extern Account* accountactive;
348 #ifndef __forceinline
350 # define __forceinline inline __attribute__((always_inline))
354 static __forceinline void swap_gl_buffers(void)
356 SDL_GL_SwapBuffers();
359 extern "C" { void UndefinedSymbolToExposeStubbedCode(void); }
360 //#define STUBBED(x) UndefinedSymbolToExposeStubbedCode();
361 #define STUBBED(x) { static bool seen = false; if (!seen) { seen = true; fprintf(stderr, "STUBBED: %s at %s:%d\n", x, __FILE__, __LINE__); } }
364 extern int numplayers;
366 extern int numdialogues;
367 const int max_dialogues = 20;
368 const int max_dialoguelength = 20;
369 extern int numdialogueboxes[max_dialogues];
370 extern int dialoguetype[max_dialogues];
371 extern int dialogueboxlocation[max_dialogues][max_dialoguelength];
372 extern float dialogueboxcolor[max_dialogues][max_dialoguelength][3];
373 extern int dialogueboxsound[max_dialogues][max_dialoguelength];
374 extern char dialoguetext[max_dialogues][max_dialoguelength][128];
375 extern char dialoguename[max_dialogues][max_dialoguelength][64];
376 extern XYZ dialoguecamera[max_dialogues][max_dialoguelength];
377 extern XYZ participantlocation[max_dialogues][10];
378 extern int participantfocus[max_dialogues][max_dialoguelength];
379 extern int participantaction[max_dialogues][max_dialoguelength];
380 extern float participantrotation[max_dialogues][10];
381 extern XYZ participantfacing[max_dialogues][max_dialoguelength][10];
382 extern float dialoguecamerarotation[max_dialogues][max_dialoguelength];
383 extern float dialoguecamerarotation2[max_dialogues][max_dialoguelength];
384 extern int indialogue;
385 extern int whichdialogue;
386 extern int directing;
387 extern float dialoguetime;
388 extern int dialoguegonethrough[20];
391 mapkilleveryone, mapgosomewhere,
392 mapkillsomeone, mapkillmost // These two are unused
395 enum pathtypes {wpkeepwalking, wppause};
397 static const char *pathtypenames[] = {"keepwalking", "pause"};
399 enum editortypes {typeactive, typesitting, typesittingwall, typesleeping,
400 typedead1, typedead2, typedead3, typedead4};
402 static const char *editortypenames[] = {
403 "active", "sitting", "sitting wall", "sleeping",
404 "dead1", "dead2", "dead3", "dead4"