Well, pokemon_getattr (803FBE8) doesn't take an index as the first argument, it takes a pointer to the Pokemon data. Take the index from 0x8004, multiply by 100 and add it to 02024284 to get the correct party index. Also, your LDR syntax is wrong. If you make a literal pool you don't need the ldr rx, =(SYMBOL). It's just ldr rx, SYMBOL. You only need the = when you're loading a number and you only need the brackets if you're doing arithmetic.
Also you can save space by using the shorthand ldr syntax, ldr rX, [rN, #OFFSET]. That will save an add instruction and allow you to only load one or two variable addresses.