Welcome Guest [Log In] [Register]
MMBN Music Modding, Without Sappy!; MMBN music modding without Sappy.
Topic Started: Sep 1 2010, 03:44 PM (2,504 Views)
timaeus222
Member Avatar
The Tech Guy
MMBN Music modding Without Sappy

Offsets we will use or you'll need


An easy way to mod BN2, or any other GBA game's music without using Sappy, for those of you who cannot use it. This guide is specifically for BN2 music modding. The people who can't use it have these problems:

- Can't open game in Sappy
- Can't open Sappy

All those people are NOT using XP. Now if you ARE using XP, you might have these problems:

- Can't preview music in Sappy

Anyways, here's how to test them. Each song has its own Voicegroup, but apparently in BN2, it seems like only the title screen truly has a different voicegroup than the others. The others, use different offsets that point to the same instruments. When Prof. 9 said BN2's music channels cheat, they do xD

Open HxD and your BN2 game in it.

Go to 080EE934. Those point to each voicegroup, if you wanted to edit each song's instruments used.

OR

Go to 080F3898. Those point to the slots for each song in BN2. EX: in BN6 battle modding, 16(hex) is boss battle. If you go to the 11th line, second offset, in 32-bit, that is the 16th song(16 = 22 in decimal, so 11*2 offsets per line = 22).

To test music, simply replace the first offset, title screen, with the others, to see which ones they are. Then you simply listen. Once you find what you want, go there, copy the header and the bytes below, all the way until you see something like:

Values in 32-bit


YYYY = don't pay attention to that.
XXXXXX = part of an offset.
B1 = "end this channel here"
B2 = "loop at the offset right after"

Right after those values is the next song. So, stop there, right after the B1, and copy and paste into a new file. Ctrl+N and paste, Ctrl+V. Don't save it, we'll use it later anyway. It's probably called Untitled-1. REMEMBER THIS FOR LATER!

Next up, making the song audible :P Start with replacing the voicegroup with the new one. EX: If BN6, replace it with 081568BC. Now, you remember this, right?

Values in 32-bit


Let's rip some channels. On BN2, use the pointer offsets, and start highlighting from the actual first offset(If it is 080F6AA0, go to 080F6AA0 and start highlighting at the first value there. NOT starting at A0, 6A, 0F, and 08 >_>), in HxD, and end at where the actual header starts for the current song(the song that we're ripping NOW). It starts with A8140006 or similar. Paste it in the new game and note where you placed it.

Go to a spot where you want your new song's header to be, in your game. Label or make a note if you want. Then paste in the file you made earlier(Unnamed, called Untitled-1 at the moment) in HxD. Afterwards, compare the channel offsets from your game with the ones from BN2. What you do is open calculator, go to scientific mode, and then find the difference between the first channel offset in BN2 and the first channel offset in the new game. Then find the difference between the first and second offsets, and add that to the new offset for the game you're importing music in. Repeat until you repointed all the pointers.

Well, you remember the difference you found between offsets for the channel pointers just now? Write that down.

Back to this.

Values in 32-bit


To review, B2 means loop at the very next offset, and B1 means end the song. The third is B3 and that means jump to this offset at this point during the song.

Anyways, use HxD to find all the B2's at the end of each channel you pasted in(within the new game!), and use "the difference you found between offsets" from earlier and change the pointer offsets. ALL of them. After you're done, continue reading.

REPEAT THIS! Do the same for all B3's within the channels you pasted in(within the new game!). Yes, tedious work. That is why we have Sappy. But if we can't use it(IE Ablon/all MAC users/all non XP users), this will help a lot.

Now that the hard work is done, the fun work is coming up! Although some people knew this besides Ablon, he wrote a guide, so let's use it xD Read up on Ablon's guide and mod the instruments used in each channel. I'm talking about the kind of modding that has something similar to this:

Values in 8-bit


Once you're done, save of course. But how do we test it? How do we draw from the new offset? What we talked about at the beginning, except you now need the new offset for the new game. So if you're using BN6, this is the offset for the song list:

08158400

Otherwise, simply search for the offset using HxD. What you do is type this into the Ctrl+F box in HxD:

Values in 8-bit


Stop when you find the spot where you see the pattern of offset, 1F 00 1F 00, offset, 1F 00 1F 00 on each line. That is where the list of songs is for that game. I don't know about non BN games, but I believe you do the same for all GBA games.

Then just replace the correct offset with the offset that leads to the new song's header, aka where A8140006 or similar starts.

Now, you're done! :D Thanks for reading.

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

Ablon's BN3 Music Hacking Notes
Edited by timaeus222, Feb 1 2011, 10:50 PM.
~Timaeus~
Web Designer, Music Composer

"There's so much water under the bridge that the bridge is gone." ~ DarkeSword of OC ReMix

My Technical Services || MPCR Home Page || My Best Game Mods || Music YT Channel || Gaming YT Channel || My Guides || My Challenges
Posted Image
Posted Image
Profile
Quote
 
Dramz
No Avatar
Spastic Colon

Some BN3 Offsets.
Excerpt from Ablon's BN3 Hacking Notes
 
Song Table: 08148B6C
Main Theme Pointer (song 1): 08148C6C

Songs
00) Nothing
01) Main Theme
02) WWW Theme
03) ACDC Town Theme
04) School Theme
05) Home Theme
06) Hospital Theme
07) Yoka Theme
08) Beach Theme
09) Scilab Theme
0A) DNN Theme
0B) Tank Computer Theme
0C) Hades Isle Theme
0D) WWW Base Theme
0E) Panic Theme
0F) Sorrow Theme
10) Hero Theme
11) Jack In
12) Principal Computer Theme
13) Zoo Computer Theme
14) Hospital Computer Theme
15) Silent
16) Alpha Computer Theme
17) Internet Theme
18) Undernet Theme
19) Secret Area Theme
1A) Virus Battle Theme
1B) Boss Battle Theme
1C) Alpha Battle Theme
1D) GP Battle Theme
1E) Silent
1F) Results
20) Style Change Theme
21) Unknown *****************
22) Game Over
23) Prepare to Battle
24) Credits
25) WWW Base
26) NaviCust Theme
27) Silent
Beyond 27, Blank until SFX begin.


As with all BN games, 1F001F00 separates the pointers (8-bit). There are a series of empty, inactive slots between music and SFX, which can be activated by changing the 00 00 00 00 to 1F 00 1F 00

How can I go about finding the Voicegroup pointer list?
I found the song tale the cheap way - Open up Sappy.xml as a .txt file, and search for "BLA3XE08" which is the ID code for MMBN3 Blue

[offtop]You can convert ROMs from E to U by changing this ID code, which is located close to the top of the ROM. Unfortunately, MMBN6 Gregar and Fazar are not interchangable, due to the differences in the routine offsets...etc Practical Application: Using U saves on an E Rom[/offtop]


Its painful work, but I did it with one channel before, but I haven't really touched the voice groups....never felt like going beyond that, cause I got Sappy working on the computers at my school.
Edited by Dramz, Sep 2 2010, 05:34 AM.
Profile
Quote
 
timaeus222
Member Avatar
The Tech Guy
To find voicegroup offsets, you could just find the 1F001F00, which is where the actual song list is. Then, go to a song, and look at the voicegroup there. Afterwards, search that offset in HxD, and that offset should be in the voicegroup list.
~Timaeus~
Web Designer, Music Composer

"There's so much water under the bridge that the bridge is gone." ~ DarkeSword of OC ReMix

My Technical Services || MPCR Home Page || My Best Game Mods || Music YT Channel || Gaming YT Channel || My Guides || My Challenges
Posted Image
Posted Image
Profile
Quote
 
IngusRogeth
No Avatar
TREZian
Wow, thanks a lot Tim. I did not think this was very possible! :chibi:
Siggy by me:3
Posted Image
OoT Run is done! 1:39:45 Non-TAS console
Currently planning and practicing for Zelda MM
Profile
Quote
 
Dramz
No Avatar
Spastic Colon

Woo, I finally managed to do this.
I find it easy to, on a VERY expanded ROM, use similar offsets.
eg) I just ripped and imported MMBN1 Boss Battle Theme (I've edited speed, and the annoying channel, so :P )
On a U BN1 ROM, it is located at 080AD870
I Imported it at 08DAD870
Despite the large number of offsets, it was a simple matter of using the Hex Editor's find function for B2 and B3, and changing 0A to DA. Less fiddling with calculators, takes less time, less chance of making a mistake.

If GM wrote a prog for this, then everyone would be happy :P
Edited by Dramz, Oct 6 2010, 05:03 AM.
Profile
Quote
 
MegaRockEXE
Member Avatar
BN Guides Author

So does this tutorial suggest manually extracting the channels and placing them somewhere else? Repointing would be tedious and slow, right?
The Rockman EXE Zone | YouTube
Profile
Quote
 
Dramz
No Avatar
Spastic Colon

mega rock.exe
Oct 6 2010, 10:38 AM
So does this tutorial suggest manually extracting the channels and placing them somewhere else? Repointing would be tedious and slow, right?
Not as slow as you'd think with some clever offset placement, but the channel's internal pointers take the most time, yes.
Once you repoint the channels, and change all the necessary pointer, you have a functioning song.
Profile
Quote
 
MegaRockEXE
Member Avatar
BN Guides Author

I actually got Prof. 9 to teach me a faster method.

Basically, you find the song you want to import in Sappy. Extract the tracks from the song and save them. Using a hex editor, copy 20h bytes from the header of that song. Open the rom where you want to import the music. Find some freespace, preferably at the bottom, and write-paste (ctrl+B) the header. Write down the offset somewhere.

Now go to the first empty song at 08158528 and write down the offset where the header was placed. Remember to reverse the bytes.

Now open the rom you just edited in Sappy and go to the last song around 38. It should be the last one with tracks displaying. Click on Import tracks and select the tracks you exported earlier. On the right, leave the header as is. For first track, use the same offset as the header, but add 20h to it. Make sure the voices is set to 0x1568BC. Import the tracks and you're done! This can be repeated for as many songs necessary.
The Rockman EXE Zone | YouTube
Profile
Quote
 
Dramz
No Avatar
Spastic Colon

mega rock.exe
Oct 6 2010, 02:21 PM
I actually got Prof. 9 to teach me a faster method.

Basically, you find the song you want to import in Sappy. Extract the tracks from the song and save them. Using a hex editor, copy 20h bytes from the header of that song. Open the rom where you want to import the music. Find some freespace, preferably at the bottom, and write-paste (ctrl+B) the header. Write down the offset somewhere.

Now go to the first empty song at 08158528 and write down the offset where the header was placed. Remember to reverse the bytes.

Now open the rom you just edited in Sappy and go to the last song around 38. It should be the last one with tracks displaying. Click on Import tracks and select the tracks you exported earlier. On the right, leave the header as is. For first track, use the same offset as the header, but add 20h to it. Make sure the voices is set to 0x1568BC. Import the tracks and you're done! This can be repeated for as many songs necessary.
To quote the title
Music Hacking, Without Sappy

Sappy is very simple to use, but only computers with Windows XP OS can use it.
This is for the Vista, Windows 7 and Mac OS X users.

And Sappy can deal with the header manually.
But Sappy doesnt seem to like importing songs into empty slots...at least it didnt for me.

I've imported/remixed about 10 songs so far, and added them into empty slots, for use in specific battles.


Also, I've stumbled across this.
http://www.feshrine.net/hacking/Fire%20Emblem%20Music%20Hacking%20Tutorial.pdf
I know it is for Fire Emblem hacking, but one of the sections covers converting .midi format to GBA format. Worth looking into I believe.

I successfully ripped and imported a 10-channel song from Fire Emblem and put it into BN6.
Edited by Dramz, Oct 7 2010, 12:19 AM.
Profile
Quote
 
Prof. 9
Member Avatar
Moderaptor

mega rock.exe
Oct 6 2010, 02:21 PM
I actually got Prof. 9 to teach me a faster method.
Like ablon said, this tutorial is for music hacking without Sappy.

Also, I said "this particular header is 20h bytes". The header isn't always 20h bytes. As far as I can see every header is 8h + amount of tracks * 4h. The song you used had 6 tracks so that became 8+6*4=32 so 20h.

Also, it might be worth nothing that every song originally in BN6 has 1F 00 1F 00 behind it the header offset in the song table.
:ninja: Follow me on Twitter! :trap: Fork me on GitHub!
Posted Image
Profile
Quote
 
Dramz
No Avatar
Spastic Colon

Prof. 9
Oct 7 2010, 07:40 AM
Also, I said "this particular header is 20h bytes". The header isn't always 20h bytes. As far as I can see every header is 8h + amount of tracks * 4h. The song you used had 6 tracks so that became 8+6*4=32 so 20h.

Also, it might be worth nothing that every song originally in BN6 has 1F 00 1F 00 behind it the header offset in the song table.
The header is 4 bytes, plus 4 for the voicegroup of the particular song, and another 4 for each pointer to the song/SFX's channels.

And all BN6 games have the 1F 00 1F 00 behind it.
Fire emblem games are separated by 00 00 00 00...wasn't so easy finding their song table :l
Profile
Quote
 
MegaRockEXE
Member Avatar
BN Guides Author

I shouldn't have posted that, then...

Without Sappy, a lot of pointer recalculating will have to be done. Maybe I can get GM to make a program for that.
The Rockman EXE Zone | YouTube
Profile
Quote
 
Mgamerz
Member Avatar
The ShoutBox King

Quote:
 
The people who can't use it have these problems:

- Can't open rom in Sappy
- Can't open Sappy

I think you meant
Quote:
 
The people who can't use it have these problems:

- Can't open rom in Sappy
- Can't open Sappy
- They are dumb

I run a Mass Effect 3 modding site named ME3Tweaks.com that details how to mod ME3 as well as showcasing mods for the multiplayer aspect of the game. I also developed a mod manager utility as well as an online mod creation tool named ModMaker.
Profile
Quote
 
Dramz
No Avatar
Spastic Colon

mega rock.exe
Oct 7 2010, 04:26 PM
I shouldn't have posted that, then...

Without Sappy, a lot of pointer recalculating will have to be done. Maybe I can get GM to make a program for that.
I made that suggestion to him awhile ago.
You'll have to use force.
Profile
Quote
 
timaeus222
Member Avatar
The Tech Guy
If finding 1F 00 1F 00 doesn't work(and it generally doesn't), try finding BC 00 BB, which is the beginning of basically any GBA music channel. It sometimes might not work, but it works a lot more often than 1F 00 1F 00.

EDIT: The reason why it might not work is because sometimes BC 00 BB is also somewhere else in the rom that isn't related to a music channel. However, 90% of the time it will be.

Example: Fire Emblem has several BC 00 BB that aren't in a music channel.





Yes, a lot of repointing has to be done, which IS tedious. However, it is satisfying when you get the song imported correctly :) Also, this covers how to loop songs, so anyone can now fix any channel that isn't looped.
Edited by timaeus222, Oct 9 2010, 10:30 AM.
~Timaeus~
Web Designer, Music Composer

"There's so much water under the bridge that the bridge is gone." ~ DarkeSword of OC ReMix

My Technical Services || MPCR Home Page || My Best Game Mods || Music YT Channel || Gaming YT Channel || My Guides || My Challenges
Posted Image
Posted Image
Profile
Quote
 
Dramz
No Avatar
Spastic Colon

timaeus222
Oct 9 2010, 10:25 AM
If finding 1F 00 1F 00 doesn't work(and it generally doesn't), try finding BC 00 BB, which is the beginning of basically any GBA music channel. It sometimes might not work, but it works a lot more often than 1F 00 1F 00.

EDIT: The reason why it might not work is because sometimes BC 00 BB is also somewhere else in the rom that isn't related to a music channel. However, 90% of the time it will be.

Example: Fire Emblem has several BC 00 BB that aren't in a music channel.





Yes, a lot of repointing has to be done, which IS tedious. However, it is satisfying when you get the song imported correctly :) Also, this covers how to loop songs, so anyone can now fix any channel that isn't looped.
Yeah.
I noticed that about fire emblem. The rom is massive compared to BN6 though, so I'd kinda expect 3-byte combinations to occur in more than just one place.

The way I've started repointing:
Find (eg) "0A08"
Replace All "0A09"
then just do the voicegroup.
Most of the time, the only things replaced will be the pointers you want to. If it glitches, you'll have to do them individually.
Edited by Dramz, Oct 9 2010, 06:28 PM.
Profile
Quote
 
Dramz
No Avatar
Spastic Colon

These are NOT my notes, I found them while learning Fire Emblem hacking.
Atrius's notes:
B1 = End of channel
B2 = Jump command, to jump the playback pointer to another location in memory.
B3 = Jump command where playback can jump back to after it again later.
B4 = Return to last 0xB3 command.
BB = Set Tempo
BC = Set Pitch offset
BD = Set instrument
BE = Set Volume
BF = Set Panning
CF - 0xFF = Play notes of varying lengths.
Edited by Dramz, Nov 6 2010, 06:08 PM.
Profile
Quote
 
timaeus222
Member Avatar
The Tech Guy
Cool. For a long time I hadn't known what BF really did. I just thought it was for changing to a different "group of instruments". That's how it seemed to work for me.
~Timaeus~
Web Designer, Music Composer

"There's so much water under the bridge that the bridge is gone." ~ DarkeSword of OC ReMix

My Technical Services || MPCR Home Page || My Best Game Mods || Music YT Channel || Gaming YT Channel || My Guides || My Challenges
Posted Image
Posted Image
Profile
Quote
 
timaeus222
Member Avatar
The Tech Guy
I also should add in a word of warning: If an offset of yours turns out to end in B1, B2, B3, or B4, you need to move your music data. =/

And I've always thought that B3 makes the song "jump" to another specific spot in the song. After all, there's a lot of jumps. From how you said it, it seems as if you're saying B3 marks where B2 makes the song loop back to, and I see many many B3's very often.
~Timaeus~
Web Designer, Music Composer

"There's so much water under the bridge that the bridge is gone." ~ DarkeSword of OC ReMix

My Technical Services || MPCR Home Page || My Best Game Mods || Music YT Channel || Gaming YT Channel || My Guides || My Challenges
Posted Image
Posted Image
Profile
Quote
 
1 user reading this topic (1 Guest and 0 Anonymous)
« Previous Topic · Guides & Research · Next Topic »