• Our software update is now concluded. You will need to reset your password to log in. In order to do this, you will have to click "Log in" in the top right corner and then "Forgot your password?".
  • Forum moderator applications are now open! Click here for details.
  • Welcome to PokéCommunity! Register now and join one of the best places on the 'net to talk Pokémon and more! Community members will not see the bottom screen advertisements.
  • Want to share your adventures playing Pokémon?
    Check out our new Travel Journals forum for sharing playthroughs of ROM Hacks, Fan Games, and other Pokémon content!
  • IMPORTANT: Following a takedown request, the following hacks have been delisted from PokéCommunity:

    • Pokémon Glazed
    • Pokémon: Giratina Strikes Back
    • Pokémon Flora Sky
    • Pokémon Stranded
    The downloads and discussion threads for these hacks will no longer be accessible, and staff will be unable to return questions regarding accessing this content.

Quick Research & Development Thread

Shufflejoy

Tutturu!
23
Posts
10
Years
  • Age 29
  • Seen Jan 13, 2015
I was facing the same problem a few days ago. Repoint the battle script at 0x2DBD84 is not means to replace the original one with the new one directly in the address.

Firstly, you can place all the machine code in 0xECC060 like this:
attachment.php


Then replace the two pointers here from 84 BD 2D 08 to 60 C0 EC 08:
attachment.php


attachment.php


Finally, replace the bytes at 0x3DE7C with B5 DE 03 08. It may working properly now.

Ahh, I understand what I'd done wrong now. I was trying to replace the original battle script, instead of finding the pointers to it and changing those. Thanks a lot!
 

xGal

Mhm
241
Posts
12
Years
Well, I have been researching this: http://www.pokecommunity.com/showthread.php?t=212540.

In the thread, the threadstarter gave an offset for the table of the pictures when you enter a map (like viridian forest's trees, cave enterance in Mt. Moon etc.), the offset is: 0x8043E9E8.
It is possible to repoint the table, however there is a limiter, and Shiny Quagsire told me that the limiter is in 0x80F8104 :).
 

Tlachtli

Crit happens.
267
Posts
12
Years
Does anyone know the byte(s) to change in Emerald to increase the number of usable sound channels? I've been looking everywhere, but can't seem to find the post it was in.
 
180
Posts
10
Years
  • Age 34
  • Seen Jan 10, 2017
Does anyone know the byte(s) to change in Emerald to increase the number of usable sound channels? I've been looking everywhere, but can't seem to find the post it was in.

Put B0 B5 00 03 10 at 0x86B49C4 to increase the playable tracks from 10 to 16

Put CC at 0x82E0105 increase the 5 DirectSound limit.
 

kearnseyboy6

Aussie's Toughest Mudder
300
Posts
15
Years
  • Seen Jun 22, 2019
In case anyone had not of thought of this, replicating the repeating trainer battles on warp in BW2 is as easy as setting their trainer flag, or clearing flag 0x5XX
 

Tlachtli

Crit happens.
267
Posts
12
Years
hgIR3F3.png
SGbwSqm.png


XY added a feature that gives experience points when you catch pokemon. To duplicate this in Emerald, do the following:

Repoint the battle script at x2dbd84 to point to this:

2A 00 08 42 02 02 05 00 92 BD 2D 08 60 0B 10 0B 01 F1 XX XX XX XX 2E 90 44 02 02 00 2E AC 40 02 02 00 2E AD 40 02 02 00 23 00 10 0F 01 3A 2E 32 43 02 02 00 F2 10 0D 01 3A 2E 32 43 02 02 00 F3 C2 BD 2D 08 F0 13 7A C9 5C 08 12 40 00 28 C3 BD 2D 08

where XX XX XX XX is a pointer to:

2E 90 44 02 02 00 2E AC 40 02 02 00 2E AD 40 02 02 00 23 00 10 0D 01 3A 2E 32 43 02 02 00 F3 C2 BD 2D 08 F0 13 7A C9 5C 08 12 40 00 28 C3 BD 2D 08

To let the player's mons evolve from this experience, replace the bytes at x3DE7C with B5 DE 03 08.

credit obviously goes to DoesntKnowHowToPlay for doing this first on FireRed lol

I believe I've found an interesting bug with this. Under normal circumstances it works fine: you battle, catch, gain xp, display Pokedex entry:
RSflXni.png


However if you level up from that xp, it causes the Pokedex to go wonky:
IAJLx8z.png
YkvbOFB.png


EDIT: Found another small graphical bug, too. Learning a move on level-up after successfully catching a Pokemon will cause the wild Poke's sprite to re-appear after exiting the move learning screen. Unimportant in the long run, as the battle ends right after.
 
Last edited:
48
Posts
9
Years
  • Age 31
  • Seen Oct 26, 2015
I recently started ASM hacking. My first goal is to expand on Jambo51's pre-battle Mugshot routine hack and allow actual mugshots (rather then just sized-up sprites).

After lots of reading, research, and digging through ASM and hex data, I felt confident enough to try something. And jackpot!

If Jambo51's mugshot routine is installed, at location 0808386E, the data at r4 corresponds to the opponent Trainer sprite loaded into the mugshot. In this case, my byte was 6D corresponding to the Rocket sprite. If you change the byte here to a byte corresponding to a different Trainer sprite (In my case, I changed it to 6B, corresponding to the Scientist sprite), then the game will load the new sprite into the mugshot WITHOUT changing the opponent Trainer sprite!

I'd post screenshots, but I'm not allowed to post links yet.

This can be used as a starting point for a routine that can call opponent mugshots like in later generations. One can insert a routine at this point to call an image to replace the pre-battle mugshot. I'm still figuring out what part of the code actually resizes the sprite, but once I do, the potential routine can be written to skip over that part of the code.

Now to learn more ASM so I can actually try writing said routine.
 

Shiny Quagsire

I'm Still Alive, Elsewhere
697
Posts
14
Years
I believe I've found an interesting bug with this. Under normal circumstances it works fine: you battle, catch, gain xp, display Pokedex entry:
RSflXni.png


However if you level up from that xp, it causes the Pokedex to go wonky:
IAJLx8z.png
YkvbOFB.png

It looks to me like BG0 is just a bit offset. I bet there's a battle script command to fix that, but I can't be certain.
 
48
Posts
9
Years
  • Age 31
  • Seen Oct 26, 2015
After several days of digging through and fiddling with the mugshot routine, I managed to produce THIS:

Mugshot_4.png


I got this by replacing 0F 48 at offset 080838B2 with 00 00. This confirms for me that the routine cuts the sprites in half before re-sizing them. The sprites are tilted oddly enough, but I can work with it if I have to.
 

Danny0317

Fluorite's back, brah
1,067
Posts
10
Years
  • Age 24
  • Seen Nov 19, 2023
Hate to be "that guy," but does anyone know the offset for the wailmer (I think it is) in Emerald that the player surfs on? I tried looking around in NSE, around the OW area, and couldn't find it. However in VBA in the OAM viewer it was there. Sorry if this is the wrong place.
 

Windsong

—the dream is dead
30
Posts
16
Years
Hate to be "that guy," but does anyone know the offset for the wailmer (I think it is) in Emerald that the player surfs on? I tried looking around in NSE, around the OW area, and couldn't find it. However in VBA in the OAM viewer it was there. Sorry if this is the wrong place.
This one? You can find it at 004F5498~

b2a0c26cc1.png
 

daniilS

busy trying to do stuff not done yet
409
Posts
10
Years
  • Age 24
  • Seen Jan 29, 2024
Applymovement 0x9F in FireRed makes the character look left and right. I haven't seen this before, so maybe it's interesting to know.
 

Danny0317

Fluorite's back, brah
1,067
Posts
10
Years
  • Age 24
  • Seen Nov 19, 2023
Trying out some movements in Emerald because I have nothing better to do

0x4F - Player runs in place, facing down doesn't seem to stop, even with 0xFE after.
0x50 -0x53 - nothing.
0x5A and 0x5B -player faces up, 0xFE doesn't cancel the effects
0x5e - After it finishes when you walk right, it uses the walk left sprite.
0x68 - same as 0x4F
0x69 - same, but runs facing up instead
0x6A - same, but runs facing left instead
0x6B - same, but runs facing right instead
0x6C - seems to be walking in place, facing down
0x6D - seems to be walking in place, facing up
0x6E - seems to be walking in place, facing left
0x6F - seems to be walking in place, facing right
0x9B - player starts flying and does something cool http://imgur.com/qhLqOel

EDIT: I forgot to add another applymovement, my bad. 0x5F cancels the effect of 0x5E.
 
Last edited:

daniilS

busy trying to do stuff not done yet
409
Posts
10
Years
  • Age 24
  • Seen Jan 29, 2024
Here's a preview of the stuff in my upcoming Movement Documentation:
A piece of asm that makes you run-jump off ledges if B is pressed and you are not on a bike. It just annoyed me that when you were running you would still walk-jump off them, so I came up with a fix.

Code:
.text
.align 2
.thumb
.thumb_func
.global jump_2_with_sound_new

main:
	push {r4, lr}
	mov r4, r0
	mov r0, #0xA
	bl +0x16090
	mov r0, r4
	bl +0x7ED4
	ldr r1, buttonz
	ldrb r1, [r1]
	mov r4, #0x2
	and r1, r4
	beq next
	ldr r1, walkrun
	ldrb r1, [r1]
	cmp r1, #0x2
	beq next
	add r0, #0x70
next:
	mov r1, #0x8
	bl -0x218
	pop {r4, pc}

.align 2
buttonz:	.word 0x0300311C
walkrun:	.word 0x02037078

/*insert at 0805C23C*/

EDIT: fixed a typo.
 
Last edited:

Danny0317

Fluorite's back, brah
1,067
Posts
10
Years
  • Age 24
  • Seen Nov 19, 2023
Not sure if this could be of use to anyone, but I found this in emerald. sadly, it has no checkflag, I was trying to find a way to make you be able to use surf without the badge, but then again, maybe this could be useful to someone?

'---------------
#org 0x271EA0
checkattack 0x39
compare LASTRESULT 0x6
if 0x1 goto 0x8271ED6
bufferpartypokemon 0x0 LASTRESULT
setanimation 0x0 LASTRESULT
lockall
msgbox 0x8272FD6 MSG_YESNO '"The water is dyed a deep blue[.]\n..."
compare LASTRESULT 0x0
if 0x1 goto 0x8271ED5
msgbox 0x827300D MSG_KEEPOPEN '"[buffer1] used SURF!"
doanimation 0x9
releaseall
end

'---------------
#org 0x271ED6
end

'---------------
#org 0x271ED5
releaseall
end


'---------
' Strings
'---------
#org 0x272FD6
= The water is dyed a deep blue[.]\nWould you like to SURF?

#org 0x27300D
= [buffer1] used SURF!
 

DJTiki

top 3 most uninteresting microcelebrities
1,256
Posts
10
Years
So I want to implement a feature, which has a ZERO requirement for HM's. Of course, I wanted the things like Surf, Cut, etc. to still be available, at least in the overworld. I do believe that Pokémon, uses a something of a "check move" command, to initate the HM Overworld Exploring process. But since, we are removing HM's, what about a TM/HM Compatibility Check, to see if it could learn the moves, rather than if it haves the HM. It makes more sense that Pokémon can use HM's without their moves. All Water Pokémon can use Surf and Waterfall, not even having to use the HM's given.

The dynamic offsets for the TMHM Compatibilty Table follows as so:
BPRE(Fire Red)- 43C68
AXVE(Ruby)- 403B0
BPEE(Emerald)- 6E048

I'm pretty sure that is absolutely useless, but wanted to post something other than my ideas. I may start looking over Move Tutors, since they need to look into TMHM Compatibilty to teach moves. I'll edit this post with future findings.
 

Deokishisu

Mr. Magius
990
Posts
18
Years
So I want to implement a feature, which has a ZERO requirement for HM's. Of course, I wanted the things like Surf, Cut, etc. to still be available, at least in the overworld. I do believe that Pokémon, uses a something of a "check move" command, to initate the HM Overworld Exploring process. But since, we are removing HM's, what about a TM/HM Compatibility Check, to see if it could learn the moves, rather than if it haves the HM. It makes more sense that Pokémon can use HM's without their moves. All Water Pokémon can use Surf and Waterfall, not even having to use the HM's given.

The dynamic offsets for the TMHM Compatibilty Table follows as so:
BPRE(Fire Red)- 43C68
AXVE(Ruby)- 403B0
BPEE(Emerald)- 6E048

I'm pretty sure that is absolutely useless, but wanted to post something other than my ideas. I may start looking over Move Tutors, since they need to look into TMHM Compatibilty to teach moves. I'll edit this post with future findings.

I've had something exactly like this implemented in my hack for quite some time, where if a Pokemon is capable of learning a HM, it can use it in the field. I just did it the lazy way and scripted cut trees/rock smash rocks/surf script/etc. to check your party for a list of pokemon compatible with the moves. It will prefer Pokemon that know the move before choosing one that doesn't but can learn. It's inelegant, and lazy, but it works and is indistinguishable graphically from using HM moves in the field normally. I haven't come up with a solution for Fly, and since I'm on the fence about including it as a field move, I've not really tried. Ideally, the option for Fly in the party menu would appear after obtaining the badge and its HM, as that would be conceivably the earliest the player would be able to use it if they're not trading. But, that begs the question, do teleport and dig get the same treatment? Would having them available at no cost with a Pokemon that can learn it in your party make the game too easy?

EDIT: I suppose if you were really lazy, you could have the person that gives you Fly give you a Flight Map key item, or something, that checks the party for a Pokemon capable of using Fly before callasm-ing the flight map and letting you select a location.
 
Last edited:

DJTiki

top 3 most uninteresting microcelebrities
1,256
Posts
10
Years
I've had something exactly like this implemented in my hack for quite some time, where if a Pokemon is capable of learning a HM, it can use it in the field. I just did it the lazy way and scripted cut trees/rock smash rocks/surf script/etc. to check your party for a list of pokemon compatible with the moves. It will prefer Pokemon that know the move before choosing one that doesn't but can learn. It's inelegant, and lazy, but it works and is indistinguishable graphically from using HM moves in the field normally. I haven't come up with a solution for Fly, and since I'm on the fence about including it as a field move, I've not really tried. Ideally, the option for Fly in the party menu would appear after obtaining the badge and its HM, as that would be conceivably the earliest the player would be able to use it if they're not trading. But, that begs the question, do teleport and dig get the same treatment? Would having them available at no cost with a Pokemon that can learn it in your party make the game too easy?

The usage of Fly, would be a tough one. The main problem with this is the limitations, bound by Badges. I belive there is ASM, for turning the HM's to TM's, so I'd use that. So maybe, if we remove the option for badge orientated limitations, then this could be looked around. Funny you say that, about the scripts, because I thought of the same thing. xD

In terms of making the game easier. In my game, having the access to Dig and Teleport, wouldn't make much of a deference. But if we are talking hacks as a whole, it would make it easier. But that means, the player can focus more on the design aspects of the region, without worrying about placing many barriers. Also another issue, may be that you can go anywhere. Being how, most progression barriers, are HM overworld limits. So this is more of an implematation, more focused to an open setting, than a linear one. So yes, it would definetly make an 8 badge journey hacks, more easier. But it's also a convience to hackers, making more open-orientated game, like me :), who would love a feature like this, as both a player and hacker,
 

daniilS

busy trying to do stuff not done yet
409
Posts
10
Years
  • Age 24
  • Seen Jan 29, 2024
I'd rather go with a type check. So you'd need a grass or bug type for cut, a fighting type for rock smash, a flying type for fly, and so on.
 

Le pug

Creator of Pokémon: Discovery / Fat Kid
870
Posts
10
Years
Alright so me and DarkSneasel were trying to find a way to checkpokemon in your party for events in Emerald...

so I looked at all the different in-game trading scripts and I figured out this script:

Spoiler:


This script won't go through with the script unless you select from your party a volbeat. Here is a video rep of it:
https://www.dropbox.com/s/lb4kj8h1quelcz7/here.AVI

So I noticed that what actually should change it is the 0x8008 var. There are 4 different in-game trading scripts. Check out the difference between three of them:

For volbeat:
Spoiler:


For Ralts:
Spoiler:


For Skitty:
Spoiler:


So we're trying to figure out how to make this fully functional so the hacker can change what pokemon it's looking for. I'm pretty sure it's in 0x8008 var. So if anyone has any more clues, it'd be awesome to help out!
 
Back
Top