2024-04-20 16:23:08 +00:00
|
|
|
/*
|
2024-06-15 18:12:48 +00:00
|
|
|
* Descent 3
|
2024-04-20 16:23:08 +00:00
|
|
|
* Copyright (C) 2024 Parallax Software
|
|
|
|
*
|
|
|
|
* 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.
|
|
|
|
*
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
|
2024-05-06 15:12:44 +00:00
|
|
|
--- HISTORICAL COMMENTS FOLLOW ---
|
|
|
|
|
2024-04-19 20:58:24 +00:00
|
|
|
* $Logfile: /DescentIII/Main/editor/WorldSoundsDialog.cpp $
|
|
|
|
* $Revision: 1.1.1.1 $
|
|
|
|
* $Date: 2003-08-26 03:57:40 $
|
|
|
|
* $Author: kevinb $
|
|
|
|
*
|
|
|
|
* Sound page dialog
|
|
|
|
*
|
|
|
|
* $Log: not supported by cvs2svn $
|
2024-06-15 18:12:48 +00:00
|
|
|
*
|
2024-04-19 20:58:24 +00:00
|
|
|
* 29 4/21/99 5:55p Jason
|
|
|
|
* added override button to sound page
|
2024-06-15 18:12:48 +00:00
|
|
|
*
|
2024-04-19 20:58:24 +00:00
|
|
|
* 28 2/23/99 11:26a Matt
|
|
|
|
* Cleaned up sounds dialog
|
2024-06-15 18:12:48 +00:00
|
|
|
*
|
2024-04-19 20:58:24 +00:00
|
|
|
* 27 11/06/98 12:34p Jason
|
|
|
|
* more speedups for manage system
|
2024-06-15 18:12:48 +00:00
|
|
|
*
|
2024-04-19 20:58:24 +00:00
|
|
|
* 26 10/22/98 8:31p Chris
|
|
|
|
* Sounds use GlobalAlloc and GlobalFree
|
2024-06-15 18:12:48 +00:00
|
|
|
*
|
2024-04-19 20:58:24 +00:00
|
|
|
* 25 10/19/98 1:21p Chris
|
|
|
|
* Improve the volume import scaling code
|
2024-06-15 18:12:48 +00:00
|
|
|
*
|
2024-04-19 20:58:24 +00:00
|
|
|
* 24 10/19/98 11:57a Chris
|
|
|
|
* Update the sound system to use the import volume
|
2024-06-15 18:12:48 +00:00
|
|
|
*
|
2024-04-19 20:58:24 +00:00
|
|
|
* 23 10/14/98 12:09p Jason
|
|
|
|
* fixed some long standing name problems
|
2024-06-15 18:12:48 +00:00
|
|
|
*
|
2024-04-19 20:58:24 +00:00
|
|
|
* 22 9/21/98 8:18p Chris
|
|
|
|
* Removed annoying mprints
|
2024-06-15 18:12:48 +00:00
|
|
|
*
|
2024-04-19 20:58:24 +00:00
|
|
|
* 21 6/29/98 10:35p Chris
|
|
|
|
* Added support for once per object
|
2024-06-15 18:12:48 +00:00
|
|
|
*
|
2024-04-19 20:58:24 +00:00
|
|
|
* 20 6/23/98 2:43p Matt
|
|
|
|
* Changed calls to OutrageMessageBox() & Debug_MessageBox() to deal with
|
|
|
|
* int return value (instead of bool).
|
2024-06-15 18:12:48 +00:00
|
|
|
*
|
2024-04-19 20:58:24 +00:00
|
|
|
* 19 6/19/98 3:03p Chris
|
|
|
|
* Made CheckAndForceSoundDataAlloc a SoundSystem function - useful for
|
|
|
|
* multiple mixers. Added IsSoundPlaying to the high level sound lib.
|
2024-06-15 18:12:48 +00:00
|
|
|
*
|
2024-04-19 20:58:24 +00:00
|
|
|
* 18 4/22/98 5:38p Chris
|
|
|
|
* Fixed problems with adding new sounds
|
2024-06-15 18:12:48 +00:00
|
|
|
*
|
2024-04-19 20:58:24 +00:00
|
|
|
* 17 2/15/98 7:43p Luke
|
2024-06-15 18:12:48 +00:00
|
|
|
*
|
2024-04-19 20:58:24 +00:00
|
|
|
* 16 2/12/98 6:07p Chris
|
|
|
|
* Fixed a problem with addsound
|
2024-06-15 18:12:48 +00:00
|
|
|
*
|
2024-04-19 20:58:24 +00:00
|
|
|
* 15 2/12/98 4:55p Chris
|
|
|
|
* More validation checks for sounds
|
2024-06-15 18:12:48 +00:00
|
|
|
*
|
2024-04-19 20:58:24 +00:00
|
|
|
* 14 2/12/98 4:44p Chris
|
|
|
|
* Fixed a bunch of bugs in the dialog
|
2024-06-15 18:12:48 +00:00
|
|
|
*
|
2024-04-19 20:58:24 +00:00
|
|
|
* 13 2/12/98 4:20p Chris
|
|
|
|
* Fixed problem with sound dialog and allowing users to enter invalid
|
|
|
|
* values
|
2024-06-15 18:12:48 +00:00
|
|
|
*
|
2024-04-19 20:58:24 +00:00
|
|
|
* 12 2/06/98 3:22a Chris
|
|
|
|
* Added a stop sounds button. Made delete sound first stop the currently
|
|
|
|
* playing sounds.
|
2024-06-15 18:12:48 +00:00
|
|
|
*
|
2024-04-19 20:58:24 +00:00
|
|
|
* 11 12/31/97 2:58a Chris
|
|
|
|
* Another major revision to the SoundLib. This cleaned up the code after
|
|
|
|
* removing the direct sound secondary buffers.
|
2024-06-15 18:12:48 +00:00
|
|
|
*
|
2024-04-19 20:58:24 +00:00
|
|
|
* 10 12/30/97 2:07p Chris
|
|
|
|
* Adding further support for software 3d stuff
|
2024-06-15 18:12:48 +00:00
|
|
|
*
|
2024-04-19 20:58:24 +00:00
|
|
|
* 9 12/29/97 4:50p Chris
|
|
|
|
* Added SPF_NO_UPDATE
|
2024-06-15 18:12:48 +00:00
|
|
|
*
|
2024-04-19 20:58:24 +00:00
|
|
|
* 8 12/22/97 6:19p Chris
|
|
|
|
* Moved weapon battery firing sound off the projectile (weapon) and into
|
|
|
|
* the weapon battery.
|
2024-06-15 18:12:48 +00:00
|
|
|
*
|
2024-04-19 20:58:24 +00:00
|
|
|
* 7 12/18/97 12:26p Chris
|
|
|
|
* Incremental new lib improvements
|
2024-06-15 18:12:48 +00:00
|
|
|
*
|
2024-04-19 20:58:24 +00:00
|
|
|
* 6 12/10/97 4:47p Chris
|
|
|
|
* Revision 1.0 of new sound library (no hardware -- uses primary buffer
|
|
|
|
* streaming)
|
2024-06-15 18:12:48 +00:00
|
|
|
*
|
2024-04-19 20:58:24 +00:00
|
|
|
* 5 12/02/97 5:31p Samir
|
|
|
|
* New file dialog interface implemented.
|
2024-06-15 18:12:48 +00:00
|
|
|
*
|
2024-04-19 20:58:24 +00:00
|
|
|
* 4 9/08/97 4:05p Samir
|
|
|
|
* Fixed some warnings and took out extranneous includes to windows.h in
|
|
|
|
* important headers.
|
|
|
|
*
|
|
|
|
* $NoKeywords: $
|
|
|
|
*/
|
|
|
|
|
|
|
|
// WorldSoundsDialog.cpp : implementation file
|
|
|
|
//
|
|
|
|
|
2024-06-29 08:42:52 +00:00
|
|
|
#include <filesystem>
|
|
|
|
|
2024-04-19 20:58:24 +00:00
|
|
|
#include "stdafx.h"
|
|
|
|
|
|
|
|
#include "pserror.h"
|
|
|
|
#include "editor.h"
|
|
|
|
#include "WorldSoundsDialog.h"
|
|
|
|
#include "soundload.h"
|
|
|
|
#include "soundpage.h"
|
|
|
|
#include "manage.h"
|
2024-08-24 21:57:17 +00:00
|
|
|
#include "mono.h"
|
2024-04-19 20:58:24 +00:00
|
|
|
#include "hlsoundlib.h"
|
|
|
|
#include "ddio.h"
|
|
|
|
|
|
|
|
#ifdef _DEBUG
|
|
|
|
#define new DEBUG_NEW
|
|
|
|
#undef THIS_FILE
|
|
|
|
static char THIS_FILE[] = __FILE__;
|
|
|
|
#endif
|
|
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
// CWorldSoundsDialog dialog
|
|
|
|
|
2024-06-15 18:12:48 +00:00
|
|
|
CWorldSoundsDialog::CWorldSoundsDialog(CWnd *pParent /*=NULL*/) : CDialog(CWorldSoundsDialog::IDD, pParent) {
|
|
|
|
//{{AFX_DATA_INIT(CWorldSoundsDialog)
|
|
|
|
// NOTE: the ClassWizard will add member initialization here
|
|
|
|
//}}AFX_DATA_INIT
|
2024-04-19 20:58:24 +00:00
|
|
|
}
|
|
|
|
|
2024-06-15 18:12:48 +00:00
|
|
|
void CWorldSoundsDialog::DoDataExchange(CDataExchange *pDX) {
|
|
|
|
CDialog::DoDataExchange(pDX);
|
|
|
|
//{{AFX_DATA_MAP(CWorldSoundsDialog)
|
|
|
|
// NOTE: the ClassWizard will add DDX and DDV calls here
|
|
|
|
//}}AFX_DATA_MAP
|
2024-04-19 20:58:24 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CWorldSoundsDialog, CDialog)
|
2024-06-15 18:12:48 +00:00
|
|
|
//{{AFX_MSG_MAP(CWorldSoundsDialog)
|
|
|
|
ON_BN_CLICKED(IDC_ADD_SOUND, OnAddSound)
|
|
|
|
ON_BN_CLICKED(IDC_CHECKIN_SOUND, OnCheckinSound)
|
|
|
|
ON_BN_CLICKED(IDC_DELETE_SOUND, OnDeleteSound)
|
|
|
|
ON_BN_CLICKED(IDC_LOCK_SOUND, OnLockSound)
|
|
|
|
ON_BN_CLICKED(IDC_LOAD_SOUND, OnLoadSound)
|
|
|
|
ON_BN_CLICKED(IDC_NEXT_SOUND, OnNextSound)
|
|
|
|
ON_BN_CLICKED(IDC_PREV_SOUND, OnPrevSound)
|
|
|
|
ON_EN_KILLFOCUS(IDC_SOUND_NAME_EDIT, OnKillfocusSoundNameEdit)
|
|
|
|
ON_CBN_SELENDOK(IDC_SOUND_PULLDOWN, OnSelendokSoundPulldown)
|
|
|
|
ON_BN_CLICKED(IDC_PLAYSOUND, OnPlaysound)
|
|
|
|
ON_EN_KILLFOCUS(IDC_SOUNDINNERCONEANGLE_EDIT, OnKillfocusSoundinnerconeangleEdit)
|
|
|
|
ON_EN_KILLFOCUS(IDC_SOUNDLOOPEND_EDIT, OnKillfocusSoundloopendEdit)
|
|
|
|
ON_EN_KILLFOCUS(IDC_SOUNDLOOPSTART_EDIT, OnKillfocusSoundloopstartEdit)
|
|
|
|
ON_EN_KILLFOCUS(IDC_SOUNDMAXDIST_EDIT, OnKillfocusSoundmaxdistEdit)
|
|
|
|
ON_EN_KILLFOCUS(IDC_SOUNDMINDIST_EDIT, OnKillfocusSoundmindistEdit)
|
|
|
|
ON_EN_KILLFOCUS(IDC_SOUNDOUTERCONEANGLE_EDIT, OnKillfocusSoundouterconeangleEdit)
|
|
|
|
ON_EN_KILLFOCUS(IDC_SOUNDOUTERCONEVOL_EDIT, OnKillfocusSoundouterconevolEdit)
|
|
|
|
ON_BN_CLICKED(IDC_SOUNDHALLEFFECT_CHECK, OnSoundhalleffectCheck)
|
|
|
|
ON_BN_CLICKED(IDC_LOOPING_CHECK, OnLoopingCheck)
|
|
|
|
ON_BN_CLICKED(IDC_SOUNDBACKWARD_RADIO, OnSoundbackwardRadio)
|
|
|
|
ON_BN_CLICKED(IDC_SOUNDDOWNWARD_RADIO, OnSounddownwardRadio)
|
|
|
|
ON_BN_CLICKED(IDC_SOUNDEXCLUSIVE_CHECK, OnSoundexclusiveCheck)
|
|
|
|
ON_BN_CLICKED(IDC_SOUNDFOREVER_CHECK, OnSoundforeverCheck)
|
|
|
|
ON_BN_CLICKED(IDC_SOUNDFORWARD_RADIO, OnSoundforwardRadio)
|
|
|
|
ON_BN_CLICKED(IDC_SOUNDOBJATTACH_RADIO, OnSoundobjattachRadio)
|
|
|
|
ON_BN_CLICKED(IDC_SOUNDOBJECT_RADIO, OnSoundobjectRadio)
|
|
|
|
ON_BN_CLICKED(IDC_SOUNDONCE_CHECK, OnSoundonceCheck)
|
|
|
|
ON_BN_CLICKED(IDC_SOUNDPOSATTACH_RADIO, OnSoundposattachRadio)
|
|
|
|
ON_BN_CLICKED(IDC_SOUNDTURRET1_RADIO, OnSoundturret1Radio)
|
|
|
|
ON_BN_CLICKED(IDC_SOUNDTURRET2_RADIO, OnSoundturret2Radio)
|
|
|
|
ON_BN_CLICKED(IDC_SOUNDTURRET3_RADIO, OnSoundturret3Radio)
|
|
|
|
ON_BN_CLICKED(IDC_SOUNDUPWARD_RADIO, OnSoundupwardRadio)
|
|
|
|
ON_WM_HELPINFO()
|
|
|
|
ON_BN_CLICKED(IDC_SOUND_NO_UPDATE, OnSoundNoUpdate)
|
|
|
|
ON_BN_CLICKED(IDC_KILLSOUNDS, OnKillsounds)
|
|
|
|
ON_BN_CLICKED(IDC_SOUND_ONCE_PER_OBJ_CHECK, OnSoundOncePerObjCheck)
|
|
|
|
ON_EN_KILLFOCUS(IDC_SOUND_IMPORT_VOLUME_EDIT, OnKillfocusSoundImportVolumeEdit)
|
|
|
|
ON_BN_CLICKED(IDC_SOUND_CHANGE_NAME, OnSoundChangeName)
|
|
|
|
ON_BN_CLICKED(IDC_OVERRIDE, OnOverride)
|
|
|
|
//}}AFX_MSG_MAP
|
2024-04-19 20:58:24 +00:00
|
|
|
END_MESSAGE_MAP()
|
|
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
// CWorldSoundsDialog message handlers
|
|
|
|
|
2024-06-15 18:12:48 +00:00
|
|
|
void CWorldSoundsDialog::OnAddSound() {
|
|
|
|
char filename[256], dir[256], fname[128], ext[32];
|
|
|
|
char cur_name[100];
|
|
|
|
int raw_handle;
|
|
|
|
int sound_handle;
|
|
|
|
int c = 1, finding_name = 1;
|
|
|
|
|
|
|
|
if (!Network_up) {
|
|
|
|
OutrageMessageBox("Sorry babe, the network is down. This action is a no-no.\n");
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Get the filename of the representing image
|
|
|
|
|
|
|
|
CString filter = "Descent III files (*.wav)|*.wav||";
|
|
|
|
|
|
|
|
if (!OpenFileDialog(this, (LPCSTR)filter, filename, Current_sounds_dir, sizeof(Current_sounds_dir)))
|
|
|
|
return;
|
|
|
|
|
|
|
|
ddio_SplitPath(filename, dir, fname, ext);
|
|
|
|
|
|
|
|
// Okay, we selected a file. Lets do what needs to be done here.
|
|
|
|
raw_handle = LoadSoundFile(filename, 1.0f, true);
|
|
|
|
|
|
|
|
if (raw_handle < 0) {
|
|
|
|
OutrageMessageBox("Invalid sound file.");
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Alloc a sound and give a name not already taken by some other sound
|
|
|
|
|
|
|
|
sound_handle = AllocSound();
|
|
|
|
|
|
|
|
while (finding_name) {
|
|
|
|
if (c == 1)
|
|
|
|
sprintf(cur_name, "%s", fname);
|
|
|
|
else
|
|
|
|
sprintf(cur_name, "%s%d", fname, c);
|
|
|
|
if (FindSoundName(cur_name) != -1)
|
|
|
|
c++;
|
|
|
|
else
|
|
|
|
finding_name = 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
strcpy(Sounds[sound_handle].name, cur_name);
|
2024-04-19 20:58:24 +00:00
|
|
|
|
2024-06-15 18:12:48 +00:00
|
|
|
Sounds[sound_handle].sample_index = raw_handle;
|
|
|
|
|
|
|
|
// Finally, save a local copy of the .wav and alloc a tracklock
|
|
|
|
mprintf(0, "Making a copy of this sound locally...\n");
|
|
|
|
|
2024-06-29 08:42:52 +00:00
|
|
|
std::filesystem::path destname = LocalSoundsDir / SoundFiles[Sounds[sound_handle].sample_index].name;
|
|
|
|
cf_CopyFile(destname, filename);
|
2024-06-15 18:12:48 +00:00
|
|
|
|
|
|
|
mng_AllocTrackLock(cur_name, PAGETYPE_SOUND);
|
|
|
|
|
|
|
|
D3EditState.current_sound = sound_handle;
|
|
|
|
|
|
|
|
RemapSounds();
|
|
|
|
|
|
|
|
Sound_system.CheckAndForceSoundDataAlloc(D3EditState.current_sound);
|
|
|
|
Sounds[sound_handle].loop_end = SoundFiles[Sounds[sound_handle].sample_index].np_sample_length - 1;
|
|
|
|
|
|
|
|
UpdateDialog();
|
2024-04-19 20:58:24 +00:00
|
|
|
}
|
|
|
|
|
2024-06-15 18:12:48 +00:00
|
|
|
void CWorldSoundsDialog::OnCheckinSound() {
|
|
|
|
int n = D3EditState.current_sound;
|
|
|
|
mngs_Pagelock temp_pl;
|
|
|
|
int r;
|
|
|
|
|
|
|
|
if (Num_sounds < 1)
|
|
|
|
return;
|
|
|
|
|
|
|
|
if (!mng_MakeLocker())
|
|
|
|
return;
|
|
|
|
|
|
|
|
// Make sure we own this sound
|
|
|
|
strcpy(temp_pl.name, Sounds[n].name);
|
|
|
|
temp_pl.pagetype = PAGETYPE_SOUND;
|
|
|
|
|
|
|
|
r = mng_CheckIfPageOwned(&temp_pl, TableUser);
|
|
|
|
if (r < 0)
|
|
|
|
OutrageMessageBox(ErrorString);
|
|
|
|
else if (r == 0)
|
|
|
|
OutrageMessageBox(InfoString);
|
|
|
|
else {
|
|
|
|
// Change the pagelock state to UNLOCKED
|
|
|
|
strcpy(temp_pl.holder, "UNLOCKED");
|
|
|
|
if (!mng_ReplacePagelock(temp_pl.name, &temp_pl)) {
|
|
|
|
MessageBox(ErrorString, "Error!");
|
|
|
|
mng_EraseLocker();
|
|
|
|
return;
|
|
|
|
} else {
|
|
|
|
// Now actually replace the copy on the net with our local one
|
|
|
|
|
|
|
|
if (!mng_ReplacePage(Sounds[n].name, Sounds[n].name, n, PAGETYPE_SOUND, 0))
|
|
|
|
OutrageMessageBox(ErrorString);
|
|
|
|
else {
|
|
|
|
// Save this sound raw to the network for all
|
|
|
|
|
2024-06-29 08:42:52 +00:00
|
|
|
std::filesystem::path srcname = LocalSoundsDir / SoundFiles[Sounds[n].sample_index].name;
|
|
|
|
std::filesystem::path destname = NetSoundsDir / SoundFiles[Sounds[n].sample_index].name;
|
2024-06-15 18:12:48 +00:00
|
|
|
|
|
|
|
cf_CopyFile(destname, srcname);
|
|
|
|
|
|
|
|
OutrageMessageBox("Sound checked in.");
|
|
|
|
|
2024-09-03 10:34:37 +00:00
|
|
|
// Delete it from local pagefile if it is there
|
2024-06-15 18:12:48 +00:00
|
|
|
int dret = mng_DeletePage(Sounds[n].name, PAGETYPE_SOUND, 1);
|
|
|
|
ASSERT(dret == 1);
|
|
|
|
mng_EraseLocker();
|
|
|
|
|
|
|
|
// Free the tracklock
|
|
|
|
int p = mng_FindTrackLock(Sounds[n].name, PAGETYPE_SOUND);
|
|
|
|
ASSERT(p != -1);
|
|
|
|
mng_FreeTrackLock(p);
|
|
|
|
UpdateDialog();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2024-04-19 20:58:24 +00:00
|
|
|
}
|
|
|
|
|
2024-06-15 18:12:48 +00:00
|
|
|
void CWorldSoundsDialog::OnDeleteSound() {
|
|
|
|
int answer, tl;
|
|
|
|
mngs_Pagelock pl;
|
|
|
|
int n = D3EditState.current_sound;
|
|
|
|
|
|
|
|
if (Num_sounds < 1)
|
|
|
|
return;
|
|
|
|
|
|
|
|
Sound_system.BeginSoundFrame();
|
|
|
|
Sound_system.StopAllSounds();
|
|
|
|
Sound_system.EndSoundFrame();
|
|
|
|
|
|
|
|
// Check to see if we even have it locked
|
|
|
|
if ((tl = mng_FindTrackLock(Sounds[n].name, PAGETYPE_SOUND)) == -1) {
|
|
|
|
OutrageMessageBox("This sound is not yours to delete. Lock first.");
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2024-09-03 10:34:37 +00:00
|
|
|
// Make sure it is to be deleted
|
2024-06-15 18:12:48 +00:00
|
|
|
answer = MessageBox("Are you sure you want to delete this sound?", Sounds[n].name, MB_YESNO);
|
|
|
|
if (answer == IDNO)
|
|
|
|
return;
|
|
|
|
|
|
|
|
if (!mng_MakeLocker())
|
|
|
|
return;
|
|
|
|
|
|
|
|
strcpy(pl.name, Sounds[n].name);
|
|
|
|
pl.pagetype = PAGETYPE_SOUND;
|
|
|
|
|
|
|
|
// Check to see if this is a local sound only. If so, only delete it locally
|
|
|
|
if (mng_CheckIfPageOwned(&pl, TableUser) != 1) {
|
|
|
|
mng_FreeTrackLock(tl);
|
|
|
|
if (!mng_DeletePage(Sounds[n].name, PAGETYPE_SOUND, 1)) {
|
|
|
|
mprintf(0, ErrorString);
|
|
|
|
Int3();
|
|
|
|
}
|
2024-09-03 10:34:37 +00:00
|
|
|
} else // if it is network, delete it from both the net and local drives
|
2024-06-15 18:12:48 +00:00
|
|
|
{
|
|
|
|
|
|
|
|
mng_FreeTrackLock(tl);
|
|
|
|
mng_DeletePage(Sounds[n].name, PAGETYPE_SOUND, 1);
|
|
|
|
mng_DeletePage(Sounds[n].name, PAGETYPE_SOUND, 0);
|
|
|
|
|
|
|
|
mng_DeletePagelock(Sounds[n].name, PAGETYPE_SOUND);
|
|
|
|
}
|
|
|
|
|
|
|
|
// Advance to the next sound
|
|
|
|
D3EditState.current_sound = GetNextSound(n);
|
|
|
|
|
|
|
|
FreeSound(n);
|
|
|
|
mng_EraseLocker();
|
|
|
|
|
|
|
|
OutrageMessageBox("Sound deleted.");
|
|
|
|
|
|
|
|
RemapSounds();
|
|
|
|
|
|
|
|
UpdateDialog();
|
2024-04-19 20:58:24 +00:00
|
|
|
}
|
|
|
|
|
2024-06-15 18:12:48 +00:00
|
|
|
void CWorldSoundsDialog::OnLockSound() {
|
|
|
|
int n = D3EditState.current_sound;
|
|
|
|
mngs_Pagelock temp_pl;
|
|
|
|
mngs_sound_page soundpage;
|
|
|
|
int r;
|
|
|
|
|
|
|
|
if (Num_sounds < 1)
|
|
|
|
return;
|
|
|
|
|
|
|
|
if (!mng_MakeLocker())
|
|
|
|
return;
|
|
|
|
|
|
|
|
// Make sure it can be locked
|
|
|
|
strcpy(temp_pl.name, Sounds[n].name);
|
|
|
|
temp_pl.pagetype = PAGETYPE_SOUND;
|
|
|
|
|
|
|
|
r = mng_CheckIfPageLocked(&temp_pl);
|
|
|
|
if (r == 2) {
|
|
|
|
int answer;
|
|
|
|
answer = OutrageMessageBox(MBOX_YESNO, "This page is not even in the table file, or the database maybe corrupt. "
|
|
|
|
"Override to 'Unlocked'? (Select NO if you don't know what you're doing)");
|
|
|
|
if (answer == IDYES) {
|
|
|
|
strcpy(temp_pl.holder, "UNLOCKED");
|
|
|
|
if (!mng_ReplacePagelock(temp_pl.name, &temp_pl))
|
|
|
|
MessageBox(ErrorString, "Error!");
|
|
|
|
}
|
|
|
|
|
|
|
|
} else if (r < 0)
|
|
|
|
OutrageMessageBox(ErrorString);
|
|
|
|
else if (r == 1)
|
|
|
|
OutrageMessageBox(InfoString);
|
|
|
|
else {
|
|
|
|
|
|
|
|
// Everything is ok. Tell the network we're locking it and get a copy to
|
|
|
|
// our local drive
|
|
|
|
|
|
|
|
strcpy(temp_pl.holder, TableUser);
|
|
|
|
if (!mng_ReplacePagelock(temp_pl.name, &temp_pl)) {
|
|
|
|
MessageBox(ErrorString, "Error!");
|
|
|
|
mng_EraseLocker();
|
|
|
|
return;
|
|
|
|
} else {
|
|
|
|
// Search thru the net pagefile and get a new copy in RAM in case anyone
|
|
|
|
// changed it since we started the editor
|
|
|
|
if (mng_FindSpecificSoundPage(temp_pl.name, &soundpage)) {
|
|
|
|
if (mng_AssignSoundPageToSound(&soundpage, n)) {
|
|
|
|
if (!mng_ReplacePage(Sounds[n].name, Sounds[n].name, n, PAGETYPE_SOUND, 1)) {
|
|
|
|
OutrageMessageBox("There was problem writing that page locally!");
|
|
|
|
mng_EraseLocker();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
OutrageMessageBox("Sound locked.");
|
|
|
|
|
|
|
|
} else
|
|
|
|
OutrageMessageBox(
|
|
|
|
"There was a problem loading this sound. You might encounter problems in dealing with it. Good luck!");
|
|
|
|
|
|
|
|
mng_AllocTrackLock(Sounds[n].name, PAGETYPE_SOUND);
|
|
|
|
UpdateDialog();
|
|
|
|
} else
|
|
|
|
OutrageMessageBox("Couldn't find that sound in the table file!");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
mng_EraseLocker();
|
2024-04-19 20:58:24 +00:00
|
|
|
}
|
|
|
|
|
2024-06-15 18:12:48 +00:00
|
|
|
void CWorldSoundsDialog::OnLoadSound() {
|
|
|
|
char filename[255];
|
|
|
|
int raw_handle;
|
|
|
|
int sound_handle;
|
|
|
|
int c = 1, finding_name = 1;
|
|
|
|
|
|
|
|
// Get the filename of the representing image
|
|
|
|
|
|
|
|
CString filter = "Descent III files (*.wav)|*.wav||";
|
|
|
|
|
|
|
|
if (!OpenFileDialog(this, (LPCSTR)filter, filename, Current_sounds_dir, sizeof(Current_sounds_dir)))
|
|
|
|
return;
|
|
|
|
|
|
|
|
sound_handle = D3EditState.current_sound;
|
|
|
|
|
|
|
|
// Okay, we selected a file. Lets do what needs to be done here.
|
|
|
|
raw_handle = LoadSoundFile(filename, Sounds[sound_handle].import_volume, true);
|
|
|
|
|
|
|
|
if (raw_handle < 0) {
|
|
|
|
OutrageMessageBox("Invalid sound file.");
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
Sounds[sound_handle].sample_index = raw_handle;
|
|
|
|
|
|
|
|
// Finally, save a local copy of the raw
|
|
|
|
|
2024-06-29 08:42:52 +00:00
|
|
|
std::filesystem::path curname = LocalSoundsDir / SoundFiles[Sounds[sound_handle].sample_index].name;
|
2024-06-15 18:12:48 +00:00
|
|
|
cf_CopyFile(curname, filename);
|
|
|
|
|
|
|
|
UpdateDialog();
|
2024-04-19 20:58:24 +00:00
|
|
|
}
|
|
|
|
|
2024-06-15 18:12:48 +00:00
|
|
|
void CWorldSoundsDialog::OnNextSound() {
|
|
|
|
D3EditState.current_sound = GetNextSound(D3EditState.current_sound);
|
|
|
|
UpdateDialog();
|
2024-04-19 20:58:24 +00:00
|
|
|
}
|
|
|
|
|
2024-06-15 18:12:48 +00:00
|
|
|
void CWorldSoundsDialog::OnPrevSound() {
|
|
|
|
D3EditState.current_sound = GetPrevSound(D3EditState.current_sound);
|
|
|
|
UpdateDialog();
|
2024-04-19 20:58:24 +00:00
|
|
|
}
|
|
|
|
|
2024-06-15 18:12:48 +00:00
|
|
|
void CWorldSoundsDialog::OnKillfocusSoundNameEdit() {
|
|
|
|
CEdit *ebox;
|
|
|
|
int n = D3EditState.current_sound;
|
|
|
|
char name[PAGENAME_LEN];
|
|
|
|
mngs_Pagelock pl;
|
|
|
|
|
|
|
|
// Make sure we have this sound locked, if not reset name and bail
|
|
|
|
int p = mng_FindTrackLock(Sounds[n].name, PAGETYPE_SOUND);
|
|
|
|
if (p == -1) {
|
|
|
|
OutrageMessageBox("You must lock this sound if you wish to change its name.");
|
|
|
|
CEdit *ebox = (CEdit *)GetDlgItem(IDC_SOUND_NAME_EDIT);
|
|
|
|
ebox->SetWindowText(Sounds[n].name);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Get the new name
|
|
|
|
ebox = (CEdit *)GetDlgItem(IDC_SOUND_NAME_EDIT);
|
|
|
|
ebox->GetWindowText(name, PAGENAME_LEN);
|
|
|
|
|
|
|
|
// Check to see if there is already a sound with this name. If so, reset and bail
|
|
|
|
if (FindSoundName(name) != -1) {
|
|
|
|
OutrageMessageBox("There already is a sound with that name...choose another name.");
|
|
|
|
|
|
|
|
CEdit *ebox = (CEdit *)GetDlgItem(IDC_SOUND_NAME_EDIT);
|
|
|
|
ebox->SetWindowText(Sounds[n].name);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!mng_MakeLocker())
|
|
|
|
return;
|
|
|
|
|
|
|
|
// Check to see if this page exists on the network. If so, we have to
|
|
|
|
// rename it so we can prevent havoc
|
|
|
|
strcpy(pl.name, Sounds[n].name);
|
|
|
|
pl.pagetype = PAGETYPE_SOUND;
|
|
|
|
|
|
|
|
int ret = mng_CheckIfPageOwned(&pl, TableUser);
|
|
|
|
if (ret < 0)
|
|
|
|
OutrageMessageBox(ErrorString);
|
|
|
|
else if (ret == 1)
|
|
|
|
mng_RenamePage(Sounds[n].name, name, PAGETYPE_SOUND);
|
|
|
|
else if (ret == 2) {
|
|
|
|
// This page has never been checked in, replace only local copy
|
|
|
|
|
|
|
|
char oldname[PAGENAME_LEN];
|
|
|
|
strcpy(oldname, Sounds[n].name);
|
|
|
|
strcpy(Sounds[n].name, name);
|
|
|
|
|
|
|
|
mng_ReplacePage(oldname, Sounds[n].name, n, PAGETYPE_SOUND, 1);
|
|
|
|
} else if (ret == 0) {
|
|
|
|
OutrageMessageBox("You don't own this page. Get Jason now!");
|
|
|
|
mng_FreeTrackLock(p);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Finally, copy our new name to the appropriate arrays
|
|
|
|
strcpy(GlobalTrackLocks[p].name, name);
|
|
|
|
strcpy(Sounds[n].name, name);
|
|
|
|
mng_EraseLocker();
|
|
|
|
|
|
|
|
RemapSounds();
|
|
|
|
UpdateDialog();
|
2024-04-19 20:58:24 +00:00
|
|
|
}
|
|
|
|
|
2024-06-15 18:12:48 +00:00
|
|
|
void CWorldSoundsDialog::OnSelendokSoundPulldown() {
|
|
|
|
int i, cur;
|
|
|
|
char name[200];
|
|
|
|
|
|
|
|
cur = SendDlgItemMessage(IDC_SOUND_PULLDOWN, CB_GETCURSEL, 0, 0);
|
|
|
|
SendDlgItemMessage(IDC_SOUND_PULLDOWN, CB_GETLBTEXT, cur, (LPARAM)(LPCTSTR)name);
|
|
|
|
|
|
|
|
i = FindSoundName(name);
|
|
|
|
|
|
|
|
if (i == -1) {
|
|
|
|
mprintf(0, "Possible corrupted sound list, but probably nothing.");
|
|
|
|
UpdateDialog();
|
|
|
|
}
|
|
|
|
|
|
|
|
D3EditState.current_sound = i;
|
|
|
|
UpdateDialog();
|
2024-04-19 20:58:24 +00:00
|
|
|
}
|
|
|
|
|
2024-06-15 18:12:48 +00:00
|
|
|
void CWorldSoundsDialog::UpdateDialog() {
|
|
|
|
CEdit *ebox;
|
|
|
|
CStatic *sbox;
|
|
|
|
CButton *bbox;
|
|
|
|
int n = D3EditState.current_sound;
|
|
|
|
char str[50];
|
|
|
|
int radio_index[4];
|
|
|
|
int i;
|
|
|
|
|
|
|
|
int total_hardware_memory = 0;
|
|
|
|
int total_memory = 0;
|
|
|
|
|
|
|
|
Sound_system.CheckAndForceSoundDataAlloc(D3EditState.current_sound);
|
|
|
|
|
|
|
|
for (i = 0; i < MAX_SOUNDS; i++) {
|
|
|
|
if (Sounds[i].used)
|
|
|
|
total_memory += SoundFiles[Sounds[i].sample_index].sample_length * 2;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (Num_sounds < 1) {
|
|
|
|
bbox = (CButton *)GetDlgItem(IDC_NEXT_SOUND);
|
|
|
|
bbox->EnableWindow(FALSE);
|
|
|
|
bbox = (CButton *)GetDlgItem(IDC_PREV_SOUND);
|
|
|
|
bbox->EnableWindow(FALSE);
|
|
|
|
|
|
|
|
return;
|
|
|
|
} else {
|
|
|
|
bbox = (CButton *)GetDlgItem(IDC_NEXT_SOUND);
|
|
|
|
bbox->EnableWindow(TRUE);
|
|
|
|
bbox = (CButton *)GetDlgItem(IDC_PREV_SOUND);
|
|
|
|
bbox->EnableWindow(TRUE);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!Sounds[n].used)
|
|
|
|
n = D3EditState.current_sound = GetNextSound(n);
|
|
|
|
|
|
|
|
ebox = (CEdit *)GetDlgItem(IDC_SOUNDMAXDIST_EDIT);
|
|
|
|
sprintf(str, "%f", Sounds[n].max_distance);
|
|
|
|
ebox->SetWindowText(str);
|
|
|
|
|
|
|
|
sbox = (CStatic *)GetDlgItem(IDC_SOUND_MEMORY_STATIC);
|
|
|
|
sprintf(str, "%d, %d H, %d Total", SoundFiles[Sounds[n].sample_index].sample_length / 512,
|
|
|
|
total_hardware_memory / 1024, total_memory / 1024);
|
|
|
|
sbox->SetWindowText(str);
|
|
|
|
|
|
|
|
ebox = (CEdit *)GetDlgItem(IDC_SOUNDMINDIST_EDIT);
|
|
|
|
sprintf(str, "%f", Sounds[n].min_distance);
|
|
|
|
ebox->SetWindowText(str);
|
|
|
|
|
|
|
|
ebox = (CEdit *)GetDlgItem(IDC_SOUNDINNERCONEANGLE_EDIT);
|
|
|
|
sprintf(str, "%d", Sounds[n].inner_cone_angle);
|
|
|
|
ebox->SetWindowText(str);
|
|
|
|
|
|
|
|
ebox = (CEdit *)GetDlgItem(IDC_SOUNDOUTERCONEANGLE_EDIT);
|
|
|
|
sprintf(str, "%d", Sounds[n].outer_cone_angle);
|
|
|
|
ebox->SetWindowText(str);
|
|
|
|
|
|
|
|
ebox = (CEdit *)GetDlgItem(IDC_SOUNDOUTERCONEVOL_EDIT);
|
|
|
|
sprintf(str, "%f", Sounds[n].outer_cone_volume * 100);
|
|
|
|
ebox->SetWindowText(str);
|
|
|
|
|
|
|
|
ebox = (CEdit *)GetDlgItem(IDC_SOUNDLOOPSTART_EDIT);
|
|
|
|
sprintf(str, "%d", Sounds[n].loop_start);
|
|
|
|
ebox->SetWindowText(str);
|
|
|
|
|
|
|
|
if (Sounds[n].loop_end >= SoundFiles[Sounds[n].sample_index].np_sample_length) {
|
|
|
|
Sounds[n].loop_end = SoundFiles[Sounds[n].sample_index].np_sample_length - 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (Sounds[n].loop_start > Sounds[n].loop_end) {
|
|
|
|
Sounds[n].loop_start = 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
ebox = (CEdit *)GetDlgItem(IDC_SOUNDLOOPEND_EDIT);
|
|
|
|
sprintf(str, "%d", Sounds[n].loop_end);
|
|
|
|
ebox->SetWindowText(str);
|
|
|
|
|
|
|
|
ebox = (CEdit *)GetDlgItem(IDC_SOUND_IMPORT_VOLUME_EDIT);
|
|
|
|
sprintf(str, "%f", Sounds[n].import_volume * 100.0f);
|
|
|
|
ebox->SetWindowText(str);
|
|
|
|
|
|
|
|
ebox = (CEdit *)GetDlgItem(IDC_RAW_NAME_EDIT);
|
|
|
|
ebox->SetWindowText(SoundFiles[Sounds[n].sample_index].name);
|
|
|
|
|
|
|
|
bbox = (CButton *)GetDlgItem(IDC_SOUNDHALLEFFECT_CHECK);
|
|
|
|
bbox->SetCheck(!(Sounds[n].flags & SPF_FIXED_FREQ));
|
|
|
|
|
|
|
|
bbox = (CButton *)GetDlgItem(IDC_SOUNDFOREVER_CHECK);
|
|
|
|
bbox->SetCheck(Sounds[n].flags & SPF_FOREVER);
|
|
|
|
|
|
|
|
bbox = (CButton *)GetDlgItem(IDC_SOUND_ONCE_PER_OBJ_CHECK);
|
|
|
|
bbox->SetCheck(Sounds[n].flags & SPF_ONCE_PER_OBJ);
|
|
|
|
|
|
|
|
bbox = (CButton *)GetDlgItem(IDC_SOUNDEXCLUSIVE_CHECK);
|
|
|
|
bbox->SetCheck(Sounds[n].flags & SPF_PLAYS_EXCLUSIVELY);
|
|
|
|
|
|
|
|
bbox = (CButton *)GetDlgItem(IDC_SOUND_NO_UPDATE);
|
|
|
|
bbox->SetCheck(Sounds[n].flags & SPF_LISTENER_UPDATE);
|
|
|
|
|
|
|
|
bbox = (CButton *)GetDlgItem(IDC_SOUNDONCE_CHECK);
|
|
|
|
bbox->SetCheck(Sounds[n].flags & SPF_PLAYS_ONCE);
|
|
|
|
|
|
|
|
bbox = (CButton *)GetDlgItem(IDC_LOOPING_CHECK);
|
|
|
|
bbox->SetCheck(Sounds[n].flags & SPF_LOOPED);
|
|
|
|
|
|
|
|
if (Sounds[n].flags & SPF_OBJ_UPDATE) {
|
|
|
|
bbox = (CButton *)GetDlgItem(IDC_SOUNDOBJATTACH_RADIO);
|
|
|
|
bbox->SetCheck(1);
|
|
|
|
bbox = (CButton *)GetDlgItem(IDC_SOUNDPOSATTACH_RADIO);
|
|
|
|
bbox->SetCheck(0);
|
|
|
|
} else {
|
|
|
|
bbox = (CButton *)GetDlgItem(IDC_SOUNDPOSATTACH_RADIO);
|
|
|
|
bbox->SetCheck(1);
|
|
|
|
bbox = (CButton *)GetDlgItem(IDC_SOUNDOBJATTACH_RADIO);
|
|
|
|
bbox->SetCheck(0);
|
|
|
|
}
|
|
|
|
|
|
|
|
memset(radio_index, 0, 4 * sizeof(int));
|
|
|
|
switch (SPFT_CONE_LINK_MASK & Sounds[n].flags) {
|
|
|
|
case SPFT_CONE_LINK_OBJECT:
|
|
|
|
radio_index[0] = 1;
|
|
|
|
break;
|
|
|
|
case SPFT_CONE_LINK_TURRET1:
|
|
|
|
radio_index[1] = 1;
|
|
|
|
break;
|
|
|
|
case SPFT_CONE_LINK_TURRET2:
|
|
|
|
radio_index[2] = 1;
|
|
|
|
break;
|
|
|
|
case SPFT_CONE_LINK_TURRET3:
|
|
|
|
radio_index[3] = 1;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
bbox = (CButton *)GetDlgItem(IDC_SOUNDOBJECT_RADIO);
|
|
|
|
bbox->SetCheck(radio_index[0]);
|
|
|
|
bbox = (CButton *)GetDlgItem(IDC_SOUNDTURRET1_RADIO);
|
|
|
|
bbox->SetCheck(radio_index[1]);
|
|
|
|
bbox = (CButton *)GetDlgItem(IDC_SOUNDTURRET2_RADIO);
|
|
|
|
bbox->SetCheck(radio_index[2]);
|
|
|
|
bbox = (CButton *)GetDlgItem(IDC_SOUNDTURRET3_RADIO);
|
|
|
|
bbox->SetCheck(radio_index[3]);
|
|
|
|
|
|
|
|
memset(radio_index, 0, 4 * sizeof(int));
|
|
|
|
switch (SPFT_CONE_DIR_MASK & Sounds[n].flags) {
|
|
|
|
case SPFT_CONE_DIR_FORWARD:
|
|
|
|
radio_index[0] = 1;
|
|
|
|
break;
|
|
|
|
case SPFT_CONE_DIR_BACKWARD:
|
|
|
|
radio_index[1] = 1;
|
|
|
|
break;
|
|
|
|
case SPFT_CONE_DIR_UPWARD:
|
|
|
|
radio_index[2] = 1;
|
|
|
|
break;
|
|
|
|
case SPFT_CONE_DIR_DOWNWARD:
|
|
|
|
radio_index[3] = 1;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
bbox = (CButton *)GetDlgItem(IDC_SOUNDFORWARD_RADIO);
|
|
|
|
bbox->SetCheck(radio_index[0]);
|
|
|
|
bbox = (CButton *)GetDlgItem(IDC_SOUNDBACKWARD_RADIO);
|
|
|
|
bbox->SetCheck(radio_index[1]);
|
|
|
|
bbox = (CButton *)GetDlgItem(IDC_SOUNDUPWARD_RADIO);
|
|
|
|
bbox->SetCheck(radio_index[2]);
|
|
|
|
bbox = (CButton *)GetDlgItem(IDC_SOUNDDOWNWARD_RADIO);
|
|
|
|
bbox->SetCheck(radio_index[3]);
|
|
|
|
|
|
|
|
bbox = (CButton *)GetDlgItem(IDC_CHECKIN_SOUND);
|
|
|
|
if (mng_FindTrackLock(Sounds[n].name, PAGETYPE_SOUND) == -1) {
|
|
|
|
bbox->EnableWindow(FALSE);
|
|
|
|
bbox = (CButton *)GetDlgItem(IDC_LOCK_SOUND);
|
|
|
|
bbox->EnableWindow(TRUE);
|
|
|
|
bbox = (CButton *)GetDlgItem(IDC_SOUND_CHANGE_NAME);
|
|
|
|
bbox->EnableWindow(FALSE);
|
|
|
|
} else {
|
|
|
|
bbox->EnableWindow(TRUE);
|
|
|
|
bbox = (CButton *)GetDlgItem(IDC_LOCK_SOUND);
|
|
|
|
bbox->EnableWindow(FALSE);
|
|
|
|
bbox = (CButton *)GetDlgItem(IDC_SOUND_CHANGE_NAME);
|
|
|
|
bbox->EnableWindow(TRUE);
|
|
|
|
}
|
|
|
|
|
|
|
|
SendDlgItemMessage(IDC_SOUND_PULLDOWN, CB_RESETCONTENT, 0, 0);
|
|
|
|
|
|
|
|
for (i = 0; i < MAX_SOUNDS; i++) {
|
|
|
|
if (Sounds[i].used)
|
|
|
|
SendDlgItemMessage(IDC_SOUND_PULLDOWN, CB_ADDSTRING, 0, (LPARAM)(LPCTSTR)Sounds[i].name);
|
|
|
|
}
|
|
|
|
SendDlgItemMessage(IDC_SOUND_PULLDOWN, CB_SELECTSTRING, 0, (LPARAM)(LPCTSTR)Sounds[n].name);
|
2024-04-19 20:58:24 +00:00
|
|
|
}
|
|
|
|
|
2024-06-15 18:12:48 +00:00
|
|
|
void CWorldSoundsDialog::SaveSoundsOnClose() {
|
|
|
|
int i, t;
|
|
|
|
|
|
|
|
if (!Network_up)
|
|
|
|
return; // don't save a damn thing if the network is down
|
2024-04-19 20:58:24 +00:00
|
|
|
|
2024-06-15 18:12:48 +00:00
|
|
|
for (i = 0; i < MAX_TRACKLOCKS; i++) {
|
|
|
|
if (GlobalTrackLocks[i].used == 1 && GlobalTrackLocks[i].pagetype == PAGETYPE_SOUND) {
|
|
|
|
t = FindSoundName(GlobalTrackLocks[i].name);
|
|
|
|
ASSERT(t != -1);
|
2024-04-19 20:58:24 +00:00
|
|
|
|
2024-06-15 18:12:48 +00:00
|
|
|
mng_ReplacePage(Sounds[t].name, Sounds[t].name, t, PAGETYPE_SOUND, 1);
|
|
|
|
}
|
|
|
|
}
|
2024-04-19 20:58:24 +00:00
|
|
|
}
|
|
|
|
|
2024-06-15 18:12:48 +00:00
|
|
|
BOOL CWorldSoundsDialog::DestroyWindow() {
|
|
|
|
SaveSoundsOnClose();
|
|
|
|
return CDialog::DestroyWindow();
|
2024-04-19 20:58:24 +00:00
|
|
|
}
|
|
|
|
|
2024-06-15 18:12:48 +00:00
|
|
|
BOOL CWorldSoundsDialog::OnInitDialog() {
|
|
|
|
CDialog::OnInitDialog();
|
|
|
|
|
|
|
|
UpdateDialog();
|
|
|
|
|
|
|
|
return TRUE; // return TRUE unless you set the focus to a control
|
|
|
|
// EXCEPTION: OCX Property Pages should return FALSE
|
2024-04-19 20:58:24 +00:00
|
|
|
}
|
|
|
|
|
2024-06-15 18:12:48 +00:00
|
|
|
void CWorldSoundsDialog::OnPlaysound() {
|
|
|
|
int n = D3EditState.current_sound;
|
2024-04-19 20:58:24 +00:00
|
|
|
|
2024-06-15 18:12:48 +00:00
|
|
|
if (Num_sounds < 1)
|
|
|
|
return;
|
|
|
|
|
|
|
|
Sound_system.BeginSoundFrame();
|
|
|
|
Sound_system.Play2dSound(n);
|
|
|
|
Sound_system.EndSoundFrame();
|
2024-04-19 20:58:24 +00:00
|
|
|
}
|
|
|
|
|
2024-06-15 18:12:48 +00:00
|
|
|
void CWorldSoundsDialog::OnKillfocusSoundinnerconeangleEdit() {
|
|
|
|
CEdit *ebox;
|
|
|
|
char str[20];
|
|
|
|
int n = D3EditState.current_sound;
|
|
|
|
|
|
|
|
ebox = (CEdit *)GetDlgItem(IDC_SOUNDINNERCONEANGLE_EDIT);
|
|
|
|
ebox->GetWindowText(str, 20);
|
2024-04-19 20:58:24 +00:00
|
|
|
|
2024-06-15 18:12:48 +00:00
|
|
|
Sounds[n].inner_cone_angle = atoi(str);
|
|
|
|
}
|
2024-04-19 20:58:24 +00:00
|
|
|
|
2024-06-15 18:12:48 +00:00
|
|
|
void CWorldSoundsDialog::OnKillfocusSoundloopendEdit() {
|
|
|
|
CEdit *ebox;
|
|
|
|
char str[20];
|
|
|
|
int n = D3EditState.current_sound;
|
2024-04-19 20:58:24 +00:00
|
|
|
|
2024-06-15 18:12:48 +00:00
|
|
|
ebox = (CEdit *)GetDlgItem(IDC_SOUNDLOOPEND_EDIT);
|
|
|
|
ebox->GetWindowText(str, 20);
|
|
|
|
|
|
|
|
sscanf(str, "%d", &Sounds[n].loop_end);
|
|
|
|
if (Sounds[n].loop_end < Sounds[n].loop_start)
|
|
|
|
Sounds[n].loop_end = Sounds[n].loop_start;
|
|
|
|
if (Sounds[n].loop_end >= SoundFiles[Sounds[n].sample_index].np_sample_length)
|
|
|
|
Sounds[n].loop_end = SoundFiles[Sounds[n].sample_index].np_sample_length - 1;
|
|
|
|
|
|
|
|
if (Sounds[n].loop_end < 0)
|
|
|
|
Sounds[n].loop_end = 0;
|
|
|
|
|
|
|
|
UpdateDialog();
|
2024-04-19 20:58:24 +00:00
|
|
|
}
|
|
|
|
|
2024-06-15 18:12:48 +00:00
|
|
|
void CWorldSoundsDialog::OnKillfocusSoundloopstartEdit() {
|
|
|
|
CEdit *ebox;
|
|
|
|
char str[20];
|
|
|
|
int n = D3EditState.current_sound;
|
|
|
|
|
|
|
|
ebox = (CEdit *)GetDlgItem(IDC_SOUNDLOOPSTART_EDIT);
|
|
|
|
ebox->GetWindowText(str, 20);
|
2024-04-19 20:58:24 +00:00
|
|
|
|
2024-06-15 18:12:48 +00:00
|
|
|
sscanf(str, "%d", &Sounds[n].loop_start);
|
|
|
|
if (Sounds[n].loop_start > Sounds[n].loop_end)
|
|
|
|
Sounds[n].loop_start = Sounds[n].loop_end;
|
|
|
|
if (Sounds[n].loop_start >= SoundFiles[Sounds[n].sample_index].np_sample_length)
|
|
|
|
Sounds[n].loop_start = SoundFiles[Sounds[n].sample_index].np_sample_length - 1;
|
2024-04-19 20:58:24 +00:00
|
|
|
|
2024-06-15 18:12:48 +00:00
|
|
|
if (Sounds[n].loop_start < 0)
|
|
|
|
Sounds[n].loop_start = 0;
|
2024-04-19 20:58:24 +00:00
|
|
|
|
2024-06-15 18:12:48 +00:00
|
|
|
UpdateDialog();
|
2024-04-19 20:58:24 +00:00
|
|
|
}
|
|
|
|
|
2024-06-15 18:12:48 +00:00
|
|
|
void CWorldSoundsDialog::OnKillfocusSoundmaxdistEdit() {
|
|
|
|
CEdit *ebox;
|
|
|
|
char str[20];
|
|
|
|
int n = D3EditState.current_sound;
|
2024-04-19 20:58:24 +00:00
|
|
|
|
2024-06-15 18:12:48 +00:00
|
|
|
ebox = (CEdit *)GetDlgItem(IDC_SOUNDMAXDIST_EDIT);
|
|
|
|
ebox->GetWindowText(str, 20);
|
|
|
|
|
|
|
|
Sounds[n].max_distance = atof(str);
|
2024-04-19 20:58:24 +00:00
|
|
|
}
|
|
|
|
|
2024-06-15 18:12:48 +00:00
|
|
|
void CWorldSoundsDialog::OnKillfocusSoundmindistEdit() {
|
|
|
|
CEdit *ebox;
|
|
|
|
char str[20];
|
|
|
|
int n = D3EditState.current_sound;
|
|
|
|
|
|
|
|
ebox = (CEdit *)GetDlgItem(IDC_SOUNDMINDIST_EDIT);
|
|
|
|
ebox->GetWindowText(str, 20);
|
2024-04-19 20:58:24 +00:00
|
|
|
|
2024-06-15 18:12:48 +00:00
|
|
|
Sounds[n].min_distance = atof(str);
|
2024-04-19 20:58:24 +00:00
|
|
|
}
|
|
|
|
|
2024-06-15 18:12:48 +00:00
|
|
|
void CWorldSoundsDialog::OnKillfocusSoundouterconeangleEdit() {
|
|
|
|
CEdit *ebox;
|
|
|
|
char str[20];
|
|
|
|
int n = D3EditState.current_sound;
|
|
|
|
|
|
|
|
ebox = (CEdit *)GetDlgItem(IDC_SOUNDOUTERCONEANGLE_EDIT);
|
|
|
|
ebox->GetWindowText(str, 20);
|
2024-04-19 20:58:24 +00:00
|
|
|
|
2024-06-15 18:12:48 +00:00
|
|
|
Sounds[n].outer_cone_angle = atoi(str);
|
2024-04-19 20:58:24 +00:00
|
|
|
}
|
|
|
|
|
2024-06-15 18:12:48 +00:00
|
|
|
void CWorldSoundsDialog::OnKillfocusSoundouterconevolEdit() {
|
|
|
|
CEdit *ebox;
|
|
|
|
char str[20];
|
|
|
|
int n = D3EditState.current_sound;
|
2024-04-19 20:58:24 +00:00
|
|
|
|
2024-06-15 18:12:48 +00:00
|
|
|
ebox = (CEdit *)GetDlgItem(IDC_SOUNDOUTERCONEVOL_EDIT);
|
|
|
|
ebox->GetWindowText(str, 20);
|
|
|
|
|
|
|
|
Sounds[n].outer_cone_volume = atof(str) / 100.0;
|
2024-04-19 20:58:24 +00:00
|
|
|
}
|
|
|
|
|
2024-06-15 18:12:48 +00:00
|
|
|
void CWorldSoundsDialog::OnSoundhalleffectCheck() {
|
|
|
|
int n = D3EditState.current_sound;
|
|
|
|
CButton *btn;
|
|
|
|
|
|
|
|
btn = (CButton *)GetDlgItem(IDC_SOUNDHALLEFFECT_CHECK);
|
|
|
|
|
|
|
|
if (btn->GetCheck())
|
|
|
|
Sounds[n].flags &= ~SPF_FIXED_FREQ;
|
|
|
|
else
|
|
|
|
Sounds[n].flags |= SPF_FIXED_FREQ;
|
2024-04-19 20:58:24 +00:00
|
|
|
}
|
|
|
|
|
2024-06-15 18:12:48 +00:00
|
|
|
void CWorldSoundsDialog::OnLoopingCheck() {
|
|
|
|
int n = D3EditState.current_sound;
|
|
|
|
CButton *btn;
|
|
|
|
|
|
|
|
btn = (CButton *)GetDlgItem(IDC_LOOPING_CHECK);
|
|
|
|
|
|
|
|
if (btn->GetCheck())
|
|
|
|
Sounds[n].flags |= SPF_LOOPED;
|
|
|
|
else
|
|
|
|
Sounds[n].flags &= ~SPF_LOOPED;
|
2024-04-19 20:58:24 +00:00
|
|
|
}
|
|
|
|
|
2024-06-15 18:12:48 +00:00
|
|
|
void CWorldSoundsDialog::OnSoundbackwardRadio() {
|
|
|
|
int n = D3EditState.current_sound;
|
2024-04-19 20:58:24 +00:00
|
|
|
|
2024-06-15 18:12:48 +00:00
|
|
|
Sounds[n].flags &= ~SPFT_CONE_DIR_MASK;
|
|
|
|
Sounds[n].flags |= SPFT_CONE_DIR_BACKWARD;
|
2024-04-19 20:58:24 +00:00
|
|
|
}
|
|
|
|
|
2024-06-15 18:12:48 +00:00
|
|
|
void CWorldSoundsDialog::OnSounddownwardRadio() {
|
|
|
|
int n = D3EditState.current_sound;
|
2024-04-19 20:58:24 +00:00
|
|
|
|
2024-06-15 18:12:48 +00:00
|
|
|
Sounds[n].flags &= ~SPFT_CONE_DIR_MASK;
|
|
|
|
Sounds[n].flags |= SPFT_CONE_DIR_DOWNWARD;
|
2024-04-19 20:58:24 +00:00
|
|
|
}
|
|
|
|
|
2024-06-15 18:12:48 +00:00
|
|
|
void CWorldSoundsDialog::OnSoundexclusiveCheck() {
|
|
|
|
int n = D3EditState.current_sound;
|
|
|
|
CButton *btn;
|
|
|
|
|
|
|
|
btn = (CButton *)GetDlgItem(IDC_SOUNDEXCLUSIVE_CHECK);
|
|
|
|
|
|
|
|
if (btn->GetCheck())
|
|
|
|
Sounds[n].flags |= SPF_PLAYS_EXCLUSIVELY;
|
|
|
|
else
|
|
|
|
Sounds[n].flags &= ~SPF_PLAYS_EXCLUSIVELY;
|
2024-04-19 20:58:24 +00:00
|
|
|
}
|
|
|
|
|
2024-06-15 18:12:48 +00:00
|
|
|
void CWorldSoundsDialog::OnSoundforeverCheck() {
|
|
|
|
int n = D3EditState.current_sound;
|
|
|
|
CButton *btn;
|
|
|
|
|
|
|
|
btn = (CButton *)GetDlgItem(IDC_SOUNDFOREVER_CHECK);
|
|
|
|
|
|
|
|
if (btn->GetCheck())
|
|
|
|
Sounds[n].flags |= SPF_FOREVER;
|
|
|
|
else
|
|
|
|
Sounds[n].flags &= ~SPF_FOREVER;
|
2024-04-19 20:58:24 +00:00
|
|
|
}
|
|
|
|
|
2024-06-15 18:12:48 +00:00
|
|
|
void CWorldSoundsDialog::OnSoundforwardRadio() {
|
|
|
|
int n = D3EditState.current_sound;
|
2024-04-19 20:58:24 +00:00
|
|
|
|
2024-06-15 18:12:48 +00:00
|
|
|
Sounds[n].flags &= ~SPFT_CONE_DIR_MASK;
|
|
|
|
Sounds[n].flags |= SPFT_CONE_DIR_FORWARD;
|
2024-04-19 20:58:24 +00:00
|
|
|
}
|
|
|
|
|
2024-06-15 18:12:48 +00:00
|
|
|
void CWorldSoundsDialog::OnSoundobjattachRadio() {
|
|
|
|
int n = D3EditState.current_sound;
|
|
|
|
Sounds[n].flags |= SPF_OBJ_UPDATE;
|
2024-04-19 20:58:24 +00:00
|
|
|
}
|
|
|
|
|
2024-06-15 18:12:48 +00:00
|
|
|
void CWorldSoundsDialog::OnSoundobjectRadio() {
|
|
|
|
int n = D3EditState.current_sound;
|
2024-04-19 20:58:24 +00:00
|
|
|
|
2024-06-15 18:12:48 +00:00
|
|
|
Sounds[n].flags &= ~SPFT_CONE_LINK_MASK;
|
|
|
|
Sounds[n].flags |= SPFT_CONE_LINK_OBJECT;
|
2024-04-19 20:58:24 +00:00
|
|
|
}
|
|
|
|
|
2024-06-15 18:12:48 +00:00
|
|
|
void CWorldSoundsDialog::OnSoundonceCheck() {
|
|
|
|
int n = D3EditState.current_sound;
|
|
|
|
CButton *btn;
|
|
|
|
|
|
|
|
btn = (CButton *)GetDlgItem(IDC_SOUNDONCE_CHECK);
|
|
|
|
|
|
|
|
if (btn->GetCheck())
|
|
|
|
Sounds[n].flags |= SPF_PLAYS_ONCE;
|
|
|
|
else
|
|
|
|
Sounds[n].flags &= ~SPF_PLAYS_ONCE;
|
2024-04-19 20:58:24 +00:00
|
|
|
}
|
|
|
|
|
2024-06-15 18:12:48 +00:00
|
|
|
void CWorldSoundsDialog::OnSoundposattachRadio() {
|
|
|
|
int n = D3EditState.current_sound;
|
|
|
|
Sounds[n].flags &= ~SPF_OBJ_UPDATE;
|
2024-04-19 20:58:24 +00:00
|
|
|
}
|
|
|
|
|
2024-06-15 18:12:48 +00:00
|
|
|
void CWorldSoundsDialog::OnSoundturret1Radio() {
|
|
|
|
int n = D3EditState.current_sound;
|
2024-04-19 20:58:24 +00:00
|
|
|
|
2024-06-15 18:12:48 +00:00
|
|
|
Sounds[n].flags &= ~SPFT_CONE_LINK_MASK;
|
|
|
|
Sounds[n].flags |= SPFT_CONE_LINK_TURRET1;
|
2024-04-19 20:58:24 +00:00
|
|
|
}
|
|
|
|
|
2024-06-15 18:12:48 +00:00
|
|
|
void CWorldSoundsDialog::OnSoundturret2Radio() {
|
|
|
|
int n = D3EditState.current_sound;
|
2024-04-19 20:58:24 +00:00
|
|
|
|
2024-06-15 18:12:48 +00:00
|
|
|
Sounds[n].flags &= ~SPFT_CONE_LINK_MASK;
|
|
|
|
Sounds[n].flags |= SPFT_CONE_LINK_TURRET2;
|
2024-04-19 20:58:24 +00:00
|
|
|
}
|
|
|
|
|
2024-06-15 18:12:48 +00:00
|
|
|
void CWorldSoundsDialog::OnSoundturret3Radio() {
|
|
|
|
int n = D3EditState.current_sound;
|
2024-04-19 20:58:24 +00:00
|
|
|
|
2024-06-15 18:12:48 +00:00
|
|
|
Sounds[n].flags &= ~SPFT_CONE_LINK_MASK;
|
|
|
|
Sounds[n].flags |= SPFT_CONE_LINK_TURRET3;
|
2024-04-19 20:58:24 +00:00
|
|
|
}
|
|
|
|
|
2024-06-15 18:12:48 +00:00
|
|
|
void CWorldSoundsDialog::OnSoundupwardRadio() {
|
|
|
|
int n = D3EditState.current_sound;
|
2024-04-19 20:58:24 +00:00
|
|
|
|
2024-06-15 18:12:48 +00:00
|
|
|
Sounds[n].flags &= ~SPFT_CONE_DIR_MASK;
|
|
|
|
Sounds[n].flags |= SPFT_CONE_DIR_UPWARD;
|
2024-04-19 20:58:24 +00:00
|
|
|
}
|
|
|
|
|
2024-06-15 18:12:48 +00:00
|
|
|
BOOL CWorldSoundsDialog::OnHelpInfo(HELPINFO *pHelpInfo) {
|
|
|
|
WinHelp(HID_SOUNDSDLG, HELP_CONTEXT);
|
|
|
|
return TRUE;
|
|
|
|
// return CDialog::OnHelpInfo(pHelpInfo);
|
2024-04-19 20:58:24 +00:00
|
|
|
}
|
|
|
|
|
2024-06-15 18:12:48 +00:00
|
|
|
void CWorldSoundsDialog::OnSoundNoUpdate() {
|
|
|
|
int n = D3EditState.current_sound;
|
|
|
|
CButton *btn;
|
2024-04-19 20:58:24 +00:00
|
|
|
|
2024-06-15 18:12:48 +00:00
|
|
|
btn = (CButton *)GetDlgItem(IDC_SOUND_NO_UPDATE);
|
2024-04-19 20:58:24 +00:00
|
|
|
|
2024-06-15 18:12:48 +00:00
|
|
|
if (btn->GetCheck())
|
|
|
|
Sounds[n].flags |= SPF_LISTENER_UPDATE;
|
|
|
|
else
|
|
|
|
Sounds[n].flags &= ~SPF_LISTENER_UPDATE;
|
2024-04-19 20:58:24 +00:00
|
|
|
}
|
|
|
|
|
2024-06-15 18:12:48 +00:00
|
|
|
void CWorldSoundsDialog::OnKillsounds() {
|
|
|
|
Sound_system.BeginSoundFrame();
|
|
|
|
Sound_system.StopAllSounds();
|
|
|
|
Sound_system.EndSoundFrame();
|
2024-04-19 20:58:24 +00:00
|
|
|
}
|
|
|
|
|
2024-06-15 18:12:48 +00:00
|
|
|
void CWorldSoundsDialog::OnSoundOncePerObjCheck() {
|
|
|
|
int n = D3EditState.current_sound;
|
|
|
|
CButton *btn;
|
|
|
|
|
|
|
|
btn = (CButton *)GetDlgItem(IDC_SOUND_ONCE_PER_OBJ_CHECK);
|
|
|
|
|
|
|
|
if (btn->GetCheck())
|
|
|
|
Sounds[n].flags |= SPF_ONCE_PER_OBJ;
|
|
|
|
else
|
|
|
|
Sounds[n].flags &= ~SPF_ONCE_PER_OBJ;
|
2024-04-19 20:58:24 +00:00
|
|
|
}
|
|
|
|
|
2024-06-15 18:12:48 +00:00
|
|
|
void CWorldSoundsDialog::OnKillfocusSoundImportVolumeEdit() {
|
|
|
|
CEdit *ebox;
|
|
|
|
char str[20];
|
|
|
|
int n = D3EditState.current_sound;
|
|
|
|
|
|
|
|
ebox = (CEdit *)GetDlgItem(IDC_SOUND_IMPORT_VOLUME_EDIT);
|
|
|
|
ebox->GetWindowText(str, 20);
|
|
|
|
|
|
|
|
sscanf(str, "%f", &Sounds[n].import_volume);
|
|
|
|
Sounds[n].import_volume /= 100.0f;
|
|
|
|
|
|
|
|
if (Sounds[n].import_volume < 0.01f)
|
|
|
|
Sounds[n].import_volume = 0.01f;
|
|
|
|
if (Sounds[n].import_volume > 1.0f)
|
|
|
|
Sounds[n].import_volume = 1.0f;
|
|
|
|
|
|
|
|
int j = Sounds[n].sample_index;
|
|
|
|
if (j >= 0 && SoundFiles[j].used) {
|
|
|
|
if (SoundFiles[j].sample_16bit) {
|
|
|
|
GlobalFree(SoundFiles[j].sample_16bit);
|
|
|
|
SoundFiles[j].sample_16bit = NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (SoundFiles[j].sample_8bit) {
|
|
|
|
GlobalFree(SoundFiles[j].sample_8bit);
|
|
|
|
SoundFiles[j].sample_8bit = NULL;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
UpdateDialog();
|
2024-04-19 20:58:24 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
#include "mem.h"
|
|
|
|
#include "EditLineDialog.h"
|
|
|
|
|
2024-06-15 18:12:48 +00:00
|
|
|
// Gets a name from the user, making sure it's unique
|
|
|
|
// Returns true if got new name, false if cancelled.
|
|
|
|
// the data in buf not changed if cancel is pressed
|
|
|
|
bool InputSoundName(char *buf, int len, char *title, char *prompt, CWnd *wnd) {
|
|
|
|
if (len > (PAGENAME_LEN - 1))
|
|
|
|
len = PAGENAME_LEN - 1;
|
2024-04-19 20:58:24 +00:00
|
|
|
|
2024-06-15 18:12:48 +00:00
|
|
|
char *tempbuf = (char *)mem_malloc(len);
|
2024-04-19 20:58:24 +00:00
|
|
|
|
2024-06-15 18:12:48 +00:00
|
|
|
strncpy(tempbuf, buf, len - 1);
|
|
|
|
tempbuf[len - 1] = '\0';
|
2024-04-19 20:58:24 +00:00
|
|
|
|
|
|
|
try_again:
|
|
|
|
|
2024-06-15 18:12:48 +00:00
|
|
|
if (!InputString(tempbuf, len, title, prompt, wnd)) {
|
|
|
|
mem_free(tempbuf);
|
|
|
|
return 0;
|
|
|
|
}
|
2024-04-19 20:58:24 +00:00
|
|
|
|
2024-06-15 18:12:48 +00:00
|
|
|
if (FindSoundName(tempbuf) != -1) {
|
|
|
|
OutrageMessageBox("The name you specified is already in use. Enter another name.");
|
|
|
|
goto try_again;
|
|
|
|
}
|
2024-04-19 20:58:24 +00:00
|
|
|
|
2024-06-15 18:12:48 +00:00
|
|
|
strcpy(buf, tempbuf);
|
|
|
|
mem_free(tempbuf);
|
2024-04-19 20:58:24 +00:00
|
|
|
|
2024-06-15 18:12:48 +00:00
|
|
|
return 1;
|
2024-04-19 20:58:24 +00:00
|
|
|
}
|
|
|
|
|
2024-06-15 18:12:48 +00:00
|
|
|
void CWorldSoundsDialog::OnSoundChangeName() {
|
|
|
|
int n = D3EditState.current_sound;
|
|
|
|
|
|
|
|
char name[PAGENAME_LEN];
|
|
|
|
mngs_Pagelock pl;
|
|
|
|
|
|
|
|
// Make sure we have this ship locked, if not reset name and bail
|
|
|
|
int p = mng_FindTrackLock(Sounds[n].name, PAGETYPE_SOUND);
|
|
|
|
if (p == -1) {
|
|
|
|
OutrageMessageBox("You must lock this sound if you wish to change its name.");
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!mng_MakeLocker())
|
|
|
|
return;
|
|
|
|
|
|
|
|
// Get new name
|
|
|
|
strcpy(name, Sounds[n].name);
|
|
|
|
if (!InputSoundName(name, sizeof(name), "Sound name", "Enter a new name for this sound:", this))
|
|
|
|
return;
|
|
|
|
|
|
|
|
// Check to see if this page exists on the network. If so, we have to
|
|
|
|
// rename it so we can prevent havoc
|
|
|
|
strcpy(pl.name, Sounds[n].name);
|
|
|
|
pl.pagetype = PAGETYPE_SOUND;
|
|
|
|
|
|
|
|
int ret = mng_CheckIfPageOwned(&pl, TableUser);
|
|
|
|
if (ret < 0)
|
|
|
|
OutrageMessageBox(ErrorString);
|
|
|
|
else if (ret == 1)
|
|
|
|
mng_RenamePage(Sounds[n].name, name, PAGETYPE_SOUND);
|
|
|
|
else if (ret == 2) {
|
|
|
|
// This page has never been checked in, replace only local copy
|
|
|
|
|
|
|
|
char oldname[PAGENAME_LEN];
|
|
|
|
strcpy(oldname, Sounds[n].name);
|
|
|
|
strcpy(Sounds[n].name, name);
|
|
|
|
|
|
|
|
mng_ReplacePage(oldname, Sounds[n].name, n, PAGETYPE_SOUND, 1);
|
|
|
|
} else if (ret == 0) {
|
|
|
|
OutrageMessageBox("You don't own this page. Get Jason now!");
|
|
|
|
mng_FreeTrackLock(p);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Finally, copy our new name to the appropriate arrays
|
|
|
|
strcpy(GlobalTrackLocks[p].name, name);
|
|
|
|
strcpy(Sounds[n].name, name);
|
|
|
|
mng_EraseLocker();
|
|
|
|
|
|
|
|
UpdateDialog();
|
2024-04-19 20:58:24 +00:00
|
|
|
}
|
|
|
|
|
2024-06-15 18:12:48 +00:00
|
|
|
void CWorldSoundsDialog::OnOverride() {
|
|
|
|
int n = D3EditState.current_sound;
|
|
|
|
mngs_Pagelock temp_pl;
|
2024-04-19 20:58:24 +00:00
|
|
|
|
2024-06-15 18:12:48 +00:00
|
|
|
strcpy(temp_pl.name, Sounds[n].name);
|
|
|
|
temp_pl.pagetype = PAGETYPE_SOUND;
|
2024-04-19 20:58:24 +00:00
|
|
|
|
2024-06-15 18:12:48 +00:00
|
|
|
mng_OverrideToUnlocked(&temp_pl);
|
2024-04-19 20:58:24 +00:00
|
|
|
}
|