I thought I’d share brief insights what goes into the data organization side of the project ![]()
This level of detail isn’t necessary to get something running. When I talk about preservation, this is what I’m referring to.
A Brief Background
All sound effects in RS are synthesized by the client. We can thank Andrew Gower for this cool audio system!
Songs and jingles are handled by a different format, midi.
Sound effects get created using an in-house sound editor called JagFx. It saves files with the .synth extension.
These sound effects are quite low-fidelity, limited to mono-channel 8-bit playback with a 22050 kHz sample rate. There is a noticeable noise floor and if you listen closely you’ll hear that classic white noise.
Here’s a screenshot of JagFx shared by Ian Gower:
Fun fact, OSRS has recently decided to improve their audio fidelity moving to 16-bit. You can read more about it on their Behind the Scenes post.
RS3 has a more traditional audio system where they use ogg/vorbis files. This takes up much more space, but gives them much more freedom as a tradeoff.
Communication
The game’s network protocol tells the client to do things, for example when it wants to do something like “play the sound cow_death one time after 20 cycles pass” it will send something like “1A 00 03 00 01 00 14” over the wire. Notice that it didn’t use the sound name anywhere in there.
The packing tools assign a numeric identifier and the server sends this identifier to the client.
It would seem there’s no way to tell what is what without listening to each one and giving them our own names. That’s what RSPS people have done for 20 years…
Numbers to Names
When I unpack the cache to work with it, I’m left with thousands of files that only have that numeric identifier to go by. Lots of work to do manually.
But, a couple times now OSRS developers have published extra debug data in their game cache that we can datamine.
In 2021 there was an enum containing the names of all sound effects, and in 2025 there was a dbtable containing the filesystem paths of all sound effects.
Maybe we can cross-compare and adapt those for our use!
Big caveat, the numeric IDs between RS2 and OSRS do not match, but plenty of the files are still the same, and there are other patterns you can derive to further refine it.
Like, in early RS2 the sound pack file has an ID order and then a pack order. The pack order matches how it looked on their filesystem, so sounds are grouped by folder and roughly comparable to OSRS, even when IDs are unrecognizable.
Now we can begin matching Numbers to Names…
- I made a checksum lookup table of each OSRS synth file to its name, using data from 2021 OSRS
- I made a checksum lookup table of each RS2 synth file and matched all the ones that were unchanged
- I manually identified all of the files that had duplicates, referencing the pack order i.e.
bamboodoor_closeandbamboo_door_close, these are two separate .synth files with unique IDs but the same contents - I reorganized all files to their known OSRS folder
I automated renaming as much as possible by writing scripts to process the data.
Results
I did this process for revision 377 today! 2502/2727 named so far.
There were 56 duplicate crcs (x2 - 112 files to resolve and rename) and then 200 more unmatched files. I’m working on identifying the last 200 and organizing them into the correct folders.
I can already see some folders are different in RS2 and OSRS based on their grouping in the pack order, so I will have to derive what they might’ve looked like.
