Okay. I have been searching all over Pokecommunity (and on Google, too) but I simply am not able to find an answer to my question. Which I find really weird, considering I would have imagined this would have been a very common question.
In G/S (specifically, Silver), how do you change the starting position of the Hiro? (I have a hex editor and everything.) What offset/byte(s) do I change, and what do I change to determine what? I believe somewhere on Pokecommunity I had found the offset, followed by an explanation of what part of the offset did what (determined map bank, number, x and y axis) but I have lost the link to the page, and even after searching thoroughly and going through my browsing history I am not able to find it again.
I am aware there is a tool to accomplish this, but I would like to learn how to do this myself. I tried using the tool, anyway, but it doesn't even work anymore (and I couldn't read the source).
Any help would be immensely appreciated! If anybody needs any more information, I would be happy to provide it.
You're lucky that I saw your message here ;)
Join Skeetendo Inc. You'll find all the information you need to make a GSC hack there.
http://hax.iimarck.us/topic/852/
If anybody knows how to change the player's starting money, that would also be cool...?)
You start the game carrying $3000 with you. That 3000 is 0xBB8 in hexadecimal.
At maximum, you can carry $99999 with you which is 0xF423F in hex. From the maximum amount of money here, you could assume that money is stored as a 3-byte value in ram (0xF423F there would most likely either be "0F 42 3F" or "3F 42 0F" depending on the order money is stored there).
According to this, you're either given "00 0B B8" or "B8 0B 00" money for starting out. The asm routine for storing money in ram for starting out is located starting at offset 0x5CD6 like you can see in this picture.
Money is stored in ram addreses $D573-D575 as a 3-byte value and "3000" would happen to be 00 0B B8. In this picture, "xor a,a" is an asm instruction which is here used for making register a store value 00. That
00 is then stored in certain ram addresses: CE5F, D57C, D57D, D57A, D57B and
D573. So this code here determines what's written as the highest value of starting money. Next, register a is loaded with value
0B and that is stored in
D574. Finally, register a is loaded with
B8 which is written to
D575. And there you go, this routine determines how much money you start with in Gold and Silver.
You don't probably care about the highest value (which is created by the xor operation) so you don't even have to use an asm editor to do the job. Open hex editor and go to this same rom address. On the left side of "ld a,$0B" you can see bytes "3E 0B" and "01:5CE9". "01:5CE9" is the rom address (0x5CE9) where bytes "3E 0B" are written at. 0B there is part of the money loaded in ram for starting out. And in a similar way, 01:5CEE is the rom address (0x5CEE) where bytes 3E B8 are written at. Change those 0B and B8 there and you're good to go.