The PokéCommunity Forums

The PokéCommunity Forums (https://www.pokecommunity.com/index.php)
-   Binary Hack Research & Development (https://www.pokecommunity.com/forumdisplay.php?f=195)
-   -   Quick Research & Development Thread (https://www.pokecommunity.com/showthread.php?t=205158)

tkim July 15th, 2017 12:52 PM

Quote:

Originally Posted by Sagiri (Post 9240706)
Disable "The Pokemon Stopped Evolving." [FR]

FR has a feature that if you attempt to evolve a Pokemon into something not in the Kanto Dex (and you don't have the National Dex), it will mysteriously stop evolving. You could just give the player the National Dex at the beginning of the game, but if you don't want to do that, you can easily disable this.

Basically, this will turn some conditional jumps into unconditional jumps, and remove some checks. No free space required.

Spoiler:
Code:

.text
.align 2
.thumb
.thumb_func

@ trade item removal
.org 0x043156
b 0x04315E

@ all three
.org 0x0CE90A
b 0x0CE948

@ trade
.org 0x0CF566
b 0x0CF598

@ stone
.org 0x126C26
nop
nop
nop
nop

@ stone
.org 0x126C4C
b 0x126C60



Could you clarify, if I wanted to completely disable 'The Pokemon stopped evolving' due to not having the national dex, do I have to use all of the offsets provided, or just the '@ all three'?

Sefuree July 21st, 2017 1:03 PM

After doing some research into the Emerald HP boxes, I've found a few useful offsets.
I haven't seen them documented anywhere else on the internet so I thought I'd share them here.

Player HP box - C1F1C8
http://i.imgur.com/u7Ohadz.png

Enemy HP box - C1F46C
http://i.imgur.com/wIIa4yI.png

The palette used for these two is located at C11B9C

I've also seen this palette in one of Jaizu's post where I found the other palette, C11BBC
It might be related to the other HP boxes I found below.
These could possibly be related to double battles. I haven't tested them so I'm not too sure.

C1F5E8
http://i.imgur.com/OqN1sKo.png
C1F76C
http://i.imgur.com/2LFI4gk.png
C1F8E8
http://i.imgur.com/tQ2TKoG.png

Lunos July 28th, 2017 7:48 AM

Quote:

Originally Posted by azurile13 (Post 9090677)
-Snip-

Replaced "CHANGE THIS LINE" with 0x64 and tried again with 100 afterwards, but I always got the same error when trying to compile the routine.
http://i.imgur.com/1mDaOma.png

This is how both tries looked like.

ShyGuy25 August 2nd, 2017 12:50 AM

Anyone have the offsets for the Thick Club table?

tkim August 3rd, 2017 4:55 PM

FireRed:
If you ever opened a script from FireRed in XSE, you will quite often see these lines:
Code:

special 0x187
compare LASTRESULT 0x2
if 0x1 goto 0x81A7AE0


Most people think that that special is there as a safe switch or does nothing, but it's actually used for the flashbacks that occur when the player continues their save file. It's there to make sure the events play out properly in the flashback.

tkim August 6th, 2017 10:37 AM

Quote:

Originally Posted by Sagiri (Post 9240706)
Pokemon Center Doesn't Count Eggs [FR]

When healing at a Pokemon Center, the healing machine will light up with the number of Pokemon in your party. Starting in DP, eggs don't count - if you have two Pokemon and an egg, in RSEFRLG, you get three lights, in DP, you get two.

To get this behavior in FR, just change:

Code:

0x08083B8E : 0xbd 0xf7 0x55 0xf8


to

Code:

0x08083B8E : 0x08 0xf0 0xd5 0xfa


Spoiler:
0x08083B8C is a function called as part of doanimation 0x19 (the healing machine). At 0x08083B8E, that function branch-links to call another function at 0x08083BD1, which itself counts the number of Pokemon in the party.

0x0808C13C is a built-in function to count Pokemon (and not eggs), so basically I just changed the target of the branch-link to this function.

Pokemon Center Doesn't Count Eggs [EM]

If you want this for Emerald, make the change at:

Code:

0x0B61A2 - B5 F7 CB F9



to
Code:

0x0B61A2 - 10 F0 31 FF



AkameTheBulbasaur August 9th, 2017 12:16 PM

Environmental Moves In FireRed (with some Emerald Offsets)

Camoflouge

There is a table at 0x250888 (0x31C483 in Emerald). This table is what Camoflouge uses to determine the Type the user turns into. It has ten entries for ten different types of terrain.

This order is important, because all the environmental moves use this same order of terrain. The terrain bytes start at 0 and go through 9.

1. 0C = Grass Type used for short grass
2. 0C = Grass Type used for long grass
3. 04 = Ground Type used for sand
4. 0B = Water type used for Underwater
5. 0B = Water Type used for ponds
6. 0B = Water Type used for the sea
7. 05 = Rock Type used for craggy terrain
8. 05 = Rock Type used for caves
9. 00 = Normal Type used for indoors
10. 00 = Normal Type used for link battles

I tried expanding it but it didn't work. I didn't really focus all that much on expanding it though so it may be possible.

This table is useful for people who are using KarateKid's Battle Background hack to set specific backgrounds, as the terrain byte doesn't change just because the background does.

For people who are using that patch, you can make the terrain change with the background by using/modifying this routine:

Spoiler:

.text
.align 2
.thumb
.thumb_func

Main:
push {r0, r2}
ldr r0, =0x40F7 /*Check BG var*/
bl GetValue
ldrh r0, [r0]
cmp r0, #0x0
beq Normal
cmp r0, #0x1
beq Grass
.......
b Normal

This compares the value of var 0x40F7, which is what determines the battle background.If it's 0, it uses the default background. If anything else it uses that numbered entry in the table at 0xF10000. This is where you branch to the terrain you want. I only included one here as an example.

Grass:
ldr r1, =0x02022B50
mov r2, #0x0
strh r2, [r1]
b Normal

This sets the byte at 0x2022B50, which is the terrain byte, to the terrain desired. The number r2 is set to matches the entry in the Camouflage table. The idea is to set terrains that you won't use to a new type. For example, if you have a volcanic area, setting it to Fire Type.

Normal:
mov r1, r0
pop {r0, r2}
ldr r5, =0x08F0000B
bx r5

This just continues the Battle Background routine without setting a specific terrain. This is used for the default terrain when you don't set a specific background. This would really only be useful if you have more than one type of terrain (water and grass on the same map).

You should add a compare/branch if equal for each battle background you have in the table.


You would replace the pointer at 0xf00020 with the pointer to this new routine.

Secret Power

Secret Power is known for having different secondary effects depending on the terrain byte. This leads to the same problem with the Battle Background hack as with camouflage, where you can have Secret Power animations or effects that don't match terrain.

You can use the following Battle Script to edit the effects even if you don't have the Battle Background hack.

Spoiler:

//You may have to go back to the beginning
//And repoint the jumpifhalfwords
//Because for me it just rerouted to Main

#dynamic 0x180000
#freespacebyte 0xFF

#org @Main
jumpifhalfword 0x4 0x02022B50 0x0 @Grass
jumpifhalfword 0x4 0x02022B50 0x1 @Ghost
jumpifhalfword 0x4 0x02022B50 0x2 @Ground
jumpifhalfword 0x4 0x02022B50 0x3 @Fire
jumpifhalfword 0x4 0x02022B50 0x4 @Fairy
jumpifhalfword 0x4 0x02022B50 0x5 @Water
jumpifhalfword 0x4 0x02022B50 0x6 @Rock
jumpifhalfword 0x4 0x02022B50 0x7 @Dragon
jumpifhalfword 0x4 0x02022B50 0x8 @Steel
jumpifhalfword 0x4 0x02022B50 0x9 @Ice
goto 0x81D6900

This compares the terrain byte to each of the possible values. Feel free to change the branch names to the names/types you want.

#org @Grass
setbyte 0x2023E85 0x1
goto 0x81D6900

This is an example of a terrain effect. This sets the effect to "sleep", then goes to the normal damaging script.

#org @Fire
jumpiftype 0x0 0xA 0x81D6900
setbyte 0x2023E85 0x3
goto 0x81D6900

For this example, this sets the effect to "burn." If you want Fire Type Pokemon to be immune to burn from Secret Power, then put that "jumpiftype" command to the type you want to have immunity (A = Fire) and make it branch to the regular damaging script.

0x2023E85 is the byte that stores additional effects, like burn, poison, etc.


I'd do a version for Emerald, but I don't know where the RAM for the terrain is in Emerald yet. If you know where it is, tell me! Porting that script to Emerald is as easy as replacing all the offsets with their Emerald equivalents.

Secret Power's animation in FireRed (and also in Emerald) is basically just a compilation of pointers to other move's animations. The animation it uses once again depends on the terrain byte.

FireRed (at 0x1D4CBA)
Spoiler:

03 f1 bd 0b 08 05 00
21 00 00 00 13 c5 1c 08 @This is the offset to the animation used when terrain byte = 0
21 00 01 00 9d 12 1d 08
21 00 02 00 d1 a6 1c 08
21 00 03 00 f5 7a 1c 08
21 00 04 00 40 cb ac 08
21 00 05 00 01 fa 1c 08
21 00 06 00 ff 9a 1c 08
21 00 07 00 68 e0 1c 08
21 00 08 00 64 10 1d 08
13 3f e4 1c 08


Emerald (at 0x2D6FD0)
Spoiler:

03 25 7C 11 08 05 00
21 00 00 00 2F E9 2C 08
21 00 01 00 83 71 2D 08
21 00 02 00 0D 56 2D 08
21 00 03 00 21 B0 2C 08
21 00 04 00 CA 1D 2D 08
21 00 05 00 73 C1 2C 08
21 00 06 00 5F BF 2C 08
21 00 07 00 55 05 2D 08
21 00 08 00 62 98 2C 08
13 09 AF 2C 08


Nature Power

It was already posted somewhere here, but I'll just put the offset at the end so all the environmental moves are in the same place.

FireRed: 0x25081C
Emerald: 0x31C414

Editing the table is as easy as putting the index number of the move you want in the correct location in the table depending on the terrain you want it to go with.

AkameTheBulbasaur August 9th, 2017 7:28 PM

RAM Offsets for Player's and Opponent's Pokemon

These contain information such as current HP and level for all six of your Pokemon, and all six of your opponent's Pokemon.

The RAM Offsets for FireRed are already documented (I'll put them here for convenience's sake).

Yours:
1st: 0x02024284
2nd: 0x020242E8
3rd: 0x0202434C
4th: 0x020243B0
5th: 0x02024414
6th: 0x02024478

Theirs:
1st: 0x0202402C
2nd: 0x02024090
3rd: 0x020240F4
4th: 0x02024158
5th: 0x020241BC
6th: 0x02024220

But I'm not sure if the ones for Emerald are documented but I couldn't find them, so here they are:

Yours:
1st: 0x020244EC
2nd: 0x02024550
3rd: 0x020245B4
4th: 0x02024618
5th: 0x0202467C
6th: 0x020246E0

Theirs:
1st: 0x02024744
2nd: 0x020247A8
3rd: 0x0202480C
4th: 0x02024870
5th: 0x020248D4
6th: 0x02024938

tkim August 10th, 2017 9:25 PM

Does anybody know the var, flag, or special that activates swarming in Emerald?

Lunos August 12th, 2017 7:31 AM

Quote:

Originally Posted by tkim (Post 9728823)
Does anybody know the var, flag, or special that activates swarming in Emerald?

I made the question somewhere and BluRose found this post.

Bladecraft August 14th, 2017 5:26 AM

How to change the spawn location of the player after beating the Pokemon League in Emerald:

After some research I've found that the spawn location of the player after beating the Pokemon League is tied to the Flying position [04] tile (in map 1.1 or 1.3 in the coordinates 4/2).

It is possible to change the location of that tile (including the map it's in) in HxD, in the offset 59F53C.

Code:

01 01 04 00 02 00


are the bytes that will be there by default.

01 - map bank
01 - map number
04 - X
00 - X
02 - Y
00 - Y

Note that the rom reads the X's and Y's backwards. For example, if for any reason you'd want it to be in the X 125, you'd put in 05 12 in the X's spots.

If you can choose a gender in your game, you must also edit the female's Flying position [04] tile, which is in the offset 59F544.

Code:

01 03 04 00 02 00


these are the bytes there by default, if you see this you're in the right place.


Wobb August 14th, 2017 9:22 AM

Secret Base Decoration Sprites (Emerald)
The sprites for the Secret Base decorations (The sprites you see when buying them at the Department Store) in Emerald start at 0x5A6C00. It ends at 0x5A6FAF with the Registeel Doll.
It looks like the decorations are in groups (like all the dolls are together) and there are a lot of 00s between them.
The first four bytes are the image pointer, and the next four are the palette. :)

tkim August 14th, 2017 10:12 AM

Quote:

Originally Posted by Bladecraft (Post 9731306)
How to change the spawn location of the player after beating the Pokemon League in Emerald:

Spoiler:
After some research I've found that the spawn location of the player after beating the Pokemon League is tied to the Flying position [04] tile (in map 1.1 or 1.3 in the coordinates 4/2).

It is possible to change the location of that tile (including the map it's in) in HxD, in the offset 59F53C.

Code:

01 01 04 00 02 00


are the bytes that will be there by default.

01 - map bank
01 - map number
04 - X
00 - X
02 - Y
00 - Y

Note that the rom reads the X's and Y's backwards. For example, if for any reason you'd want it to be in the X 125, you'd put in 05 12 in the X's spots.

If you can choose a gender in your game, you must also edit the female's Flying position [04] tile, which is in the offset 59F544.

Code:

01 03 04 00 02 00


these are the bytes there by default, if you see this you're in the right place.


Thanks, I've been looking for that! 0x3EEBF8 is the offset for FireRed.
Default bytes:
Code:

03 00 06 00 08 00



ghoulslash August 14th, 2017 10:37 AM

Add Thick Club boost for Alolan Marowak [FR]

The simplest method would be to give Alolan Marowak species ID 0x6A, then change 0x3F02E (0x90BE22 in MrDS's rombase with updated light ball check) from 01 to 02

Otherwise you'll have to hook a routine in this area to compare against another species ID.

Enn August 30th, 2017 6:58 PM

Quote:

Originally Posted by Sagiri (Post 9695740)
Class-based Poke Balls [FR]

In Sun and Moon, NPC trainers started using different types of Poke Balls. Specifically, it's tied to their trainer class - for example, Elite Four members and Ace Trainers keep their Pokemon in Ultra Balls. Prior to this, NPC trainers only ever used basic Poke Balls.

I ported this to Fire Red. The repo is here, and I've also added it as an attachment. The readme explains how to use it.

What if I expand pokeballs from DaniiS's method?

BluRose August 30th, 2017 10:40 PM

Quote:

Originally Posted by Nisarg (Post 9742691)
What if I expand pokeballs from DaniiS's method?

from the readme
"If you've added custom Poké Balls, you'll need to add definitions for them in src/balls.h. Note that these are not the same as their item numbers; vanilla Poké Balls have the same item and ball number, but custom Poké Balls won't unless you overwrite the item numbers after the vanilla Poké Balls."

FamiliaWerneck September 9th, 2017 9:49 AM

Quote:

Originally Posted by mbcn10ww (Post 9479026)
https://media.giphy.com/media/l0MYHPWZ3koKRCplC/giphy.gif

I'm using your routine but when I'm fishing when I catch the Pokémon my rod disappears, but it only happens at the Safari Zone. Do you know how to fix it?

EDIT: I think it's caused by your "deleteball" routine, because it removes the last item used from the Bag, but the Safari Balls isn't on the Bag and the reusable function isn't working on them.

I made a fix for that routine, and will test it on Monday.
I sent you the solution, if you don't mind testing it too.
I'll post it as soon as I confirm it's fixed.

EDIT:
Link to the post with the routine:
https://www.pokecommunity.com/showthread.php?p=8896448#post8896448
If anyone could help confirm that Safari won't be screwed with this new hack, it would be highly appreciated. =D

Panda Face September 11th, 2017 5:59 PM

How to disable paralyze in Electricity type Pokemon in Emerald?

Panda Face September 11th, 2017 6:10 PM

Who does know all of the image, raw and palette offset?

Panda Face September 16th, 2017 5:21 AM

Quote:

Originally Posted by BluRose (Post 9742783)
from the readme
"If you've added custom Poké Balls, you'll need to add definitions for them in src/balls.h. Note that these are not the same as their item numbers; vanilla Poké Balls have the same item and ball number, but custom Poké Balls won't unless you overwrite the item numbers after the vanilla Poké Balls."

How to change the weather abilities from infinity turns to 5 turns?

mbcn10ww September 17th, 2017 3:14 AM

Quote:

Originally Posted by FamiliaWerneck (Post 9749237)
I made a fix for that routine, and will test it on Monday.
I sent you the solution, if you don't mind testing it too.
I'll post it as soon as I confirm it's fixed.

EDIT:
Link to the post with the routine:
https://www.pokecommunity.com/showthread.php?p=8896448#post8896448
If anyone could help confirm that Safari won't be screwed with this new hack, it would be highly appreciated. =D

Good. I ended my ROM hacking cause I lost my flash drive with all my work.

Artemis64 September 17th, 2017 11:43 PM

So you know the animations for end-of-turn events or animations that aren't exactly move animations (e.g. poisoned, sleeping, burn, Leech Seed absorb, Future Sight attack etc)? In Emerald, they're stored in a table at the end of the regular move animations table (so it starts at 2C92F8), which I have gone through and summarised as follows:
Spoiler:
Data below is formatted as (Animation description: Offset)
Tackle? (Tackle hit particle on opponent): 2DEF76
Poisoned (purple, shaking): 2D7D5A
Confusion: 2D7D85
Burn: 2D7D8E
Infatuation: 2D7DBE
Sleeping: 2D7DF3
Paralysis: 2D7E1F
Frozen: 2D7E39
Curse (Ghost type affliction): 2D7E54
Curse but with Lovely Kiss sprite?: 2D7E79
Transform (pixelate then change sprite): 2D7E9E
Regular damage (blink of sprite + regular effective SFX): 2D7ED4
Sky Attack? (user sprite fades to white then disappears, then reappears by sliding in from left): 2D7EDD
Substitute (user sprite disappears similar to Teleport, Substitute sprite drops in): 2D7F1A
Unknown (user sprite is replaced with a red-pink box?): 2D7F22
Knock Off item lost (item bag bounces away from opponent): 2D7F6A
Bind: 2D7F75
Using held item animation (user sprite tilts downwards, sparkles appear then circle expands out): 2D8108
Unknown (clouds appear on user, then user disappears): 2D817C
Focus Band survived with 1 HP animation: 2D8258
Raining animation: 2D82A5
Strong sunlight animation: 2D82EE
Sandstorm animation: 2D82F8
Hail animation: 2D82FD
Pound? (Tackle hit particle on opponent, Pound SFX): 2D830B
Unknown (Item bag bounces up from user sprite then drops down): 2D833C
Volt Tackle movement (user sprite shakes, opponent quickly slides right then reappears on user side of screen, slides left, then reappears in normal position): 2D8361
Future Sight (attack animation, after 2 turns): 2D83BF
Doom Desire attack animation: 2D841E
Bide? Endure? (Focus energy particles + user sprite turns red): 2D84E3
Leech Seed HP absorb animation: 2D8523
Wish healing animation? (screen darkens, sparkles appear around user and health regain animation plays, with Recover SFX): 2D8566
In-battle level up animation (health bar glows blue): 2D85E3
Return to Pokéball animation: 2D8604
Return to Pokéball animation: 2D8615
Throwing Pokéball animation: 2D8626
Unknown (replaces user sprite with Pokéball sprite, freezes game): 2D867A
Unknown (user sprite slides left then slides right back to original position): 2D8693
Substitute? (user sprite slides left and a Substitute sprite slides right into user original position): 2D869D

This could be helpful for anyone who wants to edit the status animations or include some of these animations as part of move animations; they can (mostly) be called with 0E XX XX XX 08.

Megax Rocker September 20th, 2017 10:40 AM

Quote:

Originally Posted by Artemis64 (Post 9755767)
So you know the animations for end-of-turn events or animations that aren't exactly move animations (e.g. poisoned, sleeping, burn, Leech Seed absorb, Future Sight attack etc)? In Emerald, they're stored in a table at the end of the regular move animations table (so it starts at 2C92F8), which I have gone through and summarised as follows:
Spoiler:
Data below is formatted as (Animation description: Offset)
Tackle? (Tackle hit particle on opponent): 2DEF76
Poisoned (purple, shaking): 2D7D5A
Confusion: 2D7D85
Burn: 2D7D8E
Infatuation: 2D7DBE
Sleeping: 2D7DF3
Paralysis: 2D7E1F
Frozen: 2D7E39
Curse (Ghost type affliction): 2D7E54
Curse but with Lovely Kiss sprite?: 2D7E79
Transform (pixelate then change sprite): 2D7E9E
Regular damage (blink of sprite + regular effective SFX): 2D7ED4
Sky Attack? (user sprite fades to white then disappears, then reappears by sliding in from left): 2D7EDD
Substitute (user sprite disappears similar to Teleport, Substitute sprite drops in): 2D7F1A
Unknown (user sprite is replaced with a red-pink box?): 2D7F22
Knock Off item lost (item bag bounces away from opponent): 2D7F6A
Bind: 2D7F75
Using held item animation (user sprite tilts downwards, sparkles appear then circle expands out): 2D8108
Unknown (clouds appear on user, then user disappears): 2D817C
Focus Band survived with 1 HP animation: 2D8258
Raining animation: 2D82A5
Strong sunlight animation: 2D82EE
Sandstorm animation: 2D82F8
Hail animation: 2D82FD
Pound? (Tackle hit particle on opponent, Pound SFX): 2D830B
Unknown (Item bag bounces up from user sprite then drops down): 2D833C
Volt Tackle movement (user sprite shakes, opponent quickly slides right then reappears on user side of screen, slides left, then reappears in normal position): 2D8361
Future Sight (attack animation, after 2 turns): 2D83BF
Doom Desire attack animation: 2D841E
Bide? Endure? (Focus energy particles + user sprite turns red): 2D84E3
Leech Seed HP absorb animation: 2D8523
Wish healing animation? (screen darkens, sparkles appear around user and health regain animation plays, with Recover SFX): 2D8566
In-battle level up animation (health bar glows blue): 2D85E3
Return to Pokéball animation: 2D8604
Return to Pokéball animation: 2D8615
Throwing Pokéball animation: 2D8626
Unknown (replaces user sprite with Pokéball sprite, freezes game): 2D867A
Unknown (user sprite slides left then slides right back to original position): 2D8693
Substitute? (user sprite slides left and a Substitute sprite slides right into user original position): 2D869D

This could be helpful for anyone who wants to edit the status animations or include some of these animations as part of move animations; they can (mostly) be called with 0E XX XX XX 08.

Hi there nice find, I was wondering if you stumbled upon more of those animations?

There's the return/frustration animation changes, ice Ball, solar beam and some others...

Konekodemon September 28th, 2017 8:47 AM

I have been wondering something. The 3DS has been out for awhile now. Has anyone figured out how to hack 3DS games yet?

Delta231 October 10th, 2017 7:38 AM

To match Generation 7th mechanism

Burn Damage Update [FR]
0x01856A - 00 09

Paralysis Speed Drop Update [FR]
0x014E60 - 40 08
0x014F40 - 7F 08


All times are GMT -8. The time now is 8:53 AM.


Like our Facebook Page Follow us on Twitter © 2002 - 2018 The PokéCommunity™, pokecommunity.com.
Pokémon characters and images belong to The Pokémon Company International and Nintendo. This website is in no way affiliated with or endorsed by Nintendo, Creatures, GAMEFREAK, The Pokémon Company or The Pokémon Company International. We just love Pokémon.
All forum styles, their images (unless noted otherwise) and site designs are © 2002 - 2016 The PokéCommunity / PokéCommunity.com.
PokéCommunity™ is a trademark of The PokéCommunity. All rights reserved. Sponsor advertisements do not imply our endorsement of that product or service. User generated content remains the property of its creator.

Acknowledgements
Use of PokéCommunity Assets
vB Optimise by DragonByte Technologies Ltd © 2023.