Just out of curiosity - Why do you say working on?
This looks pretty d**n good to me. Obviously, I can't see any potential bugs which could arise from this, but it looks fine to me.
Anyway - when it's finished, will you release the code? As it's something which would come in very handy in my 649 Patch. I would (of course) credit you if you did release it. :)
I want to find a better place to put it. Right now, the image showing if it's physical/special/status appears a frame before the rest of the screen is loaded. :\ I mean, it's not that bad. I just don't
love it.
Change these bytes:
@0813A130: 0x2F
@0813A17B: 0x47
@0813A1A0: [Pointer to Routine, plus 1 (one).]
Here's the source:
.align 2
.thumb
Start:
push {r0-r4}
ldr r0, .CurMoveIndex
ldrb r1, [r0]
lsl r1, r1, #1
ldr r0, .Move_List
add r0, r0, r1
ldrh r3, [r0]
lsl r0, r3, #1
add r0, r0, r3
lsl r0, r0, #2
ldr r1, .MoveBase
add r0, r0, r1
ldrb r4, [r0, #10]
lsl r0, r4, #1
add r4, r4, r0
lsl r4, r4, #6
ldr r0, .SplitImages
add r0, r4
ldr r1, .VRAM
mov r2, #0x30
swi #0xB
ldr r0, .SplitImages
add r0, r4
add r0, #0x60
ldr r1, .VRAM
mov r2, #0x1E
lsl r2, #0x04
add r1, r1, r2
mov r2, #0x30
swi #0xB
Finish:
pop {r0-r4}
ldr r4, .Some_Offset
ldr r0, [r4]
ldr r1, .Return_Addr
bx r1
.align 2
.MoveBase: .word 0x08250C04
.CurMoveIndex: .word 0x0203B16D
.Move_List: .word 0x02003268
.VRAM: .word 0x06001800
.SplitImages: .word 0xYYYYYYYY
.Some_Offset: .word 0x0203B148
.Return_Addr: .word 0x0813A17C+1
Change the .SplitImages (0xYYYYYYYY) pointer to where ever you have the images.
The images are uncompressed. And should look like this:

They need to be in this order. Use TileMolester or something to insert them.
They use the same palette as the Types, which is located at 0x08E95DBC in a clean FireRed ROM. :)