|
This page is about modding. See the modding overview for an abstract on modding.
|
This page is about modding. See the modding overview for an abstract on modding. 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. If this is not set, it will default to 1, which is just the generic category. 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
|
Notes
|
1
|
General
|
1
|
0000000000000000000000000001
|
|
2
|
Mental
|
2
|
0000000000000000000000000010
|
cannot be applied to objects that lack a pBrain
|
3
|
Metabolic
|
4
|
0000000000000000000000000100
|
cannot be applied to objects without stomachs
|
4
|
Respiratory
|
8
|
0000000000000000000000001000
|
cannot be applied to objects without stomachs
|
5
|
Circulatory
|
16
|
0000000000000000000000010000
|
cannot be applied to objects that cannot bleed
|
6
|
Contact
|
32
|
0000000000000000000000100000
|
|
7
|
Field
|
64
|
0000000000000000000001000000
|
|
8
|
Activity
|
128
|
0000000000000000000010000000
|
cannot be applied to objects without bodies
|
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
|
There are also separate checks in Effect.cs which is checked every time Apply Event Effect is called. Objects that are considered solid will always return true.
Effect
|
Bits
|
Cannot be applied to liquids
|
6, 11(Contact or Structural)
|
Cannot be applied to gas
|
3, 6, 11 (Metabolic, Contact, or Structural)
|
Cannot be applied to Plasma
|
3, 6, 7, 10, 11, 12 (Metabolic, Contact, Field, Chemical, Structural, or Sonic)
|
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.