[PSX/PC] Battle editor - Proud Clod (1.5.0/FINAL)

  • Thread starter Thread starter nfitc1
  • Start date Start date
Status
Not open for further replies.
My apologies if this is a stupid question or it has already been dealt with ITT, but can Proud Clod change the "enemy attack IDs" at 0x0048 of the enemy data? I'm pretty sure that Hojo can't do this...
 
Last edited:
My apologies if this is a stupid question or it has already been dealt with ITT, but can Proud Clod change the "enemy attack IDs at 0x0048 of the enemy data? I'm pretty sure that Hojo can't do this...
Yeah, it can. In the Attacks/Formations options, in any of the enemy's tabs is a list of actions they can perform and the animations they perform with it. That's how you can change the 0x0048 array of any enemy. This is also where you can change the 0x0038 animations they perform and the 0x0094 manipulation attacks they can use. Those addresses on the wiki are wrong too. At least some of them are. The 0x0048 and 0x0038 are correct, but 0x0058 is 16 bytes away from 0x0048 not 32.

This was answered somewhere, but I don't blame you for not finding it. All the "documentation" on this prog is buried in this thread and scattered all over the place. You could look for my posts (denoted prominently by the "Invincible eye" avatar :) ), but those don't always contain helpful stuff. I've said it before, I'll get around to writing documentation to PrC soon (read: "eventually").
 
I see. So how does it work? Does changing the attacks on the left change the IDs at 0x0048? (I've had a break from modding, as you may be able to tell  :wink:)
 
Basically, yes. When you change the attack on the left it will assign the index of that attack to the correct slot in its "allowed attack list" as I call it.

EDIT: You'll be happy to know that I successfully added the ability to dynamically update jump addresses! It only took about 30 minutes to do too and most of that was just figuring out some VB.NET issues. :D
 
Last edited:
Used Proud Cloud to gather some info for my research and found some misunderstanding. For damage function 00 written that it will not display attack name. This is wrong. Display of attack name specified by opcode in animation action sctipts but not by type of damage calculation.

By the way TFergusson updated all his documentation about battle and enemied (and all others). You can see them. They almost compleatly describe how damage calculation works.
 
In the animation, huh? That makes sense. More sense than letting the damage calculation handle it. I just couldn't see any other difference between 50h and 00h so I thought that was it. I'll take that description out for the next version.

EDIT: I understand what the difference is now. 00h does absolutely nothing and 50h will cause no damage, but still attempt to perform status effect changes. This will be clarified in the future.
 
Last edited:
In the animation, huh? That makes sense. More sense than letting the damage calculation handle it. I just couldn't see any other difference between 50h and 00h so I thought that was it. I'll take that description out for the next version.
I told you already that you can ask me this questions.

Damage calculation byte really not ome value but two. Upper 4 bit and lower 4 bit.
byte XY where X - handles different type of  hit/critical and Y - are the actual function that calculates damage.
Exeptions are X == 6,7 and A.
If X == A then it uses not standart function to calculate base damage and then use standart X == 1, Y == 1 (11)
If X == 6 or 7 then it calls 0x10 + Y function to calculate damage. But it still use upper function 6 and 7 to calculate hit/critical.

By the way - list of some lower damage calculation functions that I already reversed (I named them the same as in the TFergusson documentation)
Code: [Select]
Code:
    formula = w[address + a4]; // lower    switch (formula)    {        case 00: lower_function_00; break;        case 01: lower_function_01; break; // physical damage        case 02: lower_function_02; break; // magical damage        case 03: lower_function_03; break; // current hp% or current mp%        case 04: lower_function_04; break; // max hp% or max mp%        case 05: lower_function_05; break; // magical heal        case 06: lower_function_06; break; // fixed damage        case 07: lower_function_07; break; // item damage        case 08: lower_function_08; break; // recovery        case 09: lower_function_09; break; // not used        case 0a: lower_function_0a; break; // not used        case 10: lower_function_10; break; // custom 00 white wind (damage = current hp of attacker)        case 11: lower_function_11; break; // custom 01 (damage = max hp - current hp)        case 12 13 14 15 16 17: break;        case 18: lower_function_18; break; // custom 08 ()34E20A80 195CE20A80 1aA0E20A80 1b18E30A80 1c78E30A80 1d        default: return;    }
 
Got a question: Will PrC be able to change models of enemies in next version? I've been looking for a possibility to do that easily.

Oh, and what animation ID will hide the attack name?
 
Got a question: Will PrC be able to change models of enemies in next version? I've been looking for a possibility to do that easily.
Yes and no. Enemy ID is related to the Model ID. You could theoretically change the Nibel Wolf to look like one of Ruby Weapon's Tentacles if you wanted, but if you do that be sure you change all relevant AI to that enemy ID (won't effect the Nibel Wolf, but can effect other things, esp Boss minions).

Oh, and what animation ID will hide the attack name?
This depends on the animation and the enemy. Typically, the general attack animation (0h I think) will not display the name.

UPDATE: I'm about three steps away from having PrC and WM ready to be released into versions 1.3. I'm still trying to make it save changes into a smaller legally-distributable-friendly file to be loaded into either WM or PrC (I've wanted this since before WM 0.9). I also need to write a documentation for PrC. Other than that I believe all the known bugs have been fixed and planned features have been added.
I also have a list of the unknown list of values in Enemy Data (0x68-0x87) all sorted by Enemy ID. From initial inspection, these range from 6h to 189h and only a few of the values in between are used. 113h seems to be the most popular. This list seems to be unique to Enemy ID, not Enemy and Scene IDs.

There are 46 enemies with a value other than NULL in index 0, 142 with index 1, 139 with index 2, 103 with index 3, 62 with index 4, 56 with index 5, 40 with index 6, 23 with index 7, 17 with index 8, 13 with index 9, 10 with index 10, 12 with index 11, 8 each with indexes 12, 13, 14 (ie, not the same 8, but some overlap exists), and two with index 15.

Anyone who wants this list either PM me your email address or email me. I have it as excel and txt file.
 
Code: [Select]
Code:
I also have a list of the unknown list of values in Enemy Data (0x68-0x87) all sorted by Enemy ID. From initial inspection, these range from 6h to 189h and only a few of the values in between are used. 113h seems to be the most popular. This list seems to be unique to Enemy ID, not Enemy and Scene IDs.There are 46 enemies with a value other than NULL in index 0, 142 with index 1, 139 with index 2, 103 with index 3, 62 with index 4, 56 with index 5, 40 with index 6, 23 with index 7, 17 with index 8, 13 with index 9, 10 with index 10, 12 with index 11, 8 each with indexes 12, 13, 14 (ie, not the same 8, but some overlap exists), and two with index 15.
This is camera movement id for attacks. 0x10 2 bytes values.
 
Last edited:
This is camera movement id for attacks. 0x10 2 bytes values.
Instead of camera movement for attacks, which is stored in the attack data itself, how about camera movement for animation? I'd be willing to wager that's what that is.
 
This is camera movement id for attacks. 0x10 2 bytes values.
Instead of camera movement for attacks, which is stored in the attack data itself, how about camera movement for animation? I'd be willing to wager that's what that is.
There is no such thing as camera for animations.
If data in enemy is set then it will be used instead data from attack.

Code: [Select]
Code:
if (FP == -1){    [address + 60] = w(hu[S4 + 8]); // set single camera from attack    [address + 64] = w(hu[S4 + a]); // set multiple camera from attack}else{    [address + 60] = w(FP); // set camera from enemy data    [address + 64] = w(FP); // set camera from enemy data}
This camera data selected and used after attack calculation. Or just after action...Maybe we must call this actions instead of attacks, because not all of them harm or heal enemy. Some of them just play animations or do some other things.

It's easy to understand why it was done this way. During development all attacks was in one list or database and enemy just set id for attack they used (it was compiled into scene files lately during export procedure). Attacks define most commonly used camera movement. But some enemies require different camera, and programmers made that you can overwrite camera for specific enemy.
 
Last edited:
Action Camera Index it is then. Sounds good to me.

PrC now edits these values. With the exception of that one little bit at 0x9A, virtually the entire scene.bin can be edited with either PrC or Hojo! Enemy IDs are now editable with PrC and the fourth word of every scene (at 0x06) will remain uneditable since it will do nothing (except maybe crash the game).

Other good news: The modification I'm making to allow saving changes will also work with changes made via Hojo! How cool is that? :D

UPDATE: I'm sorry for the lack of updates lately despite the progress I'm making. I'm going to update this post instead of making a new one so I can still post a new message and bump it up once it's ready.

I believe PrC is ready to roll, but I'm waiting on my midget slaves to finish the text changes to the WallMarket changes files. They (and by they I mean the voices in my head) warned me that the texts might not be the same lengths like I'm assuming all other parts will be. So rather than saving changes or the whole segment of strings, I'm just saving the entire string that was changed. This SHOULD save on time and space, but I'm having issues with finding the end of the segment and file. I'll need to play with it some more soon.

I'm almost done with documentation on Proud Clod. I need to write up an explanation of the camera preview mode, but for some reason it's not working on DX10. Stupid MS. :P

In more domestic news, my wife who has been gone for six weeks returned recently so I've been spending more time with her than with WM or PrC (as any GOOD husband would do). Also, I just today got a signed contract for our first house together. It's a brand new house that construction isn't even complete on, but we're happy with everything about it. Ergo, I'll be moving soon. Good news, though. Work is about to slow to a crawl as we're changing a pretty vital function that we all do. I'll be able to do things with it at work so it will get finished barring my de-armitation (or whatever you'd call that) or death.
 
Last edited:
Sounds very nice!!

Btw, I'm aware of the problems I would get if I change Model IDs - because of the scripts in the AI that change animations. I simply wanted to create a new enemy and assign the right model. :wink:
 
ok guys sorry if this sounds dumb, but how do I edit enemy AI, I dont mean how do I use the app to change values  I mean how do I learn what each value does etc.

See I know in the game safer seph first move is wall followed by shadow flare, yet the attacks are listed in a completely different order in the editor.

This is what I want to achieve as an initial test.

Seph to heal himself probably with a full cure (capped to 30k hp on my limit config) every time he moves to flying position or to close position so twice every full cycle.
Seph to counter with either comet2 or ultima everytime attacked.
To make heartless angel be used when down to 66% hp instead of 25% hp.

thanks in advance.
 
The order in which you see attack IDs in the AI has nothing to do with the order in which those attacks are used in battle :-P

Have you looked at the AI tutorial that comes in the Wall Market help file? It gives some basic help with starting to edit AI. You should also look at enemies that do things similar to what you're trying to do and see how their AI works.

Now, on to some more practical stuff. SOLDIER 3rd checks to see if it's HP is less than 1/4, 2/4 or 3/4 of its max. It goes like this :

Code: [Select]
Code:
02 206003 41608002 206003 41808060 043360 * this number is the fraction /4 that it checks3243
Sephiroth's check for a fraction of his HP goes like this:

Code: [Select]
Code:
02 206003 41608002 206003 41808060 043344
So, what would happen if Sephy's script were changed to this?

Code: [Select]
Code:
02 206003 41608002 206003 41808060 033360 023243
I think it would check to see if he has less than 2/3 of his max HP and then do the attack. I haven't checked this, however, and it might be completely wrong. You'll also have to fix the jumps in his script, and you can do that yourself :-P (if you don't, the game will die)

See if you can get that working for now. :roll:
 
Last edited:
Have you looked at the AI tutorial that comes in the Wall Market help file? It gives some basic help with starting to edit AI.
Careful with these, though. Some of them are wrong. Like the randomly assigning statuses won't work the way I said it would. I still haven't confirmed that loops work at all either. Let me test that real quick...

Apparently it does:
Code: [Select]
Code:
72  001193  2C 4F 4F 50 00 54 45 53 54 FF72  001472  000373
This actually works so I'd guess if I didn't have that 72  0014 in there it'd loop infinitely....

NO! DON'T CREATE AN INFINITE LOOP! The game hangs and I couldn't get out of it other than resetting the computer. Fortunately, Firefox is awesome and saves sessions.


Dang, I just realized that I wasted the "new post" I was saving for the next version. :( Someone else post something so I won't be accused of double posting...
 
Last edited:
ok, so you tease with a new version, and never  post about it, you meanie  :x

heh  :-D ... anyway i found an issue with the copy/paste function when trying to insert into a fresh AI section (as in when you just hit enter, and all that is there is the end statement), it will all paste in fine and all, but when you exit, the copied data is all gone, and it acts as if it has nothing in it at all. i noticed that the little * next to the section showing that  it is modified is not there when you just hit enter to add new data, the end statement doesn't seem to be considered as "something" in the section  :|, and copying doesn't seem to count as something added either, but it is fixed if you type in anything, delete it and then copy over, maybe having the end statement automatically trigger the "contains data" *  would be a simple fix for it?

also, on a similar note, it doesn't seem to like copying over if you are in the middle of modifying data, as in you type in 60, press enter, and while in the value section you hit copy, it will produce an error, but if you click continue (nothing is shown in the section), then click a different section and return, everything copied over fine  :-P.

Edit: and another addition to this problem with the paste function, it seems that trying to paste anything without modifying something beforehand results in nothing being retained when the AI editor is closed, just like with it not keeping the changes if you start from a fresh section. it apparently has something to do with the pasted data itself then, it probably needs to be what gets counted as changed data then, not the end statement, because that would only fix new sections, not the rest  :roll:

also, about your search function, it would probably be better if it had the possibility of having a case sensitive searching style (little check box  :-)), because searching for specific enemies (MP for example) will bring up scenes with multiple enemies with mp in the name, like jumping and the sample enemies. it would also be nice if it would allow you to do other things within PrC (trying to click anything gives the beep error because you have the window up still, not sure if you can easily do that), so you can look at the scenes with the enemies you searched up, and modify as you go, rather than having to memorize/write down the scenes and modify it like that.
 
Last edited:
Status
Not open for further replies.
Back
Top