Modding:Effects
This page is about modding. See the modding overview for an abstract on modding.
Effect Types
All effects inherit a virtual method called GetEffectType() which seems to return a nonsense integer. It's actually a set of binary flags compressed into an integer. Effects.cs helpfully notes which digit represents what flag and what the following table is based off:
| Mechanisms | |||
|---|---|---|---|
| # bit from right | Effect Type | Decimal | Binary |
| 1 | General | 1 | 0000000000000000000000000001 |
| 2 | Mental | 2 | 0000000000000000000000000010 |
| 3 | Metabolic | 4 | 0000000000000000000000000100 |
| 4 | Respiratory | 8 | 0000000000000000000000001000 |
| 5 | Circulatory | 16 | 0000000000000000000000010000 |
| 6 | Contact | 32 | 0000000000000000000000100000 |
| 7 | Field | 64 | 0000000000000000000001000000 |
| 8 | Activity | 128 | 0000000000000000000010000000 |
| 9 | Dimensional | 256 | 0000000000000000000100000000 |
| 10 | Chemical | 512 | 0000000000000000001000000000 |
| 11 | Structural | 1024 | 0000000000000000010000000000 |
| 12 | Sonic | 2048 | 0000000000000000100000000000 |
| 13 | Temporal | 4096 | 0000000000000001000000000000 |
| 14 | Neurological | 8192 | 0000000000000010000000000000 |
| 15 | Disease | 16384 | 0000000000000100000000000000 |
| Class | |||
| # bit from right | Effect Type | Decimal | Binary |
| 25 | Minor | 16777216 | 0001000000000000000000000000 |
| 26 | Negative | 33554432 | 0010000000000000000000000000 |
| 27 | Removable | 67108864 | 0100000000000000000000000000 |
| 28 | Voluntary | 134217728 | 1000000000000000000000000000 |
There are other masks that check the classifications of bits instead:
| Group of Bits | Decimal | Binary | Parts |
|---|---|---|---|
| Mechanism | 16777215 | 0000111111111111111111111111 | Bits # 1 - 24 |
| Class | 251658240 | 1111000000000000000000000000 | Bits # 28 - 25 |
| Duration Indefinite | 9999 | 10 011 100 001 111 | Bits # 1, 2, 3, 4, 9, 10, 11, 14 |
Methods of masking
Effects have two methods of checking these masks:
- bool
IsOfType()- returns true if ANY of the specified digits are true - bool
IsOfTypes()- returns true if ALL of the specified digits are true
These checks are done by running a bitwise AND(&) operation on them.
Example
This is a simplified version of something already in GameObject.cs:
int mask = 9244;
GameObject GO = [...];
for (int count = GO.Effects.Count; index < count; ++index)
{
Effect effect = this.Effects[index];
if (effect.IsOfType(mask))
(Do something);
}
where mask in binary is 10010000011100, any effect of type 3, 4, 5, 11, 13.