1 /********************************************************************
2   Mega Mario SRC
3     created:	2005/09/18
4 	created:	18:9:2005   10:13
5 	author:		Jens Wellmann (c)
6 *********************************************************************/
7 
8 
9 
10 #include "Global.h"
11 #include "unixutils.h"
12 #include <limits.h>
13 
14 
15 
16 SDL_Surface *screen;
17 SDL_Surface *helpscreen;
18 SDL_Surface *cheatscreen;
19 
20 SDL_Event event;
21 
22 Uint8 *keys;
23 
24 char* cheatcode;
25 
26 bool HighQualityMusic_available=0;
27 
28 bool Real_Fullscreen;
29 
30  int WIDTH = 640,GL_Width=1024;
31  int HEIGHT = 480,GL_Height=768;
32 
33  ofstream out_logfile;
34 
35 
36 double frame_multi;
37 
38 #ifndef __unix__
39 bool NoFrameCheck = 0;
40 #endif
41 bool gameStarted = 0,gameStartedVirtual = 0,pixelation=1,show_blood = 0,cheater=0,cheats_enabled=0;
42 int nosound = 1;
43 
44 Uint32 magenta;
45 int cam_x=50,cam_y=3200,bonus_activ=0;
46 
47 Mix_Chunk *SOUND[MAX_SOUNDS];
48 s_music_archive MusicArchive;
49 
50 int musicvolume=MIX_MAX_VOLUME,soundvolume;
51 
52 SDL_Color HUDColor;
53 SDL_Color HUDColorbg;
54 TTF_Font* font;
55 
56 int GOOMBAcount;
57 cGoomba* GOOMBA[MAXENEMY];
58 int GOOMBABIGcount;
59 cGoombaBig *GOOMBABIG[5];
60 int TURTLEcount;
61 cTurtle *TURTLE[MAXENEMY];
62 int TURTLEFLYcount;
63 cTurtleFly *TURTLEFLY[MAXENEMY];
64 int SPINYcount;
65 cSpiny *SPINY[MAXENEMY];
66 int FIRECIRCLEcount;
67 cFireCircle *FIRECIRCLE[MAXENEMY];
68 int CANNONcount;
69 cCannon *CANNON[MAXENEMY];
70 int KILLERBLUMEcount;
71 cKillerBlume *KILLERBLUME[MAXENEMY];
72 int BRETTcount;
73 cBrett *BRETT[MAXENEMY];
74 
75 cBowser* BOWSER = 0;
76 
77 cScene *LEVEL;
78 cPlayer *PLAYER;
79 cBonus* BONUS_DYNAMIC[5];
80 cGlidder *GLIDDER;
81 cCrack *CRACK;
82 cFireball *FIREBALL[2];
83 cScore* SCORE;
84 cFire* FIRE;
85 cBlood *BLOOD_GENERATOR;
86 
87 cGamepad *Gamepad;
88 HUD_STRUCT HUD;
89 
loadGlobalSprites()90 void loadGlobalSprites()
91 {
92 	SOUND[S_GROW] = Mix_LoadWAV (DATADIR "sfx/grow.wav");
93 	SOUND[S_JUMP] = Mix_LoadWAV (DATADIR "sfx/jump.wav");
94 	SOUND[S_CRACK] = Mix_LoadWAV (DATADIR "sfx/crack.wav");
95 	SOUND[S_COIN] = Mix_LoadWAV (DATADIR "sfx/coin.wav");
96 	SOUND[S_KICK] = Mix_LoadWAV (DATADIR "sfx/kick.wav");
97 	SOUND[S_STOMP] = Mix_LoadWAV (DATADIR "sfx/stomp.wav");
98 	SOUND[S_FIREBALL] = Mix_LoadWAV (DATADIR "sfx/fireball.wav");
99 	SOUND[S_STAGE_CLEAR] = Mix_LoadWAV (DATADIR "sfx/stage_clear.wav");
100 	SOUND[S_1UP] = Mix_LoadWAV (DATADIR "sfx/1-up.wav");
101 	SOUND[S_DIE] = Mix_LoadWAV (DATADIR "sfx/die.wav");
102 	SOUND[S_GAMEOVER] = Mix_LoadWAV (DATADIR "sfx/gameover.wav");
103 	SOUND[S_PAUSE] = Mix_LoadWAV (DATADIR "sfx/pause.wav");
104 	SOUND[S_PIPE] = Mix_LoadWAV (DATADIR "sfx/pipe.wav");
105 	SOUND[S_FLAG] = Mix_LoadWAV (DATADIR "sfx/flag.wav");
106 	SOUND[S_BOWSERFALL] = Mix_LoadWAV (DATADIR "sfx/bowserfall.wav");
107 	SOUND[S_SHRINK] = Mix_LoadWAV (DATADIR "sfx/shrink.wav");
108 	SOUND[S_OUTPUT] = Mix_LoadWAV (DATADIR "sfx/output.wav");
109 	SOUND[S_TOCK] = Mix_LoadWAV (DATADIR "sfx/tock.wav");
110 	SOUND[S_STOMP2] = Mix_LoadWAV (DATADIR "sfx/stomp_1.wav");
111 	SOUND[S_CANNON] = Mix_LoadWAV (DATADIR "sfx/cannon.wav");
112 
113 
114 	LEVEL->Bonus_Textures[1] = LoadIMG(DATADIR "gfx/bonus/crackstone.png");
115 	LEVEL->Bonus_Textures[2] = LoadIMG(DATADIR "gfx/bonus/box.png");
116 	LEVEL->Bonus_Textures[3] = LoadIMG(DATADIR "gfx/bonus/box.png");
117 	LEVEL->Bonus_Textures[4] = LoadIMG(DATADIR "gfx/bonus/box.png");
118 	LEVEL->Bonus_Textures[5] = LoadIMG(DATADIR "gfx/bonus/stern.png");
119 	LEVEL->Bonus_Textures[6] = LoadIMG(DATADIR "gfx/bonus/pilz.png");
120 	LEVEL->Bonus_Textures[7] = LoadIMG(DATADIR "gfx/bonus/boxempty.png");
121 	LEVEL->Bonus_Textures[8] = LoadIMG(DATADIR "gfx/bonus/invis.png");
122 	LEVEL->Bonus_Textures[9] = LoadIMG(DATADIR "gfx/bonus/life.png");
123 	LEVEL->Bonus_Textures[10] = LoadIMG(DATADIR "gfx/bonus/coin1.png");
124 	LEVEL->Bonus_Textures[11] = LoadIMG(DATADIR "gfx/bonus/coin2.png");
125 	LEVEL->Bonus_Textures[12] = LoadIMG(DATADIR "gfx/bonus/coin3.png");
126 	LEVEL->Bonus_Textures[13] = LoadIMG(DATADIR "gfx/bonus/coin4.png");
127 	LEVEL->Bonus_Textures[14] = LoadIMG(DATADIR "gfx/bonus/crackstone2.png");
128 	LEVEL->Bonus_Textures[15] = LoadIMG(DATADIR "gfx/bonus/invis.png");
129 	LEVEL->Bonus_Textures[16] = LoadIMG(DATADIR "gfx/bonus/box.png");
130 	LEVEL->Bonus_Textures[17] = LoadIMG(DATADIR "gfx/bonus/axe.png");
131 	LEVEL->Bonus_Textures[18] = LoadIMG(DATADIR "gfx/bonus/fire1.png");
132 	LEVEL->Bonus_Textures[19] = LoadIMG(DATADIR "gfx/bonus/fire2.png");
133 	LEVEL->Bonus_Textures[20] = LoadIMG(DATADIR "gfx/bonus/crackedlong.png");
134 
135 	helpscreen = LoadIMG(DATADIR "gfx/story/help.png");
136 	cheatscreen = LoadIMG(DATADIR "gfx/bonus/cheater.png");
137 
138 	initGOOMBA();
139 	initSPINY();
140 	initTURTLE();
141 	initCANNON();
142 	initKILLERBLUUME();
143 	initBRETT();
144 	initGOOMBAbig();
145 
146 
147 	HUDColor.r = 50;
148 	HUDColor.g = 190;
149 	HUDColor.b = 150;
150 	HUDColorbg.r = 30;
151 	HUDColorbg.g = 31;
152 	HUDColorbg.b = 31;
153 }
unloadGlobalSprites()154 void unloadGlobalSprites()
155 {
156 	for(int i=1;i<MAX_BONUS_TEXTURES;i++)
157 		SDL_FreeSurface(LEVEL->Bonus_Textures[i]);
158 
159 	SDL_FreeSurface(screen);
160 }
161 
THEGAMEENDSHERE()162 void THEGAMEENDSHERE()
163 {
164 #ifdef __unix__
165 char buf[MAX_PATH], *home_dir = get_homedir();
166 snprintf(buf, MAX_PATH, "%s/.megamario/levellist.txt",
167 	home_dir? home_dir:".");
168 ofstream filelistout(buf);
169 #else
170 ofstream filelistout(DATADIR "levels/levellist.txt");
171 #endif
172 
173 filelistout<<"data/levels/old/lab/main\n!- The extreme MarioTestLab - Massacre -!\ndata/levels/menulevel2\n!- The funky death Jump -!\ndata/levels/old/2/main\n!- The first level of the original SMB -!\ndata/levels/old/1/main\n#- Nonsense -#\ndata/levels/1/main\nLev. 1 - The Escape from the castle\ndata/levels/2/main\nLev. 2 - Getaway\ndata/levels/3/main\nLev. 3 - The story starts\ndata/levels/4/main\nLev. 4 - Gettin' higher\ndata/levels/5/main\nLev. 5 - First castle\ndata/levels/6/main\n";
174 filelistout<<"Lev. 6 - Crossed pipes\ndata/levels/7/main\nLev. 7 - What about stars ?\ndata/levels/8/main\nLev. 8 - Bullet Bill strikes back\ndata/levels/9/main\nLev. 9 - Castle 2 - Deep down below\ndata/levels/10/main\nLev. 10 - The Egypt hole 1\ndata/levels/11/main\nLev. 11 - The Hole 2\ndata/levels/12/main\nLev. 12 - Nice weather\ndata/levels/13/main\nLev. 13 - Castle 3 - Trapped\ndata/levels/14/main\nLev. 14 - A lovely canyon\ndata/levels/15/main\nLev. 15 - Fire in the Hole\ndata/levels/16/main\nLev. 16 - Maze\ndata/levels/17/main\n";
175 filelistout<<"Lev. 17 - Canyon Bowser Battle\ndata/levels/18/main\nLev. 18 - ?????????????????\ndata/levels/19/main\n";
176 filelistout<<"Lev. 19 - Castle 4 - Climb The Evil\ndata/levels/20/main\nLev. 20 - Elevator Attator\ndata/levels/21/main\nLev. 21 - Big World\ndata/levels/22/main\nLev. 22 - Bullet Bill\ndata/levels/23/main\nLev. 23 - Way to hell\ndata/levels/24/main\nLev. 24 - Final Castle - Power Battle";
177 
178 filelistout.close();
179 loadlevellist();
180 
181 #ifdef __unix__
182 snprintf(buf, MAX_PATH, "%s/.megamario/cheats.txt",
183 	home_dir? home_dir:".");
184 ofstream cheatout(buf);
185 #else
186 ofstream cheatout("cheats.txt");
187 #endif
188 cheatout<<"Ohoh, seems like you completed the game.\n\nCheatmode is enabled.\n\n"<<endl;
189 cheatout<<"Cheats (Enter in Game):\n\n big = mushroom\n fire = firemario\n small = smallmario\n die = die\n\n\nPress 1 and 5 to fly!!! \nHave a Lot Of Fun!";
190 cheatout.close();
191 
192 cheats_enabled = 1;
193 
194 	playMusic("ending.mid");
195 	SDL_Surface * surfs;
196 
197 	surfs = LoadIMG(DATADIR "gfx/story/outro1");
198 
199 
200 	bool ACDC=1;
201 	while(ACDC)
202 	{
203 		while(SDL_PollEvent(&event))
204 		{
205 			switch(event.type)
206 			{
207 				case SDL_QUIT:
208 					exitos();
209 					break;
210 				case SDL_KEYDOWN:
211 					ACDC = 0;
212 				break;
213 			}
214 		}
215 		SDL_UpperBlit(surfs,0,screen,0);
216 
217 		drawGLscreen();
218 	}
219 	SDL_FillRect(screen,0,0);
220 	drawGLscreen();
221 	SDL_FreeSurface(surfs);
222 	surfs = LoadIMG(DATADIR "gfx/story/outro2");
223 	SDL_Delay(500);
224 ACDC=1;
225 	while(ACDC)
226 	{
227 		while(SDL_PollEvent(&event))
228 		{
229 			switch(event.type)
230 			{
231 				case SDL_QUIT:
232 					exitos();
233 					break;
234 				case SDL_KEYDOWN:
235 					ACDC = 0;
236 				break;
237 			}
238 		}
239 		SDL_UpperBlit(surfs,0,screen,0);
240 		drawGLscreen();
241 	}SDL_FillRect(screen,0,0);
242 	drawGLscreen();
243 	SDL_FreeSurface(surfs);
244 	surfs = LoadIMG(DATADIR "gfx/story/outro3");
245 	SDL_Delay(500);
246 	ACDC=1;
247 	while(ACDC)
248 	{
249 		while(SDL_PollEvent(&event))
250 		{
251 			switch(event.type)
252 			{
253 				case SDL_QUIT:
254 					exitos();
255 					break;
256 				case SDL_KEYDOWN:
257 					ACDC = 0;
258 				break;
259 			}
260 		}
261 		SDL_UpperBlit(surfs,0,screen,0);
262 		drawGLscreen();
263 	}SDL_FillRect(screen,0,0);
264 	drawGLscreen();
265 	SDL_FreeSurface(surfs);
266 	surfs = LoadIMG(DATADIR "gfx/story/outro4");
267 	SDL_Delay(500);
268 	ACDC=1;
269 	while(ACDC)
270 	{
271 		while(SDL_PollEvent(&event))
272 		{
273 			switch(event.type)
274 			{
275 				case SDL_QUIT:
276 					exitos();
277 					break;
278 				case SDL_KEYDOWN:
279 					ACDC = 0;
280 				break;
281 			}
282 		}
283 		SDL_UpperBlit(surfs,0,screen,0);
284 		drawGLscreen();
285 	}SDL_FillRect(screen,0,0);
286 	drawGLscreen();
287 	SDL_FreeSurface(surfs);
288 	surfs = LoadIMG(DATADIR "gfx/story/outro5");
289 	SDL_Delay(500);
290 	ACDC=1;
291 	while(ACDC)
292 	{
293 		while(SDL_PollEvent(&event))
294 		{
295 			switch(event.type)
296 			{
297 				case SDL_QUIT:
298 					exitos();
299 					break;
300 				case SDL_KEYDOWN:
301 					ACDC = 0;
302 				break;
303 			}
304 		}
305 		SDL_UpperBlit(surfs,0,screen,0);
306 		drawGLscreen();
307 	}SDL_FillRect(screen,0,0);
308 	drawGLscreen();
309 	SDL_FreeSurface(surfs);
310 	surfs = LoadIMG(DATADIR "gfx/story/outro6");
311 	SDL_Delay(500);
312 ACDC=1;
313 	while(ACDC)
314 	{
315 		while(SDL_PollEvent(&event))
316 		{
317 			switch(event.type)
318 			{
319 				case SDL_QUIT:
320 					exitos();
321 					break;
322 				case SDL_KEYDOWN:
323 					ACDC = 0;
324 				break;
325 			}
326 		}
327 		SDL_UpperBlit(surfs,0,screen,0);
328 		drawGLscreen();
329 	}
330 	SDL_FreeSurface(surfs);
331 
332 
333 	loadlevellist();
334 	showMenu();
335 }
336 
337 
338 
339 
instruct(char * path)340 void instruct(char* path)
341 {
342 	bool READY=0;
343 
344 	SDL_Surface* sch = LoadIMG(path);
345 
346 	SDL_UpperBlit(sch,0,screen,0);
347 	drawGLscreen();
348 	SDL_BlitSurface(sch,0,screen,0);
349 	drawGLscreen();
350 
351 	SDL_Delay(2000);
352 	SDL_Event MegaEvent;
353 	while(!READY)
354 	{
355 		while(SDL_PollEvent(&MegaEvent))
356 		{
357 			switch(MegaEvent.type)
358 			{
359 					case SDL_KEYDOWN:
360 					READY=1;
361 				break;
362 
363 			}
364 		}
365 	}
366 	SDL_FreeSurface(sch);
367 }
368