X-Git-Url: https://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fengine%2Fe_sound_sdl.inc;h=35cd2c34430ed5db0aa0190b2276ee605c82a4f5;hb=7ddf228d373859083726fdead73c4d84c8f05716;hp=ade82620b1dd0bec1c121a52b7e43ed28b787428;hpb=73eaa320064d481aecd842241ff8d4b90f66ad47;p=d2df-sdl.git diff --git a/src/engine/e_sound_sdl.inc b/src/engine/e_sound_sdl.inc index ade8262..35cd2c3 100644 --- a/src/engine/e_sound_sdl.inc +++ b/src/engine/e_sound_sdl.inc @@ -2,8 +2,7 @@ * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * the Free Software Foundation, version 3 of the License ONLY. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -28,6 +27,7 @@ type Sound: PMix_Chunk; Music: PMix_Music; isMusic: Boolean; + Loops: Boolean; nRefs: Integer; end; @@ -71,8 +71,8 @@ const function e_InitSoundSystem(NoOutput: Boolean = False): Boolean; -function e_LoadSound(FileName: string; var ID: DWORD; isMusic: Boolean): Boolean; -function e_LoadSoundMem(pData: Pointer; Length: Integer; var ID: DWORD; isMusic: Boolean): Boolean; +function e_LoadSound(FileName: string; var ID: DWORD; isMusic: Boolean; ForceNoLoop: Boolean = False): Boolean; +function e_LoadSoundMem(pData: Pointer; Length: Integer; var ID: DWORD; isMusic: Boolean; ForceNoLoop: Boolean = False): Boolean; // returns channel number or -1 function e_PlaySound(ID: DWORD): Integer; @@ -283,7 +283,7 @@ begin end; end; -function e_LoadSound(FileName: String; var ID: DWORD; isMusic: Boolean): Boolean; +function e_LoadSound(FileName: String; var ID: DWORD; isMusic: Boolean; ForceNoLoop: Boolean = False): Boolean; var find_id: DWORD; begin @@ -306,6 +306,7 @@ begin e_SoundsArray[find_id].Data := nil; e_SoundsArray[find_id].isMusic := isMusic; + e_SoundsArray[find_id].Loops := isMusic and not ForceNoLoop; e_SoundsArray[find_id].nRefs := 0; if isMusic then @@ -331,7 +332,7 @@ begin Result := True; end; -function e_LoadSoundMem(pData: Pointer; Length: Integer; var ID: DWORD; isMusic: Boolean): Boolean; +function e_LoadSoundMem(pData: Pointer; Length: Integer; var ID: DWORD; isMusic: Boolean; ForceNoLoop: Boolean = False): Boolean; var find_id: DWORD; rw: PSDL_RWops; @@ -372,6 +373,7 @@ begin e_SoundsArray[find_id].Data := pData; if isid3 then e_SoundsArray[find_id].Data := nil; e_SoundsArray[find_id].isMusic := isMusic; + e_SoundsArray[find_id].Loops := isMusic and not ForceNoLoop; e_SoundsArray[find_id].nRefs := 0; if isMusic then @@ -416,6 +418,7 @@ end; function e_PlaySound (ID: DWORD): Integer; var res: Integer = -1; + loops: Integer = 0; begin Result := -1; if not SoundInitialized then Exit; @@ -424,7 +427,8 @@ begin begin if e_SoundsArray[ID].nRefs >= gMaxSimSounds then Exit; Inc(e_SoundsArray[ID].nRefs); - res := Mix_PlayChannel(-1, e_SoundsArray[ID].Sound, 0); + if e_SoundsArray[ID].Loops then loops := -1; + res := Mix_PlayChannel(-1, e_SoundsArray[ID].Sound, loops); if res >= 0 then begin ChanSIds[res].id := ID; @@ -442,7 +446,8 @@ begin begin if not e_isMusic(ID) then Exit; Mix_HaltMusic(); - res := Mix_PlayMusic(e_SoundsArray[ID].Music, -1); + if e_SoundsArray[ID].Loops then loops := -1; + res := Mix_PlayMusic(e_SoundsArray[ID].Music, loops); if res >= 0 then res := N_MUSCHAN; if SoundMuted then Mix_VolumeMusic(0) else Mix_VolumeMusic(MusVolume); Result := res;