Radio Station Moddification

So, let me start by saying, I've already gotten pretty far in my attempts to make this work myself. It's really the last "impossible 4%" that I'm completely stuck on. So, to go down the list of what I've done, and how I did it.

First off, Gibbed's vpp extractor works just fine for this game, and the vpp's you want to modify start with Music_

Second, extracting the xwb's seems to work best using vgstream (I used the cli version for Linux)

Third, I used ffmpeg to match to wav files and converted them from opus, to a wav file with the same properties as the original result from vgstream

Fourth, I then extracted and adjusted the music.xtbl in misc and misc2 to reflect the new music times with the modded music and repacked them with Gibbed's tools (game loads without issue with these replaced so long as -c and -b is added as a flag)

Fifth, and this is where things start to go wrong, I got ahold of XACT2 and created a new xsb and xwb, but this is where the problems begin. For starters, I have absolutely no idea how they ordered the cue, and it's very clear from the results, they did use some kind of ordering. Then there's the issue of their compression method, only when using XACT3 does the size come close, but given the files are shorter in length compared to most of their songs, something tells me this is wrong, I should end up with a smaller file, not a larger one.

Finally, I compress the stations (I'm modifying K12 so I can play it on stream without concern, so Music_Other2 in this case), and put it into the packfiles folder, and the game boots, all the other stations work, but K12 is now nothing but comercials. Which tells me, the vpp is correct, the game can read it, but it's the xsb and/or xwb that is wrong.

I am at a loss for what to do, as there's SO many options involved with even creating an xsb in the first place, never mind what I might be doing wrong (if I even am) with the xwb, that's creating the problem in the first place. Any help would be appreciated.

Edit:
And for my own record, attached is the order the files show up in, in the original xsb

Code:
976K12_A_TWI_REQ2
976K12_A_YMF_RESPONSE2
976K12_A_YMF_RESPONSE1
976K12_A_YMF_REQ2
976K12_A_YMF_REQ1
976K12_A_YMF_OUTRO2
976K12_A_YMF_OUTRO1
976K12_A_YMF_INTRO2
976K12_A_YMF_INTRO1
976K12_A_TWI_RESPONSE2
976K12_A_TWI_RESPONSE1
976K12_A_TWI_REQ1
976K12_A_TWI_OUTRO2
976K12_A_TWI_OUTRO1
976K12_A_TWI_INTRO2
976K12_A_TWI_INTRO1
976K12_A_QYS_RESPONSE2
976K12_A_QYS_RESPONSE1
976K12_A_QYS_REQ2
976K12_A_QYS_REQ1
976K12_A_QYS_OUTRO2
976K12_A_QYS_OUTRO1
976K12_A_QYS_INTRO2
976K12_A_QYS_INTRO1
976K12_A_ILL_RESPONSE2
976K12_A_ILL_RESPONSE1
976K12_A_ILL_REQ2
976K12_A_ILL_REQ1
976K12_A_ILL_OUTRO2
976K12_A_ILL_OUTRO1
976K12_A_ILL_INTRO2
976K12_A_ILL_INTRO1
TWISTED_PSYCHATRONIX
STYLESOFBEYOND_SUBCULTURE
STRATUS_YOUMUSTFOLLOW
SKYNET_STINGRAY
SKYNET_CATHERINEWHEEL 1
RHYTHMN DIVISION_UZI
KOMABONES_TWISTED STREETS
KOMABONES_QUESTO E SPORCO
ILS_WESTCOAST
ILS_TINY TONY
ILS_ILL LOGIC
FREQNASTY_AMPED
EVILNINE_WEHAVETHEENERGY
DIESELBOYANDKAOS_BARRIERBREAK 1
CARO_MY LITTLE PONY
976K12_WX_SUNNY3
976K12_WX_SUNNY2
976K12_WX_SUNNY1
976K12_WX_STORM3
976K12_WX_STORM2
976K12_WX_STORM1
976K12_WX_PCLOUDY2
976K12_WX_PCLOUDY1
976K12_WX_MED_RAIN3
976K12_WX_MED_RAIN2
976K12_WX_MED_RAIN1
976K12_WX_LT_RAIN3
976K12_WX_LT_RAIN2
976K12_WX_LT_RAIN1
976K12_WX_HVY_RAIN3
976K12_WX_HVY_RAIN2
976K12_WX_HVY_RAIN1
976K12_WX_CLOUDY2
976K12_WX_CLOUDY1
976K12_WX_90
976K12_WX_85
976K12_WX_81
976K12_WX_75
976K12_WX_72
976K12_WX_68
976K12_WX_63
976K12_WX_59
976K12_WX_56
976K12_WX_48
976K12_SWEEPER_9
976K12_SWEEPER_8
976K12_SWEEPER_7
976K12_SWEEPER_6
976K12_SWEEPER_5
976K12_SWEEPER_4
976K12_SWEEPER_3
976K12_SWEEPER_2
976K12_SWEEPER_1
976K12_NEWSTOSS_5
976K12_NEWSTOSS_4
976K12_NEWSTOSS_3
976K12_NEWSTOSS_2
976K12_NEWSTOSS_1
976K12_HELLO_5
976K12_HELLO_4
976K12_HELLO_3
976K12_HELLO_2
976K12_HELLO_1
976K12_GENREQ_24
976K12_GENREQ_23
976K12_GENREQ_22
976K12_GENREQ_21
976K12_GENREQ_20
976K12_GENREQ_19
976K12_GENREQ_18
976K12_GENREQ_17
976K12_GENREQ_16
976K12_GENREQ_15
976K12_GENREQ_14
976K12_GENREQ_13
976K12_GENREQ_12
976K12_GENREQ_11
976K12_GENREQ_10
976K12_GENREQ_8
976K12_GENREQ_7
976K12_GENREQ_6
976K12_GENREQ_5
976K12_GENREQ_4
976K12_GENREQ_3
976K12_GENREQ_2
976K12_GENREQ_1
976K12_C_WHTE_RESPONSE2
976K12_C_WHTE_RESPONSE1
976K12_C_WHTE_REQ2
976K12_C_WHTE_REQ1
976K12_C_WHTE_OUTRO2
976K12_C_WHTE_OUTRO1
976K12_C_WHTE_INTRO2
976K12_C_WHTE_INTRO1
976K12_C_WC_RESPONSE2
976K12_C_WC_RESPONSE1
976K12_C_WC_REQ2
976K12_C_WC_REQ1
976K12_C_WC_OUTRO2
976K12_C_WC_OUTRO1
976K12_C_WC_INTRO2
976K12_C_WC_INTRO1
976K12_C_TT_RESPONSE2
976K12_C_TT_RESPONSE1
976K12_C_TT_REQ2
976K12_C_TT_REQ1
976K12_C_TT_OUTRO2
976K12_C_TT_OUTRO1
976K12_C_TT_INTRO2
976K12_C_TT_INTRO1
976K12_C_TS_RESPONSE2
976K12_C_TS_RESPONSE1
976K12_C_TS_REQ2
976K12_C_TS_REQ1
976K12_C_TS_OUTRO2
976K12_C_TS_OUTRO1
976K12_C_TS_INTRO2
976K12_C_TS_INTRO1
976K12_C_SUB_RESPONSE2
976K12_C_SUB_RESPONSE1
976K12_C_SUB_REQ2
976K12_C_SUB_REQ1
976K12_C_SUB_OUTRO2
976K12_C_SUB_OUTRO1
976K12_C_SUB_INTRO2
976K12_C_SUB_INTRO1
976K12_C_STIN_RESPONSE2
976K12_C_STIN_RESPONSE1
976K12_C_STIN_REQ2
976K12_C_STIN_REQ1
976K12_C_STIN_OUTRO2
976K12_C_STIN_OUTRO1
976K12_C_STIN_INTRO2
976K12_C_STIN_INTRO1
976K12_B_RD_RESPONSE2
976K12_B_RD_RESPONSE1
976K12_B_RD_REQ2
976K12_B_RD_REQ1
976K12_B_RD_OUTRO2
976K12_B_RD_OUTRO1
976K12_B_RD_INTRO2
976K12_B_RD_INTRO1
976K12_B_MLP_RESPONSE2
976K12_B_MLP_RESPONSE1
976K12_B_MLP_REQ2
976K12_B_MLP_REQ1
976K12_B_MLP_OUTRO2
976K12_B_MLP_OUTRO1
976K12_B_MLP_INTRO2
976K12_B_MLP_INTRO1
976K12_B_CW_RESPONSE1
976K12_B_CW_REQ2
976K12_B_CW_REQ1
976K12_B_CW_OUTRO2
976K12_B_CW_OUTRO1
976K12_B_CW_INTRO2
976K12_B_CW_INTRO1
976K12_B_BAR_RESPONSE2
976K12_B_BAR_RESPONSE1
976K12_B_BAR_REQ2
976K12_B_BAR_REQ1
976K12_B_BAR_OUTRO2
976K12_B_BAR_OUTRO1
976K12_B_BAR_INTRO2
976K12_B_BAR_INTRO1
976K12_B_AMP_RESPONSE2
976K12_B_AMP_RESPONSE1
976K12_B_AMP_REQ2
976K12_B_AMP_REQ1
976K12_B_AMP_OUTRO2
976K12_B_AMP_OUTRO1
976K12_B_AMP_INTRO2
976K12_B_AMP_INTRO1

Edit2:
I may have been mislead about needing XACT2, as XACT3 can infact create an xsb, and the file size is where it actually should be, looks like they used 80% quality for the creation of the xwb's.

Edit3:
Next in the list of differences I can't really account for, in my xwb, this is the header
Code:
Hex:
44 4E 42 57 00 00 00 2C 00 00 00 2A 00 00 00 34 00 00 00 60 00 00 00 94 00 00 13 38 00 00 13 CC 00 00 1B E4 00 00 2F B0 00 00 33 40 00 00 68 00 05 01 18 00 00 09 00 01 00 00 00 CD 4D 75 73 69 63 20 4B 31
ASCII:
DNBW...,...*...4...`.......8...Ì...ä../°[email protected]............ÍMusic K1
In Volitions xwb
Code:
I may have been mislead about needing XACT2, as XACT3 can infact create an xsb, and the file size is where it actually should be, looks like they used 80% quality for the creation of the xwb's.

Edit3:
Next in the list of differences I can't really account for, in my xwb, this is the header
[CODE]
Hex:
44 4E 42 57 00 00 00 2C 00 00 00 2A 00 00 00 34 00 00 00 60 00 00 00 94 00 00 13 38 00 00 13 CC 00 00 1B E4 00 00 2F B0 00 00 33 40 00 00 68 00 05 01 18 00 00 09 00 01 00 00 00 CD 4D 75 73 69 63 20 4B 31
ASCII:
DNBW...,...*...4...`.......8...Ì...ä../°[email protected]............ÍMusic K1
In Volitions xwb
Code:
Hex:
44 4E 42 57 00 00 00 27 00 00 00 30 00 00 00 60 00 00 00 90 00 00 13 38 00 00 13 C8 00 00 20 CC 00 00 00 00 00 00 00 00 00 00 38 00 06 3A 30 00 00 08 00 01 00 00 00 CD 4D 75 73 69 63 20 4B 31 32
ASCII:
DNBW...'...0...`.......8...È.. Ì..........8..:0........ÍMusic K12
The difference isn't subtle, and I have no idea where they come from.

Edit4:
After painstakingly recreating the xsb, it needs to be set to ordered to export correctly, but there's still differences that makes it not work, I have no more ideas
 
Last edited:
Not sure if this info will help or not but in Sr2 modding you would just rename any new files to the names of the files you are replacing. The xsb never has to be touched at all.
So - In Theory - you would just start with the original xsb and xwb files then extract and replace the files in the xwb leaving the xsb untouched.
 
Back
Top