Extra Battle Stats

From Final Fantasy Hacktics Wiki
Revision as of 06:00, 6 October 2024 by Nyzer (talk | contribs) (→‎Current Ability CT: 0x8019FD11-0x8019FD25)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

The game stores a lot of copies of units' Battle Stat data in another location, and makes use of them for a variety of purposes.

Status Effect Data: 0x8019F9B4-0x8019FBC0

There are five bytes each for every unit, from 1-16 (ENTD) and 17-21 (deployed).

  • Byte 1
    • 0x80
    • 0x40 Crystal
    • 0x20 Dead
    • 0x10 Undead
    • 0x08 Charging
    • 0x04 Jump
    • 0x02 Defending
    • 0x01 Performing
  • Byte 2
    • 0x80 Petrify
    • 0x40 Invite
    • 0x20 Darkness
    • 0x10 Confusion
    • 0x08 Silence
    • 0x04 Blood Suck
    • 0x02 Cursed
    • 0x01 Treasure
  • Byte 3
    • 0x80 Oil
    • 0x40 Float
    • 0x20 Reraise
    • 0x10 Transparent
    • 0x08 Berserk
    • 0x04 Chicken
    • 0x02 Frog
    • 0x01 Critical
  • Byte 4
    • 0x80 Poison
    • 0x40 Regen
    • 0x20 Protect
    • 0x10 Shell
    • 0x08 Haste
    • 0x04 Slow
    • 0x02 Stop
    • 0x01 Wall
  • Byte 5
    • 0x80 Faith
    • 0x40 Innocent
    • 0x20 Charm
    • 0x10 Sleep
    • 0x08 Don't Move
    • 0x04 Don't Act
    • 0x02 Reflect
    • 0x01 Death Sentence

  • 1) 0x8019F9B4-0x8019FA1C: Innate Status Data
    • Innate only. If a unit's Unit Present variable is set to x01, the unit's Innate Statuses Battle Stats (x004E-x0052) will be overwritten with these values.
  • 2) 0x8019FA1D-0x8019FA85: Current Status Data
    • Innate and initial. If a unit's Unit Present variable is set to x01, the unit's Current Statuses Battle Stats (x0058-x005C) will be overwritten with these values. If the Battle Stats don't already match, this will also cause the status animation to begin.
  • 3) 0x8019FA86-0x8019FAEE: Inflicted Status Data
    • Initial only. If a unit's Unit Present variable is set to x01, the unit's Inflicted Statuses Battle Stats (x01BB-x01BF) will be overwritten with these values.
  • 4) 0x8019FAEF-0x8019FB57: Status Animation Data
    • Innate and initial. If a unit's Unit Present variable is set to x01, the unit will get the appropriate status animations when battle starts/resumes.
  • 5) 0x8019FB58-0x8019FBC0: No Effect?
    • Innate and initial. Unsure of their purpose. If the Unit Present variable is set to x00, the byte will zero out upon AddUnit/InflictStatus/etc.; if set to x01, it'll be zeroed out when battle starts/resumes.

Status CT Data: 0x8019FBC1-0x8019FD10

0x10 bytes per unit.

    • 0x00 Poison CT
    • 0x01 Regen CT
    • 0x02 Protect CT
    • 0x03 Shell CT
    • 0x04 Haste CT
    • 0x05 Slow CT
    • 0x06 Stop CT
    • 0x07 Wall CT
    • 0x08 Faith CT
    • 0x09 Innocent CT
    • 0x0A Charm CT
    • 0x0B Sleep CT
    • 0x0C Don't Move CT
    • 0x0D Don't Act CT
    • 0x0E Reflect CT
    • 0x0F Death Sentence CT

Current Ability CT: 0x8019FD11-0x8019FD25

One byte per unit. By default, seems to be a value of xFF if the unit has a Unit ID, and x00 if there is no unit data or the unit's ID is xFF.

Death Counter: 0x8019FD26-0x8019FD3A

One byte per unit.

Battle Stats 0x0005/0x01BA: 0x8019FD3B-0x8019FD4F

One byte per unit. A copy of the data in Battle Stat 0x0005 & 0x01BA, which share values, but have different functions.

At the start of a battle (i.e., when battle starts/resumes with Unit Present? set to x01?), they overwrite 0x0005, which is the stat that determines whether a unit is Controllable.

Using UpdateUnit after altering 0x01BA will update these values, though doing this to make units Controllable will cause the Guest graphic to disappear.

  • 0x80 - Always Present
  • 0x40 - Randomly Present
  • 0x20 - Team Bit 1. 0x20 and 0x10 is Light Blue. 0x20 is Green.
  • 0x10 - Team Bit 2. 0x10 is Red. If neither bit, team is Blue.
  • 0x08 - Control
  • 0x04 - Immortal (also immune to knockback, poach, malboro, etc.)
  • 0x02 (if both 01 and 02, then immune to knockback, and Game Over if this unit permanently dies)
  • 0x01

Unit Present: 0x8019FD50-0x8019FD64

One byte per unit.

How these bytes are set isn't fully clear. At the start of an event, units flagged Always Present will be set to a value of x01. Commands like AddUnit and InflictStatus also seem to set them to x01 (AddUnit will do this even if the unit is already added). And, in battle, anything flagged x01 will be flagged x02. But in a mid-battle event, they'll all initially be flagged x00. However, RemoveUnit doesn't flag them x00. In fact, if battle starts with a Removed unit flagged x01, they stay flagged.

However, at a glance, it seems that a value of x00 will cause a command like AddUnit to erase or overwrite some Extra Battle Stat data (though, unlike these variables, this does seem to require Removing the unit first), whereas a value of x01 will prevent that, and allow some Extra Battle Stat data to be applied when battle starts/resumes. So you can manually set a unit's flag to x01 (or use AddUnit), and then manually set their status or HP values, and it'll work just fine.

They tend to cause things to happen. If they're set to x01 during an EventEnd(), the appropriate unit will have several of their Battle Stats overwritten by the values here. If set to x00 when something like an AddUnit command is run, several of their Extra Battle Stats will be overwritten by Battle Stats bytes, or outright erased.

Related to InflictStatus?: 0x8019FD65-0x8019FD79

Using InflictStatus to revive a dead unit will set their appropriate byte to a value of x01. Zeroing the byte out after that will cause them to remain dead with 0 HP when battle resumes. Setting their byte to x02 will cause them to crystallize when battle resumes. Setting the byte to x01 without an InflictStatus will cause them to have both Dead and Critical status when battle resumes.

Very little use found for it so far.

Current HP: 0x8019FD7A-0x8019FDA3

Two bytes per unit. When a battle starts/resumes, if the Unit Present? variable is set to x01, Battle Stat 0x0028 is overwritten with the appropriate value from here. Also overwrites these values during mid-battle events - presumably when a unit's Unit Present? variable is switched from x00 to x01.