hedgewars/uSound.pas
changeset 3667 9359a70df013
parent 3664 f5bdf26c843e
child 3697 d5b30d6373fc
--- a/hedgewars/uSound.pas	Fri Jul 23 22:14:56 2010 +0400
+++ b/hedgewars/uSound.pas	Sat Jul 24 23:23:10 2010 +0200
@@ -131,18 +131,31 @@
 procedure SoundLoad;
 var i: TSound;
     t: Longword;
+    s:shortstring;
 begin
     if not isSoundEnabled then exit;
 
     defVoicepack:= AskForVoicepack('Default');
-
-    for i:= Low(TSound) to High(TSound) do
-        defVoicepack^.chunks[i]:= nil;
- 
+    
     for t:= 0 to cMaxTeams do
         if voicepacks[t].name <> '' then
             for i:= Low(TSound) to High(TSound) do
-                    voicepacks[t].chunks[i]:= nil;
+                voicepacks[t].chunks[i]:= nil;
+    
+    for i:= Low(TSound) to High(TSound) do
+    begin
+        defVoicepack^.chunks[i]:= nil;
+        // preload all the big sound files (>32k) that would otherwise lockup the game
+        if (i in [sndBeeWater, sndBee, sndCake, sndHellishImpact1, sndHellish, sndHomerun, sndMolotov, sndMortar, sndRideOfTheValkyries, sndYoohoo]) 
+            and (Soundz[i].Path <> ptVoices) and (Soundz[i].FileName <> '') then
+        begin
+            s:= Pathz[Soundz[i].Path] + '/' + Soundz[i].FileName;
+            WriteToConsole(msgLoading + s + ' ');
+            defVoicepack^.chunks[i]:= Mix_LoadWAV_RW(SDL_RWFromFile(Str2PChar(s), 'rb'), 1);
+            TryDo(defVoicepack^.chunks[i] <> nil, msgFailed, true);
+            WriteLnToConsole(msgOK);
+        end;
+    end;
 
 end;