Changing enemy colors with editing AI

  • Thread starter Thread starter ff7rules
  • Start date Start date
Status
Not open for further replies.
F

ff7rules

Guest
From Gjoerulv.

It's probably possible. The "only" thing you need to do is to find the address for gamma/brightness and change/set the value for it. If you remember the way you changed the size of the enemy by AI modding it shouldn't be too hard.

IF XXXX is the address and YY is the value you want then it should look something like this.:

12 (2060)
11 (XXXX)
80
60 (YY)
90
 
The addres is over 0x4000 but under 0x4FFF. Value 00h - FFh. If you have the Proud Cloud app. you could look in the data file that follows to explore known addresses.

Thats alot of adresses to test myself help anyone? :P heres what i got so far. Wwill edit as I try more)

Self.Flag:Unknown(00000001) <- 128 = 4020
Self.Flag:SideAttack <- 128 = 4021
Self.Flag:Unknown(00000004) <- 128 =4022
Self.Flag:Enabled? <- 128 = 4023
Self.Flag:MainScriptActive <- 128 = 4024
Self.Flag:Defending? <- 128=4025
Self.Flag:BackRow <- 128=4026
Self.Flag:?Row <- 128=4027
Self.Flag:PhysicalImmune <- 128=4028
Self.Flag:MagicalImmune <- 128=4029
Self.Flag:Unknown(00000400) <- 128=402A
Self.Flag:Unreachable <- 128=402B
Self.Flag:Unknown(00001000) <- 128=402C
Self.Flag:DeadUnit <- 128=402D
Self.Flag:Invisible <- 128=402E
Self.Unknown(402F) <- 128=402F Reflect all?
Self.Flag:Unknown(00010000) <- 128=4030 nothing noticeable
Self.Flag:Unknown(00020000) <- 128=4031 absorb all magic
Self.Flag:Unknown(00040000) <- 128=4032
Self.Flag:Unknown(00080000) <- 128=4033
Self.Flag:Unknown(00100000) <- 128=4034
Self.Flag:Unknown(00200000) <- 128=4035
Self.Flag:Unknown(00400000) <- 128=4036
 
I'll have a go at some of these.

BTW, did you find out anything about using summon models as enemy models?
 
I'll have a go at some of these.

BTW, did you find out anything about using summon models as enemy models?
Yeah, it can be done in the PC version but psx won't work. Theres some really interesting values to be found just gonna take along time.
 
I've just tried 4037 and 4038 with the MP and the Guard Hound, and I didn't see any effects. I'll keep on looking.

BTW, did you find out anything about using summon models as enemy models?
Yeah, it can be done in the PC version but psx won't work. Theres some really interesting values to be found just gonna take along time.
That's a shame. Perhaps you could report report those findings in the thread, thereby bumping it :wink:
 
Last edited:
i will list the unknown addresses from my PrC dat file, which should be less than the normal dat file that comes with it, since i have found out  a few of the unknowns on my own (not listing flags, since a single stray flag is doubtful to help in this instance :P):

4030-403f
40b0-40b7
41ao-421f (big section between used stuff)
4240-4267
4278-427f
4300-433f (4340-435f is a type of status infliction that affects all in the row EXCEPT the enemy hit IIRC, sort of a blade beam like infliction, but has some weirdness to it)
4360-4fff (the main chunk, doubt much of it is used though)

it is those ranges that would have the color data if it is there, though i don't think it is anywhere before 4360, since i have tried some stuff while looking for the enemy drop/steal items and rates, though i did find the item/money (gil caps at 65535) data that they "stole" from you, like the vice enemy uses when it steals from you (4280 for gil and 4290 for item :P). i haven't tried all that much in the upper region of the data, but it should become pretty apparent when you hit one of the sections (color or drops), because making it a set value would be noticeable right away in many cases (if an MP turned white, then i think you hit the right area XD).

if you guys are looking through the unknown data (i may join in again sometime soon), keep an eye out for other things while you are in there... i would like to stumble upon the drop/steal/morph items and rates, and possibly the manip. moves for the enemy, for my leveling mod once i return to it :P. and, if you want, i can post the contents of my PrC dat file for you to use, though I am not entirely sure if it is all accurate, but it should give a decent idea of how some of it works, and a lot of my flags are separated rather than in one clump, like the elemental resistances.

you could probably make a pre-battle section for whichever test enemy (MP is a good one :P), and set a few unknowns at a time to see what all changes, and slowly move on as you go, if you hit anything interesting just remove unknowns until you can pinpoint the cause ;).
 
WOW that list would be great! also i think i found the values that make it so you miss more with attacks so it just increases the evasion. glad so many people are into this :)
 
ok, i sort of looked at the memory of the game and found the location of the 4000-433f data (403f is the max for one enemy's data), the reason why when i activated 4340-435f and it inflicted a status when i attacked an enemy (and didn't inflict the status to the main enemy) is because it was pointing to the data for the next enemy, the 4340+ is the next enemy in the formation's data, so i was inflicting a status to the other enemy :P.

so if it is anywhere (along with the item data hopefully), it will be between 4000 and 433f inclusively, so that narrows down the possibilities some :D. lemme modify my list some to accommodate these new findings, and i will post what i know... and done :P. now it doesn't have everything, and some of it is just modified parts of the original, but there is more than there is in the normal dat file, so it should at least have some interesting data:

Code: [Select]
Code:
4000|Status:Death4001|Status:NearDeath4002|Status:Sleep4003|Status:Poison4004|Status:Sadness4005|Status:Fury4006|Status:Confu4007|Status:Silence4008|Status:Haste4009|Status:Slow400A|Status:Stop400B|Status:Frog400C|Status:Small400D|Status:SlowNumb400E|Status:Petrify400F|Status:Regen4010|Status:Barrier4011|Status:MBarrier4012|Status:Reflect4013|Status:Dual4014|Status:Shield4015|Status:D.Sentence4016|Status:Manipulate4017|Status:Berserk4018|Status:Peerless4019|Status:Paralysis401A|Status:Darkness401B|Status:DualDrain401C|Status:DeathForce401D|Status:Resist401E|Status:"LuckyGirl"401F|Status:Imprisoned4020|Flag:Invisible4021|Flag:SideAttack4022|Flag:Unknown(00000004)4023|Flag:Targetable4024|Flag:MainScriptActive4025|Flag:Defending4026|Flag:BackRow4027|Flag:Facing4028|Flag:PhysicalImmune4029|Flag:MagicalImmune402A|Flag:Unknown(00000400)402B|Flag:Unreachable402C|Flag:NoDeathAnimation402D|Flag:DeadUnit402E|Flag:Tangible402F|Flag:Unknown(00008000)4030|Flag:Unknown(00010000)4031|Flag:Unknown(00020000)4032|Flag:Unknown(00040000)4033|Flag:Unknown(00080000)4034|Flag:Unknown(00100000)4035|Flag:Unknown(00200000)4036|Flag:Unknown(00400000)4037|Flag:Unknown(00800000)4038|Flag:Unknown(01000000)4039|Flag:Unknown(02000000)403A|Flag:Unknown(04000000)403B|Flag:Unknown(08000000)403C|Flag:Unknown(10000000)403D|Flag:Unknown(20000000)403E|Flag:Unknown(40000000)403F|Flag:Unknown(80000000)4040|Index4048|Level4050|ElementalWeakness?4058|GreatestElementalDamage4060|FormationNumber4068|AttackPower4070|MagicPower4078|Evade%4080|IdleAnimID4088|DamageAnimID4090|BackDamageMult4098|SizeScale40A0|DEX40A8|LUK40B0|Unknown(40B0)40B8|AllyCovered40C0|AttackMask40D0|PreviousAttacker40E0|PreviousPhysAttacker40F0|PreviousMagAttacker4100|PhysDefense4110|MagDefense4120|EnemyID4130|AbsorbFire4131|AbsorbIce4132|AbsorbLightning4133|AbsorbEarth4134|AbsorbPoison4135|AbsorbGravity4136|AbsorbWater4137|AbsorbWind4138|AbsorbHoly4139|AbsorbRestorative413A|AbsorbCut413B|AbsorbHit413C|AbsorbPunch413D|AbsorbShoot413E|AbsorbShout413F|AbsorbHidden4140|MP4150|MMP4160|HP4180|MHP41A0|Unknown(41A0)41A8|Unknown(41A8)41B0|Unknown(41B0)41B8|Unknown(41B8)41C0|Unknown(41C0)41C8|Unknown(41C8)41D0|Unknown(41D0)41D8|Unknown(41D8)41E0|Unknown(41E0)41E8|Unknown(41E8)41F0|Unknown(41F0)41F8|Unknown(41F8)4200|Unknown(4200)4208|Unknown(4208)4210|Unknown(4210)4218|Unknown(4218)4220|InitialStatus:Death4221|InitialStatus:NearDeath4222|InitialStatus:Sleep4223|InitialStatus:Poison4224|InitialStatus:Sadness4225|InitialStatus:Fury4226|InitialStatus:Confu4227|InitialStatus:Silence4228|InitialStatus:Haste4229|InitialStatus:Slow422A|InitialStatus:Stop422B|InitialStatus:Frog422C|InitialStatus:Small422D|InitialStatus:SlowNumb422E|InitialStatus:Petrify422F|InitialStatus:Regen4230|InitialStatus:Barrier4231|InitialStatus:MBarrier4232|InitialStatus:Reflect4233|InitialStatus:Dual4234|InitialStatus:Shield4235|InitialStatus:D.Sentence4236|InitialStatus:Manipulate4237|InitialStatus:Berserk4238|InitialStatus:Peerless4239|InitialStatus:Paralysis423A|InitialStatus:Darkness423B|InitialStatus:DualDrain423C|InitialStatus:DeathForce423D|InitialStatus:Resist423E|InitialStatus:"LuckyGirl"423F|InitialStatus:Imprisoned4240|Unknown(4240)4248|Unknown(4248)4250|Unknown(4250)4258|Unknown(4258)4260|Unknown(4260)4268|MagEvade%4270|BattleRow4278|Unknown(4278)4280|ReturnedGil4290|ReturnedItem42A0|NullFire42A1|NullIce42A2|NullLightning42A3|NullEarth42A4|NullPoison42A5|NullGravity42A6|NullWater42A7|NullWind42A8|NullHoly42A9|NullRestorative42AA|NullCut42AB|NullHit42AC|NullPunch42AD|NullShoot42AE|NullShout42AF|NullHidden42B0|AP42C0|Gil42E0|Exp4300|Unknown(4300)4308|Unknown(4308)4310|Unknown(4310)4318|Unknown(4318)4320|Unknown(4320)4328|Unknown(4328)4330|Unknown(4330)4338|Unknown(4338)
i will work on my recently dumped data and see what all i can find, hopefully i can pinpoint something :P.

edit: nope, i cannot see anything that would possibly point to drop/stea/morph/manip stuff (for me), but 4278 has FF in it, and 4260 has 01, while all of the rest has 00, so those are the only two unknown values with any number in them at all sans 00, but i don't know what they do, i will have to test them and see real quick.

it seems that there will be no real way to change any of the values we wanted through AI, at least through the 4XXX data, but there may still be a way to do it, but how exactly i do not know... it could be something in the 2XXX area, since there are other things in there besides masks (like the magic counter, which counts the amount of times magic was cast (not entirely sure on the mechanics, it may have to hit an enemy to increment it, been a while since testing it :P), battle ID,  and the camera data), so it could still be possible, though I wouldn't know where to look exactly. all i know is that from the data i just looked at, 4XXX isn't looking good for much more data :/.
 
Last edited:
Wow secondadvent you have been working hard!

Just had a though maybe the answer is in the gameshark code?

Im no expert with these things so i really don't know also i looked at 2000 down to 0 there mostly local variables
 
I am sorry to bump this but me and gamefac have made a pretty awesome discovery!

it seems in prc changing the value of say darkness inflicts more than just tht one element and makes them flash different colors!

example

Display String: "Vincent "The beginning of your nightmare.""
Pause
Self.Status:Berserk <- Self.Status:Berserk + 80
SCRIPT END

 and vincent does nothing
 but when i attacked him
 he went into manipulation status
 you know that right?
 it glows BLUE

 So changing that value makes them glow (flash different colors are we on to something here or not would you say?
 
i am thinking that is because the statuses are flags, they are either on (1) or off (0), so inputting a value of 80 (which is a byte value) into a bit value will cause it to actually change other values, and not necessarily the one you intended. a value of 80 will change two statuses if you were to do a self.berserk <- 80, it would give you Dual Drain and resist statuses, not the berserk status (why you had the manipulate status, the one below berserk activate i don't know, it could be because you added the berserk's own amount back to itself, why i do not know :/). look at it in bit form, each bit is worth a certain value when activated in a byte, and you add all of the active bits together to get the total for that byte, like so:

active bit worth:
bit 0 = 1
bit 1 = 2
bit 2 = 4
bit 3 = 8
bit 4 = 16
bit 5 = 32
bit 6 = 64
bit 7 = 128

and to get the value of 80, you activate bit 6 and bit 4 because 64+16=80. bit 0 is where berserk is, since that is where you are starting the pointing from, so compare the above bot list to this list:

4017|Status:Berserk (bit 0, which is inactive)
4018|Status:Peerless
4019|Status:Paralysis
401A|Status:Darkness
401B|Status:DualDrain (bit 4 activates this)
401C|Status:DeathForce
401D|Status:Resist (bit 6 activates this)
401E|Status:"LuckyGirl"

you can see how the bits match up to the different statuses. when you deal with flags (one bit values), you only ever want to use bit one, so only a 0 for off, or 1 for on should be used, or things you didn't expect can and will happen :P. as for it activating the manipulation status, it could be due to how you set up the setting of the berserk stat, you have it as self.berserk <- self.berserk + 80, while if you wanted to just activate/disable the stat, you would only do self.berserk <- 1 or 0 (or 80 in your case :P), having the self.berserk in there makes it add it's own value to itself, which isn't needed for flags (other stats it can be needed if you want to not just set the stat, if you wanted to heal X amount of hp, you would go self.hp <- self.hp +x, if you just went self.hp <- x, you would only have x life then, which can be bad depending on what you were aiming for :D).

if your code was:
Code: [Select]
Code:
12 206010 40178012 2060 //bad, you would be trying to add a pointer to a pointer instead of a value to a pointer10 40178060 50 //50 is 80 in hex :P3090
instead of:
Code: [Select]
Code:
12 206010 40178002 206000 40178060 503090
then you could have unforeseen things happen, because i do not know how that particular piece of code would cause your status infliction to react, it could very well cause the manip stat to activate, i don't know :P. it could even be what you have the berserk flag's type as, 10 is for bit (flags) values, 11 for bytes, etc., so having the wrong one for what you are trying to do can cause issues as well, if you have it as 10, which it should be, it has to try and fit the value of 80, which is outside of it's range, into that bit value, which isn't good... i can't say for sure the exact cause of it having manip activated, but i do know that you are not getting what you aimed for because you are trying to place the wrong sized value into the berserk flag :P.

and so ends another long post by me <_<. or does it? XD

[offtopicz]
this will be off topic, but i have been working on my leveling AI, and i have got it pretty much perfect now, the most total size of the AI that can be used up if all three enemies in a scene raise EVERY stat (with my equations i am using :P), would be just under 31%, and for the most part it will not take up too much space for the bigger battles, since they are usually in a scene by themselves (like ruby/emerald), so they will have ~10% taken up by leveling, and the rest would be free to make them uber XD. i was trying to test out that berserk issue, and got raped because i forgot i still had the MP enemy to be from cloud's level to cloud's level +64... so i was getting 1hko'ed a little bit  :roll:. oh well, maybe now i can finally start back up my hard mod again, now that the roadblock is out of the way (and i have made an awesome excel spreadsheet to calculate the exact stats they will have, including the critical chance, base damage, damage resisted (in %, just a basic idea of the damage that enemy will resist with their defense/m.def, and it has two graphs to show their stat growth's all together, and more >:3), i am still somewhat working on another game though, so my progress will likely be slower, not to mention i still need to do my AI compression mod along with it :P.[/offtopicz]
 
I emailed the guy who created the code. Heres what he had to say.

I hacked them (years ago, at that), using a GSPro and comparative searches (using a status, perhaps Darkness, as a basis for the comparisons). Beyond that, I have no further info. Sorry, and good luck.

Thats all he had to say im afaird.
 
Status
Not open for further replies.
Back
Top