• Welcome to Smashboards, the world's largest Super Smash Brothers community! Over 250,000 Smash Bros. fans from around the world have come to discuss these great games in over 19 million posts!

    You are currently viewing our boards as a visitor. Click here to sign up right now and start on your path in the Smash community!

Animation hacking Documentation

Itaru

MasterGanon
Joined
Jun 25, 2014
Messages
279
Location
日本 茨城県
Falcon's UpTilt with Ganon

I explain with Ganon's UpTilt and Falcon's UpTilt.

First.
Ganon's UpTilt command starting offset is 0x4870. (With CrazyHand)
So, search 00004850 (0x4870 - 0x20).
You will find this.
PlGn.dat
1.png

Red line is UpTilt's "mother command" (We need to define this command's name. I suggest "mother command")
Green is search result.
Orange is Animation file size of "AttackHi3" in PlGnAJ.dat .
Blue is starting offset of Animation file "AttackHi3" in PlGnAJ.dat .

And, open PlGnAJ.dat and go to 0x54340.

2.png


First 32 bites is header(?)

Falcon's UpTilt Animation file size(AttackHi3) is 0x26C5 (Starting offset is 0x55E20.)
You can write Falcon's UpTilt in Ganon because 0x43AF > 0x26C5

So, select falcon's Uptilt
Paste in a new window and change "PlyCaptain5K..." to "PlyGanon5K..."
6.png

Now, size is 26C3. So, you need to change header, 26C5 -> 26C3.
And, copy all and Overwrite in offset 0x54340 in PlGnAJ.dat(Do not change file size!)

Last, change 43AF to 26C3 in "mother command" in PlGn.dat.
 
Last edited:

zankyou

Smash Lord
Joined
Sep 12, 2014
Messages
1,055
Didnt realize that the pl**.dat files contained pointers for the pl**aj.dat files. Thats going to make animation hacking a bit more tedious.
 

omegagmaster

Smash Cadet
Joined
Dec 20, 2015
Messages
44
So does this mean you could code a sword version of Ganondorf using his sword model and Marth's anims? :joyful:
 

tatatat0

Smash Journeyman
Joined
Jan 28, 2015
Messages
412
Pretty neat for swapping animations but still need to figure out the format.
 

GamingMaster

Banned via Warnings
Joined
Oct 3, 2013
Messages
227
NNID
AbnormalAdept
dream sandbag
a-marios jab
a dtilt-falcon
a uptilt-sheik u tilt
a side tilt-ganon a side tilt
usmash-roy usmash
dsmash-pikachu d smash
side smash-mario side smash
b-ganons jab with hydro pump subaction
b side-luigi missile
b up-mario up b
b down-pikachu down b
nair-falcon nair
uair-zelda uair
dair-ganon dair
bair-dr mario bair
fair-sheik fair
grab-falcon
pummel-falcon
d throw-falcon
up throw-falcon
f throw-falcon
b throw-falcon
taunt-ness
 

omegagmaster

Smash Cadet
Joined
Dec 20, 2015
Messages
44
dream sandbag
a-marios jab
a dtilt-falcon
a uptilt-sheik u tilt
a side tilt-ganon a side tilt
usmash-roy usmash
dsmash-pikachu d smash
side smash-mario side smash
b-ganons jab with hydro pump subaction
b side-luigi missile
b up-mario up b
b down-pikachu down b
nair-falcon nair
uair-zelda uair
dair-ganon dair
bair-dr mario bair
fair-sheik fair
grab-falcon
pummel-falcon
d throw-falcon
up throw-falcon
f throw-falcon
b throw-falcon
taunt-ness
It would be hard, since Sandbag has no arms or legs. Just a torsohead.
 

SinsOfApathy

Smash Journeyman
Joined
Feb 24, 2015
Messages
474
NNID
Psion312
It would be hard, since Sandbag has no arms or legs. Just a torsohead.
Itaru did command modding with sandbag before. It's probably realistically plausible, if someone sat down to do it.
 
Last edited:

GamingMaster

Banned via Warnings
Joined
Oct 3, 2013
Messages
227
NNID
AbnormalAdept
i mean its sandbag my dream moveset is more like elemental and smacking the opponents rather than fighting with arms
 

GamingMaster

Banned via Warnings
Joined
Oct 3, 2013
Messages
227
NNID
AbnormalAdept
not to mention he cant be ko'ed and cannot have sound just hit sound to be more "realistic"
 

omegagmaster

Smash Cadet
Joined
Dec 20, 2015
Messages
44
not to mention he cant be ko'ed and cannot have sound just hit sound to be more "realistic"
I should really find the time to learn ASM and write a code that allows Sandbag to be KO'ed from the blastlines. I just can't find the time to look at the tutorials, let alone test basic codes. Besides, even if Sandbag did get knocked off stage, he would literally attempt to recover, potentially fail, and if he does, he will just fall for the entire match.
 
Last edited:

SinsOfApathy

Smash Journeyman
Joined
Feb 24, 2015
Messages
474
NNID
Psion312
I should really find the time to learn ASM and write a code that allows Sandbag to be KO'ed from the blastlines. I just can't find the time to look at the tutorials, let alone test basic codes. Besides, even if Sandbag did get knocked off stage, he would literally attempt to recover, potentially fail, and if he does, he will just fall for the entire match.
Haven't written proper C in a while, but this is what it would look like.

Code:
uint32_t* (*charPointer)(int) = 0x80034110;
bool (*checkBlastzone)(int*) = 0x800d3158;
void (*deathFromKill)(int*) = 0x802f6af8;

for (int i = 0; i < 4; ++i){
    uint32_t *player_t = charPointer(i);
    if(player_t != 0){
       uint32_t *charID = *player_t + 0x04; //Grab the player's Internal ID
       if (*charID == 0x20){ //Check if Sandbag
             if(checkBlastzone(player_t) == true){
                  deathFromKill(player_t); //Sandbag can never get falls
             }
       }
    }
}
 
Last edited:

tatatat0

Smash Journeyman
Joined
Jan 28, 2015
Messages
412
Haven't written proper C in a while, but this is what it would look like.

Code:
uint32_t* (*charPointer)(int) = 0x80034110;
bool (*checkBlastzone)(int) = 0x800d3158;
void (*deathFromKill)(int) = 0x802f6af8;

for (int i = 0; i < 4; ++i){
    uint32_t *player_t = charPointer(i);
    if(player_t != 0){
       uint32_t *charID = *player_t + 0x04; //Grab the player's Internal ID
       if (*charID == 0x20){ //Check if Sandbag
             if(checkBlastzone(player_t) == true){
                  deathFromKill(player_t); //Sandbag can never get falls
             }
       }
    }
}
bool isn't a native type, unless you import stdbool.h. _Bool is native, but _Bool is just 0 or 1, so true would be undefined.
 

SinsOfApathy

Smash Journeyman
Joined
Feb 24, 2015
Messages
474
NNID
Psion312
bool isn't a native type, unless you import stdbool.h. _Bool is native, but _Bool is just 0 or 1, so true would be undefined.
I mean, it's not even a function, so of course I wasn't declaring imports lol. Was mostly just writing the prototype out.

Edit: Plus, couldn't even declare int i = 0; in the for loop unless -C99 is set anyways.
 
Last edited:

zankyou

Smash Lord
Joined
Sep 12, 2014
Messages
1,055
Has anyone been looking into the animation file and how animations are formatted.
 

zankyou

Smash Lord
Joined
Sep 12, 2014
Messages
1,055
Outside of tcll, I don't think so.
TCLL didnt really do much. I havent really seen anyone look into the aj files further than I have but I got stuck because theres 1 word that explains how the information is stored for the key frames and stuff like that. The general file structure I understand but I dont know enough about animations to figure out what that word means.
 

zankyou

Smash Lord
Joined
Sep 12, 2014
Messages
1,055
Heres where I left off in the dat file research thread.
@Tcll return to us.

Notes of animation files (pl**aj.dat)

Every animation in the file is formatted as its own dat file in a way and the next animation dat header is on the next line directly after the end of the previous animation.
There seems to be only 1 root node and its entry in the string table is the name of the animation.
The root node - General animation info
0x00 - unknown (possible int for number of animations (always 0x00000001)
0x04 - unknown (always 0x00000000)
0x08- frame count (float: the character will go on to the next animation as soon as this is over. If it is greater the character will just freeze until then)
0x0C- pointer to bone index table (no idea what to call this)
0x10- animation info

bone index table (0x1*number of bones- length)
The number of bones can be gotten by just counting up the bones in the pl**.dat or looking at the joint matanim section and counting those up.
0x1- number of sections (possibly animations). Bone index is given by the position from the start of the table.
Terminated by 0xFF

animation info (0x0C*(total number of sections in the bone index table)-length)
0x00- length of animation data (0x02 bytes)
0x04- unknown (my speculation is that it works like the animation format word in the chr0 file for the brawl format)
0x0C- pointer to animation data

This is as far as my ability to pattern recognize goes. Anything more would require I actually know what Im talking about and have any idea how animations work to confirm.
As far as my assumption about the animation data format. I believe the format is encoded in the bits like in the chr0 files. However the bits would be reversed, and melee bone transformations are ordered by rotation, scale, translation whereas brawls is ordered by scale, rotation, translation.

Considering writing a code to basically record the transformations of a particular animation every frame and just export the ram. But I wouldn't even know what to do with that.
 

ChimeraReyat

Smash Rookie
Joined
Jul 24, 2016
Messages
3
So, something I noticed that almost no one seems to talk about, or have ever talked about...

Barring some triangulation differences, Brawl and Melee Jigglypuff have nearly the exact same base model, and many animations are 1:1 the same.



http://i.imgur.com/8QyyjoB.png (in case the embed breaks)



As you can see, her 5th jab frame is nearly, if not exactly, the same across games. It animates pretty much the same, with the exact amount of frames--bear in mind Brawl treats the last frame of animation as something to be interpolated to, to make transitioning between animations look smoother. I don't doubt Melee does this as well. Thus, Jiggs' jab animation effectively has 17 active frames, just like in Melee.

This isn't actually surprising since Jigglypuff was added in late into Brawl's development as a last-minute "hey we can still put her in" bit, which if I recall is also why Wolf and Toon Link made it in.

So what does this mean?

It means that cracking Melee's animation format might be a hell of a lot easier.


I think if whoever's still interested in documenting Melee's animation format (I'm hex illiterate so I probably can't) wants to take a crack at it, what could potentially be done is try to first convert Jiggs' melee animations to Brawl format, comparing the files and seeing what's the same and what's different. Being that the animations are nearly identical in how they're keyed, I THINK this would make things much easier.

IMPORTANT TO NOTE: NOT ALL OF JIGGLYPUFF'S ANIMATIONS ARE THE SAME ACROSS GAMES. They gave her a few tweaks to make her a bit more lively in Brawl (emphasis on a bit), and the obvious buff/nerf. Because of this, only some of her animations that were probably seen as "fine as is" have the same data across games. Notably, while her idle animation is ALMOST the exact same, being a single long take, they added subtle mouth movements, meaning that animation wouldn't be a reliable reference.


As of now, the animations I know are the same are:

  • Jab1 (Attack11)
  • Jab2 (Attack12)
  • Squat
  • SquatWait
  • SquatRv
  • Guardoff
  • Escapeair
  • AttackS3Hi/Lw/S
  • AttackHi3
  • SpecialLw(L/R)
Animations that are most likely the same EXCEPT:

  • Fallspecial - frame playback seems weird/offset by 1
  • AttackDash - Brawl moves TopN via bone IIRC and I don't think Melee does this, so that's the one discrepancy
  • AttackLw3 - Frame 40 for Brawl seems kinda busted; it doesn't match up with squat, squatwait, or squatrv. Since we never see Frame 40 in Melee, this might always be the case, but regardless...
There's probably a ton more that allign and almost allign save for one frame of difference, but this is all I bothered to check right now. STILL a lot.


Hope this helps anyone whos still interested in trying to tackle this format!
 
Last edited:

Achilles1515

Smash Master
Joined
Jun 18, 2007
Messages
3,211
Location
Cincinnati / Columbus OH
So, something I noticed that almost no one seems to talk about, or have ever talked about...

Barring some triangulation differences, Brawl and Melee Jigglypuff have nearly the exact same base model, and many animations are 1:1 the same.



http://i.imgur.com/8QyyjoB.png (in case the embed breaks)



As you can see, her 5th jab frame is nearly, if not exactly, the same across games. It animates pretty much the same, with the exact amount of frames--bear in mind Brawl treats the last frame of animation as something to be interpolated to, to make transitioning between animations look smoother. I don't doubt Melee does this as well. Thus, Jiggs' jab animation effectively has 17 active frames, just like in Melee.

This isn't actually surprising since Jigglypuff was added in late into Brawl's development as a last-minute "hey we can still put her in" bit, which if I recall is also why Wolf and Toon Link made it in.

So what does this mean?

It means that cracking Melee's animation format might be a hell of a lot easier.


I think if whoever's still interested in documenting Melee's animation format (I'm hex illiterate so I probably can't) wants to take a crack at it, what could potentially be done is try to first convert Jiggs' melee animations to Brawl format, comparing the files and seeing what's the same and what's different. Being that the animations are nearly identical in how they're keyed, I THINK this would make things much easier.

IMPORTANT TO NOTE: NOT ALL OF JIGGLYPUFF'S ANIMATIONS ARE THE SAME ACROSS GAMES. They gave her a few tweaks to make her a bit more lively in Brawl (emphasis on a bit), and the obvious buff/nerf. Because of this, only some of her animations that were probably seen as "fine as is" have the same data across games. Notably, while her idle animation is ALMOST the exact same, being a single long take, they added subtle mouth movements, meaning that animation wouldn't be a reliable reference.


As of now, the animations I know are the same are:

  • Jab1 (Attack11)
  • Jab2 (Attack12)
  • Squat
  • SquatWait
  • SquatRv
  • Guardoff
  • Escapeair
  • AttackS3Hi/Lw/S
  • AttackHi3
  • SpecialLw(L/R)
Animations that are most likely the same EXCEPT:

  • Fallspecial - frame playback seems weird/offset by 1
  • AttackDash - Brawl moves TopN via bone IIRC and I don't think Melee does this, so that's the one discrepancy
  • AttackLw3 - Frame 40 for Brawl seems kinda busted; it doesn't match up with squat, squatwait, or squatrv. Since we never see Frame 40 in Melee, this might always be the case, but regardless...
There's probably a ton more that allign and almost allign save for one frame of difference, but this is all I bothered to check right now. STILL a lot.


Hope this helps anyone whos still interested in trying to tackle this format!
Interesting info.

This reminds me of Alan Turing breaking the encryption method of the Nazi Enigma machine, at least how it was depicted in the movie "The Imitation Game" - which I highly recommend to everyone on this forum (I believe it is on Netflix right now).
 

Itaru

MasterGanon
Joined
Jun 25, 2014
Messages
279
Location
日本 茨城県
I found important value in animation file.
無題.jpg

This is AirF animation file in PlClAj.dat(Young link).
Float value 42600000, which is surrounded by a red line, means "End frame of the animation."
This value doesn't influence animation speed. And you can set this value bigger than default value.
 
Top Bottom