Professional Documents
Culture Documents
Re4uhd Fse-Ese Tools Tutorial
Re4uhd Fse-Ese Tools Tutorial
Tutorial by Mr.Curious
Tools by Son of Persia
When we are dealing with sound in RE4UHD there are numerous files that come into play and it can often
be a very complicated part of the game to mod. In this tutorial we will overview some of the functions of
the files associated with modding sound in RE4UHD and then discuss some of the tools we have at our
disposal.
FSE - FootStepEnvironment file that handles the trigger areas, volumes, muting and placement of
environmental sounds like wind, rain, lightning etc. This file is also responsible for determining which
footsteps sounds are used in specific areas of the rooms
ESE - like the FSE this file controls the placement of certain sounds, most often sounds we hear that are
specific to a particular location and usually constant. Examples include the buzzing of insects, the sound of
fire burning etc.
XWB - XactWaveBank file that contains the .wav files that are heard in the game. These files can be
opened with the UnXWB tools (not by Son of Persia). Once the .wav files are extracted they can be edited
how we see fit and then placed in Microsoft's XACT program where they can be collected and remade into
XWB files. XWB files work hand in hand with the XSB file.
XSB - XactSoundBank file that is responsible for the cueing of the .wav files located in the XWB file.
There are no present tools to edit these files, however it is possible to generate new XSB files with the
XACT program mentioned above. -
XSB contains infos/commands, when and how to play the wavs. There are 4 types of such commands:
A track contains a "link" to ONE wave and events. The simplest case is: the event "play" followed by a link
to the wavebank (e.g. "MUS 420.xwb") and the wave number in the wavebank.
A sound contains one or more tracks and properties (volume, category...)
A cue contains one or more Sounds and properties (e.g.playing possibility for each sound, crossfading,...)
Usually, each cue has a cuename - so to speak the "interface" between game and .xsb files: the game
calls the XACT engine with the cuename, the XACT engine looks up the .xsb files and plays the cue..
SND - While the research on this file is incomplete, study of this file suggests that it works in tandem with
XWB & XSB files as a secondary cue file. It is worth mentioning that many of these files (despite that we
don't have tools for all of them) often work in tandem with other files.
File Extraction
To extract an FSE file simply place the file in the same folder as the RE4UHD_FSE_Tool.exe and .bat
files. Double click on the FSE_Extract.bat file. Once this is complete you will see that a new folder has
been generated. Inside this new working directory are the aforementioned .txt file and .obj files. We are
now able to edit the parameters in the .txt file and/or edit the locations of the triggerzones in the .obj file.
For more information on this part of the process please see read the ‘Understanding the extracted OBJ
files’ section of the ‘Universal Concepts’ document that is provided with this release.
1 - Sounds of Footsteps
This part of modding the FSE file is fairly straightforward. We simply use a triggerzone to determine which
type of foot step sounds are going to be played when the player walks through the triggerzone. This is an
effective way of creating a more realistic feel, like when we are walking over bricks and then suddenly we
are walking over a wooden floor. The sound's activation are controlled by the FSE triggerzones.
It should be noted that we do not have access to all types of floor sounds with each room. Since every
room is different, there are only certain sounds that are capable of being be triggered for the room we are
working on. For example, if we are modding room r100 there are no metallic floor sounds which we can
trigger with the FSE file. If we wish to add sounds that are not native to a room we must replace one of the
existing floor sounds in the XWB file located in the Resident Evil 4\BIO4\snd \foot\Stx using the UnWXB
tool described at the begging of this tutorial.
There are 4 offsets used in each .txt file that can change the footstep sound:
As the research is not complete we are still unsure of what these 4 offset values actually mean, but we can
simply copy/paste these values from other entries to get instant results. Try to experiment with each file to
see what results you get. Sometimes when we don’t have definitive data all we can do is experiment.
2 – Environmental Sounds
The second function of the FSE file is that which controls the Environmental Sounds which includes wind,
rain, lightning etc. With the FSE tool we can use triggerzones & hte .txt file to either start/stop these sounds
completely or we can use filters to change their overall volume as heard in the game.
It should be noted however again that not all sounds are at our disposal for each room. While the
sounds for the footsteps are located in Resident Evil 4\BIO4\snd \foot\Stx some of the weather sound
files themselves are located in the \Resident Evil 4\BIO4\snd\bio4midi.xwb file. There are other times
when some of the environmental sounds are located in the Resident Evil 4\BIO4\snd \room\ folder so we
have to pay strict attention where the sounds we wish to controll are located.
Even though all the sounds for the environment are inside this file it doesn’t mean that we can simply use
them for any room. For reasons I suspect are linked to scripts in the EXE file, we are only able to trigger
environment sounds that are native to the room we are editing. It seems that the \bio4midi.xwb file sounds
can not be changed.
Above are some of the offsets that control different aspects of an environmental change of sound. In this
example we have a triggerzone that stops the sounds of certain weather when the player walks through the
triggerzone. This type is useful for scenarios where the player is walking outside from inside a building. In
this example we have the file cancelling the Rain & Wind while preserving the sound of the lightning. The 4
rows of offsets that are seen in red (Offset[68] - Offset[71] are of particular interest as these are the
values that determine which environment sound is affected ,and by how it is affected. I have found
varying results form copying/pasting these 4 rows of offsets form other entries (or from other files) to see
how this file behaves.
When we are dealing with the starting/cancelling of weather sounds (usually when entering or leaving a
building) there are always 2 sets of triggers that re side by side; one to start the weather sounds, the other
to disable them.
Below are some more examples that were found from different rooms in the game. You can use these as
templates to experiment with depending on the room you are modding:
Cancel Rain
ID = 0x203
Index = 0x81
Offset[4..7] = 0x8
Offset[20] = 0x1
Offset[21] = 0x1
FootStepZoneHeightBoundary1 = 187.560303
FootStepZoneHeightBoundary2 = 1000.000000
UnknownValue = 500.000000
FootStepZoneCorner0_X = -941.808594
FootStepZoneCorner0_Y = 65722.765625
FootStepZoneCorner1_X = 774.109375
FootStepZoneCorner1_Y = 65804.812500
FootStepZoneCorner2_X = 806.206970
FootStepZoneCorner2_Y = 61914.164063
FootStepZoneCorner3_X = -718.148376
FootStepZoneCorner3_Y = 61870.023438
Offset[68] = 0x1
Offset[69] = 0x1
Offset[70] = 0x1 (0xYY is filter for rain) lower the value = stronger filter
Offset[71] = 0x0
Offset[72..75] = 0x258
Offset[76..79] = 0x….
Restart Rain
ID = 0x203
Index = 0x80
Offset[4..7] = 0x8
Offset[20] = 0x1
Offset[21] = 0x1
FootStepZoneHeightBoundary1 = 111.498497
FootStepZoneHeightBoundary2 = 1000.000000
UnknownValue = 500.000000
FootStepZoneCorner0_X = -7789.617188
FootStepZoneCorner0_Y = 65299.503906
FootStepZoneCorner1_X = -4801.250000
FootStepZoneCorner1_Y = 65727.218750
FootStepZoneCorner2_X = -5091.085938
FootStepZoneCorner2_Y = 61820.796875
FootStepZoneCorner3_X = -8068.593750
FootStepZoneCorner3_Y = 62232.222656
Offset[68] = 0x1
Offset[69] = 0x0
Offset[70] = 0x0
Offset[71] = 0x0
Offset[72..75] = 0x64
Offset[76..79] = 0x0
Offset[80..83] = 0x….
The above examples were taken from various rooms that had environmental changes. Feel free to
experiment with these examples and try to find new ones from other rooms on your own.
The following FSE entry will generate a song (in some rooms) when entering the triggerzone
NOTE* Offset[80..83] = determines which song file plays (see full list below for file names)
# Entry 5 Data
# starts music
ID = 0x203
Index = 0x82
Offset[4..7] = 0x8
Offset[20] = 0x1
Offset[21] = 0x1
FootStepZoneHeightBoundary1 = -0.001831
FootStepZoneHeightBoundary2 = 1000.000000
UnknownValue = 500.000000
FootStepZoneCorner0_X = -13879.056641
FootStepZoneCorner0_Y = 17291.673828
FootStepZoneCorner1_X = -12603.895508
FootStepZoneCorner1_Y = 16900.998047
FootStepZoneCorner2_X = -13556.769531
FootStepZoneCorner2_Y = 14822.679688
FootStepZoneCorner3_X = -14687.317383
FootStepZoneCorner3_Y = 15348.590820
Offset[68] = 0x10
Offset[69] = 0x10
Offset[70] = 0x0
Offset[71] = 0x0
Offset[72..75] = 0x0
Offset[76..79] = 0x0
Offset[80..83] = 0x190000 (song id)
Offset[84..87] = 0x0
Offset[88..91] = 0x0
Offset[92..95] = 0x0
Offset[96..99] = 0x0
Offset[100..103] = 0x0
Offset[104..107] = 0x0
Offset[108..111] = 0x0
Offset[112..115] = 0x0
Offset[116..119] = 0x0
Offset[120..123] = 0x0
Offset[124..127] = 0x0
Offset[128..131] = 0x0
# Entry 6 Data -0
# ends music
ID = 0x203
Index = 0x6
Offset[4..7] = 0x8
Offset[20] = 0x1
Offset[21] = 0x1
FootStepZoneHeightBoundary1 = -8500.002930
FootStepZoneHeightBoundary2 = 1000.000000
UnknownValue = 500.000000
FootStepZoneCorner0_X = 22277.080078
FootStepZoneCorner0_Y = 40427.246094
FootStepZoneCorner1_X = 23908.900391
FootStepZoneCorner1_Y = 40301.847656
FootStepZoneCorner2_X = 23893.089844
FootStepZoneCorner2_Y = 37561.863281
FootStepZoneCorner3_X = 22210.984375
FootStepZoneCorner3_Y = 37535.929688
Offset[68] = 0x10
Offset[69] = 0x0
Offset[70] = 0x0
Offset[71] = 0x0
Offset[72..75] = 0x0
Offset[76..79] = 0x0
Offset[80..83] = 0x280000 (song ID)
Offset[84..87] = 0x190 (fade time)
Offset[88..91] = 0x0
Offset[92..95] = 0x0
Offset[96..99] = 0x0
Offset[100..103] = 0x0
Offset[104..107] = 0x0
Offset[108..111] = 0x0
Offset[112..115] = 0x0
Offset[116..119] = 0x0
Offset[120..123] = 0x0
Offset[124..127] = 0x0
Offset[128..131] = 0x0
0x10000 - 00000001.wav
0x20000 - 00000001.wav (Same as above)
0x30000 - 00000002.wav
0x40000 - 00000003.wav
0x50000 - 00000004.wav
0x60000 - 00000005.wav
0x70000 - 00000006.wav
0x80000 - 00000007.wav
0x90000 - 00000008.wav
0xA0000 - 00000009.wav (r11d camp)
0xB0000 - 0000000a.wav
0xC0000 - 0000000b.wav
0xD0000 - 0000000c.wav
0xE0000 - 0000000d.wav
0xF0000 - 0000000e.wav
0x100000 - 0000000f.wav
0x110000 - 00000010.wav
0x120000 - 00000011.wav
0x130000 - 00000012.wav use for r204
0x140000 - 00000013.wav
0x150000 - 00000014.wav (beginging of r11d)
0x160000 - 00000015.wav (beginging of r11d) same music as file above
0x170000 - 0000000f.wav (same as 0x100000)
0x180000 - 00000015.wav (r11d)
0x190000 = 00000017.wav - merhcant music
0x1A0000 = 00000018.wav
0x1B0000 = 00000019.wav
0x1C0000 = 0000001a.wav
0x1D0000 = 0000001b.wav (typewriter music)
0x1E0000 = 0000001c .wav
0x1F0000 = 0000001d.wav
0x200000 - 0000001e.wav
0x210000 - 0000001f.wav
0x220000 - 00000020.wav
0x230000 - 00000021.wav
0x240000 - 00000022.wav
0x250000 - 00000023.wav
0x260000 - 00000024.wav
0x270000 - 00000025.wav (island)
0x280000 - 00000026.wav (regenrators r30d)
0x290000 - 00000027.wav (regenrators r30d) same song as above
0x2A0000 - 00000028.wav
0x2B0000 - 00000029.wav
0x2C0000 - 0000002a.wav
0x2D0000 - 0000002b.wav
0x2E0000 - 0000002c.wav
0x2F0000 - unknown?
0x300000 - 0000002d.wav
0x310000 - 0000002e.wav
0x320000 - 0000002f.wav (shooting gallery r22c)
0x330000 - 00000030.wav (short intro drone r11d opening)
0x340000 - 00000031.wav (short intro drone)
0x350000 - 00000032.wav
0x360000 - 00000033.wav
0x370000 - 00000034.wav (Mercs Menu)
0x380000 - 00000035.wav
0x390000 - 00000036.wav
0x3A0000 - 00000037.wav (Mercs score)
0x3B0000 - 00000038.wav
0x3C0000 - 00000039.wav (Assinement Ada menu)
0x3D0000 - 0000003a.wav (Wesker Mercs)
0x3E0000 - 0000003b.wav (shooting gallery)?
0x3F0000 - 0000003c.wav (Leon Mercs)
0x400000 - 0000003d.wav (Ada Mercs)
0x410000 - 0000003e.wav (Krauser Mercs)
0x420000 - 0000003f.wav (Hunk Mercs)
0x430000 - 00000040.wav (Separate Ways menu)
0x440000 - 00000041.wav (short intro drone)
0x450000 - 00000042.wav (Assignment Ada 1)
0x460000 - 00000043.wav
0x470000 - 00000044.wav
0x480000 - 00000045.wav
0x490000 - 00000046.wav
0x4A0000 - 00000047.wav
0x4B0000 - 00000048.wav
0x4C0000 - 00000049.wav
0x4D0000 - 0000004a.wav
0x4E0000 - 0000004b.wav
0x4F0000 - 0000004c.wav
0x500000 - 0000004d.wav
It is important to know also that we can have multiple songs in the same room, but we should be careful how
we place our triggerzones to start/stop these so that the music does not overlap (unless we wish to make sone
kind of unique composition.. we could trigger drums to play and htne walk to another area to trigger the
bassline)XD !
In any case, if we have a triggerzone that stars the music and want to use another song for a different area of
the room, we should then also have a triggerzone to stop the first song before trigger the next song.
I am usnure why we cant add msuic to all rooms, and this may be ebcuase of somethign we have not
discovered yet. I will continue my research in hopes to shed more light on this part of the game.
Although this file does handle the coordinates of these sound sources it does not itself contain any of the
sound files, nor does it allow us to create new instances of sounds. We are basically stuck with what the
room has allotted to it, meaning that if the room file does not already have ESE sources we cant add them.
This file actually really only handles the coordinates of the sounds that are already embedded in one of the
aforementioned sound files, (either the SND file or the XSB). While the research on sound files is still
inconclusive my guess is that the data flow of sounds is something like this:
Below we have an example of the entry for r101 which contains two static sounds; fire and flies.
ID = 0x3
Index = 0x1
Position_X = -4592.437988
Position_Y = -12622.872070
Position_Z = 1563.218384
Offset[16..19] = 0x6
Type = 0x57 (FIRE)
Offset[24..27] = 0x0
Offset[28..31] = 0x10000
Offset[32..33] = 0x0
Offset[34..35] = 0x0
Offset[36..39] = 0x0
Offset[40..43] = 0x0
ID = 0x3
Index = 0x2
Position_X = 528.330811
Position_Y = 14211.007813
Position_Z = 1811.329102
Offset[16..19] = 0x6
Type = 0x5A (FLIES)
Offset[24..27] = 0x0
Offset[28..31] = 0x10000
Offset[32..33] = 0x0
Offset[34..35] = 0x0
Offset[36..39] = 0x0
Offset[40..43] = 0x0
What would be needed to add new sound cues would require either a working XSB tool or a SND tool (or
both). It is one of these files (or both) that provide the ‘cues’ that are called on by the ESE. Without these
tools we are limited to how many cues already exist in those files. We can create new XSB files with cues
in the XACT program, but how they relate to the SND file is still unknown.
Please note the .obj file function as described in the in the 'Universal Concepts' guide does not fucntion
with this tool, therefore we msut use the .txt file to input the coordinates. The .obj file that is generated is
for refference only.
If we want to add a different static sound that exists in another room we do have the option to use the ESE
entry from another room and then use the SND file from that room to go with it. For example, if we wanted
to put the fire sound in a room that originally had no fire we would have to:
1 - Copy the SND file from a room that does the fire sound and rename the copied SND file to the name of
the room file we want to put it in (for this example we are going to be moving the sound to room r21b so we
need to:
Rename r400_46.SND to r21b_42.SND (we rename it to the same udas index number as the room we are
moving it to…in this example the r400 SND file is # _46 but in r21b the SND is file #_42)
2 – Extract the original ESE (in this case r400_21.ESE and observe the entries)
3 – Paste entries into extracted r21b_21.ESE .txt file (or use r400_21.ESE and rename as above in step 1)
4 – change coordinates to where we want the sound to be using .txt file (.obj doesnt work with this tool)
5 – repack ESE
We also have the option of actually editing the room sound wav files if we wish. For example if we had fire
in our room, but wanted a rushing river sound instead we could simply edit the XWB file with the UnXWB
tools and replace the fire sound with rushing river .wav file. Doing things this way allows us to skip
replacing SND files and copying/pasting ESE entries from other rooms. Either way works.
What would be good (and something I have not done yet) would be to search & find the room in RE4UHD
that has the MOST STATIC sounds and MOST ENTRIES (that is to say the most diverse set of sounds
and the most cues) and use this as the master file that we would use in all rooms (using the methods
described above). This way we would always have the most cues at our disposal.
This concludes the FSE & ESE tutorial. I am deeply saddened that there are not more sound tools at our
disposal at this time. We can only hope that in the future there will be more dedicated modders who will
take the time to research the files & develop tools for these complicated sets of files that work together.
Happy Modding!
Mr.Curious
12 - 2018
https://www.youtube.com/user/kalamalkakid/
http://residentevilmodding.boards.net/user/5592