DEADSOFTWARE

sound: fix build
[d2df-editor.git] / src / editor / f_addresource_sound.pas
index 4efa9878cc1be4d8c082dd6f64beb944b94a6131..a3d3fe15c415323c647e899b4f695c81f443f369 100644 (file)
@@ -1,13 +1,13 @@
 unit f_addresource_sound;
 
-{$MODE Delphi}
+{$INCLUDE ../shared/a_modes.inc}
 
 interface
 
 uses
   LCLIntf, LCLType, LMessages, SysUtils, Variants, Classes,
   Graphics, Controls, Forms, Dialogs, f_addresource,
-  ExtCtrls, StdCtrls, spectrum, Buttons, ComCtrls;
+  ExtCtrls, StdCtrls, spectrum, Buttons, ComCtrls, utils;
 
 type
   TAddSoundForm = class (TAddResourceForm)
@@ -30,8 +30,10 @@ type
   private
     FSpectrum: TMiniSpectrum;
     FSetResource: String;
+    FSoundEnabled: Boolean;
 
     procedure ShowSpectrum();
+    function CreateSoundWAD(Resource: String): Boolean;
 
   public
     property SetResource: String read FSetResource write FSetResource;
@@ -43,11 +45,24 @@ var
 implementation
 
 uses
-  BinEditor, fmod, fmodtypes, fmoderrors, WADEDITOR, e_log, f_main,
-  g_language;
+  BinEditor, WADEDITOR, e_log, f_main, g_language, g_resources
+{$IFNDEF NOSOUND}, fmod, fmodtypes, fmoderrors;{$ELSE};{$ENDIF}
 
 {$R *.lfm}
 
+{$IFDEF NOSOUND}
+// fuck my life
+const
+  FMOD_OK = 0;
+
+type
+  FMOD_SYSTEM = Pointer;
+  FMOD_CHANNEL = Pointer;
+  FMOD_SOUND = Pointer;
+  FMOD_CREATESOUNDEXINFO = Pointer;
+  FMOD_RESULT = Integer;
+{$ENDIF}
+
 var
   F_System: FMOD_SYSTEM;
   SoundData: Pointer = nil;
@@ -64,7 +79,9 @@ begin
   Inherited;
 
   res := FMOD_OK;
+  FSoundEnabled := False;
 
+{$IFNDEF NOSOUND}
   try
     res := FMOD_System_Create(F_System);
     if res <> FMOD_OK then
@@ -90,10 +107,11 @@ begin
     if res <> FMOD_OK then
       raise Exception.Create('FMOD_System_Init failed!');
 
+    FSoundEnabled := True;
   except
-    Application.MessageBox(FMOD_ErrorString(res), 'Initialization', MB_OK or MB_ICONHAND);
-    raise;
+    Application.MessageBox(PChar('Sound was disabled. Reason: ' + FMOD_ErrorString(res)), 'FMOD Error', MB_OK or MB_ICONWARNING);
   end;
+{$ENDIF}
 
   FSpectrum := TMiniSpectrum.Create(pSpectrum);
   FSpectrum.Align := alClient;
@@ -101,55 +119,54 @@ begin
   FSpectrum.Style := ssBlock;
 end;
 
-function CreateSoundWAD(Resource: String): Boolean;
+function TAddSoundForm.CreateSoundWAD(Resource: String): Boolean;
 var
-  WAD: TWADEditor_1;
   FileName, SectionName, ResourceName: String;
-  ResLength, sz: Integer;
+  ResLength: Integer;
+  sz: LongWord;
   soundExInfo: FMOD_CREATESOUNDEXINFO;
   res: FMOD_RESULT;
 
 begin
   Result := False;
-
   SoundData := nil;
   Sound := nil;
   Channel := nil;
-  g_ProcessResourceStr(Resource, FileName, SectionName, ResourceName);
 
-  WAD := TWADEditor_1.Create;
-  WAD.ReadFile(FileName);
+  if FSoundEnabled = False then
+    Exit;
+
+{$IFNDEF NOSOUND}
+  g_ProcessResourceStr(Resource, FileName, SectionName, ResourceName);
+  g_ReadResource(FileName, SectionName, ResourceName, SoundData, ResLength);
 
-  if WAD.GetResource(SectionName, ResourceName, SoundData, ResLength) then
+  if SoundData <> nil then
     begin
       sz := SizeOf(FMOD_CREATESOUNDEXINFO);
       FillMemory(@soundExInfo, sz, 0);
       soundExInfo.cbsize := sz;
-      soundExInfo.length := ResLength;
+      soundExInfo.length := LongWord(ResLength);
 
       res := FMOD_System_CreateStream(F_System, SoundData,
-        FMOD_LOOP_OFF + FMOD_2D + FMOD_SOFTWARE + FMOD_OPENMEMORY,
+        FMOD_LOOP_OFF or FMOD_2D or FMOD_OPENMEMORY,
         @soundExInfo, Sound);
         
       if res <> FMOD_OK then
       begin
         e_WriteLog(Format('Error creating sound %s', [Resource]), MSG_WARNING);
         e_WriteLog(FMOD_ErrorString(res), MSG_WARNING);
-        WAD.Free();
         Exit;
       end;
     end
   else
     begin
       e_WriteLog(Format('Error loading sound %s', [Resource]), MSG_WARNING);
-      e_WriteLog(Format('WAD Reader error: %s', [WAD.GetLastErrorStr]), MSG_WARNING);
-      WAD.Free();
+      //e_WriteLog(Format('WAD Reader error: %s', [WAD.GetLastErrorStr]), MSG_WARNING);
       Exit;
     end;
  
-  WAD.Free();
   Result := True;
+{$ENDIF}
 end;
 
 procedure TAddSoundForm.bbPlayClick(Sender: TObject);
@@ -164,15 +181,19 @@ begin
     if Playing then
       bbStop.Click();
 
+    if FSoundEnabled = False then
+      Exit;
+
     if not CreateSoundWAD(FFullResourceName) then
       Exit;
 
+{$IFNDEF NOSOUND}
     res := FMOD_System_PlaySound(F_System, FMOD_CHANNEL_FREE,
              Sound, False, Channel);
     if res <> FMOD_OK then
     begin
       Application.MessageBox(FMOD_ErrorString(res),
-                             PChar(_lc[I_MSG_SOUND_ERROR]),
+                             PChar(MsgMsgSoundError),
                              MB_OK or MB_ICONHAND);
       Exit;
     end;
@@ -182,6 +203,7 @@ begin
     FMOD_Channel_SetVolume(Channel, 1.0);
 
     FSpectrum.SetChannel(Channel);
+{$ENDIF}
   end;
 end;
 
@@ -199,6 +221,10 @@ var
 begin
   Inherited;
 
+  if FSoundEnabled = False then
+    Exit;
+
+{$IFNDEF NOSOUND}
   FMOD_System_Update(F_System);
   
   ShowSpectrum();
@@ -206,6 +232,7 @@ begin
   res := FMOD_Channel_IsPlaying(Channel, b);
   if (res <> FMOD_OK) or (not b) then
     bbStop.Click();
+{$ENDIF}
 end;
 
 procedure TAddSoundForm.FormDestroy(Sender: TObject);
@@ -217,6 +244,10 @@ begin
 
   FSpectrum.Free;
 
+  if FSoundEnabled = False then
+    Exit;
+
+{$IFNDEF NOSOUND}
   res := FMOD_System_Close(F_System);
   if res <> FMOD_OK then
   begin
@@ -231,18 +262,19 @@ begin
     e_WriteLog('Error releasing FMOD system!', MSG_FATALERROR);
     e_WriteLog(FMOD_ErrorString(res), MSG_FATALERROR);
   end;
+{$ENDIF}
 end;
 
 procedure Sound_StopRelease();
 begin
   Playing := False;
-
+{$IFNDEF NOSOUND}
   if Channel <> nil then
     FMOD_Channel_Stop(Channel);
 
   if Sound <> nil then
     FMOD_Sound_Release(Sound);
-
+{$ENDIF}
   if SoundData <> nil then
     FreeMem(SoundData);
 
@@ -286,7 +318,7 @@ begin
     g_ProcessResourceStr(FSetResource, FileName, SectionName, ResourceName);
 
     if FileName = '' then
-      FileName := _lc[I_WAD_SPECIAL_MAP];
+      FileName := MsgWadSpecialMap;
 
     if SectionName = '' then
       SectionName := '..';