Enemy Attack Data [Split from Skillster's Hardcode Mode]

  • Thread starter Thread starter Genji
  • Start date Start date
Status
Not open for further replies.
Referring to the duplicated Satan Slam above; I didn’t quote it because while I was typing my reply, it was the bottom post, so mine should have landed directly under it.


L. Spiro
 
L.Spiro: I dont know how that effects what is happening in this thread and would prevent you from sharing your FF7 knowledge with us all.
Yes I was part of the FF7 Remake project which inevitably stalled.
You didn't answer my question though...

By the way I have updated my post on page 1 which has the known bytes in the attack file all labelled with examples and known values.
Please take a look and advise on what needs updating and what I might have missed.
 
Part of the reason I considered not posting was because I am tired of myself.
It is a bit difficult to explain, but given how rusty my memory has become on this subject I was a bit afraid of posting false information.
I’m not really in my prime anymore.

So I considered letting the post go and see what would come up.
I had planned to just rehack all of this when my project gets to the point of needing it (again), and then of course I would be primed up and ready to share tons of information, but since I am not now, my confidence in sharing information is a bit low.


But I decided to just post and explain which things I know to be false, which things I know to be true, and which things I don’t remember clearly.

That’s that.


As for your post.
Well I have seen multiple times in several topics where people try to hack which bytes create which status/elemental effects, so I will first clear this up, hopefully once and for all.

Statuses:
  0x00000001 Death
  0x00000002 Near-Death
  0x00000004 Sleep
  0x00000008 Poison
  0x00000010 Sadness
  0x00000020 Fury
  0x00000040 Confusion
  0x00000080 Silence
  0x00000100 Haste
  0x00000200 Slow
  0x00000400 Stop
  0x00000800 Frog
  0x00001000 Small
  0x00002000 Slow-numb
  0x00004000 Petrify
  0x00008000 Regen
  0x00010000 Barrier
  0x00020000 MBarrier
  0x00040000 Reflect
  0x00080000 Unused
  0x00100000 Shield
  0x00200000 D.Sentence
  0x00400000 Manipulate
  0x00800000 Berserk
  0x01000000 Peerless
  0x02000000 Paralyzed
  0x04000000 Darkness
  0x08000000 Dual
  0x10000000 DeathForce
  0x20000000 Resist
  0x40000000 Lucky Girl
  0x80000000 Imprisoned

Statuses are always represented with a DWORD (32 bits) and multiple statuses can always be inflicted by setting the correct bit.
This is true for ALL cases where statuses are involved, whether on accessories, items, enemy defenses, attack inflictions, etc.

Elements:
  0x0001 Fire
  0x0002 Ice
  0x0004 Lightning
  0x0008 Earth
  0x0010 Poison
  0x0020 Gravity
  0x0040 Water
  0x0080 Wind
  0x0100 Holy
  0x0200 Restorative
  0x0400 Cut
  0x0800 Hit
  0x1000 Punch
  0x2000 Shoot
  0x4000 Shout

That list does not account for the “non-elemental” element used in blue and purple Materia and some attacks, but this element exists and linking any purple Materia to a maxed Elemental on your armor will allow you to absorb some attacks (particularly from some large monsters).

Elemental data is always 2 bytes in size, except in monster data where it is 3 to account for some extra information.


So the first thing I notice is that you should report the elemental bytes as being 2 bytes each, rather than separating them into two single-byte parts.
This applies specifically to the key below the actual data.


Sorry I can’t find my list of every enemy attack.

I am now off work and time to go home for the night.
I will be back at work tomorrow (Saturday) and can continue this discussion (and hack some things if needed) then.
I am glad you are using my software and you should take a look at the page again to see what I am planning to add.
The new hex editor will make this type of things a breeze, and will work on files too, so it will make editing them a breeze also.


L. Spiro
 
Hey I forgot you made that software (just kidding).
Thanks for the info its a great help that this has been cleared up and you have corrected us.

Your memory hacking software could do with some direct editing via the Hex viewer (viewing ram), also isnt their a way to create a way to assign a button which could say increase a value by 1 on every press?
For example to find each animation I have to set it in MemHack and then go back to FF7, note the animation and go back to MemHack and do over.

L.Spiro & Genji:
I updated my diagram/explanation on Page 1, please take a moment to check the changes and advise me of any corrections.
L.Spiro please check if I have chosen the right bytes for the Status DWord.
I noticed you can only fit one status effect in, so how do you check for multiple statuses? Do you have to switch on the appropriate bytes?
Example:
Code: [Select]
Code:
If I want Poison and Frog:               0x00000808What if I want 0x00000040 Confusion                0x00000080 Silence?Do I use       0x00000120?
 
Well knowing which byte which animation is good. But for 'hardcore mod' we need just Accuracy, MP Cost, Targeting, Damage Type and Damage Modifier, Status and Elemental modifier isnt ??

So I guess we should slowly start planning changes at bosses's attacks along with studying Enemy Attacks data.

Like made Rifle multi-target, Sight Scope inflict 'Darkness' :p
Some bosses will be interesting with HP Based attacks.

And I wanted to ask you. Will you modify WEAPONs stats ? Ruby can be paralysed. Isnt funny ?

Hardcore is Hardcore -)

Code: [Select]
Code:
If I want Poison and Frog:                0x00000808 What if I want 0x00000040 Confusion                0x00000080 Silence? Do I use       0x00000120?

Hmm... maybe 0x000000C0 (4h + 8h = Ch)

About 'Cure Status'.
This will cure status (positive or negative). For example:
Code: [Select]
Code:
7F FF FF 01 00 00 00 - Cures 'DEATH' (Life)7F FF FF 08 00 00 00 - Cures 'POISON' (Poisona)7F FF FF 00 87 17 30 - Cures 'DEATH FORCE', 'RESIST','SHIELD','BARRIER','MBARRIER','REFLECT','REGEN','HASTE','SLOW','STOP' (DeSpell)
 
Wow I have been planning to do this too but you beat me. So I leaving everything to you :P
Thanks ;)
 
Genji: I forgot it was in Hex :) So you will probably be right, dare you to try fitting all the statuses into one DWORD?

We do need to start working on the bosses.
You have mentioned some changes to the first boss.
I think percentage attacks WILL effect players no matter what level they are, so more of those please :)
Time to start making suggestions/ideas for each boss in turn.
So next up:
Air Buster!

Everyone:
I took the attackdatahack.txt and converted it to a spreadsheet for easier viewing and editing
http://parvez-halim.demonweb.co.uk/attackshacks.xls

Please feel free to add enemy attack data and to make improvements and also add known values.

Tonfa: I just has a look at your work, NICE ONE!
Can I integrate this into my spreadsheet?

Genji: Nice find with the Cure Status work!
Genji, If 7F is for curing status's included in the status DWORD, what is 3F - to apply?
Code: [Select]
Code:
Spider Web<AC|IA|TA>--<MP>--------------<TY>--<TG|ID|TD|PW> 5f ff 00 ff 00 00 ff ff ff ff ff ff 0b 02 11 00     ff*3f*ff ff 00 02 00 00 00 00 ff ff                 <RT>--------<----ST-----|-EL-->-----
 
Tonfa: I just has a look at your work, NICE ONE!
Can I integrate this into my spreadsheet?

Genji: Nice find with the Cure Status work!
Genji, If 7F is for curing status's included in the status DWORD, what is 3F - to apply?
Code: [Select]
Code:
Spider Web<AC|IA|TA>--<MP>--------------<TY>--<TG|ID|TD|PW> 5f ff 00 ff 00 00 ff ff ff ff ff ff 0b 02 11 00     ff*3f*ff ff 00 02 00 00 00 00 ff ff                 <RT>--------<----ST-----|-EL-->-----

Sure, of course you can, if it's of any use.

And...I'm not Genji, but value 3F in byte 18 means 100% (or very, very close to 100%) chance of applying status.
 
Code: [Select]
Code:
7F FF FF 01 00 00 00 - Cures 'DEATH' (Life)7F FF FF 08 00 00 00 - Cures 'POISON' (Poisona)7F FF FF 00 87 17 30 - Cures 'DEATH FORCE', 'RESIST','SHIELD','BARRIER','MBARRIER','REFLECT','REGEN','HASTE','SLOW','STOP' (DeSpell)
Genji is quoting 7F to Cure these statuses, and your quoting 3F as 100% success rate in Applying negative statuses.
so <=3F is to apply the status effect (resist, shield, regen, sleep)
and <=7F is to remove the status effect (poisana, esuna)
and 92 is the toggle on off.
More of less is what your saying?
BTW isnt these the same as what was quoted for accuracy>????
 
Yes. Values in range 01-3F are status infliction, both positive and negative, you can have an attack that causes Haste and Mini for example.  The higher the value, the higher the accuracy, of course.
 
Your memory hacking software could do with some direct editing via the Hex viewer (viewing ram),
Very soon.
I am currently working on just that.
It will allow you to edit by typing directly into the RAM, with ASCII, Unicode, and raw hex input.
But it will be a little while before release.
I am really putting everything into this new hex editor, making sure it is the best one out there.
And that means I am competing against some pretty hefty hex editors.


also isnt their a way to create a way to assign a button which could say increase a value by 1 on every press?
For example to find each animation I have to set it in MemHack and then go back to FF7, note the animation and go back to MemHack and do over.
Suggestions are always welcome and I usually implement almost all of them.
Look for this type of feature in an upcoming version.


I noticed you can only fit one status effect in, so how do you check for multiple statuses? Do you have to switch on the appropriate bytes?
Example:
Hmm... maybe 0x000000C0 (4h + 8h = Ch)
Well almost.
For a simple example such as that, addition does work and you do get the correct result, but the means to the end is technically flawed.
If Confusion = 0x00000040 and Silence = 0x00000080, then (Confusion + Silence) = 0x000000C0 (= Confusion/Silence).
But what if (Confusion + Confusion)?
You would get 0x00000080 from just addition.
The correct way to combine statues is with the bitwise OR operator.
(Confusion + Confusion) == (0x00000040 | 0x00000040) == 0x00000040 (still Confusion).

There aren’t many calculators that have an OR operator, but you can use addition for any case where two of the same statuses are not being added together.
But if you were to write a program that uses this information (such as an editor) you need to use the | operator.
Code: [Select]
Code:
m_dwStatus |= Confusion;  // Add “Confusion” status.
Remove statuses with this:
Code: [Select]
Code:
m_dwStatus &= ~Confusion;  // Remove “Confusion” status.


Tonfa and Genji, I knew byte 18 was something along those lines but could not remember clearly.
Just another bit of info that may help.
It is entirely likely that byte 18 uses the same generic formula as drop/steal ratios in enemy data.
That is, the final chance percent would not be ((Byte_18) / 0x3F), but rather ((Byte_18 + 1) / 0x40).

Thus “Slow” has a 39.0625% chance rather than a 39.68253968253968253968253968254% chance.

For values between 0x40 and 0x7F (inclusive) you subtract 0x40 from it and then use the formula above to determine the chance of removing the status(es).


Also, the last two bytes are “specials”.
They contain data related to:
 0x0001 Attack MP instead of HP
 0x0002 ?
 0x0004 ?
 0x0008 ?
 0x0010 Drain Damage Dealt
 0x0020 Drain HP/MP
 0x0040 Blade Beam
 0x0080 Ignore Status
 0x0100 Miss if Not in “Death” Status
 0x0200 Reflectable
 0x0400 Piercing (Unblockable)
 0x0800 Angel Whisper/Pulse of Life
 0x1000 ?
 0x2000 Critical Hits
 0x4000 ?
 0x8000 ?

They are combined the same way as statuses and elements except for one thing.
Rather than each bit being set, the effects apply if the bit is NOT set.

Thus Magic Hammer (0xFDEE) has the following properties:
0xFDEE =
1111110111101110 =
Attack MP instead of HP,
Drain Damage Dealt,
Reflectable


I’m not done yet.


Byte 13 is the target information.
 0x00 Target Self and only Self
 0x01 Only One Target Allowed
 0x02 Target Enemy By Default
 0x04 Target All (Ignores 0x01)
 0x08 Can Switch Between 1 Target and All Targets if Both Are Valid Options
 0x10 Only Target Default Team
 0x20 ?
 0x40 Hits Everyone (Allies and Foes)
 0x80 Random Targets Within Valid Group


More may come as I remember things.


L. Spiro
 
They are combined the same way as statuses and elements except for one thing. Rather than each bit being set, the effects apply if the bit is NOT set.

So to get right number we must use formula like (FF FF - [combination of offsets]). For 'Magic Hammer' it will be: FF FF - 02 11 = FD EE.
02 11 here is combination of 00 01, 00 10 and 02 00.
Right ?
 
As far as coding is concerned, you would add a special attribute this way:
Code: [Select]
Code:
m_dwAttribs &= ~ATTRIBUTE;
Where “ATTRIBUTE” is the numerical value of the attribute you wish to add and m_dwAttribs defaults to 0xFFFF.
It might not be 0xFFFF when you perform the above operation, but it should start out initially as 0xFFFF.
Then you can perform the above operation as many times as you please to add any special attributes you wish.
To remove an attribute:
Code: [Select]
Code:
m_dwAttribs |= ATTRIBUTE;


That is for code.
If you want to do this by hand outside of programming, grab Microsoft® Calculator, set it to advanced mode, set it to “Hex” mode, check “Word”, type the value for the attack (FDEE), and then hit ~.
Microsoft® Calculator will show 211, which is the same result you got.
It works out the same way as what you did, but uses bitwise math to ensure correct results.
Likewise you can type 211 and hit ~ to get FDEE.
This would be the fastest way to convert these numbers by hand.


L. Spiro
 
The enemy attack list is now done up to Scene 140. I'll add some more tonight.

EDIT: Really tired, no more progress tonight. However something occured to me while taking a quick look at some attack data.

EDIT2: Ignore this. I fail when I'm tired.

EDIT3: Finished!! Whew.

EDIT4: I need to edit the data inside Kernel.bin to confirm a suspicion I have about 0x0002 for bytes 27-28. However I can't seem to find a program for decompressing kernel.bin...any suggestions?

EDIT5: How can Limit Breaks be edited, and where are they located? They are not in kernel.bin according to Gears.
 
OMG Thank you guys a million.  I have been testing these days for 2 weeks now and I managed to figure alot of stuff out but i didn't realize you guys have done so much already. 

Now i must look for your Hard core mod thread.
 
Status
Not open for further replies.
Back
Top