What he meant there, was that str and ldr don't look like this:
ldr r1, [r0]
str [r0], r1
see how they are opposites?
~~~~~~~~
Judging from what I know, that code should not work.....
Seeing as how I wrote my own forme change code... I know how str works.....
Edit: what threw me off was the ldrh. That code will work. One sec....
.text
.align 2
.thumb
.thumb_func
.global healthbooster
main:
push {r0-r1, lr}
ldrh r0, .POKE_DATA /*You are loading an address into r0, always load the full thing, not half. Though, it may not make a difference, not a good habit.*/
ldrh r1, [r0] /*load what is at the address .POKE_DATA into r1. Here you are loading a word, shouldn't you be loading a half-word?*/
add r0, r0, #0x64 /*Add 100 to r0, and place on r0. Looks like, we are moving to the next pokemons HP, which is 100 bytes away...*/
strh r0, [r1] /*Store the bottom half of that address as the new HP on the original first pokemon.*/
pop {r0-r1, pc}
.align 2
.POKE_DATA:
.word 0x02024287
So, effectively, you stored the address of the second pokemon as the HP of the first pokemon. Which would have maxed it out.
Creating a correct version now....