Modding Rundown: Animations

Started by thetommyboy2002, March 10, 2007, 11:21AM

Previous topic - Next topic
All animations names that the game will recognize (from shared_anims in the data folder):

XMLB ANIMTABLE {
   anims {
   ea_advance = step_forward ;
   ea_attack_ground1 = ground_attack1 ;
   ea_attack_ground2 = ground_attack2 ;
   ea_attack_heavy1 = attack_heavy1 ;
   ea_attack_heavy2 = attack_heavy2 ;
   ea_attack_jump1 = jump_attack1 ;
   ea_attack_jump2 = jump_attack2 ;
   ea_attack_jump3 = jump_attack_finisher ;
   ea_attack_jumpslam = jump_smash_loop ;
   ea_attack_jumpslamland = jump_smash ;
   ea_attack_jumpslamloop = jump_smash_hold ;
   ea_attack_knockback = attack_knockback ;
   ea_attack_knockback1 = attack_knockback1 ;
   ea_attack_knockback2 = attack_knockback2 ;
   ea_attack_light1 = attack_light1 ;
   ea_attack_light2 = attack_light2 ;
   ea_attack_light3 = attack_light3 ;
   ea_attack_popup = attack_popup1 ;
   ea_attack_popup2 = attack_popup2 ;
   ea_attack_stun1 = attack_stun1 ;
   ea_attack_stun2 = attack_stun2 ;
   ea_attack_stun3 = attack_stun3 ;
   ea_attack_trip1 = attack_trip1 ;
   ea_attack_trip2 = attack_trip2 ;
   ea_block = block ;
   ea_blocking = blocking ;
   ea_bored_1_1 = bored_1_1 ;
   ea_bored_1_2 = bored_1_2 ;
   ea_bored_1_3 = bored_1_3 ;
   ea_bored_1_4 = bored_1_4 ;
   ea_bored_loop_1 = bored_loop_1 ;
   ea_cling_wall_backflip = clingwall_backflip ;
   ea_crouch_end = crouch_end ;
   ea_crouch_idle = crouch_idle ;
   ea_crouch_start = crouch_start ;
   ea_double_jump_start = jumpdouble_start ;
   ea_evade_backward = evade_backwards ;
   ea_evade_forward = evade_forwardroll ;
   ea_evade_left = evade_left ;
   ea_evade_right = evade_right ;
   ea_fall_feet_first = fall_FeetFirst ;
   ea_fly_fast = fly_fast ;
   ea_fly_idle = fly_idle ;
   ea_fly_slow = fly_slow ;
   ea_flying_attack1 = flying_attack1 ;
   ea_flying_attack2 = flying_attack2 ;
   ea_getup_on_back1 = flyingback_getup ;
   ea_getup_on_back1_atk = getup_attack_faceup ;
   ea_getup_on_front1 = flyingforward_getup ;
   ea_getup_on_front1_atk = getup_attack_facedown ;
   ea_grab_attack = grab_attack ;
   ea_grab_attack_finisher = grab_attack_finisher ;
   ea_grab_attack_v = grabbed_attack ;
   ea_grab_break = grab_break ;
   ea_grab_break_v = grabbed_break ;
   ea_grab_fallback = grab_fallback ;
   ea_grab_loop = grab_loop ;
   ea_grab_loop_v = grabbed_loop ;
   ea_grab_smash = grab_smash ;
   ea_grab_smash_v = grabbed_smash ;
   ea_grab_start = grab_attempt ;
   ea_grab_start_v = grabbed_attempt ;
   ea_grab_throw_ally = throw_ally_hero ;
   ea_grab_throw_ally_v = throw_ally_ally ;
   ea_grab_throw_back = grab_throw_back ;
   ea_grab_throw_back_v = grabbed_throw_back ;
   ea_grab_throw_fwd = grab_throw_forward ;
   ea_grab_throw_fwd_v = grabbed_throw_forward ;
   ea_grab_throw_left = grab_throw_left ;
   ea_grab_throw_left_v = grabbed_throw_left ;
   ea_grab_throw_right = grab_throw_right ;
   ea_grab_throw_right_v = grabbed_throw_right ;
   ea_hit_wall_land_on_back = slamfront_slump ;
   ea_hit_wall_land_on_front = slamback_slump ;
   ea_idle1 = idle ;
   ea_idle_to_bored = idle_to_bored ;
   ea_jump_atk_land = jump_attack_land ;
   ea_jump_land = jump_land ;
   ea_jump_loop = jump_loop ;
   ea_jump_smash_land = jump_smash_land ;
   ea_jump_start = jump_start ;
   ea_knocked_back_start = flyingback_loop ;
   ea_knocked_fwd_start = flyingforward_loop ;
   ea_ko_head1 = death_gen ;
   ea_ko_legs1 = NO_ANIM ;
   ea_ko_torso1 = NO_ANIM ;
   ea_land_on_back_loop = flyingback_landloop ;
   ea_land_on_front_getup = slamback_getup ;
   ea_land_on_front_loop = flyingfoward_landloop ;
   ea_levelup = levelup ;
   ea_lunge = lunge_loop ;
   ea_lunge_land = lunge_land ;
   ea_lunge_offwall = lunge_offwall ;
   ea_menu_action = menu_action ;
   ea_menu_goodbye = menu_goodbye ;
   ea_menu_idle = menu_idle ;
   ea_pain_air_feet_first = pain_airFeetfirst ;
   ea_pain_air_head_first = pain_airHeadfirst ;
   ea_pain_airspin = pain_InAirSpin ;
   ea_pain_back = pain_rear ;
   ea_pain_blocking = pain_blocking ;
   ea_pain_electric = pain_electric ;
   ea_pain_ground_back = groundpain_back ;
   ea_pain_ground_front = groundpain_forward ;
   ea_pain_high1 = pain_high ;
   ea_pain_low1 = pain_low ;
   ea_pain_twitch_left = twitch_left ;
   ea_pain_twitch_right = twitch_right ;
   ea_pickup_object_idle = pickup_object_idle ;
   ea_pickup_object_lift = pickup_object_lift ;
   ea_pickup_object_start = pickup_object_start ;
   ea_pickup_object_throw = pickup_object_throw ;
   ea_pickup_object_walk = pickup_object_walk ;
   ea_popup_break = popup_break ;
   ea_popup_land = popup_bounce ;
   ea_popup_loop = popup_loop ;
   ea_popup_start = popup ;
   ea_power1 = power_1 ;
   ea_power10 = power_10 ;
   ea_power11 = power_11 ;
   ea_power12 = power_12 ;
   ea_power13 = power_13 ;
   ea_power14 = power_14 ;
   ea_power15 = power_15 ;
   ea_power16 = power_16 ;
   ea_power17 = power_17 ;
   ea_power18 = power_18 ;
   ea_power19 = power_19 ;
   ea_power1_end = power_1_end ;
   ea_power1_loop = power_1_loop ;
   ea_power1_start = power_1_start ;
   ea_power2 = power_2 ;
   ea_power20 = power_20 ;
   ea_power2_end = power_2_end ;
   ea_power2_loop = power_2_loop ;
   ea_power3 = power_3 ;
   ea_power3_end = power_3_end ;
   ea_power3_loop = power_3_loop ;
   ea_power4 = power_4 ;
   ea_power4_end = power_4_end ;
   ea_power4_loop = power_4_loop ;
   ea_power5 = power_5 ;
   ea_power5_end = power_5_end ;
   ea_power6 = power_6 ;
   ea_power7 = power_7 ;
   ea_power8 = power_8 ;
   ea_power8_end = power_8_end ;
   ea_power8_loop = power_8_loop ;
   ea_power8_start = power_8_start ;
   ea_power9 = power_9 ;
   ea_psy_lift1 = psylift ;
   ea_psy_loop = telekinesis_victim ;
   ea_push_heavy_object = push_heavy_object ;
   ea_push_heavy_object_fail = push_heavy_object_fail ;
   ea_resist_knockback = resist_knockback ;
   ea_resist_popup = resist_popup ;
   ea_resist_stun = resist_stun ;
   ea_resist_trip = resist_trip ;
   ea_resurrect_v = resurrect_v ;
   ea_retreat = step_backward ;
   ea_run1 = run ;
   ea_spin_left = spin_left ;
   ea_spin_right = spin_right ;
   ea_sprint1 = run_sprint ;
   ea_strafe_left = step_left ;
   ea_strafe_right = step_right ;
   ea_stuck = sticky_floor ;
   ea_stun = stun ;
   ea_talking_01 = talking_01 ;
   ea_talking_02 = talking_02 ;
   ea_talking_03 = talking_03 ;
   ea_talking_04 = talking_04 ;
   ea_tele_buddy_grab = telebuddy_grab ;
   ea_tele_buddy_land = telebuddy_land ;
   ea_tele_buddy_loop = telebuddy_loop ;
   ea_thrown_back_hit_wall = slamback_loop ;
   ea_thrown_back_land = flyingback_land ;
   ea_thrown_back_loop = flyingback_loop ;
   ea_thrown_fwd_hit_wall = slamfront_loop ;
   ea_thrown_fwd_land = flyingforward_land ;
   ea_thrown_fwd_loop = flyingforward_loop ;
   ea_thrown_upside_down = grabbed_throw ;
   ea_thrown_upside_down_land = grabbed_throwland ;
   ea_thrown_upside_down_loop = grabbed_throwloop ;
   ea_tpose = tpose ;
   ea_trip = trip ;
   ea_upside_down_hit_wall = grabbed_throwslam ;
   ea_upside_down_slump = grabbed_throwslump ;
   ea_upside_down_slump_land = grabbed_throwslumpland ;
   ea_use_button = use_button ;
   ea_victim1 = victim1 ;
   ea_victim10 = victim10 ;
   ea_victim11 = victim11 ;
   ea_victim12 = victim12 ;
   ea_victim2 = victim2 ;
   ea_victim3 = victim3 ;
   ea_victim4 = victim4 ;
   ea_victim5 = victim5 ;
   ea_victim6 = victim6 ;
   ea_victim7 = victim7 ;
   ea_victim8 = victim8 ;
   ea_victim9 = victim9 ;
   ea_walk1 = walk ;
   ea_zone1 = zone1 ;
   ea_zone10 = zone10 ;
   ea_zone11 = zone11 ;
   ea_zone12 = zone12 ;
   ea_zone13 = zone13 ;
   ea_zone14 = zone14 ;
   ea_zone15 = zone15 ;
   ea_zone16 = zone16 ;
   ea_zone17 = zone17 ;
   ea_zone18 = zone18 ;
   ea_zone19 = zone19 ;
   ea_zone2 = zone2 ;
   ea_zone20 = zone20 ;
   ea_zone21 = zone21 ;
   ea_zone22 = zone22 ;
   ea_zone23 = zone23 ;
   ea_zone24 = zone24 ;
   ea_zone25 = zone25 ;
   ea_zone3 = zone3 ;
   ea_zone4 = zone4 ;
   ea_zone5 = zone5 ;
   ea_zone6 = zone6 ;
   ea_zone7 = zone7 ;
   ea_zone8 = zone8 ;
   ea_zone9 = zone9 ;
   }

}



I would assume adding more would mean the game would recognize them.....

Quote from: BliZZ on September 01, 2007, 07:43AM

I would assume adding more would mean the game would recognize them.....

Thanks, very useful.
But given that many of these are referenced by the exe, I dont know that we can add more...

i dont think adding will work, at least it didnt for XML2. MUA uses a lot more animations than XML2, so for my conversions i tried adding all the extra ones that MUA uses, but the game still didnt recognize.  So changing and adding to the file didnt work for me.
Please search the forum before asking a question. I dont answer
PMs about modding, those questions should be posted in a public thread.
What im currently working on: http://marvelmods.com/forum/index.php?topic=2275.0
My mods are mine to booster/update, I will not give anybody permission to do it

I did some comparison research.  I loaded up Black Panther's animations from the PS2 and PSP side by side.  I was surprised to find that there were really large chunks of the data that are exactly identical.  We're talking 500-2000 bytes, sometimes more.  There's some sort of table or something that appears between each of these chunks.  In reality I think it's just the different way things are indexed between versions.  But it got me curious to see whether I can hex-replace some animations :D

More findings.  There is a large identical chunk of data that exists in every skeleton, whether last-gen or next-gen.  In most if not all cases it appears multiple times.  From what I can gather it seems to be the biped skeleton, and appears before each animation.  Also, I can confirm that the data I mentioned before is the animation data.  I can fill that area with zeros and have the character disappear entirely during that animation.  Long story short, the raw animation data is the same no matter what game the animations come from.  The issue now are all of the tables that reference how the data is stored.  That is the big difference between versions.  It's also the hardest thing to decipher.  But if by some miracle it gets figured out then it should be possible to hex-replace animations from PSP/360 characters into older PS2/Xbox/XML2 PC skeletons. 

I've already got an Iron Man XML2 test subject for Hawkeye's animations.  (15_ironman is the same number of characters as XX_hawkeye, plus he's got power, menu and other animations)  So far all tests either result in a crash (big surprise) or the character disappearing for that animation.  BUT, it's also helping me to figure out where each individual animation is, which I can then use to try to figure out the tables.

Lotsa work...  Probably not worth it, but if we could get all next-gen skeletons converted down then XML2/MUA (last gen) modders would get to use them.  No cheap hacks with 'sortof close' animations.  They'd be the real deal.  'Course if I have to hex-replace each one I can tell you right now I wouldn't be doing Dr Doom, and likely wouldn't do Magneto, Sabretooth or Nightcrawler, as there's not really any new power animations that are must-haves.  My priorities would be Hawkeye, Captain Marvel, Ronin and Cyclops (cause Cyke's got some really cool power-hold animations).

After reading this post, I'm really up to the challenge of making a new character for MUAPC. The animations are what interest me the most. But from reading most people are trying to just get animations from other XML and MUA games. So is it at all possible to import from 3DMax?

Nobody's ever succeeded.  That's not to say nobody can, but we're at a loss as to how to do so.

Well there goes my ideas for attacks. I was wanting to redo Spider-Man. He tends to lack the style I was hoping for, when I first got a hold of this game. Maybe I can just search through animations and find something useful.... Thanks for the reply BTW

No problem.  I know Tommyboy2002 has tried exporting animations from 3DSMax, so if you know much about 3DSMax animating you might talk to him.  I'm pretty sure it falls under a not for the feint of heart category, though.

Hi!
I was reading this topic and I want to ask something, for example, I want to add Jean Grey animations on Emma Frost ones (ex. the psionic boom animation) How can I do that?, and what program do you use to "decompile" because everyone are talking about an hex editor, but which hex editor, I search in google and appear a lot of editors so I don't know which is the goog one.
Hope you can help me :)
Phoenix Force: No. He loves Emma Frost.  He loves me.
Jean Grey: He wants her. Not you. Not US. And now it's time... to leave this behind.
Phoenix Endsong #5

*blows dust off thread*
Don't get too excited, I haven't done anything good.
But, playing around again with trying to export animations it occurred to me that we know the following:
1. Custom made meshes work as Mannequins in the team select screen, and play whatever animations they are exported with there. Suggests we can export anims.
2. In game and in menu, the models use "xx_name.igb" as the animation package. A look in a hex editor reveals "menu_idle", "menu_goodbye" etc visible in these type of file.
3. Original Mannequins have no "named" animation which I can see in a hex editor ("idle" or "menu" show no hits, nor do I see any other likely suspects).
4. Custom meshes show no "named" animations in a hex editor. This is probably why they dont play our custom animations, the game doesn't "know" that they are there.
5. The "xx_name_4_combat.igb" files have "named" animations revealed by hex editor.

Therefore, we (or more accurately I, since nobody else seems to be pursuing this) need to figure out a way to export some sort of labeling which the game recognizes, to make custom versions of the animation files most here refer to as "skeletons". A NoteTrack is the way I'm accustomed to doing this in other games in other engines, but MUA/alchemy seems to resist all my attempts to export a labeling/notetrack system.
I've tried under the root node, and attached to the igActor, I guess I have to play with it some more tomorrow.
Oh, and I tried a bunch of different export settings trying to export a custom set, the most exciting thing I got was an Alchemy 4 error message where I could exit debug or ignore. Exit exits, debug just ctds the game and ignore just carries on as if nothing happened, sans any new animations, of course.

Anyway, thats what I've done today...

Interesting. I'll see what I can found when working in max. Always eager to try and find new stuff^^ I believe BR is also interested in finding it out.

Do you think TrackView might come in handy ?

Quote from: Mr. Law^^ on October 20, 2009, 11:11PM
Interesting. I'll see what I can found when working in max. Always eager to try and find new stuff^^ I believe BR is also interested in finding it out.

Do you think TrackView might come in handy ?

If you mean the "Track View" accessible under "Graph Editors" in Max, yep, it's what I use to make and edit NoteTracks. The question is, is that how Raven did it? And if it is, which of the many combinations of options on export should we use to export a working animation?
If you mean some other Track View, tell me thereof. The one in Max is the only one I really know about.

Huzzah!
After only 2 years, I've managed to export a custom animation which works!
What you see below is my Swordsman mesh using a custom made "menu_idle" animation I exported:


Now, before we pop open the champagne and make statues of me, I should add that this is only one animation, and it doesn't even select the part of the set i actually called "menu_idle", but rather runs through the whole set.
Heres how I did it:

By exporting those settings I got a file called "menu_idleDB.igb". I copied this to "actors" and renamed it to "17_swordsman.igb", and once Swordy is selected, he runs through the animations within the file.
The important bit is that there is now an entry visible within "17_swordsman" which says "menu_idle" (although all the other NoteTrack labels within the mesh still dont appear, so obviously that is still wrong).
This is only a tentative first step towards full custom made animation sets, but it IS a first step, so I'm pretty pleased, despite its limitations.

And heres proof of concept:
http://www.mediafire.com/?sharekey=6ffbe4e3b0e3437fd8f14848abf485dde04e75f6e8ebb871
That should be a file called "17_swordsman.igb". Rename it to whatever character you want, ie "05_thing.igb" etc and put it into "actors" (backup the original first, of course).
Now, when that character is selected, they should have a menu_idle which is running (turned to the left).
More to come as I discover it.