#1
June 15th, 2008 (5:08 AM). Edited June 19th, 2008 by Darthatron.
 Darthatron 巨大なトロール。 Join Date: Jan 2006 Location: Melbourne, Australia Age: 25 Gender: Male Nature: Modest Posts: 1,152
Okay, in this tutorial I will teach you how to repoint, resize and increase the amount of OWS (Over World Sprites) in Pokemon FireRed. Sounds fun, right?

I haven't tested this in the other Advance Gen Games, but I'm sure it will work just the same.

For this Tutorial you will need...
• An English FireRed ROM
• A Hex Editor
• A Free Space Finder
• A Brain

Lesson 01: Understanding the Data.

Ok, let's take a quick look at the Layout of the Sprite Data, before we go any further. Here is what the first Sprites Data will look like in FireRed:
Code:
`FFFF001102110002100020001001000010373A089C373A0870343A08A0003A08FC1C2308`
Now, let's break it down, so you can all understand:
Code:
```FFFF		= Starter Byte
00		= Palette Number
11 02 11	= Unknown Data 1
0002		= Unknown Data Size
10		= Width
00		= Unknown Byte 1
20		= Height
00		= Unknown Byte 1
10 01 0000	= Unknown Data 2
10373A08	= Unknown Pointer 1
9C373A08	= Unknown Pointer 2
70343A08	= Unknown Pointer 3
A0003A08	= Sprite Pointer
FC1C2308	= Unknown Pointer 4```
Following the "Sprite Pointer" will lead you to this Data:
Code:
`68BB350800010000`
This is another pointer to where the actual Sprite Hex Art is, don't worry about looking at it, it's pointless unless you look at it in an OWE. Here's the broken up version of the Sprite Data:
Code:
```68BB3508	= Hex Art Pointer
0001		= Data Size
0000		= Unknown Data```
The Data Size is always equal to this algorithm:
Code:
`Data Size	= (Width x Height) / 2`
That's about it for this lesson, next we will learn how to resize the OW Sprite! YAY! *Cheers*

Lesson 02: Resizing an Over World Sprite.

Right, so if you remember correctly, before we looked at the Sprite Data, and it had the "Height" and "Width" Bytes stored there, so... Let's just change them, and see what happens. Why don't we make it a 32 x 32 Sprite now?
Code:
```FFFF		= Starter Byte
00		= Palette Number
11 02 11	= Unknown Data 1
0002		= Unknown Data Size
20		= Width
00		= Unknown Byte 1
20		= Height
00		= Unknown Byte 1
10 01 0000	= Unknown Data 2
10373A08	= Unknown Pointer 1
9C373A08	= Unknown Pointer 2
70343A08	= Unknown Pointer 3
A0003A08	= Sprite Pointer
FC1C2308	= Unknown Pointer 4```
Now, let's put it back together.
Code:
`FFFF001102110002100020001001000010373A089C373A0870343A08A0003A08FC1C2308`
...And put it back into our Hex Editor. Next we will open up the OWS in our OWE.

Oh dear! Frame 0 and 1 seemed to have melded together! This means we have to repoint the Frames, YAY!
Ok, so all you have to do is follow the "Sprite Pointer", which is "A0003A08", or "0x003A00A0" when it's flipped. SO now, goto the offset "0x003A00A0" in your Hex Editor and look at the data. It should look something like this:
Code:
`68BB350800010000`
Now, we need to work out how many frames the OWS has. The Hero Sprite has 20 Frames, so open up your Free Space Finder and search for the Value of this Sum:
Code:
`Value = (Height x Width) / 2 x Frames`
So, in this case it would be:
Code:
```Value = (16 x 16) / 2 x 20
Value = 256 / 2 x 20
Value = 128 x 20
Value = 2560```
So, we will be searching for 2560 Bytes! YAY! Searching sure is fun.
*Searches*
Ok, I found the Space I need at the offset: "0x00720A00" Lucky me. Now, I'm going to start Repointing all the Pointers.
Back to the Offset "0x003A00A0" in your Hex Editor and it's time to start the fun!
Alright, so replace the First Pointer with "000A7208", which now lead to the Free Space we found earlier. Now, view that Frame and Sprite in your OWE. And see how it turns out.

Great! We now have a clear Sprite! Next we are going to want to do the same for every frame, so back at the Offset "0x003A00A0" we are going to move 8 more Bytes into the File and Repoint this Frame aswell!

So with the Free Space we found earlier, which was "0x00720A00", we want to add 128 Bytes, because that is the Value of the Sum we did before:
Code:
`Value = (Height x Width) / 2`
So, the new Offset will be: "0x00720A80"
And the new Pointer will be: "800A7208"

So, what we want to do it replace the Pointer at the Offset "0x003A00A0" with our new pointer, in my case: "800A7208".

Great! The second Frame is now clear as well! Do that for the other 18 Frames, and then you can start painting your new OWS! YAY!

Lesson 03: Adding for OWS to the game.

Finally, we can learn how to repoint the OWS and add more into out game! YAY! *Cheers*

Ok, what we are going to do it open our ROM in our Hex Editor...

*Opens ROM*

Right, now Goto the offset: "0x0039FDB0" And you will see a whole bunch of Pointers, right? They should look something... like... this:

Code:
```B03B3A08D43B3A08F83B3A081C3C3A0858483A08A0483A08C4483A0864453A08
88453A08AC453A08D0453A087C483A08E8483A080C493A08643C3A08883C3A08
AC3C3A08D03C3A083C3D3A08A83D3A08F03D3A08F43C3A08183D3A08603D3A08
CC3D3A0890433A08B4433A08143E3A085C3E3A08EC3E3A08383E3A08843D3A08
803E3A08343F3A0820443A08583F3A084C423A0828423A0870423A087C3F3A08
A03F3A08C43F3A08E83F3A0878403A089C403A08C0403A08E4403A08A43E3A08
C83E3A0818463A0854403A0878493A080C403A08B8423A0808413A082C413A08
94423A08BC413A0830403A08103F3A08403C3A0850413A0874413A0898413A08
00433A08D4443A08F8443A0824433A0868443A088C443A08B0443A086C433A08
34483A08A4473A0810483A0860463A08C8473A08EC473A08D8433A08FC433A08
84463A08A8463A08CC463A08F0463A0814473A0880473A085C473A0838473A08
EC503A083C463A08E0413A08DC423A0848433A0830493A0854493A0844443A08
1C453A0840453A08C0493A08E4493A08084A3A082C4A3A08504A3A08744A3A08
984A3A08BC4A3A08E04A3A08044B3A0810513A089C493A08284B3A08844F3A08
F04F3A08C8503A0814503A0880503A08A4503A0838503A084C4B3A08704B3A08
5C503A08944B3A08B84B3A08DC4B3A08004C3A08244C3A08484C3A086C4C3A08
904C3A08B44C3A08D84C3A08FC4C3A08204D3A08444D3A08A84F3A08684D3A08
8C4D3A08B04D3A08D44D3A08644E3A08884E3A08AC4E3A08F44E3A08D04E3A08
184F3A083C4F3A08604F3A08CC4F3A08F84D3A081C4E3A08404E3A08```
They look fun... NOT! Ok, so I'll show you what each pointer means...

Code:
```B03B3A08	= Pointer to OWS 0
D43B3A08	= Pointer to OWS 1
F83B3A08	= Pointer to OWS 2
1C3C3A08	= Pointer to OWS 3
58483A08	= Pointer to OWS 4
A0483A08	= Pointer to OWS 5
C4483A08	= Pointer to OWS 6
64453A08	= Pointer to OWS 7
88453A08	= Pointer to OWS 8
AC453A08	= Pointer to OWS 9
D0453A08	= Pointer to OWS 10
7C483A08	= Pointer to OWS 11
E8483A08	= Pointer to OWS 12
0C493A08	= Pointer to OWS 13
643C3A08	= Pointer to OWS 14
883C3A08	= Pointer to OWS 15
AC3C3A08	= Pointer to OWS 16
D03C3A08	= Pointer to OWS 17
3C3D3A08	= Pointer to OWS 18
...
404E3A08	= Pointer to OWS 150```
Yes, that's right. Following one of those points will take you to the "Sprite Data", we looked at that data before (Lesson 01 & 02), cool huh? This is the location where AMap reads from, however, this isn't as far back as we can go...

Now, in your Hex Editor we are going to goto the location that points to this Table, and change it. So, goto this location: "0x0005F2F4", this should have a pointer to the table we just looked at, correct?

Ok, now open up your ROM in your FSF and search for this number of bytes:
Code:
`Value		= Number x 4`
"Number" is how many Sprites you want to have in your game. For this example we will use 151, Which is 1 extra Sprite to the average 151 FireRed has.

So.... In my FSF I will search for....
Code:
```Value		= Number x 4
Value		= 152 x 4
Value		= 608```
...608 Bytes. However, due to my vast amount of laziness, and my really slow computer, I will just use the offset "0x00801000", write that offset down somewhere, alright so... Asuming we are still at the offset "0x0005F2F4", I will set the Pointer there to... "00108008".

Now, we have copy/paste the Table at the Location "0x0039FDB0", ONLY THE FIRST 151 POINTERS (604 Bytes), to the Location we just found, in my case "0x00801000". Now, if you did everything correctly, there should be at least 4 Free Bytes after the table has been pasted. With this free space we are going to add a new pointer to some free space where we will put our new Sprite Data...

Once again, open up FSF and search for some free space, this time search for 36 Bytes. Once again, due my huge amount of laziness, I will be using the offset "0x00802000". Back at the 4 Bytes that we have free after pasting the Pointer Table, we are going to add out new pointer. In my case: "00208008".

Now, in your Hex Editor we are going to look at the Hero's Sprite Data, located at "0x003A3BB0", and we are going to copy it all (36 Bytes). Then we will go back to our new free space, in my case "0x00802000", and we are going to paste the data we just stole from the Hero's Sprite Data.

Open your ROM up in a Map Editor and make a Sprite with the Picture Number of "151" and you will notice that the Map Editor doesn't appear to show any Sprite. However, opening the ROM in your emulator and looking at the Sprite it will look like the Hero.

Alright, now you just have to follow Lesson 02, using this Sprite Data instead of the First, and all should be fine. I think... I kind of lost track of where I was up to. :D If for whatever reason it doesn't work, post and I'll see if I missed anything... xD
__________________
あなた は しきしゃ です
わたし は ばか です

#2
June 16th, 2008 (4:45 AM).
 X-Buster Join Date: Feb 2008 Posts: 712
wow, this is a good tutorial.. I'll try it..!
__________________
#3
June 16th, 2008 (9:29 PM).
 Darthatron 巨大なトロール。 Join Date: Jan 2006 Location: Melbourne, Australia Age: 25 Gender: Male Nature: Modest Posts: 1,152
Well, if only one person cares about this then there is really no point on posting the rest...

Thanks for caring X-Buster.
__________________
あなた は しきしゃ です
わたし は ばか です
#4
June 16th, 2008 (9:34 PM).
 ZodiacDaGreat Working on a Mobile System Join Date: Feb 2007 Location: South Pacific Age: 24 Gender: Male Nature: Relaxed Posts: 429
It's really good but time consuming though , I'm glad you got it in english
__________________
#5
June 17th, 2008 (3:50 AM).
 Dr Gregory House Join Date: Apr 2008 Location: Brisbane, Australia Age: 24 Gender: Male Nature: Gentle Posts: 824
wow man, this is ftw!
i vote post the rest
__________________
PokePlushies.
Avatar&Sig credit to

#6
June 17th, 2008 (4:56 AM).
 zel 2.0 Gold Remaker Join Date: Jun 2006 Location: Argentina Age: 30 Gender: Male Nature: Quiet Posts: 1,958
Hey, Darth, since you are trying to make a tutorial about this, then perhaps you'll manage to see what's the problem I have when I'm increasing the ammount of OWs.
Yeah, according to the guide at WAH (by Peyi), you can increase the ammount, and, while OWE recognizes them (till a certain limit...), apparently, neither Advance Map nor the rom itself recognizes the overworlds beyond the original limit, it just uses the hero sprite (or was it one of those small kids OW?) for anything beyond that limit.

Can you try to see if you can increase the ammount and show a screenshot of the extra overworld in both AMap and the game? Thanks
__________________

#7
June 17th, 2008 (5:29 AM).
 hi sir tomato my password is syvniti gggggggggggggggggg Join Date: Jan 2007 Location: My user name _ asciii_ +&h1!" lulz Posts: 581
Quote:
 Originally Posted by zel Hey, Darth, since you are trying to make a tutorial about this, then perhaps you'll manage to see what's the problem I have when I'm increasing the ammount of OWs. Yeah, according to the guide at WAH (by Peyi), you can increase the ammount, and, while OWE recognizes them (till a certain limit...), apparently, neither Advance Map nor the rom itself recognizes the overworlds beyond the original limit, it just uses the hero sprite (or was it one of those small kids OW?) for anything beyond that limit. Can you try to see if you can increase the ammount and show a screenshot of the extra overworld in both AMap and the game? Thanks
Hi, What do you mean by "The rom itself"?

I don't done much with the OW in fire red, but I gues, that maybe Advancemap don't read the amount of OW's from the rom, but it's just in the program?
You tryed to inset the OW number through hex?
__________________
THE CAKE IS A LIE!!!!!!!!!!!!!!!!!!!!!!!
#8
June 17th, 2008 (8:07 AM).
 Teh Baro In my times...! Join Date: Mar 2006 Location: Spain Gender: Male Nature: Quiet Posts: 522
Quote:
 Originally Posted by Son Sebbe Hi, What do you mean by "The rom itself"? I don't done much with the OW in fire red, but I gues, that maybe Advancemap don't read the amount of OW's from the rom, but it's just in the program? You tryed to inset the OW number through hex?
If they aren't in the rom, maybe it's because those slots are reserved for variable sprites. For example, the trainers at the trainer tower in ruby and fire red, that trainer in that event that has somewhat to do with a pokemon card reader, (The rival in ruby, where you find him/her on routes, doesn't it use it too?), so maybe even if you edit it, it still shows what's in the variable
__________________
what the fudge
#9
June 17th, 2008 (2:27 PM).
 X-aveon IS BACK!!!!!!!!!!!!!!!!!!! Join Date: Jan 2008 Gender: Nature: Naive Posts: 232
could you make an english one for ruby for expaning the size cuz i dont know how and that is one of the messed up parts in my hack.
__________________

I want that apple......
#10
June 17th, 2008 (8:14 PM).
 ZodiacDaGreat Working on a Mobile System Join Date: Feb 2007 Location: South Pacific Age: 24 Gender: Male Nature: Relaxed Posts: 429
Quote:
 could you make an english one for ruby for expaning the size cuz i dont know how and that is one of the messed up parts in my hack.
There's no need, you just need the offsets for Ruby, and then follow then instructions closely.
__________________
#11
June 17th, 2008 (8:37 PM).
 Mos3s Join Date: Jun 2008 Gender: Posts: 1
Looks good darthaton!! Tee why .
ily
#12
June 17th, 2008 (9:55 PM).
 Darthatron 巨大なトロール。 Join Date: Jan 2006 Location: Melbourne, Australia Age: 25 Gender: Male Nature: Modest Posts: 1,152
Everyone who is interested, my method works in the game, unlike the WAH one. However, due to OWE and AM current way of reading the Data, they do not support it. Here is a lazy proof of it working in game, not in AM. I got lazy and just pointed to the Hero's data. xD

On another note, I lost what I had done so far, when my niece decided it would be fun to restart the computer, without saving anything that was open... I hate children... Anyway, should be up in a few days.
__________________
あなた は しきしゃ です
わたし は ばか です
#13
June 18th, 2008 (12:51 AM). Edited June 18th, 2008 by tImE.
 tImE It's still me, 44tim44 ;) Join Date: Mar 2007 Location: Somewhere in Scandinavia... Nature: Relaxed Posts: 685
Quote:
 Originally Posted by Darthatron Everyone who is interested, my method works in the game, unlike the WAH one. However, due to OWE and AM current way of reading the Data, they do not support it. Here is a lazy proof of it working in game, not in AM. I got lazy and just pointed to the Hero's data. xD On another note, I lost what I had done so far, when my niece decided it would be fun to restart the computer, without saving anything that was open... I hate children... Anyway, should be up in a few days. :)
Hey, Darthatron,
I think the link to the proof is broken
cause there's just a red cross there

And, yah little kids, can be really
annoying sometimes o_O

//44tim44

EDIT: Hmm, it seems my computer lagged
or somethn' cause now the pic works...
__________________
#14
June 18th, 2008 (1:39 AM).
 X-Buster Join Date: Feb 2008 Posts: 712
The link isn't broken, I can see it.. Try to refresh the page a few times
__________________
#15
June 18th, 2008 (3:31 AM).
 Neti Follow @PokeNeti on Twitter Join Date: Mar 2008 Location: Cologne, Germany Age: 25 Gender: Male Nature: Relaxed Posts: 1,515
oh wow thx, i really needed this!
__________________
Member of the glorious
- ROM REAVERZ HACKING TEAM -
The Creators of
Pokémon Flame of Rage
and
Pokémon Legend of Fenju

#16
June 18th, 2008 (6:32 PM).
 GBChacker Join Date: Mar 2008 Posts: 18
Some of your data is wrong. I'll find more on the parts tommmorow.

FFFF = Starter Byte
00 = Palette Number
11 02 11 = Sprite validation.
0200 = Not sure.
0010 = Width
0020 = Height
0110 and 0000 = oam data. Do not modify!
1@ 10373A08 = Points to @3.
2@ 9C373A08 = Void pointer\ unsure.
3@ 70343A08 = A pointer to @5 lol.
4@ A0003A08 = Sprite Pointer
5@ FC1C2308 = Pointer to pointers which point to code that loads the sprite through the ewram into the sprite block of the vram and its data into the oam.

Have you considered the reason why the game assumes the sprite is the hero is because you copied the hero's data and maybe just changed the pointers? Why not make new ones?
#17
June 18th, 2008 (9:04 PM). Edited June 19th, 2008 by Darthatron.
 Darthatron 巨大なトロール。 Join Date: Jan 2006 Location: Melbourne, Australia Age: 25 Gender: Male Nature: Modest Posts: 1,152
Quote:
 Originally Posted by GBChacker Some of your data is wrong. I'll find more on the parts tommmorow. FFFF = Starter Byte 00 = Palette Number 11 02 11 = Sprite validation. 0200 = Not sure. 0010 = Width 0020 = Height 0110 and 0000 = oam data. Do not modify! 1@ 10373A08 = Points to @3. 2@ 9C373A08 = Void pointer\ unsure. 3@ 70343A08 = A pointer to @5 lol. 4@ A0003A08 = Sprite Pointer 5@ FC1C2308 = Pointer to pointers which point to code that loads the sprite through the ewram into the sprite block of the vram and its data into the oam. Have you considered the reason why the game assumes the sprite is the hero is because you copied the hero's data and maybe just changed the pointers? Why not make new ones?
Thanks for new data, and I know the reason why it points to the Hero's data, I made it point there.

In other news, I'm about half way through the Adding OWS guide.

EDIT: Finished my uber leet guide. Getting some people to test it, then I will post it.
__________________
あなた は しきしゃ です
わたし は ばか です
#18
June 19th, 2008 (8:58 PM).
 One Winged Angel Banned Join Date: Apr 2008 Location: Anchorage, Alaska Age: 24 Gender: Nature: Calm Posts: 480
Hey, this is great... but i think ill stick to the easier way.
Keep up the good work !
#19
June 20th, 2008 (1:01 AM).
 Darthatron 巨大なトロール。 Join Date: Jan 2006 Location: Melbourne, Australia Age: 25 Gender: Male Nature: Modest Posts: 1,152
For anyone who hadn't noticed yet, I've posted the "Adding Over World" guide to the first post.

On another note, the sprites will show up in AMap, you just have to close it, and reload after you edit the amount.
__________________
あなた は しきしゃ です
わたし は ばか です
#20
July 1st, 2008 (2:59 AM).
 Tropical Sunlight The Faltine Join Date: Mar 2008 Location: Slovenia Age: 20 Gender: Male Posts: 3,572
There is a program called OverWorldChanger 4.0.1 that resizes OW sprites. You can download it on WAH. Maybe change the name to: Hex Editing OW Size
__________________
#21
August 2nd, 2008 (2:09 PM).
 Derlo Working on Essence of light... Join Date: Aug 2007 Posts: 127
Hello!!!
Really that tuto helped a lot to me...
They put something that I don't know what is happening causes!!
In the first 5 times that I followed the tutorial worked perfectly...
but when I turned off and later I tied PC didn't work more....
I already tried to redo all of the steps and he/she always gives that same mistake!

PS: I put the same MINIS in the spaces 151 and in the 152

The rom just recognizes the 151 minis... all the other ones after the 151 appear as in the image...
What do I make!?
#22
August 2nd, 2008 (11:09 PM).
 hi sir tomato my password is syvniti gggggggggggggggggg Join Date: Jan 2007 Location: My user name _ asciii_ +&h1!" lulz Posts: 581
Quote:
 Originally Posted by Derlo Hello!!! Really that tuto helped a lot to me... They put something that I don't know what is happening causes!! In the first 5 times that I followed the tutorial worked perfectly... but when I turned off and later I tied PC didn't work more.... I already tried to redo all of the steps and he/she always gives that same mistake! PS: I put the same MINIS in the spaces 151 and in the 152 The rom just recognizes the 151 minis... all the other ones after the 151 appear as in the image... What do I make!?
Have you been restarting amap?
Here's a 6 step tutorial...
3. Pick some thing up to eat
4. eat it
5. go back

(This might could be done faster, but then it would be long enough to I could claim it a toturial...)
__________________
THE CAKE IS A LIE!!!!!!!!!!!!!!!!!!!!!!!
#23
August 2nd, 2008 (11:49 PM).
 liuyanghejerry Join Date: Jan 2008 Location: China,Xi'an Nature: Calm Posts: 219
Great! And I'm still waiting for how to add new trainers (Not only a picture but the new data for the pokemon and moves...) and pokemon out of 386...Keep researching!
__________________
#24
August 4th, 2008 (5:59 AM). Edited August 4th, 2008 by Derlo.
 Derlo Working on Essence of light... Join Date: Aug 2007 Posts: 127
Quote:
 Originally Posted by Son Sebbe Have you been restarting amap? Here's a 6 step tutorial... 1. Close advance map 2. Go to your kitchen.. 3. Pick some thing up to eat 4. eat it 5. go back 6. start Advance map editor (This might could be done faster, but then it would be long enough to I could claim it a toturial...)
(¬_¬)
Hum.... unhappily it didn't work...

I already tried more times and it is always the same mistake...
Any mini after the 151 is accepted by the rom.... just for AMAP.
All of the minis that I put in the new spaces appear the child's mini....
I don't know more than to do....
#25
August 4th, 2008 (6:24 AM).
 hi sir tomato my password is syvniti gggggggggggggggggg Join Date: Jan 2007 Location: My user name _ asciii_ +&h1!" lulz Posts: 581
Quote:
 Originally Posted by Derlo (¬_¬) Hum.... unhappily it didn't work... I already tried more times and it is always the same mistake... Any mini after the 151 is accepted by the rom.... just for AMAP. All of the minis that I put in the new spaces appear the child's mini.... I don't know more than to do.... Help me please!! @. @
And you are sure you pointed the new offset to the overworlds? Have you been chaning the new sprites? I had kind of same problem but then I reeliezed that I had messed up the offset that points to the sprites offsets
__________________
THE CAKE IS A LIE!!!!!!!!!!!!!!!!!!!!!!!