Shiny Quagsire
I'm Still Alive, Elsewhere
- 697
- Posts
- 15
- Years
- Age 27
- Hoenn Safari Zone
- Seen Aug 8, 2020
OK, so me and xGGxToiZ have decided to release our knowledge to the general public. This knowledge is the knowledge of trainer animations!
xGGxToiZ noticed the pointer I found to a blank animation while looking at the trainer's back animations (No, this is not the front animations!). Here's the origanal post:
It was quite odd, because it also led to the trainer's sprite, and several other things we don't know.
So how do we do this? Simple! Let me quote xGGxTioZ:
So, like he said, each trainer gets it's own animation pointer. So go to the table, and multiply your trainer's sprite's number (Starting from 0) by 4, and add it to the table offset. Now repoint the following pointer to free space, and write out your animation data. Here's how it works:
Animation data is a sequence of 4 bytes, giving data on various information, and ends in FF FF 00 00.
The first byte is the frame number from 0 Up to as many frames as you want!
The second byte is unknown, but I'll look into the ASM coding to figure it out.
The third byte is the duration. 0x10 is about a half second.
The fourth byte is unknown
The format is two bytes for the frame, two bytes for the duration. The values are simple flipped half-words.
After you've typed up as many of these sequences you want, end it in FF FF 00 00. Here's one I used for Pokemon Chrome:
I'm not sure why I used the 0's, but it works. This is a good example of going in any order. I went from my 3rd frame, to my second, to my first. The duration of 30 at the end delays when the pokemon are sent out.
xGGxToiZ noticed the pointer I found to a blank animation while looking at the trainer's back animations (No, this is not the front animations!). Here's the origanal post:
Spoiler:
I found some more animation data. It's huge though,
it's at offset 239EBB.There are 6 different trainers: the boy, the girl, trainer dude, old man, brendan, and may. plus, they're all the same!I played with the values, and it's correct. These are the animations for the trainer backsprites! Funny, there are pointers to 2347E8, which contains this:Code:01 00 14 00 02 00 06 00 03 00 06 00 04 00 18 00 00 00 01 00 FF FF 00 00 01 00 14 00 02 00 06 00 03 00 06 00 04 00 18 00 00 00 01 00 FF FF 00 00 01 00 18 00 02 00 09 00 03 00 18 00 00 00 09 00 FF FF 00 00 01 00 18 00 02 00 09 00 03 00 18 00 00 00 09 00 FF FF 00 00 00 00 18 00 01 00 09 00 02 00 18 00 00 00 09 00 03 00 32 00 FF FF 00 00 00 00 18 00 01 00 09 00 02 00 18 00 00 00 09 00 03 00 32 00 FF FF 00 00
I fiddled with the first value, the frame, and changed it to 05, and check out the result!Code:00 00 00 00 FF FF 00 00
![]()
Oh, and I was a boy at the time.
It was quite odd, because it also led to the trainer's sprite, and several other things we don't know.
So how do we do this? Simple! Let me quote xGGxTioZ:
xGGxTioZ said:Okay, each trainer sprite has their own pointer to E8 47 23 08. So I searched for that and voila!
Code:Table starts at: 0x238E8C Select: 250h Bytes. (148d * 4d)
This means, each trainer can have their own number of frames! Exciting, huh? And if we can expand it, who knows what are the possibilities!
So, like he said, each trainer gets it's own animation pointer. So go to the table, and multiply your trainer's sprite's number (Starting from 0) by 4, and add it to the table offset. Now repoint the following pointer to free space, and write out your animation data. Here's how it works:
Animation data is a sequence of 4 bytes, giving data on various information, and ends in FF FF 00 00.
The second byte is unknown, but I'll look into the ASM coding to figure it out.
The third byte is the duration. 0x10 is about a half second.
The fourth byte is unknown
The format is two bytes for the frame, two bytes for the duration. The values are simple flipped half-words.
After you've typed up as many of these sequences you want, end it in FF FF 00 00. Here's one I used for Pokemon Chrome:
Code:
00 00 00 00
02 00 FE 00
02 00 30 00
01 00 0F 00
00 00 30 00
FF FF 00 00
I'm not sure why I used the 0's, but it works. This is a good example of going in any order. I went from my 3rd frame, to my second, to my first. The duration of 30 at the end delays when the pokemon are sent out.
Last edited: