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.