Advertiser Content

Jeesh

The Emerald Rights Activist.

Male
Seen 4 Days Ago
Posted August 25th, 2019
53 posts
3.1 Years
THIS THREAD IS VERY UNFINISHED, BUT IT IS BEING WORKED ON. IF YOU WANT TO CONTRIBUTE, FEEL FREE TO POST IN THIS THREAD AND I WILL ADD IT TO THE MAIN POST.
erhem.
I don't know if there exists a thread for this topic, but it's probably buried, so here's a new one!

Howdy do, my fellow communitees. Lately, somethings been bugging me in my ROM Hacking career: The Pokémon Emerald Battle Sprite animations. Y'know, these things:
lookit the cute widdle flygon d'awwww
And the question that stirs in my mind: "Are they worth it?" Multiple sources of Emerald ROM hackers say its best to disable them, because they cause to much unnecessary work to be done, whether it be in sprites, animation paths, or frame delays.
However, I say NAY!
I am a firm believer that the animation aspect of Pokémon Emerald is one of the elements that distinguishes it from the rest of the Gen 3 ROM hacking roster, and for that reason, I have decided to help spread my knowledge on the topic, hopefully encouraging hackers young and old, novice and veteran, to include this cool stuff in your hack.
In this thread, the discussion of animation encoding, such as hex values, offsets, and other little goodies will be partaken, to give those Emerald hackers an easier approach to the topic.
Now you might be thinking: "Oh, no! But I only have 1 frame sprites! How am I supposed to make 2 frames? I can't art!" Well have no fear, because there is already a thread where ROM hackers and pixel artists throughout the community are working their magic to make that a reality! You can check out their snazzy work by clicking this beautiful string of blue words.
Without further ado, lets get into the data. Lets start with...

Front Animation Table
In your average Pokémon Emerald ROM, the average offset for this will be located at 3299EC. This table decides how the Pokémon will move and change size or color. There are 150 different animation paths, and so far I've only gone up to 52, which is the last seen used path. NOTE: THE PATHS COUNT UP BY HEXADECIMAL CODE.
Here's how you can change the path (and this applies to ALL 1 byte tables): When you find the offset, you'll have to do a bit of manual searching to find the mon you're looking for, but it shouldn't be that hard. Each Pokemon takes up one byte (aka two letters/numbers, like FF or 00) in the code. So changing that simple two digit/letter byte to any of the ones listed in the spoiler below will change that animation to the animation you chose. The spoiler contains a brief explanation, some with examples, of the animation the byte code entails. Again, there are 150 different paths, but 52 is more than enough if you want to do a simple animation hack.
FRONT ANIMATION PATHS
Spoiler:
00 = Treeko - a little upward stretch
01 = Swellow, Wailmer, Mudkip, Regirock - Stretch and grow motion, in a bouncy manner
02 = Vibrava - Shakes back and forth
03 = Zigzagoon - Sort of "serpentines" back and forth in a slower motion than 02
04 = Marshtomp - Serpentines again, but vertically this time
05 = Ludicolo, Seedot - Hops by tilting left and right
06 = Dustox - Does a few hops in place, then hops back and forth
07 = Snorlax, Slowbro - Tilts back and forth to great distances
08 = Does same as 07, but faster and multiple times
09 = Shakily (?) shrinks in and out, as if screaming. Looks like Electrodes animation from HGSS
0A = Glalie, Duskull - Move in a zig zag vertically
0B = 07 but to...shorter distances?
0C = Is literally 08, I see no difference
0D = Mantike, Jirachi - Swings back and forth like a bell, perfect for Bronzong
0E = 0D...BUT FASTER! AND MORE SWINGS!
0F = Fast serpentine-ing, also to shorter horizontal distances
10 = Corphish, Armaldo, Tropius - Shakes vertically once, unlike Cradily and Aggron who shake twice
11 = Shakes EVERYWHERE spastically
12 = Clamperl, Anorith - ACTUAL shaking on a center axis
13 = Wartortle, Slowking - An in n' out stretch in size
14 = Regice - Float around very fast in a circle
15 = Gastly, Sableye - Fades in and out a black silhouette overlap
16 = Stretches outward, flattens a tad bit
17 = Ivysaur, Arbok - An upward stretch
18 = The classic floaty animation, but starts by going upward, maybe there's another for Shedinja, Shuppet, Wailord, Gorebyss, etc.
19 = Cradily, Bagon, Aggron - Shakes vertically twice
1A = The Growlithe charge.
1B = Deoxys? Is that you? The 'mon tilts widely up and down, rotating in the process to a slight degree.
1C = Shuppet, Wailord, Shedinja - THIS is the average floaty thing. It starts by floating downward.
1D = Chimeco - Horizontal floateh.
1E = The Charmander hop in place.
1F = Theeeeeeres Spheal! Two 360 degree rotations happen.
20 = KAKUNA. The 'mon turns a slight hue of yellow.
21 = Same as Kakuna, but 'mon turns a slight hue of red. It'd be good for Magmoratar, tho.
22 = Milotic - 'Mon turns a hue of blue. (That rhymed!)
23 = WOAH. 'Mon turns a BRIGHTER hue of yellow in this one. I guess I can call Kakuna's animation a hue of orange now.
24 = If you're a rather flamboyant Pokemon, this is the animation for you. Turn a slight shade of purple!
25 = Charmeleon - The "swiper" move.
26 = An unused one where the 'mon moves diagonally forward and does a 360. Dope.
27 = Flashin' in and out. Kinda like Kecleon.
28 = A much bigger movement of 26.
29 = A...um...26? Just look at it yourself.
2A = Magnemite. Just. Magnemite.
2B = Fearow - Flying left and right, flipping sprite horizontally.
2C = Elekid, Pikachu, Magneton - The yellow sparky flashing silhouette, for all your classic electric Pokemon
2D = Another fast 07...short distance, only happens once.
2E = A fast 0D
2F = Golem, Venusaur - STOMPIN'!
30 = Almost completely flattens, then almost ompletely thins out. In that order.
31 = Hoppedy hop. A few simple hops. Not as precise as Rattata, though. They're just tiny jumps.
32 = Poliwhirl - Big hops. 2 big jumps. Boing!
33 = Fast. Big. 07.
34 = HARIYAMA.
35 = KECLEON.
36 = Looks like it was unused, cuz I can't think of any that have used it! Nonetheless, the 'mon tilts like 45 degrees then bounces forward a bit. Check it out for yourself, it could be interesting.
37 = Also another unused one. There are 2 bounces involed, and its really hard to explain it in words, just look at it yourself.
38 = Another unused one, but this ones pretty cool. It tilts upward, stops and shakes as if its roaring, then falls back down. Neat.
39 = REALLY SPASTICAL SHAKING. MOST LIKELY AN UNUSED ANIMATION.
3A = Good ol' Lugia. The sprite enlargens and gets up in your face.
3B = An unused one. IT LOOKS LIKE THE 'MON IS ACTUALLY JUMPING ITS SO COOL.
3C = Looks like 3B, but its not 3B. It's a lot...wavier.
3D = 3B, but slowly rising.
3E = 3B, but horizontally.
3F = A much larger 3E.
40 = A perspective one. The 'mon shrinks in and out. Once to the left, then to the right.
41 = Dodrio, Heracross - Bulges out, bounce-like, twice.
42 = 40, but perspectively, IN A CIRCLE. Ooooooo.
43 = Rattata. The shimmying left and right.
44 = Flying around in random directions.
45 = Ralts - Press down for bounce and then spring up.
46 = Back to the serpentine. Its probably a different variant, but I see no difference.
47 = Cacturne - The serpentine up and down. Pretty slow.
48 = Cacnea, Whiscash, Feebas - Hops and tilts left and right a few times.
49 = A slower 48.
4A = Another slower 48.
4B = A slow Duskull/Glalie zigzag.
4C = A really fast serpentine left and right.
4D = Fast serpentine up and down.
4E = The Clamperl shake, but TWICE.
4F = Moves in small circles, a smaller and slower Regice.
50 = Literally Aggron and Cradily again.
51 = A slower Shedinja/Shuppet float.
52 = The hoppity-hop seen on Charmander


Back Animation Table
This is the table for back animation sprites, or the sprites that show you the butt of the Pokemon. These animations, as least as far as Gen 3 and Diamond and Pearl, are 1 frame, and we don't have a very sure idea as to how to make it 2. However, it is located at offset 60A8C8. As well as the front sprite animation paths, these codes are 1 byte long, but unlike the front animation paths, it starts with the ? 'mon instead of Bulbasaur. Coming soon is a good, long list describing each one.

Animation Delay Table
Not much I know about this as of late, but I believe that it has to do with when and how many times the 'mon changes to it's 2nd animation frame. Most 'mons change their frame once, but those like Tailow who spastically flap their wings, they have a much larger amount of frame changes. This must be the table that decides that. Each code is 1 byte long, starts with Bulbasaur. It is located at the offset 329B87. Coming soon is a good, long list describing each one.

Frame Control Table
...
Oh dang.
Maybe this is the table for the description I just gave.
Advanced hackers if you know pls help
For whichever, I'll be coming atcha with info later.

Animation Rotating and Scaling Table
This is a table that isn't really necessary to touch. It is the table that holds aaaaaaall the info for movement paths and resizing and stuff. Everything that moves or changes in a Pokemon's front sprite movement path. Since it's like the basis of all the other tables, I'd recommend leaving this one alone. Unless you REEEEEAAAALLY want to change a movement path. But AGAIN. 150 PATHS.
It's located at offset 60AA88 btw.
That's all so far. Expect updates as soon as December 5th. I'm just getting started with this.

DizzyEgg

Age 22
Male
Poland
Seen 1 Day Ago
Posted 6 Days Ago
788 posts
5.8 Years
Pokemon Animations
*clap* *clap* *clap*

Finally someone who recognized the issue. I've made a post about this recently, though it didn't get many replies. Now, let's throw some offsets:

083299EC front_animation_table: one byte each entry; starts with Bulbasaur
0860A8C8 back_animation_table: one byte each entry; starts with ? Mon
08329B87 animation_delay_table: one byte each entry; starts with Bulbasaur
08309AAC frame_control_table: it's a pointer to two or three pointers that point to something. The first pointer is always the same. Not sure what this exactly does(It's used in Transform's animation though). Starts with ? Mon and ends on the last Unown.
0860AA88 animation_rot_scaling_table: (the functions responsible for moving a front sprite)
I'd also like to clarify one thing about animations. All animations can be either one or two-frame. The function that checks if a poke has two-frame animation is located at 0806F0D4. Spinda, Deoxys and Unown are the only pokemon who use juts one-frame.

With that in mind we can modify and add new animations as well as keep them and have expanded pokemon use one-frame ones.

And one more thing, the pokemon expansion in my signature expands all those tables.

Jeesh

The Emerald Rights Activist.

Male
Seen 4 Days Ago
Posted August 25th, 2019
53 posts
3.1 Years
*clap* *clap* *clap*

Finally someone who recognized the issue. I've made a post about this recently, though it didn't get many replies. Now, let's throw some offsets:

083299EC front_animation_table: one byte each entry; starts with Bulbasaur
0860A8C8 back_animation_table: one byte each entry; starts with ? Mon
08329B87 animation_delay_table: one byte each entry; starts with Bulbasaur
08309AAC frame_control_table: it's a pointer to two or three pointers that point to something. The first pointer is always the same. Not sure what this exactly does(It's used in Transform's animation though). Starts with ? Mon and ends on the last Unown.
0860AA88 animation_rot_scaling_table: (the functions responsible for moving a front sprite)
I'd also like to clarify one thing about animations. All animations can be either one or two-frame. The function that checks if a poke has two-frame animation is located at 0806F0D4. Spinda, Deoxys and Unown are the only pokemon who use juts one-frame.

With that in mind we can modify and add new animations as well as keep them and have expanded pokemon use one-frame ones.

And one more thing, the pokemon expansion in my signature expands all those tables.
Gee, thanks! I try to help when I can :D

Also, applied your knowledge to the main thread.

Also, I retried your Pokemon expanding tool after I BootCamp'd Windows 10 and worked it out there. IT WORKED! Thats how I was able to test all this. So thanks! Sorry I doubted you.

DizzyEgg

Age 22
Male
Poland
Seen 1 Day Ago
Posted 6 Days Ago
788 posts
5.8 Years
Gee, thanks! I try to help when I can :D

Also, applied your knowledge to the main thread.

Also, I retried your Pokemon expanding tool after I BootCamp'd Windows 10 and worked it out there. IT WORKED! Thats how I was able to test all this. So thanks! Sorry I doubted you.
Just one thing. The delay table is the number of frames to wait before starting animations. So if you were to set it to FF, you'd have to wait a bit before it would move. The in-game pokemon that I know has it set to some 'high' value is Wynaut. Check for yourself it doesn't animate the moment it appears on screen.

Jeesh

The Emerald Rights Activist.

Male
Seen 4 Days Ago
Posted August 25th, 2019
53 posts
3.1 Years
Very helpful. Really wish there could be a video or something showing all of the animations, including the unused ones, though.
That can be arranged. If enough people request I might just do one.

Aw heck, I might do one anyway, because visualizing them is so much better than explaining them. No promises though. {XD}

Gamer2020

Accept no Imitations!

Male
Distant Land
Seen September 15th, 2019
Posted January 6th, 2019
942 posts
11.4 Years
That can be arranged. If enough people request I might just do one.

Aw heck, I might do one anyway, because visualizing them is so much better than explaining them. No promises though. {XD}
Gifs of all of them might be a bit better in my opinion but that's just me.

Jeesh

The Emerald Rights Activist.

Male
Seen 4 Days Ago
Posted August 25th, 2019
53 posts
3.1 Years
Gifs of all of them night be a bit better in my opinion but that's just me.
But I mean, what's an easy tool to make GIFs with? I figure a video is better for this type of stuff.
>Emerald hacks need to come back.
>Make EMerica great again.
>I'm a Hoenn PROenn.
>Free the E.
>All hacks are created equal...but Emerald is cool.
>Charizard got nothin' on Rayquaza.
>Learn to hack the hard way. Go with Emerald.

Deokishisu

Mr. Magius

Male
If I'm online, it's a safe bet I'm at a computer.
Seen January 9th, 2019
Posted March 4th, 2018
859 posts
13.8 Years
Doesn't Bulbapedia have all the GIFs of Emerald Pokemon moving around?
For ROMHackers, PokeCommunity is dead after the scandal. If you enjoy the ROMHacking scene, come with the rest of us to Silph Co. It is a forum by ROMHackers, for ROMHackers. None of the bloat of PC, and staff that knows what our subset of the community needs.

Jeesh

The Emerald Rights Activist.

Male
Seen 4 Days Ago
Posted August 25th, 2019
53 posts
3.1 Years
Doesn't Bulbapedia have all the GIFs of Emerald Pokemon moving around?
Well, technically yes, but only up to path 52. There are, like 150 animation paths that average Emerald animations barely even scratch the surface with. New gifs would have to be created for those.

EDIT: As a matter of fact, for the first 300 something Pokemon, heres a website that has the legitimate gifs, displaying the first 52 paths.

And they work in the forum! Watch:


>Emerald hacks need to come back.
>Make EMerica great again.
>I'm a Hoenn PROenn.
>Free the E.
>All hacks are created equal...but Emerald is cool.
>Charizard got nothin' on Rayquaza.
>Learn to hack the hard way. Go with Emerald.
Male
Singapore
Seen June 26th, 2018
Posted June 18th, 2018
87 posts
5.7 Years
Here's something I've done before:
I'm not sure if this has been posted somewhere else, but... To those people who want to expand the number of Pokémon on Emerald while retaining the animations: Step 1:
Spoiler:
You need to repoint the table that indexes all of the Pokémon front sprite animations. Open up a hex editor, go to 3299EC, copy 0x1B8 or 411 bytes of data into free space. You need to add as many 00s as there are new Pokémon after the end of the table. Repoint the table to your new location. There should be 4 pointers to repoint.
Step 2:
Spoiler:
Next, you need to repoint the table that indexes all of the Pokémon back sprite animations. Go to 60A8C8, copy 0x1B8 bytes into free space, then add the 00s again. Repoint the table. There should only be one pointer at 17F488
Step 3:
Spoiler:
Now, you need to repoint the table that controls the timing of the Pokémon frame switching. Go to 309AAC, select 0x6E0 bytes of data, and then copy into free space. Repoint it, there should be 5 pointers to the table. Now, how the table works is that it has pointers to certain strings of data that control the timing. Thus, we need to add pointers to the end to prevent glitches. The timing parameters that you should use vary between Pokémon and different versions of said Pokémon's sprite. For instance, Swalot's timing pointer is well-used for jumping frames and so on. Since there is no known index for the timing, the method I use is to observe different Pokémon animations in Emerald then choose from there. Also, when you repoint the normal palette table (the one at 0x303678), you have to index every palette properly. What I mean by this is that, for every entry of a Pokémon's palette: 70 6E C3 08 0B 00 00 00 You have to add 0x1 and write the bolded bytes in little endian form, as the front sprite animation routine uses this to determine which front sprite switching offset is to be used. So for example, for Pokémon 0x1E9 (#489): XX YY ZZ 08 E9 01 00 00 where ZZ YY XX is the offset where the palette is stored. Credits to PurpleOrange for spotting the bug and Sky High for fixing it.
Step 4:
Spoiler:
So, there is one final table we need to repoint. This table controls the amount of time that passes before the animation of the Pokémon is executed (thanks PurpleOrange). Go to 329B87, select 0x1B8 bytes of data (one for every Pokémon), then copy into free space. Now add as many 00s on the end as there are Pokémon. You can change this later to a higher number to delay the amount of time before the animation takes place. Repoint the table, there should be 2 pointers to it.
Step 5:
Spoiler:
Finally, the limiters. In your hex editor, go to 0x34BFE and overwrite it with 07 E0 (for the sprites), and then go to 0xA5FEE and overwrite that with 03 E0. That's it!
As for the structure of the animation tables, here's what I know: There are 2 index tables, which I call the front animation index and back animation index tables, that basically are a bunch of numbers, one per mon, that control which animation plays. The animation played varies from 00 to 96, or a total of 151 animations, each of which is unique. These 2 tables are at 3299EC and 60A8C8 respectively. Then, there's another table at 309AAC which basically controls how long each frame stays on the screen. There's one pointer per mon that points to a string of data that controls the timing; I have no idea how the pointed-to data works. However, the data in this table isn't the only thing controlling how the timing runs; apparently, the numbers that come after the pointer in the front/back sprite/palette tables (e.g. 0B 00 for Pokemon 0xB) determine which pointer is used. This seems to also apply for the front and back sprite animation tables as well. Finally, there's a table at 329B87 that controls how long the animation is. This table is structured as one byte per mon, and the shortest animation duration value is 00, with higher values translating to longer duration of animation. Hope this helps.

Wesley FG

Pokémon Kalos Advance !! Gba Hack

Male
Brazil
Seen June 28th, 2019
Posted February 5th, 2019
340 posts
11.1 Years
ok my contribuition for it i really love it
all numbers here are DECIMAL perfect for work with PGE

i make the gifs for better compreension, sorry for some bad quality

  • Front Sprite Animation List

Spoiler:

00 -
01 -
02 -
03 -
04 -
05 -
06 -
07 -
08 -
09 -
10 -
11 -
12 -
13 -
14 -
15 -
16 -
17 -
18 -
19 -
20 - I need make i gif (no used in game)
21 -
22 -
23 -
24 -
25 -
26 -
27 -
28 -
29 -
30 -
31 -
32 -
33 -
34 -
35 -
36 -
37 -
38 -
39 -
40 -
41 -
42 -
43 -
44 -
45 -
46 -
47 -
48 -
49 -
50 -
51 -
52 -
53 -
54 -
55 -
56 -
57 -
58 -
59 -
60 -
61 -
62 -
63 -
64 -
65 -
66 -
67 -
68 -
69 -
70 -
71 -
72 -
73 -
74 -
75 -
76 -
77 -
78 -
79 -
80 -
81 -
82 -
83 -
84 -
85 -
86 -


  • Back Sprite Animation List

Spoiler:

01 -
02 -
03 -
04 -
05 -
06 -
07 -
08 -
09 -
10 -
11 -
12 -
13 -
14 -
15 -
16 -
17 -
18 -
19 -
20 -
21 -
22 -
23 -
24 -
25 -
Kalos Demake Soon!!
Seen May 20th, 2019
Posted April 24th, 2019
9 posts
1.6 Years
ok my contribuition for it i really love it
all numbers here are DECIMAL perfect for work with PGE

i make the gifs for better compreension, sorry for some bad quality

  • Front Sprite Animation List

Spoiler:

00 -
01 -
02 -
03 -
04 -
05 -
06 -
07 -
08 -
09 -
10 -
11 -
12 -
13 -
14 -
15 -
16 -
17 -
18 -
19 -
20 - I need make i gif (no used in game)
21 -
22 -
23 -
24 -
25 -
26 -
27 -
28 -
29 -
30 -
31 -
32 -
33 -
34 -
35 -
36 -
37 -
38 -
39 -
40 -
41 -
42 -
43 -
44 -
45 -
46 -
47 -
48 -
49 -
50 -
51 -
52 -
53 -
54 -
55 -
56 -
57 -
58 -
59 -
60 -
61 -
62 -
63 -
64 -
65 -
66 -
67 -
68 -
69 -
70 -
71 -
72 -
73 -
74 -
75 -
76 -
77 -
78 -
79 -
80 -
81 -
82 -
83 -
84 -
85 -
86 -


  • Back Sprite Animation List

Spoiler:

01 -
02 -
03 -
04 -
05 -
06 -
07 -
08 -
09 -
10 -
11 -
12 -
13 -
14 -
15 -
16 -
17 -
18 -
19 -
20 -
21 -
22 -
23 -
24 -
25 -
Vlw mano, isso vai me ajudar muito.
Advertiser Content