- 31
- Posts
- 7
- Years
- Seen Feb 17, 2017
I have a problem. I applied the patch to a FireRed rom but I don't know what I have to do next. How do I change the moves to Special or Status? And how do I insert the images for each category?
Thanks
Thanks
I have a problem. I applied the patch to a FireRed rom but I don't know what I have to do next. How do I change the moves to Special or Status? And how do I insert the images for each category?
Thanks
Okay. In order to change the move categories:
In many of the new move editors, there should just be a section that allows you to change the byte. Check out the tools section.
For the images, you're gonna need to know how to insert ASM and images. Look through the thread for Darthatron's post containing the ASM code and the images. You also need to get a Hex editor in order to perform the byte changes he has laid out as well.
Yes, with Gamer2020's PGE I can edit if a move is Physical, Special or Status. That's it? I don't need to hex edit anything?
editing the move to be one of those categories with pge will make it physical, special, or status, yes.Yes, with Gamer2020's PGE I can edit if a move is Physical, Special or Status. That's it? I don't need to hex edit anything?
Yep for the catergories, that's it. I'ts much easier now than when this was first released.
editing the move to be one of those categories with pge will make it physical, special, or status, yes.
if you want images, you need to find the asm code for that made public by darthatron a while ago and follow his mini-tutorial on it
Perhaps I'm too idiot, but I can't make this thing work.
Patching the game with the P/S split patch: done
Inserting the graphics with NSE 2: done
Inserting the ASM routine into the free space of my FR rom: done
But I don't know what other bytes I have to edit to make it run. That's all I've got. I need help :(
Well, you go into a hex editor, go to the addresses mentioned in Darthatron's post and change the bytes there to the ones he has mentioned.
For the one about the pointer, take the address you inserted the routine at. e.g/ ABCDEF
split it into sections of 2: AB CD EF, swap the first and last: EF CD AB
and stick 08 at the back: EF CD AB 08
And he says at 1 to it, so its more like: EF+1 CD AB 08
Which bytes do I have to change with the pointer? The first four?
Edit:
YOU ROCK MAN! I was finally able to do it. Thank you so much.
Can I make a tutorial on how to do it from scratch, for people who don't know anything about rom hacking?
Attention! For those who can't get on Tlachtli's Phys/Spec/Stat Icon in Emerald, now, listen here:
I've finally got it working and it is very a big success. Thanks Tlachtli! Gonna credit you once I made an Emerald base hack. I used DoesntKnowHowToPlay's Emerald Physical/Special/Status split first. I'll also give you credits too. Here are some screenshots:
Tlachtli,
At the first, I've found your entire work to be not working. But, I tried adding some missing "hows" so I can make this work. Here are some info I want you to change and add:
1.)
I noticed the part .SplitImages: .word 0x[insert address to images] that there is something's missing to it. You've forgotten to put 08 at the beginning of [insert address to images]. So then, that will be .SplitImages: .word 0x08[insert address to images]. Example, I've made it on offset E43780. So, that will be .SplitImages: .word 0x08E43780.
2.)
Then, about you're going to change the offsets to inserted ASM address +1, some people would just write and change the inserted ASM address +1 on certain offsets. Example: I have E43668 to be the ASM offset and I've changed and written 6936E4 on 1C0F88, 1c1328, and 1c17a0. When I did it, it froze just like Shufflejoy just commented:
It is because you just only write and change the inserted ASM address +1. I've noticed the value next to it "03". With 03 next to it, the routine will not ever work.
So then, try to change 03 to 08.
It is because with the value 08 next to it, it will locate the routine (or 09 if you put the routine on 1000000+. Ex: you have inserted the routine on 1234568, change and write 69452309). With this, I've finally made it working. Well, I haven't found bugs and glitches when I revised this.
3.)
This maybe a small problem but I would be big in just one mistake. You may just have inserted the image into compressed image (with unLZ program). Don't use unLZ to insert this. I highly recommend to use NSE 2.1 to insert the image because insertion of images has options is compressed or uncompressed. "Load ROM" then "Open Sprite" then "File => Insert => Image Data".
I also rewrite the complete tutorial about it according to his original tutorial with the revises I made. So, here it is:
Revised Steps
1.)
Insert this image as an uncompressed image...
Use NSE 2.1 to do so. To insert it on NSE 2.1: First, "Load ROM" load your Emerald file; Second, "Open Sprite" open your sprite; Then, "File => Insert => Image Data"
2A.)
Insert this ASM...
If you can't do ASM and/or if you have no idea about ASM at all, proceed to Step 2B.
Revised ASM:
Spoiler:
Spoiler:
.text
.align 2
.thumb
.thumb_func
Prestart:
add r0, r0, r5
lsl r0, r0, #0x03
ldr r1, .Replaced_Address
add r4, r0, r1
push {r0-r5}
ldr r0, .SplitImages
ldr r1, .OBJVRAM
mov r2, #0xC0
swi #0xB
ldr r0, .CurMoveIndex_DMA
ldr r0, [r0]
mov r2, #0x10
lsl r2, #8
add r2, #0xD
add r0, r2
ldrb r0, [r0]
cmp r0, #0x0
bne StatFinish
mov r2, #0x10
lsl r2, #8
add r2, #0xA
cmp r6, #0x0
beq StatPreStart
Start:
ldr r0, .CurMoveIndex_DMA
ldr r0, [r0]
add r0, r2
cmp r6, #0x1
bne Continue
add r0, #0x1
Continue:
ldrb r1, [r0]
cmp r1, #0x0
bne GetMove
mov r2, #0x20
lsl r2, #8
add r0, r2
ldrb r1, [r0]
GetMove:
cmp r1, #0x4
beq GetFifthMove
lsl r1, r1, #1
ldr r0, .Move_List_DMA
ldr r2, [r0]
add r2, #0x84
mov r0, r2
add r0, r1
ldrh r3, [r0]
Body:
mov r0, #0x0
lsl r0, r3, #1
add r0, r3
lsl r0, r0, #2
ldr r1, .MoveBase
add r0, r1
ldrb r4, [r0, #10]
lsl r4, #1
mov r0, #0x40
lsl r0, #20
ldr r1, [r0]
mov r2, #0x20
orr r1, r2
stm r0!, {r1}
ldr r0, .OAMMemAddress
ldr r1, .IconOAM1
ldr r2, .IconOAM2
cmp r4, #0x2
beq SpecAdd
cmp r4, #0x4
beq StatAdd
Draw:
stmia r0!, {r1, r2}
ldr r0, .OAMMemAddress
mov r1, #0x70
lsl r1, #20
add r1, #0xD8
mov r2, #0x4
swi #0xb
StatFinish:
cmp r6, #0x1
beq MoveFinish
cmp r6, #0x2
beq LearnFinish
pop {r0-r6}
ldr r0, .Return_Address_Stat
bx r0
GetFifthMove:
cmp r6, #0x2
bne StatFinish
ldr r0, .CurMoveIndex_DMA
ldr r0, [r0]
mov r2, #0x10
lsl r2, #8
add r2, #0xA
add r0, r2
sub r0, #0x2
ldrh r3, [r0]
cmp r3, #0x0
bne Body
mov r2, #0x20
lsl r2, #8
add r0, r2
ldrh r3, [r0]
cmp r3, #0x0
bne Body
b Start
StatPreStart:
mov r3, #0x20
lsl r3, #8
add r2, r3
b Start
LearnFinish:
pop {r0-r6}
ldr r0, .Return_Address_Learn
bx r0
MoveFinish:
pop {r0-r6}
ldr r0, .Return_Address_Move
bx r0
SpecAdd:
mov r3, #0x20
lsl r3, #8
add r3, #0x04
add r2, r3
b Draw
StatAdd:
add r2, #0x08
b Draw
.align 2
.MoveBase: .word 0x0831C898
.CurMoveIndex_DMA: .word 0x0300090C
.Move_List_DMA: .word 0x0203CF1C
.Replaced_Address: .word 0x03005E08
.Return_Address_Stat: .word 0x081C0F57
.Return_Address_Move: .word 0x081C12F7
.Return_Address_Learn: .word 0x081C175D
.IconOAM1: .word 0x40280078
.IconOAM2: .word 0x0000D580
.OBJVRAM: .word 0x06013000
.OAMMemAddress: .word 0x030023E4
.SplitImages: .word 0x08FCFDFE
*Note: Change FCFDFE to the offset where you've inserted the uncompressed image. OR, if you have inserted the ASM before the image and you're going to edit on a hex editor after inserting, go to the location of the inserted ASM and look for the FE FD FC 08 part on it. Again, change it but this time, in a reversed way (Example: Uncompressed image offset: ABCDEF. Think this: AB CD EF. And do this: EF CD AB. And finally change FE FD FC 08 to EF CD AB 08)
For 1000000+, I will have the example as 1234568 as the offset, do this: don't do 0x081234568. Do this: 0x09234568. For hex-editing: Mind little endian so it becomes 01 23 45 68. Reverse it so it becomes 68 45 23 01. Replace 01 with 09 (because 08+01=09). Final answer for it is 68 45 23 09.
2B.)
This is an alternate step for 2A for those who can't do ASM. For those who can't do ASM but can do HEX EDITING, below is the hex values of it. Insert this on the offset that ends with 0, 4, 8, C and nothing else.
Spoiler:
40 19 C0 00 3B 49 44 18 3F B4 42 48 3F 49 C0 22 0B DF 36 48 00 68 10 22 12 02 0D 32 80 18 00 78 00 28 36 D1 10 22 12 02 0A 32 00 2E 4B D0 2F 48 00 68 80 18 01 2E 00 D1 01 30 01 78 00 29 03 D1 20 22 12 02 80 18 01 78 04 29 29 D0 49 00 28 48 02 68 84 32 10 1C 40 18 03 88 00 20 58 00 C0 18 80 00 21 49 40 18 84 7A 64 00 40 20 00 05 01 68 20 22 11 43 02 C0 26 48 22 49 23 4A 02 2C 2C D0 04 2C 2F D0 06 C0 22 48 70 21 09 05 D8 31 04 22 0B DF 01 2E 1E D0 02 2E 19 D0 7F BC 16 48 00 47 02 2E F6 D1 11 48 00 68 10 22 12 02 0A 32 80 18 02 38 03 88 00 2B D0 D1 20 22 12 02 80 18 03 88 00 2B CA D1 B3 E7 20 23 1B 02 D2 18 AF E7 7F BC 0B 48 00 47 7F BC 09 48 00 47 20 23 1B 02 04 33 D2 18 CF E7 08 32 CD E7 98 C8 31 08 0C 09 00 03 1C CF 03 02 08 5E 00 03 57 0F 1C 08 F7 12 1C 08 5D 17 1C 08 78 00 28 40 80 D5 00 00 00 30 01 06 E4 23 00 03 FE FD FC 08
If you have inserted the uncompressed image first, replace FE FD FC 08 with the offset where you have inserted the uncompressed image and the offset must be like in this example: Uncompressed image offset: ABCDEF. Mind little endian: AB CD EF. Reverse them: EF CD AB. And finally change FE FD FC 08 to EF CD AB 08. If you have keen eyes, you will not get a mistake doing this.
3.)
Replace some Hex-Values on offsets...
Revised Hex Edits:
Spoiler:
Change 0x1C0F88, 0x1C1328 and 0x1C17A0 to XX XX XX 08 (or XX XX XX 09 for offset 1000000+)
Change 0x1C0F54, 0x1C12F4 and 0x1C175A to 08 47
Change 0x1C0F4E to 40 B4 00 26
Change 0x1C12EE to 40 B4 01 26
Change 0x1C1754 to 40 B4 02 26
Replace XX XX XX with the offset of your ASM, already +1, little endian and reversed. Example: You have inserted the ASM to E43668. Plus one so it becomes E43669. Mind little endian so it becomes like this E4 36 69. Then, reversed it so it becomes 69 36 E4.
For 1000000+, I will have the example as 1234568 as the offset. Plus one so it becomes 1234569. Mind little endian so it becomes 01 23 45 69. Reverse it so it becomes 69 45 23 01. Replace 01 with 09 (because 08+01=09). Final answer for it is 69 45 23 09.
I hope this helps for those who can't make it at the first. It works well, trust me. :)
Here's an IPS patch that applies version 1.4 of the Emerald patch, has all of the moves set to the correct Physical/Special/Status byte, and has the icons installed and working. Warning: I didn't take note of where I inserted the image or the ASM, so back up your game first.
First, you'll need to insert this ASM somewhere
Spoiler:.text
.align 2
.thumb
.thumb_func
Prestart:
add r0, r0, r5
lsl r0, r0, #0x03
ldr r1, .Replaced_Address
add r4, r0, r1
push {r0-r5}
ldr r0, .SplitImages
ldr r1, .OBJVRAM
mov r2, #0xC0
swi #0xB
ldr r0, .CurMoveIndex_DMA
ldr r0, [r0]
mov r2, #0x10
lsl r2, #8
add r2, #0xD
add r0, r2
ldrb r0, [r0]
cmp r0, #0x0
bne StatFinish
mov r2, #0x10
lsl r2, #8
add r2, #0xA
cmp r6, #0x0
beq StatPreStart
Start:
ldr r0, .CurMoveIndex_DMA
ldr r0, [r0]
add r0, r2
cmp r6, #0x1
bne Continue
add r0, #0x1
Continue:
ldrb r1, [r0]
cmp r1, #0x0
bne GetMove
mov r2, #0x20
lsl r2, #8
add r0, r2
ldrb r1, [r0]
GetMove:
cmp r1, #0x4
beq GetFifthMove
lsl r1, r1, #1
ldr r0, .Move_List_DMA
ldr r2, [r0]
add r2, #0x84
mov r0, r2
add r0, r1
ldrh r3, [r0]
Body:
mov r0, #0x0
lsl r0, r3, #1
add r0, r3
lsl r0, r0, #2
ldr r1, .MoveBase
add r0, r1
ldrb r4, [r0, #10]
lsl r4, #1
mov r0, #0x40
lsl r0, #20
ldr r1, [r0]
mov r2, #0x20
orr r1, r2
stm r0!, {r1}
ldr r0, .OAMMemAddress
ldr r1, .IconOAM1
ldr r2, .IconOAM2
cmp r4, #0x2
beq SpecAdd
cmp r4, #0x4
beq StatAdd
Draw:
stmia r0!, {r1, r2}
ldr r0, .OAMMemAddress
mov r1, #0x70
lsl r1, #20
add r1, #0xD8
mov r2, #0x4
swi #0xb
StatFinish:
cmp r6, #0x1
beq MoveFinish
cmp r6, #0x2
beq LearnFinish
pop {r0-r6}
ldr r0, .Return_Address_Stat
bx r0
GetFifthMove:
cmp r6, #0x2
bne StatFinish
ldr r0, .CurMoveIndex_DMA
ldr r0, [r0]
mov r2, #0x10
lsl r2, #8
add r2, #0xA
add r0, r2
sub r0, #0x2
ldrh r3, [r0]
cmp r3, #0x0
bne Body
mov r2, #0x20
lsl r2, #8
add r0, r2
ldrh r3, [r0]
cmp r3, #0x0
bne Body
b Start
StatPreStart:
mov r3, #0x20
lsl r3, #8
add r2, r3
b Start
LearnFinish:
pop {r0-r6}
ldr r0, .Return_Address_Learn
bx r0
MoveFinish:
pop {r0-r6}
ldr r0, .Return_Address_Move
bx r0
SpecAdd:
mov r3, #0x20
lsl r3, #8
add r3, #0x04
add r2, r3
b Draw
StatAdd:
add r2, #0x08
b Draw
.align 2
.MoveBase: .word 0x0831C898
.CurMoveIndex_DMA: .word 0x0300090C
.Move_List_DMA: .word 0x0203CF1C
.Replaced_Address: .word 0x03005E08
.Return_Address_Stat: .word 0x081C0F57
.Return_Address_Move: .word 0x081C12F7
.Return_Address_Learn: .word 0x081C175D
.IconOAM1: .word 0x40280078
.IconOAM2: .word 0x0000D580
.OBJVRAM: .word 0x06013000
.OAMMemAddress: .word 0x030023E4
.SplitImages: .word 0x[insert address to images]
Hey really impressed with this! Sorry to ask but could someone please include a full working patch? I would really appreciate it!
I'm having a problem as when I try to look at the summery of the Pokemon the screen goes black and when I battle my rival the game just restarts. Thanks for the reply tho really appreciate it!