mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-11-11 07:12:02 +00:00
Merge branch 'slowstate' of https://github.com/Gaerzi/zdoom
This commit is contained in:
commit
7cb828d763
12 changed files with 59 additions and 34 deletions
|
@ -1008,6 +1008,7 @@ public:
|
|||
bool SetState (FState *newstate, bool nofunction=false);
|
||||
virtual bool UpdateWaterLevel (fixed_t oldz, bool splash=true);
|
||||
bool isFast();
|
||||
bool isSlow();
|
||||
void SetIdle();
|
||||
void ClearCounters();
|
||||
|
||||
|
|
|
@ -554,6 +554,7 @@ enum ESkillProperty
|
|||
SKILLP_NoPain,
|
||||
SKILLP_ArmorFactor,
|
||||
SKILLP_EasyKey,
|
||||
SKILLP_SlowMonsters,
|
||||
};
|
||||
int G_SkillProperty(ESkillProperty prop);
|
||||
const char * G_SkillName();
|
||||
|
@ -568,6 +569,7 @@ struct FSkillInfo
|
|||
fixed_t AmmoFactor, DoubleAmmoFactor, DropAmmoFactor;
|
||||
fixed_t DamageFactor;
|
||||
bool FastMonsters;
|
||||
bool SlowMonsters;
|
||||
bool DisableCheats;
|
||||
bool AutoUseHealth;
|
||||
|
||||
|
|
|
@ -64,6 +64,7 @@ void FMapInfoParser::ParseSkill ()
|
|||
skill.DropAmmoFactor = -1;
|
||||
skill.DamageFactor = FRACUNIT;
|
||||
skill.FastMonsters = false;
|
||||
skill.SlowMonsters = false;
|
||||
skill.DisableCheats = false;
|
||||
skill.EasyBossBrain = false;
|
||||
skill.EasyKey = false;
|
||||
|
@ -118,6 +119,10 @@ void FMapInfoParser::ParseSkill ()
|
|||
{
|
||||
skill.FastMonsters = true;
|
||||
}
|
||||
else if (sc.Compare ("slowmonsters"))
|
||||
{
|
||||
skill.SlowMonsters = true;
|
||||
}
|
||||
else if (sc.Compare ("disablecheats"))
|
||||
{
|
||||
skill.DisableCheats = true;
|
||||
|
@ -336,6 +341,9 @@ int G_SkillProperty(ESkillProperty prop)
|
|||
case SKILLP_FastMonsters:
|
||||
return AllSkills[gameskill].FastMonsters || (dmflags & DF_FAST_MONSTERS);
|
||||
|
||||
case SKILLP_SlowMonsters:
|
||||
return AllSkills[gameskill].SlowMonsters;
|
||||
|
||||
case SKILLP_Respawn:
|
||||
if (dmflags & DF_MONSTERS_RESPAWN && AllSkills[gameskill].RespawnCounter==0)
|
||||
return TICRATE * gameinfo.defaultrespawntime;
|
||||
|
@ -433,6 +441,7 @@ FSkillInfo &FSkillInfo::operator=(const FSkillInfo &other)
|
|||
DropAmmoFactor = other.DropAmmoFactor;
|
||||
DamageFactor = other.DamageFactor;
|
||||
FastMonsters = other.FastMonsters;
|
||||
SlowMonsters = other.SlowMonsters;
|
||||
DisableCheats = other.DisableCheats;
|
||||
AutoUseHealth = other.AutoUseHealth;
|
||||
EasyBossBrain = other.EasyBossBrain;
|
||||
|
|
|
@ -77,6 +77,7 @@ struct FState
|
|||
BYTE Fast:1;
|
||||
BYTE NoDelay:1; // Spawn states executes its action normally
|
||||
BYTE CanRaise:1; // Allows a monster to be resurrected without waiting for an infinate frame
|
||||
BYTE Slow:1; // Inverse of fast
|
||||
int ParameterIndex;
|
||||
|
||||
inline int GetFrame() const
|
||||
|
|
|
@ -405,7 +405,7 @@ bool AActor::InStateSequence(FState * newstate, FState * basestate)
|
|||
//
|
||||
// Get the actual duration of the next state
|
||||
// We are using a state flag now to indicate a state that should be
|
||||
// accelerated in Fast mode.
|
||||
// accelerated in Fast mode or slowed in Slow mode.
|
||||
//
|
||||
//==========================================================================
|
||||
|
||||
|
@ -416,6 +416,10 @@ int AActor::GetTics(FState * newstate)
|
|||
{
|
||||
return tics - (tics>>1);
|
||||
}
|
||||
else if (isSlow() && newstate->Slow)
|
||||
{
|
||||
return tics<<1;
|
||||
}
|
||||
return tics;
|
||||
}
|
||||
|
||||
|
@ -4082,6 +4086,11 @@ bool AActor::isFast()
|
|||
return !!G_SkillProperty(SKILLP_FastMonsters);
|
||||
}
|
||||
|
||||
bool AActor::isSlow()
|
||||
{
|
||||
return !!G_SkillProperty(SKILLP_SlowMonsters);
|
||||
}
|
||||
|
||||
void AActor::Activate (AActor *activator)
|
||||
{
|
||||
if ((flags3 & MF3_ISMONSTER) && (health > 0 || (flags & MF_ICECORPSE)))
|
||||
|
|
|
@ -275,6 +275,11 @@ do_stop:
|
|||
state.Fast = true;
|
||||
continue;
|
||||
}
|
||||
if (sc.Compare("SLOW"))
|
||||
{
|
||||
state.Slow = true;
|
||||
continue;
|
||||
}
|
||||
if (sc.Compare("NODELAY"))
|
||||
{
|
||||
if (bag.statedef.GetStateLabelIndex(NAME_Spawn) == bag.statedef.GetStateCount())
|
||||
|
|
|
@ -39,16 +39,16 @@ ACTOR Acolyte : StrifeHumanoid
|
|||
AGRD ABCDABCD 5 A_Wander
|
||||
Loop
|
||||
See:
|
||||
AGRD A 6 A_AcolyteBits
|
||||
AGRD BCD 6 A_Chase
|
||||
AGRD A 6 Fast Slow A_AcolyteBits
|
||||
AGRD BCD 6 Fast Slow A_Chase
|
||||
Loop
|
||||
Missile:
|
||||
AGRD E 8 A_FaceTarget
|
||||
AGRD FE 4 A_ShootGun
|
||||
AGRD F 6 A_ShootGun
|
||||
AGRD E 8 Fast Slow A_FaceTarget
|
||||
AGRD FE 4 Fast Slow A_ShootGun
|
||||
AGRD F 6 Fast Slow A_ShootGun
|
||||
Goto See
|
||||
Pain:
|
||||
AGRD O 8 A_Pain
|
||||
AGRD O 8 Fast Slow A_Pain
|
||||
Goto See
|
||||
Death:
|
||||
AGRD G 4
|
||||
|
@ -170,8 +170,8 @@ ACTOR AcolyteShadow : Acolyte 58
|
|||
AGRD A 6 A_BeShadowyFoe
|
||||
Goto Super::See+1
|
||||
Pain:
|
||||
AGRD O 0 A_SetShadow
|
||||
AGRD O 8 A_Pain
|
||||
AGRD O 0 Fast Slow A_SetShadow
|
||||
AGRD O 8 Fast Slow A_Pain
|
||||
Goto See
|
||||
}
|
||||
}
|
||||
|
|
|
@ -42,19 +42,16 @@ ACTOR Crusader 3005
|
|||
ROB2 AABBCCDD 3 A_Chase
|
||||
Loop
|
||||
Missile:
|
||||
ROB2 E 3 A_FaceTarget
|
||||
ROB2 F 2 Bright A_CrusaderChoose
|
||||
ROB2 E 2 Bright A_CrusaderSweepLeft
|
||||
ROB2 F 3 Bright A_CrusaderSweepLeft
|
||||
ROB2 E 2 Bright A_CrusaderSweepLeft
|
||||
ROB2 F 2 Bright A_CrusaderSweepLeft
|
||||
ROB2 E 2 Bright A_CrusaderSweepRight
|
||||
ROB2 F 2 Bright A_CrusaderSweepRight
|
||||
ROB2 E 2 Bright A_CrusaderSweepRight
|
||||
ROB2 F 2 A_CrusaderRefire
|
||||
ROB2 E 3 Slow A_FaceTarget
|
||||
ROB2 F 2 Slow Bright A_CrusaderChoose
|
||||
ROB2 E 2 Slow Bright A_CrusaderSweepLeft
|
||||
ROB2 F 3 Slow Bright A_CrusaderSweepLeft
|
||||
ROB2 EF 2 Slow Bright A_CrusaderSweepLeft
|
||||
ROB2 EFE 2 Slow Bright A_CrusaderSweepRight
|
||||
ROB2 F 2 Slow A_CrusaderRefire
|
||||
Loop
|
||||
Pain:
|
||||
ROB2 D 1 A_Pain
|
||||
ROB2 D 1 Slow A_Pain
|
||||
Goto See
|
||||
Death:
|
||||
ROB2 G 3 A_Scream
|
||||
|
|
|
@ -32,16 +32,16 @@ ACTOR Reaver 3001
|
|||
ROB1 BBCCDDEE 3 A_Chase
|
||||
Loop
|
||||
Melee:
|
||||
ROB1 H 6 A_FaceTarget
|
||||
ROB1 I 8 A_CustomMeleeAttack(random[ReaverMelee](1,8)*3, "reaver/blade")
|
||||
ROB1 H 6
|
||||
ROB1 H 6 Slow A_FaceTarget
|
||||
ROB1 I 8 Slow A_CustomMeleeAttack(random[ReaverMelee](1,8)*3, "reaver/blade")
|
||||
ROB1 H 6 Slow
|
||||
Goto See
|
||||
Missile:
|
||||
ROB1 F 8 A_FaceTarget
|
||||
ROB1 G 11 BRIGHT A_ReaverRanged
|
||||
ROB1 F 8 Slow A_FaceTarget
|
||||
ROB1 G 11 Slow BRIGHT A_ReaverRanged
|
||||
Goto See
|
||||
Pain:
|
||||
ROB1 A 2
|
||||
ROB1 A 2 Slow
|
||||
ROB1 A 2 A_Pain
|
||||
Goto See
|
||||
Death:
|
||||
|
|
|
@ -45,14 +45,14 @@ ACTOR Stalker 186
|
|||
STLK J 10 A_Look
|
||||
Loop
|
||||
See:
|
||||
STLK A 1 A_StalkerChaseDecide
|
||||
STLK ABB 3 A_Chase
|
||||
STLK C 3 A_StalkerWalk
|
||||
STLK C 3 A_Chase
|
||||
STLK A 1 Slow A_StalkerChaseDecide
|
||||
STLK ABB 3 Slow A_Chase
|
||||
STLK C 3 Slow A_StalkerWalk
|
||||
STLK C 3 Slow A_Chase
|
||||
Loop
|
||||
Melee:
|
||||
STLK J 3 A_FaceTarget
|
||||
STLK K 3 A_StalkerAttack
|
||||
STLK J 3 Slow A_FaceTarget
|
||||
STLK K 3 Slow A_StalkerAttack
|
||||
SeeFloor:
|
||||
STLK J 3 A_StalkerWalk
|
||||
STLK KK 3 A_Chase
|
||||
|
|
|
@ -1786,8 +1786,8 @@ ACTOR CeilingTurret 27
|
|||
Loop
|
||||
Missile:
|
||||
Pain:
|
||||
TURT B 4 A_ShootGun
|
||||
TURT D 3 A_SentinelRefire
|
||||
TURT B 4 Slow A_ShootGun
|
||||
TURT D 3 Slow A_SentinelRefire
|
||||
TURT A 4 A_SentinelRefire
|
||||
Loop
|
||||
Death:
|
||||
|
|
|
@ -238,6 +238,7 @@ skill baby
|
|||
AmmoFactor = 2
|
||||
DamageFactor = 0.5
|
||||
EasyBossBrain
|
||||
SlowMonsters
|
||||
SpawnFilter = Baby
|
||||
PicName = "M_JKILL"
|
||||
Name = "$SSKILL_BABY"
|
||||
|
|
Loading…
Reference in a new issue