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