Hmmm... are you sure you're putting the bytes in right? It works every time for me.
Maybe it's because I was using Tile Molester in Reverse Order (which is a lot easier to read)... let's see, try this:
Again, the x's are your pointer.
When in reverse order, each byte reads back to front, which makes pointers and other stuff a lot easier to read.
On the instruments, they are offseted differently for each instrument. This is a sample of the first few bytes of instrument data:
0080 CC00 F401 0000 BA23 0000
The bolded text is the actual pitch bend for the instrument. To make it an octave higher, double this number. To make it an octave lower, half it.
The italicised text is information on how the instrumen repeats. If the 0000 0040 appears in the first line, that means that the instrument repeats playing the same sound if a note is long. The first tells which point to begin the repeat, the second is where to end and repeat again. This only applies to instruments with 0000 0040 for the first row.
I haven't tested the whole combining of voicegroups, but Golden Sun is living proof that it works, so you can try it out if you like. Have fun repointing XD.
Every three rows is another instrument, with the exception of instruments that are composed of two intruments. Basically, count every three rows as an instrument, unless they have two pointers, then its four rows.
Since it's easy to count to 2 or 3, I usually set extra instruments as those numbers.
By looking at the pointer, not really. I mean, if you count through the midi numbers, you can figure out the initial instrument, but you could just easily repoint it to somewhere else; for example, the tuba in the theme is actually a nylon guitar - it takes up tuba's position, so it sounds like a tuba in Sappy, but it actually plays a nylon guitar (this is done because the pokemon center uses the same instruments, and the Tuba was useless anyhow).
On your first question, I literally mean a placce that's easy to remember. It's easier to count to the 3rd instrument than, let's say, the 76th instrument.
Second Question - Trial and Error methods FTW. Okay, well, not really.
Third Question - Yeah, but I'm getting some interesting results. It seems that the .wav files are of a different frequency. I'll do some more investigation on this. I'll notify you on more information later.
I'm checking out the Time thing - it was one of the things that was bothering me, anyhow.
I'm also very glad you like the hack!... but apparently Isaac refuses to battle you (again T_T; he's had problems before, the jerk). Just transfer a save file from Jupiter to Ruby, battle Norman, then transfer it back to Jupiter to get past that. Just found out about that today...
Actually, the back and front sprites have the exact same animation, and it's applied to every Pokemon. In Ruby, it just tells the game to display the sprite, but I repointed it to some freespace and I added an animation. =P
I'm glad you understand it now! Just stay quiet about it though, I don't want EVERYONE to know. It's one of the things that Jupiter really boasts about.
There are two kinds of instrument data - one that leads directly to the wav, and the other that leads to pointers that lead to seperate wavs.
The kind with 3 rows, the second being the offset, has the offset to the actual wav itself. This is used with instruments not used often.
The kind with 4 rows, with the second and third being offsets, has the first offset to other offsets (which in turn leads to the instrument data), and another offset to God-Knows-What (its the same for all of these). So, obviously, you want to go to the first offset, then bookmark or something, then go to each of the offsets and change the instrument from there.
AFTER FOLLOWING THE OFFSET:
NOTE: Don't forget it's the same instrument - don't set one as a Kalimba and the other as an Oboe, or else the track will switch between Kalimba and Oboe. Usually what I do is I set both of the offsets the same, then I change the wav.
With the whole adding instrument thing, what you want to do is locate an empty spot for instrument data. They all look like this:
There's a ton of them, so that shouldn't be a problem.
Anyways, go there, and set it to:
In which the X's represent the offset to the wav of your instrument. If done correctly, the instrument you added should play in Sappy. You don't necessarily have to add it as the corrosponding instrument - in one of my voicegroups, the tuba is actually a nylon guitar!
For example, let's say I wanted to transfer GS:TLA's Pan Flute. This instrument is located at 0x81E4664 in GS:TLA, so I copy and paste that into some freespace, like 0x8800000. Now, I go to a voicegroup, for example, the Regi Battle voicegroup at 0x845019c in Ruby, and I go to a blank spot. It doesn't matter where you put it, but it helps if it's in an easy to count place, such as 0x02 (Electric Grand) or 0x03 (Honky-Tonk). So, I'll just type in
on the third or fourth row (the first is 0x00, which is the drumset; second is usually Bright Accoustic)
Now, I have to make sure that my track uses the same instrument as this. Go to the offset of the track that you want to play the GS:TLA Pan Flute on. There will be some bytes (I'm using the first track of the Regi Battle as an example; the offset is 0x86ACA58) that will form a formation like this:
Don't mess with any of the bytes except for what I bolded. Change that to the number instrument that you added. If Sappy plays that track at all, that means you did it right!
Now we test it in the Rom. If it plays the Pan Flute, then you're good to go!
One small note: The Pokemon Music switches from instrument to instrument, which is rarely seen in both GS games. If you're transfering new songs in, that shouldn't be an issue, however...
Just remember that the Pan Flute, like many of GS's instruments, is offseted differently from Pokemon's, so you might have to adjust the octaves. If you want me to tell you how to do that, just ask!
...You know, it could be possible to completely pitch all of the old voicegroups and make one nice, compact voicegroup with all the instruments. Then we wouldn't have to deal with all this crap with changing voicegroups and stuff. It would be quite a bit of repointing, however...
...But you'd get a ton of freespace from doing it! But don't try it untill I mess around with it in my hack first. I don't want you screwing up your hack by mistake.
Eheheheh, I've noticed that when you type an offset, you type it without the 0x8 to specify the rom. It's no big deal, but some programmers may freak out when you tell them there's freespace at 0x800000 (or to you, 0x000000).
I would highly recommend doing the following in a tile viewer.
Anyways, when you get to the insturment data, you will notice that there's the same kind of information repeated every three (about) rows. If there is no pointer in the second row, then that means that area has no insturment. For example, if the instrument number 0x1 has no pointer, no insturment is there and it just plays an ugly beep sound there.
The pointers are arranged in the order of the actual insturments as played in Sappy, for example, the Electric Bass (finger) insturment is 0x21 (which is really just the insturment's midi value transfered into hex minus 1)
However, if there is a pointer there, that means the insturment data can be found really easily! Just follow the pointer and you'll be right there. This works for less common insturments, such as the Glockenspiel, Tubular Bells, Flute and Xylophone.
It is possible to insert a new insturment from another Rom (typically for me, it's Golden Sun - The Lost Age) and place it in freespace. Just find the insturment in GS:TLA, then copy and paste into freespace, then go to your insturment data and repoint it.
However, some insturments, when you look at their pointer, they have another pointer underneath them! What does this mean? Simple. It means the insturment is actually composed of two different insturments for different frequencies.
Follow the first pointer (the second pointer is blah - I have no clue what it is). Now you'll be at another set of pointers. These pointers lead to the individual .wav datas that tell you which make up the high and the low parts of each insturment. Voila, you've just located the actual insturments! This happens with more common insturments, such as String Ensamble, French Horn, Trumpet and (I think) Bright Accoustic.
But wait! I want to copy the instruments from TLA to my Pokemon Rom Hack!...
Muhahaha, you'll have to find those offsets on your own >=D
But the table's at 0x81c3714 in TLA so I think you can figure it out on your own anyhow. It's a lot more straightforeward and logical compared to the Pokemon way of doing things. I'm actually thinking about making Pokemon's instrument table like GS:TLA's to save a ton of space.
Also, I should note that the instruments offset oddly in GS:TLA, so if you're thinking about transfering instruments, then I'll add a tutorial for that on your profile as well.
If you've played Jupiter, you know it's possible *wink*
Heheheh... if you promise to stay quiet about it. (I only know one other person who knows how to do this).
Well, the instument data (or what you are calling voicegroups) is actually a long list of pointers to the actual .wav file that makes up the sound. Through a lot of trial and error, I found out which sound corrospond with which insturment.
For now, I gotta go because dinner is calling, but I'll post the rest when I log back on today.
Totally don't mind at all.
I can't use Sappy 2006 because of Vista, so I resort to the ELF method. It makes it easier to find offsets and other stuff so I can fix little things here and there.
Okay, let's see if I can get this right...
Here's a sample of music data in hex form from Jupiter (if you're curious, it's a town theme, it's the equavalent of Shaman's Village at 0x86655cc):
0300 00b2 <<< This tells that there are 3 tracks.
EB43 4408 <<< This tells the offset to the insturment data, 0x86655cc.
Then there are 3 offsets to the individual tracks.
If you actually go to 0x86655cc, you will notice that you get some funky looking data. Look for any pointers. (it's a good idea to bookmark your offset now). Follow the pointers. If the pointers are larger than 0x8450000, you most likely found the raw wav. file for an insturment. You can change it by transfering instument data from other files, for me, that would be GS:TLA.
If you find a pointer that leads to another set of pointers, it turns out that those pointers are actually insturment data as well, but they are offset differently for different frequencies. This happens with the most common insturments like French Horn, String Ensamble and Trumpet.
1. You cannot touch all your teeth with your tongue.
2. All idiots, after reading the first truth, will try it.
3. And discover that the first truth is a lie.
4. You're smiling now because you're an idiot.