# HG changeset patch # User unc0rr # Date 1185020949 0 # Node ID 092cb8deffc52f4899f0978f4175e6a412202e7a # Parent 17fb45c670c150b3177f68539e23740fd7d80a1b Fix some bug, finish playlist implementation diff -r 17fb45c670c1 -r 092cb8deffc5 hedgewars/hwengine.dpr --- a/hedgewars/hwengine.dpr Fri Jul 20 19:04:24 2007 +0000 +++ b/hedgewars/hwengine.dpr Sat Jul 21 12:29:09 2007 +0000 @@ -69,7 +69,7 @@ inc(RealTicks, Lag); inc(MusicTimerTicks, Lag); -if MusicTimerTicks > 3000 then +if (MusicTimerTicks > 3000) and (GameState > gsStart) then begin PlayMusic; MusicTimerTicks:= 0 @@ -81,6 +81,7 @@ GameState:= gsStart; end; gsStart: begin + InitPlaylistChunk(GetRandom(High(LongWord))); AssignHHCoords; AddMiscGears; AdjustColor(cColorNearBlack); @@ -90,7 +91,6 @@ AdjustColor(cConsoleSplitterColor); ResetKbd; SoundLoad; - InitPlaylistChunk(GetRandom(High(LongWord))); if GameType = gmtSave then begin isSEBackup:= isSoundEnabled; diff -r 17fb45c670c1 -r 092cb8deffc5 hedgewars/uSound.pas --- a/hedgewars/uSound.pas Fri Jul 20 19:04:24 2007 +0000 +++ b/hedgewars/uSound.pas Sat Jul 21 12:29:09 2007 +0000 @@ -102,15 +102,19 @@ {$IFDEF HAVE_MUSIC} if not isSoundEnabled then exit; if Mix_PlayingMusic() <> 0 then exit; + Mix_FreeMusic(Mus); + +CurrMusic:= playlistchain[CurrMusic]; + s:= PathPrefix + '/Music/' + playlist[CurrMusic]; -CurrMusic:= playlistchain[CurrMusic]; WriteToConsole(msgLoading + s + ' '); + Mus:= Mix_LoadMUS(Str2PChar(s)); TryDo(Mus <> nil, msgFailed, false); WriteLnToConsole(msgOK); -Mix_PlayMusic(Mus, 0) +Mix_PlayMusic(Mus, 1) {$ENDIF} end; @@ -128,18 +132,21 @@ end; procedure InitPlaylistChunk(seed: LongWord); -var i, t, tmp: Longword; +var i, t, nt: Longword; begin {$IFDEF HAVE_MUSIC} for i:= 0 to Pred(cPlayListLength) do - playlistchain[i]:= i; + playlistchain[i]:= 0; -for i:= 0 to Pred(cPlayListLength) do +t:= 0; +for i:= 0 to cPlayListLength - 2 do begin - t:= (i + 1) mod cPlayListLength; - tmp:= playlistchain[t]; - playlistchain[t]:= playlistchain[i]; - playlistchain[i]:= tmp; + repeat + seed:= seed * 1664525 + 1013904223; + nt:= seed mod cPlayListLength; + until (t <> nt) and (playlistchain[nt] = 0); + playlistchain[t]:= nt; + t:= nt; end {$ENDIF} end;