Go Back   EQEmulator Home > EQEmulator Forums > Development > Development::Tools

Development::Tools 3rd Party Tools for EQEMu (DB management tools, front ends, etc...)

Reply
 
Thread Tools Display Modes
  #1  
Old 06-09-2015, 02:26 PM
Shendare
Dragon
 
Join Date: Apr 2009
Location: California
Posts: 816
Default Old style .eff to editable .emt zone sounds converter

The original game packed the background music and environment sound effect locations for zones in a binary ZoneNick_sounds.eff file, text ZoneNick_sndbnk.eff file that listed the sound effects referenced in the binary file, and ZoneNick.xmi multi-song MIDI files.

With Planes of Power, they added mp3 music for some of the higher-level planes, added the list of them to mp3index.txt, and pointed music references in the appropriate planes' x_sounds.eff files to these new mp3s by using negative numbers for the song numbers.

In Legacy of Ykesha, they completely revamped the system. No more xmi music files and no more eff files for new zones. Zones newly created now used a text-based .emt file that listed the locations and characteristics of background music and environment sounds for zones.

No documentation was ever released on either format, but a request from Grimluck on figuring out how to customize music in the zones led me on a journey to reverse engineer them.

The result is a tool that can convert the old-style .eff files for Original through PoP zones into the editable .emt file that can be customized at will. If the client finds a .emt file for a zone, it'll ignore any old .eff files that are hanging around for it.

The field definitions in the comma-delimited .emt file are also included in any converted files, for easy human reference while editing.

------------------------------------------------------------

The source code for the command-line version is here:

https://github.com/Shendare/Eff2Emt

The source code for the GUI version in .Net 3.5 C# is here:

https://github.com/Shendare/Eff2EmtGUI

Compiled binaries can be found here:

http://www.shendare.com/EQ/Emu/Eff2Emt/

Current Screenshot (GUI version):



Screenshot Mirror (in case my site goes down for some reason):

http://i.imgur.com/6Dbpmhj.png

Last edited by Shendare; 06-10-2015 at 05:48 AM.. Reason: Added command-line version link
Reply With Quote
  #2  
Old 06-09-2015, 02:32 PM
Shendare
Dragon
 
Join Date: Apr 2009
Location: California
Posts: 816
Default

For historical documentation purposes, here's what I figured out on the file formats during the course of my h4x:

ZoneNick_sndbnk.eff - Text listing of sound effects used in a zone:

Code:
EMIT
soundfile1
soundfile2
soundfile3
...

LOOP
soundfile1
soundfile2

RAND (optional, empty, never used)
ZoneNick_sounds.eff - No header, just raw 84-byte binary structs:

Code:
        public struct EffSoundEntry
        {
            public Int32 UnkRef00;
            public Int32 UnkRef04;
            public Int32 Reserved;
            public Int32 Sequence;
            public float X;
            public float Y;
            public float Z;
            public float Radius;
            public Int32 Cooldown1;
            public Int32 Cooldown2;
            public Int32 RandomDelay;
            public Int32 Unk44;
            public Int32 SoundID1;
            public Int32 SoundID2;
            public Byte SoundType;
            public Byte UnkPad57;
            public Byte UnkPad58;
            public Byte UnkPad59;
            public Int32 AsDistance;
            public Int32 UnkRange64;
            public Int32 FadeOutMS;
            public Int32 UnkRange72;
            public Int32 FullVolRange;
            public Int32 UnkRange80;
        };
EffSoundEntry field notes:

- Each sound effect record can reference up to 2 sound effects / music subsongs, SoundID1 and Cooldown1 are for daytime, SoundID2/Cooldown2 for nighttime. RandomDelay is added to whichever is active.

- SoundType 0 is for day/night environment sounds that play at a constant volume, such as bats screeching or wind blowing across an open area.

- SoundType 1 is for background music, with the option of specifying different music for daytime vs nighttime in the same location. If either SoundID is a negative number, it's a PoP-added reference to the associated line number in mp3index.txt. Otherwise, it indicates which sub-song to play in the ZoneNick.xmi MIDI file at that location.

- SoundType 2 is for environment sounds that play at all times of day or night, loudest at the center and quickly fading quieter as a character moves away. Campfires, for instance.

- SoundType 3 is for day/night sound effects like SoundType 0, but the sounds act like SoundType 2 where they are only at full volume within FullVolRange, and quickly drop off as the character moves farther away from them.

- SoundID1 (32-bit signed) is either:
  • A negative number, pointing to the appropriate line in mp3index.txt
  • Zero, indicating no sound effect or music for that time of day
  • 1-31, an index to a sound file in the EMIT section of sndbnk.eff
  • 32-161, a hard-coded sound file reference. I did some trial and error to figure these out
  • 162+, an index to a sound file in the LOOP section of sndbnk.eff. You subtract 161 from this number to know which LOOP sound file is played.

- AsDistance acts like a volume dampener, making an effect sound like it's happening farther away. 3000-3100 seems to be the cutoff where the sound disappears completely no matter what volume your speakers are on, so I use 3000 as a scale for the Volume setting in the .emt file.

- Any other fields are undetermined or self-explanatory. UnkRange64 ranges from -60 to +3000, similar to AsDistance's -60 to +4000, but plugging different values in it didn't seem to do anything. Same with UnkRange72 (0 - 10000, which would seem to be a candidate for FadeInMS, but didn't do anything), and UnkRange80 (0 - 3000) also had no effect.

Hard-coded SoundIDs found in the .eff files (I think these are all found packed in snd2.pfs):

Code:
39 - death_me
143 - thunder1
144 - thunder2
158 - wind_lp1
159 - rainloop
160 - torch_lp
161 - watundlp
Reply With Quote
  #3  
Old 06-09-2015, 02:34 PM
Shendare
Dragon
 
Join Date: Apr 2009
Location: California
Posts: 816
Default

Oh, and the fields in the .emt files. I just paste this line as-is at the top of a .emt file for reference. The game doesn't find a "SoundFile (wav=sound mp3/xmi=music)" in the game files as a sound file to play, so it ignores the line.

;?,SoundFile (wav=sound mp3/xmi=music),Unknown (0=OK 1=OK),WhenActive (0=Always 1=Daytime 2=Nighttime),Volume (1.0 = 100%),FadeInMS,FadeOutMS,WavLoopType (0=Constant 1=Delayed Repeat),X,Y,Z,WavFullVolRadius,WavMaxAudibleDist,N onZero = RandomizeLocation,ActivationRange,MinRepeatDelay,M axRepeatDelay,xmiIndex,EchoLevel (50 = Max),IsEnvSound (for option toggle)
Reply With Quote
  #4  
Old 06-10-2015, 05:49 AM
Shendare
Dragon
 
Join Date: Apr 2009
Location: California
Posts: 816
Default

And c++ command-line version is now available as well.
Reply With Quote
  #5  
Old 06-10-2015, 07:29 AM
Scorpious2k's Avatar
Scorpious2k
Demi-God
 
Join Date: Mar 2003
Location: USA
Posts: 1,057
Default

Very nice work, Shendare!
__________________
Maybe I should try making one of these servers...
Reply With Quote
  #6  
Old 06-10-2015, 12:07 PM
Shendare
Dragon
 
Join Date: Apr 2009
Location: California
Posts: 816
Default

Thanks. It was a fun little puzzle challenge. I haven't been able to work on some stuff I've been wanting to lately, so it was nice being able to play with something at least.
Reply With Quote
  #7  
Old 06-10-2015, 03:35 PM
Drajor's Avatar
Drajor
Developer
 
Join Date: Nov 2012
Location: Halas
Posts: 357
Default

Well done
__________________
Drajor regards you indifferently -- what would you like your tombstone to say?
Reply With Quote
  #8  
Old 06-10-2015, 03:37 PM
Shendare
Dragon
 
Join Date: Apr 2009
Location: California
Posts: 816
Default

Thanks! Next step would be a quick user-friendly UI for adding and editing the sounds and music. Somewhere down the line.
Reply With Quote
Reply

Tags
sound music customization

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 11:35 AM.


 

Everquest is a registered trademark of Daybreak Game Company LLC.
EQEmulator is not associated or affiliated in any way with Daybreak Game Company LLC.
Except where otherwise noted, this site is licensed under a Creative Commons License.
       
Powered by vBulletin®, Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
Template by Bluepearl Design and vBulletin Templates - Ver3.3