Final Fantasy 7 > FF7 Tools

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

(1/127) > >>

Proud Clod is now online and prepared for battle. All new updates to Proud Clod will come here.

ProudClod 1.5.0 is FINAL!!
Mediafire mirror (out of date): Mediafire binary
Source: Mediafire source

Updated some stuff based on some bug reports with the previous version:

Fixed the problem with the item drop/steal thing not working due to lack of handling of "NOTHING" slot.

Now you can import item names from your KERNEL.BIN/kernel2.bin for display in the steal/item drop/morph boxes.
Added the status effect bits to the "element modifiers" section. I'm not sure if they are all valid values, but it might be interesting to see if you could "full heal" from sadness or something. Someone try these out!

Scene Data Management:
Animations/Formations: That oddly-placed button was moved to a menu item here. functions mostly the same as before.
Dump Scene(s): This is the way to obsolete SceneReader. This can dump an individual scene for byte-wise manipulation.
Load Scene(s): Of course, Dump Scene(s) would be worthless without this function too. This will load a scene or 256 scenes in their raw format for manipulation/recompilation later.

Enemy Management:
Edit Enemy AI: [See Animations/Formations above]
Edit Enemy Stats: ProudClod now has the ability to modify enemy stats thereby making Hojo completely obsoleted.
Could be a bit buggy though. I didn't test it completely. Some things might not save correctly. Let me know if it doesn't. Model ID has been moved from the Animations/Formations window to this one.
Copy/Paste enemy: You can copy a single enemy to place in a different scene in a new place. Paste won't show up if you have an enemy copied, and you can paste multiple times. It SHOULD copy needed attacks as well. I don't remember if I got this working completely correctly either.
Sync enemy: This will search all the scenes looking for any enemy that shares a Model ID with the enemy you select. Once it finds it, it will re-write THAT enemy to be like the one in the scene you currently have selected. Handy for changing enemies in different scenes.

Microsoft .NET Framework 3.5 or higher
DirectX 9.0c (or higher?)

*new* Blog.

Included .dat file (ProudClod.dat). This file contains all the display characters and battle script addresses and their values. If you decide to change the character set, update this file. If this file is not present in the same directory as ProudClod.exe, then PrC will use the standard FFVII display characters. Also, disassembly will not display functions of known address values. If you discover the function of an unknown value, add it to the bottom of the file (or anywhere after the first 256 lines) in the same format as the rest of the addresses:
<4-digit hex address>|<function>
and it will show up during disassembly of the AI.

Images: (Modeled after WM and I'm too lazy to make new pics so this will do for now)
Main: (Identical in structure to the contents of WM's attack tab, but with a few differences)
Character AI:
Enemy Animation:
Raw Formation Data:

This program started out as an Enemy Attack editor. You could change the names of certain enemy attacks as well as their effects, strength, MP cost, element, status infliction, etc. It can still do that, but it has been since upgraded to allow you to edit the enemies' AI themselves! It is mostly modeled after my previous program WallMarket which allows you to edit almost every byte of the KERNEL.BIN file that contains battle information relevant to the playable characters.
Several Searches have been added

* Search for Monster by name has been around for a while
* Search for Attack by Index
* Search for Attack by name
* Search for Unused Attack Indexes if you want to add a new attackSeveral attack-related functions have been added

* Copy/Paste/Delete an attack between scenes or as a base for a new attack!
* Synchronize all attacks with a specific Attack ID within the entire collection of scenes (useful for things like E.Skills or if you have the same monster in multiple scenes)
* Statuses and Elements can be filled or cleared if you right click in the blank spaces between them.AI Editing-related changes:

* Copy/Paste scripts (whole or partial) from one to another (still mostly experimental, but I think it'll work)
* Displaying strings is now easier that before. Just type the characters rather than translating to ff7 character codes (don't forget to add a hex value at the beginning if you're using code A0
* Edit window is now sizable! You can see more script if you want.
* Strings now can be edited and saved correctly *new*
Animation-related changes:

* Format has changed. Only one monster at a time is displayed. Should speed loading of the form up.
* "Action camera override" are editable beside attack animation
* Enemy ID are editable
* Manipulate attacks are selectable
* Issues with renamed attacks *should* be resolved.You can also edit the raw formation data in each scene! Much of it is already known, but there's a little bit left (escape flags).
Formation Data changes:

* Graphical Interface allows you to change anything about formation positions.
* won't load models or backgrounds yet. Not sure if I'll make it do that.Data dumping:
For now, you can dump six things. I'll add more if someone requests it.

* Setup Data
* Camera Data
* Formation Data
* Enemy Names with IDs
* Attack Animations per enemy per scene
* Raw attack data per scene
* List of attack names by index. They really are unique!Change saving!

* Changes made to scenes (anywhere) are savable to a file that can be opened by another user in their scene using PrC!
* This includes changes made by Hojo!Helpfile documentaion!
Be sure to check out the addendum to opcode 93h.

I'm probably leaving out a few things and I'm sure bugs will surface, but it should be more friendly now.

Q: ...the heck? Controls?! What do I need controls for?

A: Since you asked so nicely *grumble,grumble* I'll tell ya'. The new formation editor needs some explaining.
First of all, it will look like it will in the game. Well, minus the models and backgrounds. It will have cubes to represent these now. There's silver ones for the enemies' and gold ones for the characters' positions. On top of this, there's a gray "ground" that represents the battle floor. There are also axis lines along all the major axises.
Green = positive x
yellow = negative x
red = positive y
magenta = negative y (for some reason, these are reverse when it comes to coordinates)
blue = positive z
cyan = negative z
Get it? Positive = RGB; Negative = CYMK
To rotate the camera around the viewing center, click and hold down the left mouse button on the field and move it.
To rotate the center around the camera, hold shift while performing the same action.
To pan around, hold down control and the left mouse button and move the mouse.
To gain altitude, hold down Shift+Ctrl+Left mouse button and move up or down.
To save the camera position, right-click on the position label which is on top of the FFVII battle menu and tell it to save.
That's all for the movement of the camera, now we can also move the enemys.
To select an enemy, click on it's position label. When it turns blue you can hold down the right mouse button to move it around the gray field. Right-click on its label to align, center, or save its position.
That should be everything.
Keep in mind, however, that the drawing order is not true. The gold cubes will always overlay the silver ones even if the silver is closer to the camera. I'm not sure how to fix this. I'm working on it.
Also of note is that each cube is two "units" in size and there is currently no way to know that one is overlaying another. Most units are larger than 8 cubic units anyway. A Battery Cap, can "sit" on one square unit and be surrounded by others and not contact another one, but it's probably the only one that can and it's REALLY close to the others when it is. Moral: Leave some space between them.

Now it is able to edit what attacks an enemy can perform! There are two options. One will be which attack it can perform, and the second will be its animation while performing that action. Only a few actions per character are used, but play around with them. Typically, 0-2 are idle, damage, and death and from 3 on are attack animations.
Now you can find the enemy you're looking for even easier! The search button to the right of the scenes will allow you to look for the name of a monster. It is case insensitive and you just have to give it part of the name! If only one scene contains that enemy it will jump to it. Otherwise, it will give you a list of scenes it is in.


* Most information is known, but not all. If you have any information on unknown values please let me know by replying to this or PMing me. Also keep in mind that I intend to continue updating this with relevant information so this is not the final version.
* Also keep in mind that I intend to continue updating this with relevant information so this is not the final version.
zlib1.dll needs to be in the same directory as PrC or in the WINDOWS\system32 directory. If you get an error during scene.bin creation saying it can't find zlib1.dll, put it in the same directory as PrC.
* Currently does not come with a readme of any kind. Use WM's readme for opcode description until I make a PrC one.
* To delete scripts, highlight the script section ("Pre-Battle", "Main", etc) and press the Delete key on the keyboard.
* This thing is probably pretty buggy, but I didn't do a very exhaustive test of what it can and can't modify. If something doesn't work, let me know.
* For questions about animations indexes, read this thread first.

I think I was a big part of the proud clod related clutter :evil:. sorry i posted again in it, but i must have started posting when you put your post...

at least some of my ideas are catching peoples' eye... now if i keep it up i will be able to eventually have a nice hack to play :-P

edit: damn... changing it's invisible flag didn't work, neither did it's dead unit flag (unsure of which of the two if either are activated when killed... know little of the death sequence), so i have to retype it into the post-attack thing.

edit2: nope... forgot that death happens before all but the death counter >_> have to try some other things to prevent invisibility

Fleet Command:
Nice work.

By the way, what does Proud Clod means? I never get to understand it properly, especially in regard to that big robot in FF7. Does it mean the same thing that I understand from it the way I do from other phrases like Suspicious Cat or Glorious Half-lit Shadow?

Kudistos Megistos:

--- Quote from: secondadvent ---thanks... i didn't know that my ideas were this good. if it helps, that is great, since the more ideas that are out there, the better the hacks can become evil. if you want to see some of my code as an example tell me and i will put some up here for reference.
--- End quote ---

I wouldn't mind seeing the code for "counter by causing status ailments" and "counter when a certain amount of damage is done"  :wink:

Actually, it could be a good idea to gather together "templates" for things people might want to do with AI editors, so that people can copy the code and only worry about which attacks/status changes/etc to use.

alright, i will have them up shortly, just another test i want to do first :-P

here is the damage absorption code (note in my original i used 12/02 for the variables which dealt with hp, and that is probably a bad thing :evil:... i'm glad i caught that little mistake)

--- Code: ---pre-battle:
13  0000 // 0000 <- self hp/max hp
02  2060
03  4160/4180 (either works)
13  0020
60  00
12  0040
60  00

sets up the needed variables - 0000 is "previous hp" or the hp that the enemy had before the last attack, 0020 is "current hp" to make later parts smaller (less times needed to figure out the current hp), and 0040 is "damage taken"

general counter:
13  0020 // current hp <- self hp
02  2060
03  4160
03  0020 // if current hp < previous hp
03  0000
70  XXXX (end of script jump)
13  0040 // damage taken <- previous hp minus current hp
03  0000
03  0020
13  0020 // current hp <- damage taken/2 + current hp (gives back half of the damage taken)
03  0040
60  02
03  0020
12  2060 // self hp <- current hp
13  4160
03  0020
13  0000 // previous hp <- current hp
03  0020

this code makes the enemy absorb 50% damage taken, and unlike resisting half of the attack, this WILL kill the enemy if you do more damage normally with one attack (i.e if the enemy had 10 hp left, you deal 10, it dies, while if it had 50% resist,
it would be alive with 5), and you can still add resistance onto this. of course there are different things you can do with this as well, this is just an example.
--- End code ---

hopefully i didn't forget anything in the transition form PrC to here... also the amount healed isn't shown, so it gives the illusion that the enemy has more life than it actually has, while reducing damage has a visual representation... a sneaky way to make something seem stronger than it actually is, and makes knowing the actual life (without sense available, or actually looking at the hex, or with an editor) hard to know for sure. in essence it makes the enemy live longer if you aren't hitting it very hard (compared to max hp) by restoring more hp over time, especially with healing abilities as an aid, and live much lesser (still more than max hp if it can survive some hits) if you are dealing more damage.

now the physical status ailment counter is pretty simple:

--- Code: ---physical counter:
81 // if random (xx) = 0 (actually if random (xx) is not true, but same thing >_>)
60  XX (whatever random chance you want)
70  XXXX (jumps to the end if not true)
12  40d0 // previous attacker poison <- true
10  4003
60  01

pretty simplistic, but it does give the attacker poison (or whatever other status), but i did notice that with poison, the visual glowing green effect doesn't show up until you are attacked, but the poison still hurts you, so it is just a minor bug
--- End code ---


[0] Message Index

[#] Next page

Go to full version