Author Topic: Changing Spell Animations (Going beyond the limits)  (Read 4273 times)

comet2

  • *
  • Posts: 31
    • View Profile
Hello,

It has finally come to this. I have done everything I could to get the most powerful spell that is possible within the FF7 universe. Almost all the effects have been ironed out. The only part I'm having trouble with is animation. Very few animations within FF7 meet the category of 'animations that bring into mind total world destruction.' These would be Sephiroth's Supernova or Red XII's Cosmo Memory (Pandora's box, with the cheesy question mark, fails in this sense).

Sephiroth's Supernova cannot be applied at all because the animation probably is tied to Safer*Sephiroth's 3d model. Red XII's Cosmo Memory CAN be applied as an animation to the spells. In fact, I managed to alter Pandora's Box to use that animation. However, I am having much trouble (it may be insurmountable) when I attempted to use this animation for a magic spell such that I could quadra magic and w-magic with the animation. Below is an explanation of my dilemma.

As I had stated in my previous thread, I have been successful in causing any spell/attack cast in the game to have many effects not normally available in-game, as well as force some of the spells to use other animations normally only available as attacks done by enemies (not limited to those that can be gained through Enemy Skills).

This is how it worked....
A normal spell, such as Ice, would have a the following series of data as its information:

64 FF 00 FF 04 00 FF FF 07 00 24 00 0F 1E 22 08 FF FF FF FF FF FF FF FF 02 00 FF FD

Byte 14 (1E in this case) controls the animation sequence of the spell.

To change the animation, I would first look at the target 'spell' or 'attack' (even limit breaks) with the animation, and look at its data. I will take matra magic, 'Heart', and 'Braver' as examples.

64 FF 02 FF 08 00 FF FF 9F 00 9F 00 07 0A 22 0B FF FF FF FF FF FF FF FF 00 00 FF FD Matra Magic
FF FF 00 FF 00 00 FF FF E5 00 E5 00 03 2F 25 0A FF FF FF FF FF FF FF FF 00 02 FF FF Heart
FF FF 00 FF 00 00 FF FF 32 00 32 00 13 00 11 30 FF FF FF FF FF FF FF FF 00 00 FF FF Braver


Byte 14 in each case is 0A, 2F, and 00. It is important to note that while the 'order' of animations may be shared across command types ('limit,' 'magic,' and 'Enemy Skill') It seems that the point at which the labeling of each animation starts is different. (i.e. ID 00 for limit will be different from ID 00 of Magic, and ID 00 of Enemy Skill etc).

The key thing here is that the order is still shared across these different labeling methods. As a result, if we find the relationship between the different labels, we could potentially (and indeed can) find a way to specifically use an Enemy Skill animation as a limit break etc etc. I did not have a good way to figure this out other than by trial and error. Through analyses, however, I did manage to decipher the labeling scheme of Enemy Skill and Magic.

Below is the labeling scheme of Magic Spells.

Before you begin anything, make sure you convert everything to decimals (!!). Very important-it will reduce all kinds of confusion.

00-53: normal magic spells, from Cure to Shield.
54+:
There's a difference between how the labeling is applied to spells that are accessible through the Enemy Skill materia versus spells that are only available as enemy attacks.
Case 1: i.e. Matra Magic, Enemy's spells that can be learned by the player
if you know the animation ID of the spell in the context of the enemy, as I have listed above...
ID number in any magic spell that will give the Enemy Skill animation=(animation ID from Enemy attacks)+49
So, if you would want Matra Magic as the animation for your MAGIC spell, then you would take 0A=15, add 49 to it getting 64, and then plug in (in DECIMALS) 64 as your value of for byte 14 of your magic spell.

Case 2: i.e. 'Heart', Enemy's spells that cannot be learned by player
ID number to input=(animation ID from Enemy attacks)+78
for Heart, this would mean 2F=47, 47+78=125, plug in 125 as your value for byte 14.

Case 3: i.e. Braver, limit breaks
ID number to input=(animation ID from player attacks)+236
for Braver, this would mean 00=0, 0+236=236, plug in 236 as your value for byte 14.

This is where the problem arises. Due to the inherent limitations of the hexadecimal system, you can only put up to 255 different possible animations. Since the animation ID of limit breaks as Magic spells start at 236, this means that 255-236=19 different limit breaks are available. However, there are more than 19 limit breaks possible... since the original limit breaks are listed in the order of Cloud-Barret-Aeris-Tifa-Red XII-Cid-Yuffie-Vincent, this means that only the first 19 of the list of limit breaks are available (all of Cloud's and barret's limit breaks plus some of Aeris's).

And indeed, this is the case-due to the limitations of this labeling scheme, there is currently no way to get Tifa's Red XII's, or any other characters' limit break animations as a magic spell. (I.e. to get cosmo memory, Attack ID "FF FF 00 FF 00 00 FF FF 59 00 59 00 17 29 11 7D FF FF FF FF FF FF FF FF 00 00 FF FF", I would have to be able to put 29=41+236=277 as my decimal value for byte 14... but hexadecimal values can only take up to 255)

I thought of several possible solutions to this problem.
1)The animations could be tied to what the original spell/attack used. This would mean that I could change the animation for 'Braver,' for example, into the animation for cosmo memory (in effect, changing the 14th byte of Braver from 00 to 29). This didn't work... it seems like the list of animations are independent of what the actual spells may use.
2) Since Enemy skills have a labeling system that is more forgiving (+17 for unlearnable enemy skills, +175 for limit breaks), This means that I could indeed use the animation of Cosmo Memory as the animation for one of the enemy skills. In order to make this useable, I would have to figure out how to make Quadra Magic and W-magic work with E.Skill... Which I have not had much success with.
3) Since the labeling scheme/list of animations is an integral part of the game, I thought that perhaps using a different version of the ff7 exe file might change the labeling scheme. I had been testing so far with 1.00+chocobo patch. When I used the 1.02 version, while it change the memory offsets of a variety of spells, it did not change the labeling scheme...

Right now, the most likely method is a) figure out how to change the labeling scheme, or b) find out how to make Quadra magic and W-magic work with E-skill. I've tried to make the two materia work for E.skill by changing the byte for 'type of materia,' but have not had much success.

I would really, sincerely appreciate any help you could give me... I am really at a roadblock right now.

-comet2

comet2

  • *
  • Posts: 31
    • View Profile
Re: Changing Spell Animations (Going beyond the limits)
« Reply #1 on: 2006-07-23 03:14:56 »
An update.

I've tried changing the 'materia type' bytes to make quadra magic or mp turbo to apply to E Skill, but have not had any success... most of the values would just render the materia useless.

It would be wonderful if someone would give me exactly what this byte 14 of the materia data does... Glancing at the numbers seem to indicate that the properties follow a pattern that is commonly seen in other bytetypes, i.e.:
you start at FF and subtract any combination of hex 1, 2, 4, 8, 10, 20, 40, or 80 to set that byte into each associated effect...

I've had an idea... just about the only part of the kernel that has not been mapped at all is the 'command data.' Currently, all we know about it is that the record is 16 bytes long. Seeing as the note was posted almost 1.5 years ago... I've been wondering if the team here has had any further success mapping this data since then? If anything about the magic command has been discovered, I might be able to change the set of commands magic refers to as an Enemy Skill subset rather than the 'Magic' subset... Sigh, I have no idea where to begin.

: ( Any help will be sincerely appreciated.

-comet2
« Last Edit: 2006-07-23 03:38:43 by comet2 »