[FFVII] Enemy AI Script questions

  • Thread starter Thread starter DynamixDJ
  • Start date Start date
Status
Not open for further replies.
Need some clarification on what's going on here with the Laser Cannon:


Code: [Select]
Code:
0x161   }0x161   Else0x161   {0x164    If (LocalVar:SelfActive == 3)0x164    {0x169    If ( (LocalVar:MachineGun.BattleAddr(&DeathStatus) == 0) )0x169    {0x176     If (Random MOD 4 == 0)0x176     {0x17F     BattleAddr(&TargetSelected) <- BattleAddr(&Self)0x186     Perform("Vanish"[014E], EnemyAttack)0x18C     BattleAddr(&Self).BattleAddr(&SelfActive) <- 00x196     BattleAddr(&Self).BattleAddr(&Targetable) <- 00x1A0     LocalVar:MachineGun.BattleAddr(&Angry) <- 10x1AA     }0x1AA     Else0x1AA     {0x1AD      }0x1AD      Else0x1AD      {0x1B0       If (Random MOD 4 == 1)0x1B0       {0x1B5      BattleAddr(&TargetSelected) <- BattleAddr(&Self)0x1BC      Perform("Vanish"[014E], EnemyAttack)0x1C2      BattleAddr(&Self).BattleAddr(&SelfActive) <- 00x1CC      BattleAddr(&Self).BattleAddr(&Targetable) <- 00x1D6      }0x1D6      Else0x1D6      {0x1D9       }0x1D9       Else0x1D9       {0x1DC       If ( (BattleAddr(&AllPlayers).BattleAddr(&ParalyzedStatus) == 0) )0x1DC       {0x1E9        If (Not  (Random MOD 4) )0x1E9        {0x1F1         If ( (BattleAddr(&AllPlayers).BattleAddr(&ParalyzedStatus) == 0) )0x1F1         {0x1FE         BattleAddr(&TargetSelected) <- RandomBit( (BattleAddr(&AllPlayers).BattleAddr(&ParalyzedStatus) == 0) )0x20D         }0x20D         Else0x20D         {0x210         BattleAddr(&TargetSelected) <- RandomBit(BattleAddr(&AllPlayers))0x218        Perform("Paralaser"[0169], EnemyAttack)0x21E        }0x21E        Else0x21E        {0x221        BattleAddr(&TargetSelected) <- RandomBit(BattleAddr(&AllPlayers))0x229        Perform("Laser Cannon"[0117], EnemyAttack)0x22F       }0x22F       Else0x22F       {0x232       BattleAddr(&TargetSelected) <- RandomBit(BattleAddr(&AllPlayers))0x23A       Perform("Laser Cannon"[0117], EnemyAttack)0x240      }0x240      Else0x240      {0x243    POP(Random MOD 4)0x244    }0x244    Else0x244    {
I'm reading this as:

1/4 chance use Vanish and set Machine Gun's "Angry" TempVar to 1
1/4 chance use vanish
2/4 chance: 1/4 chance use paralyser on rnd target without Paralyse
                  3/4 chance use Laser Cannon

which actually makes it:

2/8 chance use Vanish and set Machine Gun's "Angry" TempVar to 1
2/8 chance use vanish
1/8 chance use paralyser on rnd target without Paralyse
3/8 chance use Laser Cannon

Am I correct with this?

edit no I'm not, I'm completely wrong....
It goes:

1/4 chance use Vanish on Self and set Machine Gun's "Angry" TempVar to 1
1/4 chance use vanish on Self
2/4 chance: At least one Target without Paralyzed:
                   1/4 chance use paralyser on rnd target without Paralyse
                   3/4 chance use Laser Cannon on Rnd Target
                  All Targets with Paralyzed:
                   Use Laser Cannon on Rnd Target


Damn, the Machine Gun and Laser Cannon have been the most long winded enemies to try to decipher so far, even more so than the Eligor! Time for a break :)
 
Last edited:
There's a bug with the Soldier:3rd. It checks for the MP cost when using Sleepel, Ice2 and Bolt2, nut not Flying Sickle which costs 8MP. When it tries to use Flying Sickle with less than 8 MP it displays the message: Soldier:3rd's skill power is all used up
 
Sounds correct to me. I guess it's like a free turn for the player and shows that the enemy has run out of MP.
 
Yeah. While it is an odd choice to check for some actions and exclude one, this is still essentially intended behavior. Soldier:3rd only has 40 MP so it can only do Ice2 or Bolt2 once without the player somehow interfering (giving an ether by mistake or something). Personally, I think most human enemies should be allowed to utilize items once or twice if the need arises. Say they can use an ether (rather, an action that imitates the ether item) if their AI selects something they don't have MP for. That makes them "waste" their turn on a utility action which makes the experience of fighting "intelligent" characters more believable. This is during the ShinRa HQ raid so you'd expect company guards would have access to such supplies. But I digress...

This is definitely one of those AIs that could be simplified.
 
I can understand the want to have a few Enemies that will run out of MP, the main issue that I have with the Soldier:3rd is the fact that it will call on Flying Sickle very often once it has run out of MP, which means that after just a few uses of Flying Sickle/Sleepel (8mp) and Ice2/Bolt2 (22mp), it will spend approximately 2/3 of its turn just doing nothing, with the text string appearing at the top.

Take a look at the Soldier:3rd's simplified AI script:

Code: [Select]
Code:
| - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  ||   SOLDIER:3rd's BATTLE PLAN:                                               ||                                                                            ||  OPENING ATTACK: 1/4 Chance start from 1st Attack                          ||                  1/4 Chance start from 2nd Attack                          ||                  1/4 Chance start from 3rd Attack                          ||                  1/4 Chance start from 5th Attack                          ||                                                                            ||    *If All Targets have Sleep, select Rnd Target                           ||                                                                            ||                                                                            ||  1ST ATTACK: (<Split>)                                                     ||                                                                            ||   Use <Split> on Rnd Target without without Sleep*                         ||                                                                            ||    FOLLOW-UP: SOLDIER:3rd's HP > 75%                                       ||                1/4 Chance: Use <Split> on Rnd Target without Sleep*        ||                3/4 Chance: Do Nothing                                      ||                                                                            ||               SOLDIER:3rd's HP <= 75%:                                     ||                1/3 Chance: Use <Split> on Rnd Target without Sleep*        ||                2/3 Chance: Do Nothing                                      ||                                                                            ||               SOLDIER:3rd's HP <= 50%:                                     ||                1/2 Chance: Use <Split> on Rnd Target without Sleep*        ||                1/2 Chance: Do Nothing                                      ||                                                                            ||               SOLDIER:3rd's HP <= 25%:                                     ||                Use <Split> on Rnd Target without Sleep*                    ||                                                                            ||                                                                            ||  2ND ATTACK: (Sleepel)                                                     ||                                                                            ||   SOLDIER:3rd's HP > 75%:                                                  ||                                                                            ||    2/8 Chance: Use Sleepel on Rnd Target without Sleep; If All Targets     ||                 have Sleep OR SOLDIER:3rd's MP < 8, move onto remaining    ||                 6/8 chance                                                 ||    3/8 Chance: Use <Split> on Rnd Target without Sleep*                    ||    3/8 Chance: Use Flying Sickle on Rnd Target without Sleep*              ||                                                                            ||   SOLDIER:3rd's HP <= 75%:                                                 ||                                                                            ||    2/4 Chance: Use Sleepel on Rnd Target without Sleep; If All Targets     ||                 have Sleep OR SOLDIER:3rd's MP < 8, move onto remaining    ||                 2/4 chance                                                 ||    1/4 Chance: Use <Split> on Rnd Target without Sleep*                    ||    1/4 Chance: Use Flying Sickle on Rnd Target without Sleep*              ||                                                                            ||   SOLDIER:3rd's HP <= 50%:                                                 ||                                                                            ||    Use Sleepel on Rnd Target without Sleep; If All Targets have Sleep OR   ||     SOLDIER:3rd's MP < 8:                                                  ||      1/2 Chance use <Split> on Rnd Target without Sleep*                   ||      1/2 Chance use Flying Sickle on Rnd Target without Sleep*             ||                                                                            ||                                                                            ||    After 2ND ATTACK: 1/2 Chance jump to 3rd Attack for next turn           ||                      1/2 Chance jump to 4th Attack for next turn           ||                                                                            ||                                                                            ||  3RD ATTACK: (Bolt2)                                                       ||                                                                            ||   SOLDIER:3rd's HP > 75%:                                                  ||                                                                            ||    2/8 Chance: Use Bolt2 on Rnd Target with Sleep; If no Targets have      ||                 Sleep, select Rnd Target; If SOLDIER:3rd's MP < 22, move   ||                 onto remaining 6/8 chance                                  ||    3/8 Chance: Use <Split> on Rnd Target without Sleep*                    ||    3/8 Chance: Use Flying Sickle on Rnd Target without Sleep*              ||                                                                            ||   SOLDIER:3rd's HP <= 75%:                                                 ||                                                                            ||    2/4 Chance: Use Bolt2 on Rnd Target with Sleep; If no Targets have      ||                 Sleep, select Rnd Target; If SOLDIER:3rd's MP < 22, move   ||                 onto remaining 2/4 chance                                  ||    1/4 Chance: Use <Split> on Rnd Target without Sleep*                    ||    1/4 Chance: Use Flying Sickle on Rnd Target without Sleep*              ||                                                                            ||   SOLDIER:3rd's HP <= 50%:                                                 ||                                                                            ||    Use Bolt2 on Rnd Target with Sleep; If no Targets have Sleep, select    ||     Rnd Target; If SOLDIER:3rd's MP < 22:                                  ||      1/2 Chance use <Split> on Rnd Target without Sleep*                   ||      1/2 Chance use Flying Sickle on Rnd Target without Sleep*             ||                                                                            ||                                                                            ||    After 3RD ATTACK: 1/2 Chance jump to 1st Attack for next turn           ||                      1/2 Chance jump to 5th Attack for next turn           ||                                                                            ||                                                                            ||  4TH ATTACK: (Ice2)                                                        ||                                                                            ||   SOLDIER:3rd's HP > 75%:                                                  ||                                                                            ||    2/8 Chance: Use Ice2 on Rnd Target with Sleep; If no Targets have       ||                 Sleep, select Rnd Target; If SOLDIER:3rd's MP < 22, move   ||                 onto remaining 6/8 chance                                  ||    3/8 Chance: Use <Split> on Rnd Target without Sleep*                    ||    3/8 Chance: Use Flying Sickle on Rnd Target without Sleep*              ||                                                                            ||   SOLDIER:3rd's HP <= 75%:                                                 ||                                                                            ||    2/4 Chance: Use Ice2 on Rnd Target with Sleep; If no Targets have       ||                 Sleep, select Rnd Target; If SOLDIER:3rd's MP < 22, move   ||                 onto remaining 4/4 chance                                  ||    1/4 Chance: Use <Split> on Rnd Target without Sleep*                    ||    1/4 Chance: Use Flying Sickle on Rnd Target without Sleep*              ||                                                                            ||   SOLDIER:3rd's HP <= 50%:                                                 ||                                                                            ||    Use Ice2 on Rnd Target with Sleep; If no Targets have Sleep, select Rnd ||     Target; If SOLDIER:3rd's MP < 22:                                      ||      1/2 Chance use <Split> on Rnd Target without Sleep*                   ||      1/2 Chance use Flying Sickle on Rnd Target without Sleep*             ||                                                                            ||                                                                            ||    After 4TH ATTACK: 1/2 Chance jump to 1st Attack for next turn           ||                      1/2 Chance jump to 5th Attack for next turn           ||                                                                            ||                                                                            ||  5TH ATTACK: (Flying Sickle)                                               ||                                                                            ||   Use Flying Sickle on Rnd Target without Sleep*                           ||                                                                            ||  FOLLOW-UP: SOLDIER:3rd's HP > 75%                                         ||              1/4 Chance: Use Flying Sickle on Rnd Target without Sleep*    ||              3/4 Chance: Do Nothing                                        ||                                                                            ||             SOLDIER:3rd's HP <= 75%:                                       ||              1/3 Chance: Use Flying Sickle on Rnd Target without Sleep*    ||              2/3 Chance: Do Nothing                                        ||                                                                            ||             SOLDIER:3rd's HP <= 50%:                                       ||              1/2 Chance: Use Flying Sickle on Rnd Target without Sleep*    ||              1/2 Chance: Do Nothing                                        ||                                                                            ||             SOLDIER:3rd's HP <= 25%:                                       ||              Use Flying Sickle on Rnd Target without Sleep*                ||                                                                            ||                                                                            ||    After 5TH ATTACK: Jump to 2nd Attack for next turn                      | |>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~o~~~~~~~~~~~~~~~~~~~~~~~~~~~~<|
So, once it has less than 8MP, it will:

 - Use Split on rnd target (sometimes twice)
 - 1/2 Chance use Flying Sickle
 - 1/2 Chance use Flying Sickle
 - 1/2 Chance use Flying Sickle
 - Use Flying Sickle

so of its 5 Attacks, it could spend four of those doing nothing, and seeing as the attack sequence can jump around quite a lot you could find yourself not being attacked at all by an enemy that quite frankly, shouldn't be this underwhelming.

In my opinion, having the Soldier:3rd only attack players physically when they do not have sleep, or only attacking them magically when they do have sleep is a clever AI design. It's the type of thing that I want to focus on when I write my mod, instead of just 50% do this 50% do that. The Solder:3rd will never cure a character of sleep; you have to cure them yourself by attacking them or wait it out.

The Soldier:3rd goes from being a well thought out enemy to an enemy that poses very little risk to the Player. If anything, it would make more sense to balance it out a little bit by increasing the chance of using Split, and decreasing the chances of using Flying Sickle for 3 of the 5 attacks.

The Flapbeat only have a 1/4 chance of using Flying Sickle, so when they run out of MP at least 3/4 of the time they will still attack the player and the same thing with the Frozen Nail.

Also, I hadn't thought of the idea of having an Ether simulated attack, that's a good one, deffo gonna consider that for my mod!
 
Last edited:
Is there any reason that the Sample:H0512-opt stores the element of thelast performed action (2120)?

If one of the Opt's dies then it sets the main boss's "Angry" var (41A0) to 1, and also stores the "Elements of last performed action" in the main Boss's "AllyAngry" var (41C0). When Sample:H0152' script runs it checks to see if it's Angry Var is 1, which it will be if one of the opt's have died, and then stores the element of the last action performed (by the Opt/on the Opt?) into H0512's 2120, and then does absolutely nothing with it. I'm guessing initially they had intended for his attack pattern to change according to the Element the Player was using...

Also, what is 2120 specifically? The Wiki says"Elements of last performed action." is that the last action performed *by* the actor; last action performed *on* the actor; or the last action in general by any actor?
 
Last edited:
Do we think that the Hundred/Heli Gunner battle should have had the Still More Fighting theme play? It seems a little anti-climatic to have the normal Fighting theme play out.

Also, the EXP AP and GIL for Hundred Gunner are not earned, I'm guessing this is because of the fact that the game uses "Next Arenas" for the battle? Or is it because the battle doesn't end upon killing that enemy, the same as other enemies that "transform"? In fact, thinking on it, what exactly is controlling the deactivation of Spoils earned by Enemies after a transformation? Why exactly is it that the Hell House (for example) does not give spoils for killing both versions?
 
Do we think that the Hundred/Heli Gunner battle should have had the Still More Fighting theme play?
I think the Cloud / Rufus fight might have lost something if it simply repeated the music from the Heli Gunner.

Also, the EXP AP and GIL for Hundred Gunner are not earned, I'm guessing this is because of the fact that the game uses "Next Arenas" for the battle? Or is it because the battle doesn't end upon killing that enemy, the same as other enemies that "transform"? In fact, thinking on it, what exactly is controlling the deactivation of Spoils earned by Enemies after a transformation? Why exactly is it that the Hell House (for example) does not give spoils for killing both versions?
There are quite a few questions here. It's been a long time since I looked into FF7's scripts (5+ years), so my memory is quite hazy, but I'll do my best to answer.

Hundred Gunner / Heli Gunner don't work the way Battle Arena does. The arena is implemented via field scripting: field code can start battles and pass a bit flag to enable various battle mechanics features, one of which is a continuous multi-formation battle with player prompts every victory ("Off course!"). By contrast the Gunners (and things like Hell House) are implemented via battle AI scripts which enable / disable units in the same formation and copy over a struct of associated data (so that the game can simulate continuity in terms of statuses, stats multipliers - etc)

I don't remember researching how exp is gathered at the end of a battle. I don't think the Exp screen is actually part of the menu modules, but I may be wrong. If it is not a menu then it will presumably be powered by BATTLE.X. Looking at Proud Clod, there seem to be some actor flags (e.g. 4022/4024) that typically get set when those 'transforming' enemies die - my guess is that the battle engine uses these to determine whether a unit should be included in the exp calculation. I'd suggest should sniff around Battle.x to see what functions get called at the end of a battle.

Curiously enough, you can actually alter exp / ap / gil rewards for an enemy with AI scripts directly, but I'm not sure if any enemies actually do so.
 
Last edited:
Also, what is 2120 specifically? The Wiki says"Elements of last performed action." is that the last action performed *by* the actor; last action performed *on* the actor; or the last action in general by any actor?
The latter. I can't remember if it's set by the time the pre-action script runs, or you can only reliably read the element of incoming attacks in counter scripts. It can be handy in mods when implementing things like an 'oil' status.

In my opinion, having the Soldier:3rd only attack players physically when they do not have sleep, or only attacking them magically when they do have sleep is a clever AI design. It's the type of thing that I want to focus on when I write my mod, instead of just 50% do this 50% do that. The Solder:3rd will never cure a character of sleep; you have to cure them yourself by attacking them or wait it out.
I've done this kind of thing before. It's not that easy to balance. Enemies that hone in your weaknesses and exploit status effects sound interesting but aren't always fun to play against. Remember how FFIX enemies always seemed to target party members who you'd just Phoenix Downed? It's quite cool to see now and again but the player needs options to adapt and counter the strategy mid-battle, or it just feels like the AI is cheesing.
 
Last edited:
Thanks for clearing all that up!

In regards to the flag that disables the EXP etc earned at the end of a battle, I had assumed also that it was something to do with the 4020-4024 flags, seeing as they are present in each instance that we see an enemy remove itself from battle.

So, I've gone back to the Warning Board. With the default vanilla script the machine gun does not pop out once you've killed the Laser Cannon, and vice versa. You do get the 5 EXP for killing one of them, and none of the 4020- 4024 flags get set upon death (although the Warning Board does toggle it's counterparts 4020-4020 when it dies, which is why the battle can end without killing the little ones)

In my custom script I've toggled the 4020 flag (SelfActive) so it sets to 0 as a Death Counter, and doing this enables the Machine Gun to pop out once you've killed the Laser Cannon and vice versa (and it looks kinda cool; I'm convinced this was how it was intended). Anyway, with 4020 set to 0 after death the MG + LC did reward me with5 EXP each.

So, with the 4020 still being set to 0 upon death, I added another line of script, setting 4022 (as well as the 4020) to 0 at the end of battle, so that the "SelfActive" and "NeededToEndBattle" flags were off. I still got the extra 10 EXP.

I then changed the 4022 value to 4024, so instead of disabling the "NeededToEndBattle" flag, I disabled the "AiScriptActive" flag. I still got the extra 10 EXP.

So, I'm left still unsure as to what exactly is disabling the end of battle rewards. I'm aware in the back of my mind that there is an easy fix by just assigning Heli Gunner's EXP AP and GIL value to match that what it should have been if Hundred Gunner did leave rewards, but I'd rather identify the problem instead of creating work-arounds. I'm pretty sure there are a few examples of the Spoil values being toggled manually in-battle; take the Trickplay for example (increases gil earned by 800 with every use of Gold Mountain).

Also, in my post, I mentioned "Next Arenas". I said that by default without thinking (recently been working on Battle Square formations), I meant "Next Battle", which is a different thing used in the Hundred/Heli and Hojo battles only.
 
Last edited:
Isn't there a command in the field script which disables the battle win?
 
So, I'm left still unsure as to what exactly is disabling the end of battle rewards. I'm aware in the back of my mind that there is an easy fix by just assigning Heli Gunner's EXP AP and GIL value to match that what it should have been if Hundred Gunner did leave rewards, but I'd rather identify the problem instead of creating work-arounds. I'm pretty sure there are a few examples of the Spoil values being toggled manually in-battle; take the Trickplay for example (increases gil earned by 800 with every use of Gold Mountain).
I think your best bet is to just to fire up an emulator with a debugger, replay the end of a battle (e.g. using saved states) and just trace where the exp total comes from.

Personally I'd be tempted to just modify the exp reward values in the unit struct directly from a post-death script, but if you need a solution that's easy to invoke and 'robust' then the ideal would be to find an unused status flag and patch BATTLE.X to use a custom exp calculation function with the help of e.g. ARMIPS. You can then distribute the patch separately as a basis for other mods.
 
Last edited:
Isn't there a command in the field script which disables the battle win?
Yes there is, but that's a separate thing which doesn't get used for enemies such as the Hell House, Aero Combatant, Mighty Grunt, and other rnd encounters where battle spoils are disabled (that opcode can only be used for forced encounters).

I think your best bet is to just to fire up an emulator with a debugger, replay the end of a battle (e.g. using saved states) and just trace where the exp total comes from.
That's a really good idea, I hadn't thought of doing that. I have started mapping out a few thing, such as Current MP of the three 6 potential enemies, so I have an offset to work from, thanks! That's a fantastic suggestion! I did try to find the address for the ATB gauge of the enemy, but I had no success. That would be great to map out...

Anyway, I'm having one of those forget everything you know and start again moments. I was under the distinct impression that an Attack that uses split damage does so based on the formula it uses.

This, apparently, isn't the case.

I've always noted that a Magical Attack that uses the formula 22 (amongst others) will have the "Split Damage" flag ON when attacking all opponents. Nope! I've just learned (and tested) that Motor Ball's Rolling Fire [1AA] Attack attacks all targets, and does NOT use split damage; it was hitting my party for the full 185 - 205, instead of 120-140.

The same for Matra Magic. This uses 22, yet it does not deal split damage. Why is this? Is it gonna be one of those obscure things such as whether an attack is coverable, or visible, or set as a Berserk Attack, or one of the other weird things that I'm still not 100% where to look to find out (AB files I think, although I don't know what/where that is.....)
 
There's a lot of bugs like that. For instance: all enemy attacks do half damage at long range, unless they're actual magic commands. The more one looks into FFVII's battle system the more rushed and incomplete it appears. Fights are fun but are only a shadow of what they could have been, had certain ideas been developed further.

Look at all the obscure status effects and strange damage formulae. Look at how big and complicated Eligor's AI script is - when 80% of players will miss him completely. Read through the nuances of how the MPs react to Cloud's party position. It's clear Square had huge ambitions for VII's battle scenarios but not nearly enough time to realise them.
 
Last edited:
An extract from TFerguson's Mechanics FAQ:

You have a chance at winning an item if an enemy is killed and you finish the
battle successfully.  In addition, the enemy cannot have been stolen from and
must not have been killed by Remove.  Finally, the battle must finish with
the default ending screen that awards EXP/AP/Gil/Items.  Battle Square
battles do not do this, and multi-part battles only count the final battle in
the series.  (Example: The Hundred Gunner and Heli Gunner battle only awards
the Heli Gunner part of the battle


Guess that solves that query then :) Still puddling over the Split Damage thing though
 
There's a lot of bugs like that. For instance: all enemy attacks do half damage at long range, unless they're actual magic commands. The more one looks into FFVII's battle system the more rushed and incomplete it appears. Fights are fun but are only a shadow of what they could have been, had certain ideas been developed further.

Look at all the unused statuses and strange one-time attack effects. Look at how big and complicated Eligor's AI script is - when 80% of players will miss him completely. Read through the nuances of how the MPs react to Cloud's party position. It's clear Square had huge ambitions for VII's battle scenarios but not nearly enough time to realise them.
So you're saying it could be a bug then? I'm curious to know what causes it, it's important for my guide that I get everything down right, and not leaving things to guesswork
 
In as much as it was probably a programming oversight. In fairness FFVII's battles are actually quite hard to manually test - would most QAs know that an attack was supposed to hit for 210 damage rather than 290? Or that a section of the AI script never fired? It's fairly opaque.

I'm not sure how modern RPG projects program battle scenarios, but I expect there's much better tooling these days. Even just being able to run the AI scripts in a test framework would have been a massive boon, but automated testing wasn't on the radar of anyone in 1997 outside of finance, defence or academia.
 
2120 is elements in the last performed action. It doesn’t matter who the actor was.
 
What does (2040) do? It has something to do with the last Physical Attacker. It's seen on the Elfadunk (and possibly others) as part of the main script, it seems to remove the targets set as the last physical attacker

Also, what does 41E0 do? It seems to be a "GroupFlag" which triggers the same flag for all of the Actor's allies, seen in the Mandragora's script. I've called this "GrpCustomAtt" for now until I've seen it used more.
 
Last edited:
I dunno if it helps you, but an early psx demo has a slightly different battle module. First thing: the party m members go into a ready-to-execute-comand-position like in ff8. The other thing is that everyone is facing the last attacker or the last character who has done an action on him/her (like casting cure).
It just wouldn't surprise me if there are leftover code or fast solutions like deactivating code.
 
Status
Not open for further replies.
Back
Top