[Hugo] Code Review - Music Engine

Discuss text adventures here! The classics like those from Infocom, Magnetic Scrolls, Adventure International and Level 9 and the ones we're making today.

Moderators: AArdvark, Ice Cream Jonsey

User avatar
Ice Cream Jonsey
Posts: 28923
Joined: Sat Apr 27, 2002 2:44 pm
Location: Colorado
Contact:

[Hugo] Code Review - Music Engine

Post by Ice Cream Jonsey »

I think there's a bug in the code that stops music from playing when the hour switches from 59 to 00. Let me post what I've got, and then I'll try to describe what I am doing. Any help would be greatly appreciated.

Code: Select all

routine MusicManager
{
local x, currentTime

TempTimeArray[0] = GetSystemTimeValue(TIME_MONTH)
TempTimeArray[1] = GetSystemTimeValue(TIME_DAY)
TempTimeArray[2] = GetSystemTimeValue(TIME_HOURS)
TempTimeArray[3] = GetSystemTimeValue(TIME_MINUTES)
TempTimeArray[4] = GetSystemTimeValue(TIME_SECONDS)



! If we go to a different month, day or hour, play a new song. 
if ((LastTimeArray[0] ~= TempTimeArray[0]) or (LastTimeArray[1] ~= TempTimeArray[1]) or (LastTimeArray[2] ~= TempTimeArray[2]))  
{
	PlayNewSong
	for &#40;x=0; x <5> LastTimeAsNumber + MusicArrayTime&#91;LastSongPlayed&#93;
&#123;
	PlayNewSong&#40;&#41;
	for &#40;x=0; x < 5; x++&#41;
	&#123;
		LastTimeArray&#91;x&#93; = TempTimeArray&#91;x&#93;
	&#125;
	return
&#125;

return
&#125;


routine GetCurrentTime&#40;&#41;
&#123;
local y

	y = TempTimeArray&#91;3&#93; ! y contains total number of minutes
	y = y * 60 ! minutes in seconds
	y = y + TempTimeArray&#91;4&#93;

	return y
&#125;


routine GrabFirstRandomSong
&#123;
local x

	! Ideally, I'm going to change this so only certain songs can be the first one played.
	! x = random&#40;4&#41;
	! But I don't want this in place while I'm testing the game. 
	x = random&#40;MAXSONGS&#41;
	x--

	PlayMusic&#40;"czmus", MusicArray&#91;x&#93;, music_volume, false, true&#41;
	LastSongPlayed = x

	LastTimeArray&#91;0&#93; = GetSystemTimeValue&#40;TIME_MONTH&#41;
	LastTimeArray&#91;1&#93; = GetSystemTimeValue&#40;TIME_DAY&#41;
	LastTimeArray&#91;2&#93; = GetSystemTimeValue&#40;TIME_HOURS&#41;
	LastTimeArray&#91;3&#93; = GetSystemTimeValue&#40;TIME_MINUTES&#41;
	LastTimeArray&#91;4&#93; = GetSystemTimeValue&#40;TIME_SECONDS&#41;

	TempTimeArray&#91;0&#93; = GetSystemTimeValue&#40;TIME_MONTH&#41;
	TempTimeArray&#91;1&#93; = GetSystemTimeValue&#40;TIME_DAY&#41;
	TempTimeArray&#91;2&#93; = GetSystemTimeValue&#40;TIME_HOURS&#41;
	TempTimeArray&#91;3&#93; = GetSystemTimeValue&#40;TIME_MINUTES&#41;
	TempTimeArray&#91;4&#93; = GetSystemTimeValue&#40;TIME_SECONDS&#41;
	TempTimeArray&#91;4&#93;++

	LastTimeAsNumber = GetCurrentTime&#40;&#41;
!	"Initially printing LastTimeAsNumber and it is ";
!	print number LastTimeAsNumber

&#125;

routine PlayNewSong
&#123;
local y,x 
x = LastSongPlayed

	while &#40;x = LastSongPlayed&#41;
	&#123;
		y = random&#40;MAXSONGS&#41;
		y--

		! If y is pursedlips, let's make sure we don't play it twice

		if x = 4
		&#123;
			if GameEvents&#91;132&#93; = 1
			&#123;
				x = LastSongPlayed
			&#125;
			else
			&#123;
				GameEvents&#91;132&#93; = 1
			&#125;	x = y
		&#125;
		elseif x = 10
		&#123;
			if GameEvents&#91;133&#93; = 1
			&#123;
				x = LastSongPlayed
			&#125;
			else
			&#123;
				GameEvents&#91;133&#93; = 1
			&#125;	x = y

		&#125;
		else
		&#123;
			x = y
		&#125;
	&#125;

	PlayMusic&#40;"czmus", MusicArray&#91;x&#93;, music_volume, false, true&#41;
	LastSongPlayed = x

	LastTimeArray&#91;0&#93; = GetSystemTimeValue&#40;TIME_MONTH&#41;
	LastTimeArray&#91;1&#93; = GetSystemTimeValue&#40;TIME_DAY&#41;
	LastTimeArray&#91;2&#93; = GetSystemTimeValue&#40;TIME_HOURS&#41;
	LastTimeArray&#91;3&#93; = GetSystemTimeValue&#40;TIME_MINUTES&#41;
	LastTimeArray&#91;4&#93; = GetSystemTimeValue&#40;TIME_SECONDS&#41;

	TempTimeArray&#91;0&#93; = GetSystemTimeValue&#40;TIME_MONTH&#41;
	TempTimeArray&#91;1&#93; = GetSystemTimeValue&#40;TIME_DAY&#41;
	TempTimeArray&#91;2&#93; = GetSystemTimeValue&#40;TIME_HOURS&#41;
	TempTimeArray&#91;3&#93; = GetSystemTimeValue&#40;TIME_MINUTES&#41;
	TempTimeArray&#91;4&#93; = GetSystemTimeValue&#40;TIME_SECONDS&#41;
	TempTimeArray&#91;4&#93;++

	LastTimeAsNumber = GetCurrentTime&#40;&#41;
&#125;


routine DoMusicStats
&#123;
local currentTime, nextSongTime

TempTimeArray&#91;0&#93; = GetSystemTimeValue&#40;TIME_MONTH&#41;
TempTimeArray&#91;1&#93; = GetSystemTimeValue&#40;TIME_DAY&#41;
TempTimeArray&#91;2&#93; = GetSystemTimeValue&#40;TIME_HOURS&#41;
TempTimeArray&#91;3&#93; = GetSystemTimeValue&#40;TIME_MINUTES&#41;
TempTimeArray&#91;4&#93; = GetSystemTimeValue&#40;TIME_SECONDS&#41;


currentTime=GetCurrentTime

"LastSongPlayed is ";
print number LastSongPlayed

""

"song id is ";
print MusicArray&#91;LastSongPlayed&#93;

""

"currentTime is ";
print number currentTime

""

"LastTimeAsNumber is ";
print number LastTimeAsNumber

""

"Current Song Length is "; 
print number MusicArrayTime&#91;LastSongPlayed&#93;

""

"New song plays at ";
nextSongTime = LastTimeAsNumber + MusicArrayTime&#91;LastSongPlayed&#93;
print number nextSongTime

&#125;

the dark and gritty...Ice Cream Jonsey!

User avatar
Ice Cream Jonsey
Posts: 28923
Joined: Sat Apr 27, 2002 2:44 pm
Location: Colorado
Contact:

Post by Ice Cream Jonsey »

Oh. I commented out the check for MusicManager() each turn. That would, ah, do it. Nevermind!
the dark and gritty...Ice Cream Jonsey!

Post Reply