Page 1 of 1
Game Extractor
Posted: Mon Jun 16, 2014 5:07 am
by Xfing
I have stumbled across this potentially very useful tool:
http://www.watto.org/extract/info.html
I heard it can open S.11 and S.22 archives. Which (I hope) means it's possible to add files into them. However, I've had trouble running the software, as it gives me the runtime error '13 - type mismatch upon running. I don't know what could cause this - also, the full version is needed to actually save edited archives, and it costs 5 bucks - too much to spend if the program ain't working. Please check out the program and see if you can run it yourselves if you don't mind.
Re: Game Extractor
Posted: Mon Jun 16, 2014 12:30 pm
by CDN_Merlin
I'll try that tonight from home.
Re: Game Extractor
Posted: Mon Jun 16, 2014 3:05 pm
by CDN_Merlin
I just tried it and it launched but then I get a full screen window of blankness.
Win 7 64bit.
Re: Game Extractor
Posted: Mon Jun 16, 2014 3:54 pm
by Xfing
I have the Vista 32 bit that came with my laptop. Only the first service pack, though, apparently.
Re: Game Extractor
Posted: Tue Jun 17, 2014 9:48 am
by Jeff250
The format looks simple enough. If you run the attached code from the descent2 directory, it will read in "descent2.s22", extract its contents to "descent2.s22_FILES", then append to it a new entry named "test" (re)using the raw audio from the extracted "descent2.s22_FILES/exlife.raw" file, saving the resulting *.s22 to "new.s22".
See example_usage() to see how to script this.
Re: Game Extractor
Posted: Mon Jun 30, 2014 4:17 am
by Xfing
Jeff250 wrote:The format looks simple enough. If you run the attached code from the descent2 directory, it will read in "descent2.s22", extract its contents to "descent2.s22_FILES", then append to it a new entry named "test" (re)using the raw audio from the extracted "descent2.s22_FILES/exlife.raw" file, saving the resulting *.s22 to "new.s22".
See example_usage() to see how to script this.
Whoa man, this looks like THE solution. However, I'm a complete Python noob, I'm not even sure what environment to run the code in, or how to do it in the first place. Is Total Commander fine?
EDIT: Also, you have to keep in mind that the SXX archives have a flag-based structure that Descent2.HAM makes links to. There are 252 flags and over 60 of them vacant, so introducing ~30 more sound files into the archive should be no problem, but you would have to keep in mind to assign the new sound files to "unused" flags. If you could perform the operation yourself, I could provide you the files you need, both in their original 11khz forms and improved and remastered (where necessary) 22khz forms.
Re: Game Extractor
Posted: Mon Jun 30, 2014 9:41 am
by Jeff250
Xfing wrote:Whoa man, this looks like THE solution. However, I'm a complete Python noob, I'm not even sure what environment to run the code in, or how to do it in the first place. Is Total Commander fine?
On Windows, it looks like you can just copy the script (remembering to remove the *.txt from its name) to the descent2 directory (or any directory with the *.sxx files) and just double click it in Windows Explorer. (If you haven't, you'll need to first install the latest version of python 2!) It looks like Windows closes the window as soon as it's done running, so doing it this way you won't be able to see any possible printed error output, but it looks like if you right-click and select "Edit with IDLE", then you'll get an editor where you can hit F5 to run the file and see all the printed output.
Xfing wrote:EDIT: Also, you have to keep in mind that the SXX archives have a flag-based structure that Descent2.HAM makes links to. There are 252 flags and over 60 of them vacant, so introducing ~30 more sound files into the archive should be no problem, but you would have to keep in mind to assign the new sound files to "unused" flags.
252? Is that because of the 4 sounds (252 + 4 == 256) in the vertigo ham?
As far as I can tell, there are no flags in the *.sxx files (although each sound has an up-to-8 character name), so I suspect that these flags are really just the order that the sounds appear in the *.sxx files. My script preserves the order of the original sounds in the *.sxx read in, and so every time you call add_from_path(), this should just assign that sound to the next unused "flag."
Xfing wrote:If you could perform the operation yourself, I could provide you the files you need, both in their original 11khz forms and improved and remastered (where necessary) 22khz forms.
I don't think you'll need to really understand python to do this, but any that you pick up along the way will be a bonus.
To add your own sounds, you'll just need to edit the example usage and follow a basic template like this:
Code: Select all
def example_usage():
s11 = read_from_path('descent2.s11')
s11.add_from_path('mysnd1', 'mysnd1-11.raw')
s11.add_from_path('mysnd2', 'mysnd2-11.raw')
s11.write_to_path('new.s11')
s22 = read_from_path('descent2.s22')
s22.add_from_path('mysnd1', 'mysnd1-22.raw')
s22.add_from_path('mysnd2', 'mysnd2-22.raw')
s22.write_to_path('new.s22')
Re: Game Extractor
Posted: Mon Jun 30, 2014 6:05 pm
by Xfing
The 252 part was a simple misclick, of course I meant 255. But in Haxmed32 you can only see sound flags up til 253, since the final two are presumably vacant.
Ok, as for the script: I ran it using IDLE and here's what it says:
Traceback (most recent call last):
File "C:\Gry\Descent\Descent 2\sxx.py", line 101, in <module>
example_usage()
File "C:\Gry\Descent\Descent 2\sxx.py", line 91, in example_usage
s11 = read_from_path('descent2.s11')
File "C:\Gry\Descent\Descent 2\sxx.py", line 88, in read_from_path
return read(buf)
File "C:\Gry\Descent\Descent 2\sxx.py", line 69, in read
raise SXXException('File not a Descent sound file')
SXXException: File not a Descent sound file
I'm positive the files are unaltered from their original form here (not that it should cause the error in the first place). I'll try and mess with it a bit more and see what's wrong.
Re: Game Extractor
Posted: Mon Jun 30, 2014 7:54 pm
by Jeff250
Hmmm, I have no idea. Can you post your *.s11 and *.s22 files somewhere? (Or I could pm you my email address.)
edit: Oh, you're probably using python3, not python2, right? Why don't I take a moment to make it python3-compatible...
edit2: OK, this should work.
Re: Game Extractor
Posted: Tue Jul 01, 2014 5:34 am
by Xfing
And it worked! That was it. I've got them files extracted. Thanks a lot!
Now tell me what code I'll need to change to repackage the folders along with new files into new SXX files. I'll try to incorporate the D1 files into the archive. Also, do they need to be in RAW format? I'd need to convert them.
Ok, when trying to do the second opertaion, I'm getting an error like this:
Traceback (most recent call last):
File "C:\Gry\Descent\Descent 2\sxx.py", line 117, in <module>
example_usage()
File "C:\Gry\Descent\Descent 2\sxx.py", line 93, in example_usage
s11.add_from_path('descent2.s11_FILES', 'APDOOR.raw')
File "C:\Gry\Descent\Descent 2\sxx.py", line 23, in add_from_path
with open(path, 'rb') as f:
FileNotFoundError: [Errno 2] No such file or directory: 'APDOOR.raw'
My def example_usage looks like this:
def example_usage():
s11 = read_from_path('descent2.s11')
s11.add_from_path('descent2.s11_FILES', 'APDOOR.raw')
s11.add_from_path('descent2.s11_FILES', 'boss01.raw')
s11.add_from_path('descent2.s11_FILES', 'door02.raw')
s11.add_from_path('descent2.s11_FILES', 'door1c.raw')
s11.add_from_path('descent2.s11_FILES', 'door1o.raw')
s11.add_from_path('descent2.s11_FILES', 'door2c.raw')
s11.add_from_path('descent2.s11_FILES', 'door2o.raw')
s11.add_from_path('descent2.s11_FILES', 'door3c.raw')
s11.add_from_path('descent2.s11_FILES', 'door3o.raw')
s11.add_from_path('descent2.s11_FILES', 'door4c.raw')
s11.add_from_path('descent2.s11_FILES', 'door40.raw')
s11.add_from_path('descent2.s11_FILES', 'fan01.raw')
s11.add_from_path('descent2.s11_FILES', 'laser13.raw')
s11.add_from_path('descent2.s11_FILES', 'robot02.raw')
s11.add_from_path('descent2.s11_FILES', 'robot09.raw')
s11.add_from_path('descent2.s11_FILES', 'robot11.raw')
s11.add_from_path('descent2.s11_FILES', 'robot14.raw')
s11.add_from_path('descent2.s11_FILES', 'robot27.raw')
s11.add_from_path('descent2.s11_FILES', 'robot34.raw')
s11.add_from_path('descent2.s11_FILES', 'robot36.raw')
s11.add_from_path('descent2.s11_FILES', 'tear02.raw')
s11.write_to_path('new.s11')
Would you mind telling me what's wrong with the code?
Re: Game Extractor
Posted: Tue Jul 01, 2014 9:25 am
by Jeff250
I probably should have explained this more.
The first argument is the "name" of the sound that gets stored in the *.sxx. I don't really know what Descent uses this for, but it should be no more than 8 characters, and to be safe, it should probably be unique and you should probably use the same name for each sound in the *.s22 as in the *.s11. So for boss01.raw, a good name would be "boss01".
The second argument is the full path to the sound. So if "APDOOR.raw" is in the "descent2.s11_FILES" directory, you probably want to say
Code: Select all
s11.add_from_path('apdoor', 'descent2.s11_FILES/APDOOR.raw')
xfing wrote:Also, do they need to be in RAW format?
Yep, they need to be raw audio in the correct format (8-bit unsigned mono, if I recall correctly) already.
Re: Game Extractor
Posted: Tue Jul 01, 2014 12:13 pm
by Xfing
Ok, I've streamlined the code to fit your guidelines. Now there is no error message, but the script cannot initiate. I get this:
Python 3.3.0 (v3.3.0:bd8afb90ebf2, Sep 29 2012, 10:55:48) [MSC v.1600 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> ================================ RESTART ================================
>>>
>>>
And this is where it ends. I wonder what might be up.
On the other hand, when run normally as executable it did yield a new .S11 file for me. Yay! I'm gonna test it and see if it was improved. However, an analogous .S22 file was also created, even though there is no code specified for the .S22 file. I would like to insert different files into that one, obviously. So, do I just repeat the process with .S22 and simply select the file while keeping the earlier .S11 one? DTX2 apparently creates S11 files on the go from S22 files by doing the conversion on its own, I'm not sure about that, though.
EDIT: Ok, tested the file in DTX2 and it's no good. The editor doesn't see the new files, they would probably need to be structured and named within the archive, that's why I was hoping to get that editor to work... The only change that I can see in the new S22 file is that a single (unknown sound) has appeared in the "Others" tab, that sound being the one you get when you obtain an Extra Life. So it IS possible to insert the files, but just inserting them isn't enough, they need to be structured internally, which you can't do without an editor. Or maybe it's just that the format isn't good? I'll try and see with some other files taken out of the archive and renamed, if they don't appear either, it's the fault of the file format.
EDIT2: Yep, that was it. I inserted an old file disguised as a new one and it did appear in the "Others" tab. So for now I just need to check the audio properties of the files and make sure my new sounds are saved with appropriate parameters. I wonder if CoolEdit will do the job?
EDIT3: Ok, so it turns out I was completely wrong and the file was correct in the first place. Duh! I just needed to select the .S11 file as the main sound file, not the .S22 one which doesn't exist yet. Heh. Sorry about all the edits, I'm making an ass of myself with my impatience
So provided the SXX files are indeed fine, I'll need to find a way for HAXMED32 to be able to search out and interpret these new sounds, so that I can assign them to D1 robots and doors. And THAT might be the tricky part.
Re: Game Extractor
Posted: Tue Jul 01, 2014 1:26 pm
by Xfing
Ok, my fear has been confirmed. The files are in the archive, they get recognized by DTX2, but as I thought, these files are "lost" to Haxmed32.
As I mentioned earlier, Haxmed32 uses sound flags and sound objects. - you can assign the objects to the flags, and the flags themselves are used in determining what the sounds will be used for (robot actions, doors etc) There are 253 visible flags as well as sound objects from 1 to 255, but some of them will be hidden, like shown in the picture below, where 243 is missing.
For example, the sound flag Element #29 is labeled "thief death roll noise" and is assigned the sound "thief death roll noise (29). But for example "Element #90 is called "<Unnamed Sounds_2 element #90>" and has assigned to it the sound "<None> (255). There are over 60 sound flags with the "Unnamed Sounds" designation, and to each of them an object could be assigned, like the sound files we inserted into the .S22 archive. The sound objects which are not on the list can be chosen manually, as seen below:
Now my question is, do you think the sounds we inserted into the .S22 have taken some of the <Unnamed Sounds> spots? Haxmed32 doesn't offer the ability to rename the objects nor the flags themselves when tinkering with the main HAM. Likewise, you cannot use the "add" or "insert" options either, as you'll get an error message saying "Deleting from DESCENT2.HAM is not supported!". Who's deleting? come on...
So what can be done at this stage? Should I manually check every sound element that isn't on the list? The editor doesn't allow you to create new flags within Descent2.HAM (in fact it had to be hacked to let you alter the existing values in Descent2.HAM in the first place), but the sound elements taken directly from the .S22 file shouldn't be an issue, because there are no more to select from anyway and there is not even a hint of an option to add them.
EDIT:
Turns out the "flags" and the "objects" are one thing. Those which are vacant can be occupied by assigning to them others. But to introduce a completely new sound, a new object would have to be created or one of the existing ones altered. The latter (or a functional equivalent thereof) can be done more easily simply by replacing files in DTX2, which comes at the cost of existing sounds. However, the former is beyond the scopeof Haxmed32 as it requires to edit the place within Descent.S22 from where the HAM file acquires the sound file. There is no way I can think of to do that
Re: Game Extractor
Posted: Tue Jul 01, 2014 4:00 pm
by Jeff250
Yeah, just use one of the unused sound elements. It looks like these elements' sound numbers are really just the ordinal position of their sounds in the *.sxx file (despite what haxmedit would lead you to believe). So to have one of the unused sound elements point to your first added sound, just manually type in 183, and to have one point to your second added sound, just manually type in 184, etc. (Note that 182 refers to "squake", which is normally the last sound in the *.sxx files.)
Re: Game Extractor
Posted: Wed Jul 02, 2014 3:12 am
by Xfing
Jeff250 wrote:Yeah, just use one of the unused sound elements. It looks like these elements' sound numbers are really just the ordinal position of their sounds in the *.sxx file (despite what haxmedit would lead you to believe). So to have one of the unused sound elements point to your first added sound, just manually type in 183, and to have one point to your second added sound, just manually type in 184, etc. (Note that 182 refers to "squake", which is normally the last sound in the *.sxx files.)
Oh. Interesting, I might try that. I checked earlier vacant files such as 78, 79, 87, 88 and several more, and they didn't carry any sound at all, so I assumed none of them would and gave up. I didn't check out those you wrote, though, so might do that.
EDIT: 183 and 184 are actually taken. The first empty file there is 189, and 190 is taken too. There is a big gap of unused sounds between 211 and 219 though, I'll check those out and let you know if that's the new sounds.
EDIT2: Nope, it's all as I feared - none of the empty sounds contain any sound file, they're all empty. 189, 190 etc and even 252 and 253. I assigned them to one kind of door to check it, but no matter which one I choose, the door plays no sound.
Re: Game Extractor
Posted: Wed Jul 02, 2014 9:01 am
by Jeff250
I don't think you understand what I'm suggesting. If sound element #78 is unused, then
1) Set (e.g.) a door to use sound element 78.
2) Then edit sound element 78 and change its sound from 255 to (e.g.) 183.
Manually type the numbers in in either step if necessary. During step 2, ignore haxmedit's textual descriptions of the numbers, as they are all wrong, since these are really ordinal positions in the *.sxx files.
Re: Game Extractor
Posted: Wed Jul 02, 2014 1:04 pm
by Xfing
Jeff250 wrote:I don't think you understand what I'm suggesting. If sound element #78 is unused, then
1) Set (e.g.) a door to use sound element 78.
2) Then edit sound element 78 and change its sound from 255 to (e.g.) 183.
Manually type the numbers in in either step if necessary. During step 2, ignore haxmedit's textual descriptions of the numbers, as they are all wrong, since these are really ordinal positions in the *.sxx files.
Hmm... but the sounds do really represent what the labels suggest. In the tab Sounds_2 at least. In Sounds_1 they indeed don't, but when you look at the objects such as robots, they apparently have sounds from Sounds_2 assigned to them, as the descriptions do generally match what they're supposed to be.
Anyway, I'll try to do what you said and let you know if it worked. I'll try Sounds_2 at first.
EDIT: ★■◆●! It worked
But the key was to dig around in Sounds_1 rather than Sounds_2, after all. I checked 78 and 79 and assigned to them 183 and 184, which turned out to be the files apdoor.raw and boss01.raw, so I think it's safe to assume these things are simply going to follow alphabetically.
All I need to do now is to remake the HAM file. I'll need to start with a fresh one, as I can't keep track of all the changes I made to the sounds in the current one, based on the SXX files where I replaced certain sounds with others (so for example "Red has got the flag" is now the cry of the Class 2 Drone. Now this will no longer need to be the case, I'll be able to start with a fresh HAM file and simply account for the new sounds within the HAM itself.
Thank you, Jeff, your help has been invaluable.
Re: Game Extractor
Posted: Wed Jul 02, 2014 2:07 pm
by Jeff250
Xfing wrote:In Sounds_1 they indeed don't, but when you look at the objects such as robots, they apparently have sounds from Sounds_2 assigned to them, as the descriptions do generally match what they're supposed to be.
Oh, I didn't look at Sounds_2. I think these are the low memory sounds that are used when you use the "-lowmem" command line argument. They look like they just point into Sounds_1, so I think when you have an unused entry in Sounds_1 like 78 point to 183, then you should just have the corresponding #78 entry in Sounds_2 entry just point to 78 (not 183), as it looks like most entries in Sounds_2 just point back to their own number.
Xfing wrote:I checked 78 and 79 and assigned to them 183 and 184, which turned out to be the files apdoor.raw and boss01.raw, so I think it's safe to assume these things are simply going to follow alphabetically.
It's actually the order that you added them in example_usage(), which just happens to be alphabetical (at least, according to what you copied and pasted earlier).
Xfing wrote:Thank you, Jeff, your help has been invaluable.
No problem!
Re: Game Extractor
Posted: Wed Jul 02, 2014 2:14 pm
by Xfing
I'll be making a new thread posting the new .SXX files and Descent2.HAM when I'm done with the work. Which should be later today.
I'll make a version of the HAM file where only the sounds are accounted for, so it doesn't alter the gameplay.
Re: Game Extractor
Posted: Wed Jul 02, 2014 2:53 pm
by Xfing
Funny piece of trivia.
I also added in the old fan sound, and while all the other files appeared in the "Other" tab in DTX2, this one got set neatly where it belongs.
Must have been axed last minute by the developers, but its slot seems to have remained. It fit itself in the hole that it was ripped out of, apparently. Haha.
Re: Game Extractor
Posted: Wed Jul 02, 2014 5:59 pm
by Xfing
A new emergency, Jeff!
I'm almost done with the file. Everything is set to be identical to D1, but I've hit one little snag. Namely, the sound file for the plasma driller apparently failed to load. "robot27.raw". It should occupy sound object #200, but this object apparently is the "Cheater!" sound. And indeed, the robot goes on saying "Cheater" all the time now. What is weird, numbers 198, 199 as well as 201-203 all work fine, as they should. Should I just keep checking other elements until I stumble upon the right one?
EDIT: Never mind, I just assigned sound object #200 directly to the driller rather than to a vacant sound flag, which would later be assigned to the driller. Fixed it now. It's exactly 2 AM so I'm pretty dizzy already. Anyway, I'll be uploading the patch soon.
EDIT 2: The file is already done, check the new thread in the "Descent Development" section. Also, I've got a question: how to change ambient sounds, i.e. those used by textures? Creating a flag is no problem (I've in fact created one for the D1 fan sound), but what object to assign it to?
Re: Game Extractor
Posted: Wed Jul 02, 2014 6:09 pm
by Jeff250
I suspect that you accidentally assigned the plasma driller sound element 200, not the sound element that you assigned sound number 200. Does this make sense? We need better terminology.
edit: As I suspected.
Re: Game Extractor
Posted: Wed Jul 02, 2014 6:46 pm
by Xfing
Thanks!
Also, see if you can find out how to answer my second question, the one about the fan texture sound. I'm not doing anything more today anyway, it's far too late and I'm going to sleep. The thread is actually up now, so you can download the files and see for yourself how they work.
Re: Game Extractor
Posted: Wed Jul 02, 2014 8:11 pm
by Jeff250
Those are eclips. It looks like the fan is eclip #3.
Re: Game Extractor
Posted: Wed Jul 02, 2014 8:29 pm
by Sirius
Xfing wrote:I also added in the old fan sound, and while all the other files appeared in the "Other" tab in DTX2, this one got set neatly where it belongs.
Must have been axed last minute by the developers, but its slot seems to have remained. It fit itself in the hole that it was ripped out of, apparently. Haha.
My guess is it is DTX2 that does this - the categorization it uses is most likely driven by lists that are hard-coded into the program. It wouldn't be that surprising if it uses the same lists for D1 and D2 since presumably there wouldn't be any collisions (i.e. different sound effects in D1 and D2 with the same names).
Re: Game Extractor
Posted: Thu Jul 03, 2014 5:56 am
by Xfing
Ok, another question!
The Descent 1 bosses seem to use three sounds in the first game. The perpetual ticking sound that we all love, the Class 1 Drone sound for seeing the player and the Medium Lifter sound periodically, so I assume it's set to the attacking sound.
However, in Descent 2 things seem to look a bit different. The "see_sound" sound is Class 1 Drone, but the slot meant for the perpetual ticking sound seems to be "attack_sound", analogously to the D2 bosses. The only slot that remains is the "taunt" slot, but all robots have Class 1 Drone set as their default taunt sound and I don't think it actually ever gets used in the game by any of the robots.
So is there a way to assign the three sounds to the boss robots to all of them play like they did in D1? Or do we need to sacrifice one of them?
Re: Game Extractor
Posted: Fri Jul 04, 2014 1:54 am
by Jeff250
I can't help you with this one!
Re: Game Extractor
Posted: Fri Jul 04, 2014 3:25 am
by Xfing
Ok then, I'll have to sit this one out until someone dispels my doubts ;p
Re: Game Extractor
Posted: Wed Aug 05, 2015 1:50 am
by LightWolf
(Yes, IK it's been a year)
Maybe the taunt volume is set to zero...
(maybe Jeff knows how to turn it up)
Re: Game Extractor
Posted: Mon Dec 28, 2015 12:56 pm
by LightWolf
(Yes, IK It's been about 6 months)
Quick thing - I've found the original Class 1 Driller noise, along with a version of the perpetual boss tick with a roar-yawn thing overlaying it, in the Descent II sound files! Just go into DTX2, and play the "Class 1 Driller (silver)" and "Super Hulk ?" noises while in .s11 mode. (Interesting fact - the "Super Hulk ?" noise is the "Boss 1 Dying" that is the default noise in most robots' "Death Roll" slot, including that slot in the Descent II-ized Descent I bosses)
Sadly, this doesn't have the cloaked lifter/heavy driller noise. That was unfortunately replaced with the Sidearm Modula noise.
Re: Game Extractor
Posted: Sun Jan 03, 2016 11:33 am
by Xfing
LightWolf wrote:(Yes, IK It's been about 6 months)
Sadly, this doesn't have the cloaked lifter/heavy driller noise. That was unfortunately replaced with the Sidearm Modula noise.
I think the sound you're referring to is actually in the game. Not sure if I had to add it back in, though. Have you already tried my sound patch? It should account for every single sound there is.