50 lines
1.3 KiB
Plaintext
50 lines
1.3 KiB
Plaintext
|
class VhtEttin : Ettin replaces Ettin {
|
||
|
default {
|
||
|
AttackSound "";
|
||
|
}
|
||
|
states {
|
||
|
Melee:
|
||
|
ETTN EF 6 a_faceTarget;
|
||
|
ETTN G 8 a_customMeleeAttack(random[EttinAttack](1, 8) * 2, "EttinAttack", "FighterPunchMiss");
|
||
|
goto See;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
class VhtCentaur : Centaur replaces Centaur {
|
||
|
default {
|
||
|
AttackSound "";
|
||
|
}
|
||
|
void vhtSetReflectiveInvulnerable() {
|
||
|
bInvulnerable = true;
|
||
|
if(vht_monster_centaur != 0)
|
||
|
bReflective = true;
|
||
|
}
|
||
|
void vhtUnsetReflectiveInvulnerable() {
|
||
|
bInvulnerable = false;
|
||
|
if(vht_monster_centaur != 0)
|
||
|
bReflective = false;
|
||
|
}
|
||
|
override int damageMobj(Actor inflictor, Actor source, int damage, Name mod, int flags, double hitAngle) {
|
||
|
if(vht_monster_centaur == 2 && bInvulnerable) {
|
||
|
double angleToSrc = inflictor ? angleTo(inflictor) - angle : hitAngle;
|
||
|
if(angleToSrc < -90 || angleToSrc > 90) {
|
||
|
flags |= DMG_FOILINVUL;
|
||
|
}
|
||
|
}
|
||
|
return super.damageMobj(inflictor, source, damage, mod, flags, angle);
|
||
|
}
|
||
|
states {
|
||
|
Pain:
|
||
|
CENT G 6 a_pain;
|
||
|
CENT G 6 vhtSetReflectiveInvulnerable;
|
||
|
CENT EEE 15 a_centaurDefend;
|
||
|
CENT E 1 vhtUnsetReflectiveInvulnerable;
|
||
|
goto See;
|
||
|
Melee:
|
||
|
CENT H 5 a_faceTarget;
|
||
|
CENT I 4 a_faceTarget;
|
||
|
CENT J 7 a_customMeleeAttack(random[CentaurAttack](3, 9), "CentaurAttack", "FighterHammerMiss");
|
||
|
goto See;
|
||
|
}
|
||
|
}
|