1 #include <SDL.h>
2 #include <stdio.h>
3 #include "Music.h"
4 #include "BinaryBlob.h"
5
musicclass()6 musicclass::musicclass()
7 {
8 soundTracks.push_back(SoundTrack( "sounds/jump.wav" ));
9 soundTracks.push_back(SoundTrack( "sounds/jump2.wav" ));
10 soundTracks.push_back(SoundTrack( "sounds/hurt.wav" ));
11 soundTracks.push_back(SoundTrack( "sounds/souleyeminijingle.wav" ));
12 soundTracks.push_back(SoundTrack( "sounds/coin.wav" ));
13 soundTracks.push_back(SoundTrack( "sounds/save.wav" ));
14 soundTracks.push_back(SoundTrack( "sounds/crumble.wav" ));
15 soundTracks.push_back(SoundTrack( "sounds/vanish.wav" ));
16 soundTracks.push_back(SoundTrack( "sounds/blip.wav" ));
17 soundTracks.push_back(SoundTrack( "sounds/preteleport.wav" ));
18 soundTracks.push_back(SoundTrack( "sounds/teleport.wav" ));
19 soundTracks.push_back(SoundTrack( "sounds/crew1.wav" ));
20 soundTracks.push_back(SoundTrack( "sounds/crew2.wav" ));
21 soundTracks.push_back(SoundTrack( "sounds/crew3.wav" ));
22 soundTracks.push_back(SoundTrack( "sounds/crew4.wav" ));
23 soundTracks.push_back(SoundTrack( "sounds/crew5.wav" ));
24 soundTracks.push_back(SoundTrack( "sounds/crew6.wav" ));
25 soundTracks.push_back(SoundTrack( "sounds/terminal.wav" ));
26 soundTracks.push_back(SoundTrack( "sounds/gamesaved.wav" ));
27 soundTracks.push_back(SoundTrack( "sounds/crashing.wav" ));
28 soundTracks.push_back(SoundTrack( "sounds/blip2.wav" ));
29 soundTracks.push_back(SoundTrack( "sounds/countdown.wav" ));
30 soundTracks.push_back(SoundTrack( "sounds/go.wav" ));
31 soundTracks.push_back(SoundTrack( "sounds/crash.wav" ));
32 soundTracks.push_back(SoundTrack( "sounds/combine.wav" ));
33 soundTracks.push_back(SoundTrack( "sounds/newrecord.wav" ));
34 soundTracks.push_back(SoundTrack( "sounds/trophy.wav" ));
35 soundTracks.push_back(SoundTrack( "sounds/rescue.wav" ));
36
37 #ifdef VVV_COMPILEMUSIC
38 binaryBlob musicWriteBlob;
39 musicWriteBlob.AddFileToBinaryBlob("data/music/0levelcomplete.ogg");
40 musicWriteBlob.AddFileToBinaryBlob("data/music/1pushingonwards.ogg");
41 musicWriteBlob.AddFileToBinaryBlob("data/music/2positiveforce.ogg");
42 musicWriteBlob.AddFileToBinaryBlob("data/music/3potentialforanything.ogg");
43 musicWriteBlob.AddFileToBinaryBlob("data/music/4passionforexploring.ogg");
44 musicWriteBlob.AddFileToBinaryBlob("data/music/5intermission.ogg");
45 musicWriteBlob.AddFileToBinaryBlob("data/music/6presentingvvvvvv.ogg");
46 musicWriteBlob.AddFileToBinaryBlob("data/music/7gamecomplete.ogg");
47 musicWriteBlob.AddFileToBinaryBlob("data/music/8predestinedfate.ogg");
48 musicWriteBlob.AddFileToBinaryBlob("data/music/9positiveforcereversed.ogg");
49 musicWriteBlob.AddFileToBinaryBlob("data/music/10popularpotpourri.ogg");
50 musicWriteBlob.AddFileToBinaryBlob("data/music/11pipedream.ogg");
51 musicWriteBlob.AddFileToBinaryBlob("data/music/12pressurecooker.ogg");
52 musicWriteBlob.AddFileToBinaryBlob("data/music/13pacedenergy.ogg");
53 musicWriteBlob.AddFileToBinaryBlob("data/music/14piercingthesky.ogg");
54 musicWriteBlob.AddFileToBinaryBlob("data/music/predestinedfatefinallevel.ogg");
55
56 musicWriteBlob.writeBinaryBlob("data/BinaryMusic.vvv");
57 #endif
58
59 binaryBlob musicReadBlob;
60 if (!musicReadBlob.unPackBinary("mmmmmm.vvv"))
61 {
62 mmmmmm = false;
63 usingmmmmmm=false;
64 bool ohCrap = musicReadBlob.unPackBinary("vvvvvvmusic.vvv");
65 SDL_assert(ohCrap && "Music not found!");
66 }
67 else
68 {
69 mmmmmm = true;
70 usingmmmmmm = true;
71 int index = musicReadBlob.getIndex("data/music/0levelcomplete.ogg");
72 SDL_RWops *rw = SDL_RWFromMem(musicReadBlob.getAddress(index), musicReadBlob.getSize(index));
73 musicTracks.push_back(MusicTrack( rw ));
74
75 index = musicReadBlob.getIndex("data/music/1pushingonwards.ogg");
76 rw = SDL_RWFromMem(musicReadBlob.getAddress(index), musicReadBlob.getSize(index));
77 musicTracks.push_back(MusicTrack( rw ));
78
79 index = musicReadBlob.getIndex("data/music/2positiveforce.ogg");
80 rw = SDL_RWFromMem(musicReadBlob.getAddress(index), musicReadBlob.getSize(index));
81 musicTracks.push_back(MusicTrack( rw ));
82
83 index = musicReadBlob.getIndex("data/music/3potentialforanything.ogg");
84 rw = SDL_RWFromMem(musicReadBlob.getAddress(index), musicReadBlob.getSize(index));
85 musicTracks.push_back(MusicTrack( rw ));
86
87 index = musicReadBlob.getIndex("data/music/4passionforexploring.ogg");
88 rw = SDL_RWFromMem(musicReadBlob.getAddress(index), musicReadBlob.getSize(index));
89 musicTracks.push_back(MusicTrack( rw ));
90
91 index = musicReadBlob.getIndex("data/music/5intermission.ogg");
92 rw = SDL_RWFromMem(musicReadBlob.getAddress(index), musicReadBlob.getSize(index));
93 musicTracks.push_back(MusicTrack( rw ));
94
95 index = musicReadBlob.getIndex("data/music/6presentingvvvvvv.ogg");
96 rw = SDL_RWFromMem(musicReadBlob.getAddress(index), musicReadBlob.getSize(index));
97 musicTracks.push_back(MusicTrack( rw ));
98
99 index = musicReadBlob.getIndex("data/music/7gamecomplete.ogg");
100 rw = SDL_RWFromMem(musicReadBlob.getAddress(index), musicReadBlob.getSize(index));
101 musicTracks.push_back(MusicTrack( rw ));
102
103 index = musicReadBlob.getIndex("data/music/8predestinedfate.ogg");
104 rw = SDL_RWFromMem(musicReadBlob.getAddress(index), musicReadBlob.getSize(index));
105 musicTracks.push_back(MusicTrack( rw ));
106
107 index = musicReadBlob.getIndex("data/music/9positiveforcereversed.ogg");
108 rw = SDL_RWFromMem(musicReadBlob.getAddress(index), musicReadBlob.getSize(index));
109 musicTracks.push_back(MusicTrack( rw ));
110
111 index = musicReadBlob.getIndex("data/music/10popularpotpourri.ogg");
112 rw = SDL_RWFromMem(musicReadBlob.getAddress(index), musicReadBlob.getSize(index));
113 musicTracks.push_back(MusicTrack( rw ));
114
115 index = musicReadBlob.getIndex("data/music/11pipedream.ogg");
116 rw = SDL_RWFromMem(musicReadBlob.getAddress(index), musicReadBlob.getSize(index));
117 musicTracks.push_back(MusicTrack( rw ));
118
119 index = musicReadBlob.getIndex("data/music/12pressurecooker.ogg");
120 rw = SDL_RWFromMem(musicReadBlob.getAddress(index), musicReadBlob.getSize(index));
121 musicTracks.push_back(MusicTrack( rw ));
122
123 index = musicReadBlob.getIndex("data/music/13pacedenergy.ogg");
124 rw = SDL_RWFromMem(musicReadBlob.getAddress(index), musicReadBlob.getSize(index));
125 musicTracks.push_back(MusicTrack( rw ));
126
127 index = musicReadBlob.getIndex("data/music/14piercingthesky.ogg");
128 rw = SDL_RWFromMem(musicReadBlob.getAddress(index), musicReadBlob.getSize(index));
129 musicTracks.push_back(MusicTrack( rw ));
130
131 index = musicReadBlob.getIndex("data/music/predestinedfatefinallevel.ogg");
132 rw = SDL_RWFromMem(musicReadBlob.getAddress(index), musicReadBlob.getSize(index));
133 musicTracks.push_back(MusicTrack( rw ));
134
135 bool ohCrap = musicReadBlob.unPackBinary("vvvvvvmusic.vvv");
136 SDL_assert(ohCrap && "Music not found!");
137 }
138
139 int index = musicReadBlob.getIndex("data/music/0levelcomplete.ogg");
140 SDL_RWops *rw = SDL_RWFromMem(musicReadBlob.getAddress(index), musicReadBlob.getSize(index));
141 musicTracks.push_back(MusicTrack( rw ));
142
143 index = musicReadBlob.getIndex("data/music/1pushingonwards.ogg");
144 rw = SDL_RWFromMem(musicReadBlob.getAddress(index), musicReadBlob.getSize(index));
145 musicTracks.push_back(MusicTrack( rw ));
146
147 index = musicReadBlob.getIndex("data/music/2positiveforce.ogg");
148 rw = SDL_RWFromMem(musicReadBlob.getAddress(index), musicReadBlob.getSize(index));
149 musicTracks.push_back(MusicTrack( rw ));
150
151 index = musicReadBlob.getIndex("data/music/3potentialforanything.ogg");
152 rw = SDL_RWFromMem(musicReadBlob.getAddress(index), musicReadBlob.getSize(index));
153 musicTracks.push_back(MusicTrack( rw ));
154
155 index = musicReadBlob.getIndex("data/music/4passionforexploring.ogg");
156 rw = SDL_RWFromMem(musicReadBlob.getAddress(index), musicReadBlob.getSize(index));
157 musicTracks.push_back(MusicTrack( rw ));
158
159 index = musicReadBlob.getIndex("data/music/5intermission.ogg");
160 rw = SDL_RWFromMem(musicReadBlob.getAddress(index), musicReadBlob.getSize(index));
161 musicTracks.push_back(MusicTrack( rw ));
162
163 index = musicReadBlob.getIndex("data/music/6presentingvvvvvv.ogg");
164 rw = SDL_RWFromMem(musicReadBlob.getAddress(index), musicReadBlob.getSize(index));
165 musicTracks.push_back(MusicTrack( rw ));
166
167 index = musicReadBlob.getIndex("data/music/7gamecomplete.ogg");
168 rw = SDL_RWFromMem(musicReadBlob.getAddress(index), musicReadBlob.getSize(index));
169 musicTracks.push_back(MusicTrack( rw ));
170
171 index = musicReadBlob.getIndex("data/music/8predestinedfate.ogg");
172 rw = SDL_RWFromMem(musicReadBlob.getAddress(index), musicReadBlob.getSize(index));
173 musicTracks.push_back(MusicTrack( rw ));
174
175 index = musicReadBlob.getIndex("data/music/9positiveforcereversed.ogg");
176 rw = SDL_RWFromMem(musicReadBlob.getAddress(index), musicReadBlob.getSize(index));
177 musicTracks.push_back(MusicTrack( rw ));
178
179 index = musicReadBlob.getIndex("data/music/10popularpotpourri.ogg");
180 rw = SDL_RWFromMem(musicReadBlob.getAddress(index), musicReadBlob.getSize(index));
181 musicTracks.push_back(MusicTrack( rw ));
182
183 index = musicReadBlob.getIndex("data/music/11pipedream.ogg");
184 rw = SDL_RWFromMem(musicReadBlob.getAddress(index), musicReadBlob.getSize(index));
185 musicTracks.push_back(MusicTrack( rw ));
186
187 index = musicReadBlob.getIndex("data/music/12pressurecooker.ogg");
188 rw = SDL_RWFromMem(musicReadBlob.getAddress(index), musicReadBlob.getSize(index));
189 musicTracks.push_back(MusicTrack( rw ));
190
191 index = musicReadBlob.getIndex("data/music/13pacedenergy.ogg");
192 rw = SDL_RWFromMem(musicReadBlob.getAddress(index), musicReadBlob.getSize(index));
193 musicTracks.push_back(MusicTrack( rw ));
194
195 index = musicReadBlob.getIndex("data/music/14piercingthesky.ogg");
196 rw = SDL_RWFromMem(musicReadBlob.getAddress(index), musicReadBlob.getSize(index));
197 musicTracks.push_back(MusicTrack( rw ));
198
199 index = musicReadBlob.getIndex("data/music/predestinedfatefinallevel.ogg");
200 rw = SDL_RWFromMem(musicReadBlob.getAddress(index), musicReadBlob.getSize(index));
201 musicTracks.push_back(MusicTrack( rw ));
202
203 safeToProcessMusic= false;
204 m_doFadeInVol = false;
205 musicVolume = 128;
206 FadeVolAmountPerFrame = 0;
207
208 custompd = false;
209 // currentsong = -1;
210 // nicefade = 0;
211 }
212
play(int t)213 void musicclass::play(int t)
214 {
215 t = (t % 16);
216
217 if(mmmmmm)
218 {
219 if(!usingmmmmmm)
220 {
221 t += 16;
222 }
223 }
224 safeToProcessMusic = true;
225 Mix_VolumeMusic(128);
226 if (currentsong !=t)
227 {
228 if (currentsong != -1)
229 {
230 // Stop the old song first
231 // musicchannel.stop();
232 if (currentsong != 0)
233 {
234 // musicchannel.removeEventListener(Event.SOUND_COMPLETE, loopmusic);
235 }
236 }
237 if (t != -1)
238 {
239 // musicfade = 0;
240 currentsong = t;
241 if (currentsong == 0 || currentsong == 7)
242 {
243 // Level Complete theme, no fade in or repeat
244 // musicchannel = musicchan[currentsong].play(0);
245 // musicchannel.soundTransform = new SoundTransform(1.0);
246 if(Mix_FadeInMusic(musicTracks[t].m_music, 0, 0)==-1)
247 {
248 printf("Mix_PlayMusic: %s\n", Mix_GetError());
249 }
250 }
251 else
252 {
253 // musicfadein = 90;
254 // musicchannel = musicchan[currentsong].play(0);
255 // musicchannel.soundTransform = new SoundTransform(0);
256 // musicchannel.addEventListener(Event.SOUND_COMPLETE, loopmusic);
257 if(Mix_FadeInMusic(musicTracks[t].m_music, -1, 3000)==-1)
258 {
259 printf("Mix_FadeInMusic: %s\n", Mix_GetError());
260 }
261 }
262 }
263 else
264 {
265 currentsong = -1;
266 }
267 }
268 }
269
loopmusic()270 void musicclass::loopmusic()
271 {
272 //musicchannel.removeEventListener(Event.SOUND_COMPLETE, loopmusic);
273 //if(currentsong>-1){
274 // musicchannel = musicchan[currentsong].play();
275 // musicchannel.addEventListener(Event.SOUND_COMPLETE, loopmusic);
276 //}
277 }
278
stopmusic()279 void musicclass::stopmusic()
280 {
281 // musicchannel.removeEventListener(Event.SOUND_COMPLETE, stopmusic);
282 // musicchannel.stop();
283 Mix_HaltMusic();
284 currentsong = -1;
285 }
286
haltdasmusik()287 void musicclass::haltdasmusik()
288 {
289 // musicchannel.removeEventListener(Event.SOUND_COMPLETE, stopmusic);
290 // musicchannel.stop();
291 // resumesong = currentsong;
292 Mix_HaltMusic();
293 currentsong = -1;
294 }
295
silencedasmusik()296 void musicclass::silencedasmusik()
297 {
298 //if(currentsong>-1){
299 // musicchannel.soundTransform = new SoundTransform(0);
300 //}
301 Mix_VolumeMusic(0) ;
302 musicVolume = 0;
303 }
304
fadeMusicVolumeIn(int ms)305 void musicclass::fadeMusicVolumeIn(int ms)
306 {
307 m_doFadeInVol = true;
308 FadeVolAmountPerFrame = MIX_MAX_VOLUME / (ms / 33);
309 }
310
fadeout()311 void musicclass::fadeout()
312 {
313 //if(currentsong>-1){
314 // if (musicfade == 0) {
315 // musicchannel.removeEventListener(Event.SOUND_COMPLETE, stopmusic);
316 // musicfade = 61;
317 // }
318 //}
319
320 Mix_FadeOutMusic(2000);
321 currentsong = -1;
322 }
323
processmusicfade()324 void musicclass::processmusicfade()
325 {
326 //musicfade--;
327 //if (musicfade > 0) {
328 // musicchannel.soundTransform = new SoundTransform(musicfade / 60);
329 //}else {
330 // musicchannel.stop();
331 // currentsong = -1;
332 //}
333 }
334
processmusicfadein()335 void musicclass::processmusicfadein()
336 {
337 musicVolume += FadeVolAmountPerFrame;
338 Mix_VolumeMusic(musicVolume);
339 if (musicVolume >= MIX_MAX_VOLUME)
340 {
341 m_doFadeInVol = false;
342 }
343 }
344
processmusic()345 void musicclass::processmusic()
346 {
347 if(!safeToProcessMusic)
348 {
349 return;
350 }
351
352 //if (musicfade > 0) processmusicfade();
353 //if (musicfadein > 0) processmusicfadein();
354
355 if (nicefade == 1 && Mix_PlayingMusic() == 0)
356 {
357 play(nicechange);
358 nicechange = -1; nicefade = 0;
359 }
360
361 if(m_doFadeInVol)
362 {
363 processmusicfadein();
364 }
365
366 //musicstopother--;
367 //if (musicstopother == 1) {
368 // musicstopother = 0;
369 // if (currentmusicchan == 0) musicchannel2.stop();
370 // if (currentmusicchan == 1) musicchannel.stop();
371 //}
372 //if (musicstopother < 0) musicstopother = 0;
373
374 //musicchancur--;
375 //if (musicchancur <= 0 && currentsong > -1 && musicchanlen > 0) {
376 // musicchancur = musicchanlen;
377 // if (currentmusicchan == 0) {
378 // musicchannel2 = musicchan[currentsong].play();
379 // musicstopother = 3;
380 // currentmusicchan = 1;
381 // }else {
382 // musicchannel = musicchan[currentsong].play();
383 // musicstopother = 3;
384 // currentmusicchan = 0;
385 // }
386 //}
387 }
388
389
niceplay(int t)390 void musicclass::niceplay(int t)
391 {
392 // important: do nothing if the correct song is playing!
393 if(currentsong!=t)
394 {
395 if(currentsong!=-1) fadeout();
396 nicefade = 1;
397 nicechange = t;
398 }
399 }
400
changemusicarea(int x,int y)401 void musicclass::changemusicarea(int x, int y)
402 {
403 switch(musicroom(x, y))
404 {
405 case musicroom(11, 4):
406 niceplay(2);
407 break;
408
409 case musicroom(2, 4):
410 case musicroom(7, 15):
411 niceplay(3);
412 break;
413
414 case musicroom(18, 1):
415 case musicroom(15, 0):
416 niceplay(12);
417 break;
418
419 case musicroom(0, 0):
420 case musicroom(0, 16):
421 case musicroom(2, 11):
422 case musicroom(7, 9):
423 case musicroom(8, 11):
424 case musicroom(13, 2):
425 case musicroom(17, 12):
426 case musicroom(14, 19):
427 case musicroom(17, 17):
428 niceplay(4);
429 break;
430
431 default:
432 niceplay(1);
433 break;
434 }
435 }
436
initefchannels()437 void musicclass::initefchannels()
438 {
439 // for (var i:int = 0; i < 16; i++) efchannel.push(new SoundChannel);
440 }
441
playef(int t,int offset)442 void musicclass::playef(int t, int offset)
443 {
444 // efchannel[currentefchan] = efchan[t].play(offset);
445 // currentefchan++;
446 // if (currentefchan > 15) currentefchan -= 16;
447 int channel;
448
449 channel = Mix_PlayChannel(-1, soundTracks[t].sound, 0);
450 if(channel == -1)
451 {
452 fprintf(stderr, "Unable to play WAV file: %s\n", Mix_GetError());
453 }
454 }
455