Difference between revisions of "InflictStatus"

From Final Fantasy Hacktics Wiki
Jump to navigation Jump to search
(Added in a second method for reviving a unit with full HP, since the first method has a minor unit animation issue.)
m (→‎Unknown : Byte (hex): to Wait Time)
 
(2 intermediate revisions by the same user not shown)
Line 29: Line 29:
 
== Status : Byte (hex) ==
 
== Status : Byte (hex) ==
 
*x00: Revive with 1 HP if necessary. Note that the use of this command will block any attempts at event-based HP restoration on this unit within the same event. See below for an alternative.  
 
*x00: Revive with 1 HP if necessary. Note that the use of this command will block any attempts at event-based HP restoration on this unit within the same event. See below for an alternative.  
**(It will also play a sound effect.)
+
** If the unit is dead, this will also play a sound effect.
 +
** This will also set the unit to a Critical animation if their HP is low, or a Standing animation if it is not.
 
*x01: Crystal
 
*x01: Crystal
 
*x02: Poison + Critical
 
*x02: Poison + Critical
Line 93: Line 94:
 
WaitAddUnit()</code>
 
WaitAddUnit()</code>
  
=== Reviving a dead unit with full HP: [[Battle_Stats|Battle Stats]], [[Event_Instruction_45|Add]] ===
+
== Wait Time : Byte (hex) ==
 
 
Still a bit experimental due to how aggravating the Extra Battle Stats are, but we can take advantage of the way the game saves to/loads from them in order to cause a unit to be revived and restored to full HP at the end of the event.
 
 
 
Note: this will cause a March command applied either directly to the unit or to every unit at once to make the unit appear dead. March commands applied only to Blue Team or All Enemy Teams will ignore the unit.
 
 
 
<code>UnitAddress(x??,x70)<br>
 
LoadAddress(x72,x0058,x70,001)<br>
 
LoadAddress(x71,x0058,x70,001)<br>
 
AND(x0071,x00DF)<br>
 
SaveAddress(x71,x0058,x70,001)<br>
 
LoadAddress(x71,x01BB,x70,001)<br>
 
AND(x0071,x00DF)<br>
 
SaveAddress(x71,x01BB,x70,001)<br>
 
ChangeStats(x??,x00,x00,+00999)<br>
 
AddUnit(x??,x00,x00)<br>
 
WaitAddUnit()<br>
 
SaveAddress(x72,x0058,x70,001)</code>
 
 
 
== Unknown : Byte (hex) ==
 
 
Often 0x0C, else 0x01.  
 
Often 0x0C, else 0x01.  
  

Latest revision as of 04:22, 2 October 2022

{92} InflictStatus

InflictStatus(xID,x00,xSS,x0C,x00)

Inflict a status on a given unit. The changes are visible even outside of battle.

Statuses can be stacked, but sometimes need to be applied in the correct order; for example, Chicken needs to be applied before Float.

See Also: {83} ChangeStats{E5} WaitForInstruction(x43,x00)

Warning: Any event with an InflictStatus command will instantly apply it at the start of the event to any Floating or Jumping unit with a matching Unit ID, even if the event wasn't actually going to run the command. A fix is available here (thanks Glain and Talcall):

<?xml version="1.0" encoding="UTF-8"?>
<Patches>
<Patch name="Nyzer Event Hack Thing">
<Description> Kills the routine that causes Jumping or Floating units to auto-apply every InflictStatus command with a matching Unit ID in an event file the moment the file is loaded, even if the event wasn't actually going to run the command. </Description>
<Location file="BATTLE_BIN" offset="143CB0" offsetMode="RAM" mode="ASM">
nop
</Location>
</Patch>
</Patches>


Unit ID : Byte (hex)

ID of the unit specified in the ENTD.


x00 : Byte (hex)

This value is always set to x00 in the original game; it probably doesn't have a function.


Status : Byte (hex)

  • x00: Revive with 1 HP if necessary. Note that the use of this command will block any attempts at event-based HP restoration on this unit within the same event. See below for an alternative.
    • If the unit is dead, this will also play a sound effect.
    • This will also set the unit to a Critical animation if their HP is low, or a Standing animation if it is not.
  • x01: Crystal
  • x02: Poison + Critical
  • x80-xFF: Applies any singular status. Requires Event Instruction Upgrade hack v1.35+.
    • x80: Performing
    • x81: Defending
    • x82: Jump
    • x83: Charging
    • x84: Undead
    • x85: Dead
    • x86: Crystal
    • x87:
    • x88: Treasure
    • x89: Cursed
    • x8A: Blood Suck
    • x8B: Silence
    • x8C: Confusion
    • x8D: Darkness
    • x8E: Invite
    • x8F: Petrify
    • x90: Critical
    • x91: Frog
    • x92: Chicken
    • x93: Berserk
    • x94: Transparent
    • x95: Reraise
    • x96: Float
    • x97: Oil
    • x98: Wall
    • x99: Stop
    • x9A: Slow
    • x9B: Haste
    • x9C: Shell
    • x9D: Protect
    • x9E: Regen
    • x9F: Poison
    • xA0: Death Sentence
    • xA1: Reflect
    • xA2: Don't Act
    • xA3: Don't Move
    • xA4: Sleep
    • xA5: Charm
    • xA6: Innocent
    • xA7: Faith

Reviving a dead unit with full HP: Battle Stats, Remove, Add

In order to revive a dead unit with full HP, use the following commands. (Requires the Event Instruction Upgrade hack.)

Note: this will cause the unit to revert to their upright Marching animation right after they're Added.


UnitAddress(x??,x70)
LoadAddress(x71,x0058,x70,001)
AND(x0071,x00DF)
SaveAddress(x71,x0058,x70,001)
LoadAddress(x71,x01BB,x70,001)
AND(x0071,x00DF)
SaveAddress(x71,x01BB,x70,001)
ChangeStats(x??,x00,x00,+00999)
RemoveUnit(x??,x00)
AddUnit(x??,x00,x00)
WaitAddUnit()

Wait Time : Byte (hex)

Often 0x0C, else 0x01.

This may be a parameter for how long to wait after inflicting the status. However, InflictStatus runs on its own thread, so this may not do anything without the appropriate WaitForInstruction.


x00 : Byte (hex)

This value is always set to x00 in the original game; it probably doesn't have a function.