Difference between revisions of "Template:IE BA desc"

From Final Fantasy Hacktics Wiki
Jump to navigation Jump to search
Line 1: Line 1:
 
AND bitwise operand | Variable = Variable AND ImmediateValue
 
AND bitwise operand | Variable = Variable AND ImmediateValue
 +
 +
This command compares the individual bits of the value within a Variable and a specific ImmediateValue, and produces a single binary output.
 +
 +
With AND, the resulting bit outputs are set to 1 (TRUE) only if both values' bit inputs are 1.
 +
 +
The bits available within a single byte are:
 +
* 0x80
 +
* 0x40
 +
* 0x20
 +
* 0x10
 +
* 0x08
 +
* 0x04
 +
* 0x02
 +
* 0x01
 +
 +
So, for example, if you want to edit a unit's Battle Stats to remove the Dead status (which is bit 0x20), but leave their other statii unchanged, you would UnitAddress their Unit ID, LoadAddress their stats at 0x0058 & 0x01BB into temporary variables (let's say 0x0070 & 0x0071), and then run AND(x0070,x00DF) and AND(x0071,x00DF), before using SaveAddress to put the corrected values back. Because the Dead status is in bit 0x20, a value of DF means that every bit except 0x20 is set to 1. As a result, the other statii in that byte will remain unchanged, but by forcing 0x20 to be set to 1 in the ImmediateValue, it will zero out the Dead bit in the final result.

Revision as of 15:50, 7 May 2021

AND bitwise operand | Variable = Variable AND ImmediateValue

This command compares the individual bits of the value within a Variable and a specific ImmediateValue, and produces a single binary output.

With AND, the resulting bit outputs are set to 1 (TRUE) only if both values' bit inputs are 1.

The bits available within a single byte are:

  • 0x80
  • 0x40
  • 0x20
  • 0x10
  • 0x08
  • 0x04
  • 0x02
  • 0x01

So, for example, if you want to edit a unit's Battle Stats to remove the Dead status (which is bit 0x20), but leave their other statii unchanged, you would UnitAddress their Unit ID, LoadAddress their stats at 0x0058 & 0x01BB into temporary variables (let's say 0x0070 & 0x0071), and then run AND(x0070,x00DF) and AND(x0071,x00DF), before using SaveAddress to put the corrected values back. Because the Dead status is in bit 0x20, a value of DF means that every bit except 0x20 is set to 1. As a result, the other statii in that byte will remain unchanged, but by forcing 0x20 to be set to 1 in the ImmediateValue, it will zero out the Dead bit in the final result.