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