Strife: Bloodbath is *too* aggressive
Moderator: GZDoom Developers
Forum rules
Please construct and post a simple demo whenever possible for all bug reports. Please provide links to everything.
If you can include a wad demonstrating the problem, please do so. Bug reports that include fully-constructed demos have a much better chance of being investigated in a timely manner than those that don't.
Please make a new topic for every bug. Don't combine multiple bugs into a single topic. Thanks!
Please construct and post a simple demo whenever possible for all bug reports. Please provide links to everything.
If you can include a wad demonstrating the problem, please do so. Bug reports that include fully-constructed demos have a much better chance of being investigated in a timely manner than those that don't.
Please make a new topic for every bug. Don't combine multiple bugs into a single topic. Thanks!
-
-
- Posts: 17782
- Joined: Fri Jul 06, 2007 3:22 pm
Strife: Bloodbath is *too* aggressive
When playing in Bloodbath mode in Strife, monsters such as acolyte open fire practically as soon as they see you and then will not do anything else but shoot at you until you hide behind cover. However, in vanilla, they do move around quite a lot, making the start of the game a lot more survivable, as demonstrated here by Belial:
Or here by someone else:
You'll notice that despite the acolytes moving and shooting faster than they do in ZDoom (their states lack the fast flag, as shown here), they're quite easier to kill without getting shredded because they waste a lot of time moving around. In ZDoom, they don't.
Or here by someone else:
You'll notice that despite the acolytes moving and shooting faster than they do in ZDoom (their states lack the fast flag, as shown here), they're quite easier to kill without getting shredded because they waste a lot of time moving around. In ZDoom, they don't.
-
- Posts: 774
- Joined: Wed Feb 23, 2011 11:04 am
- Preferred Pronouns: No Preference
Re: Strife: Bloodbath is *too* aggressive
Hell, I was about to report this.
In this case I would suggest something like "StrifeFastMonsters" to be implemented and replace "FastMonsters" in Strife's "Bloodbath" skill definition.
The only thing "StrifeFastMonsters" would do is halve the tic duration of states that are marked with the 'Fast' state flag but otherwise does not influence aggressiveness (i.e. does not make monsters spam their 'Missile' state sequence like they do with "FastMonsters").
Does this sound reasonable?
EDIT: Instead of "StrifeFastMonsters", it could be called "FastMonsters2".

In this case I would suggest something like "StrifeFastMonsters" to be implemented and replace "FastMonsters" in Strife's "Bloodbath" skill definition.
The only thing "StrifeFastMonsters" would do is halve the tic duration of states that are marked with the 'Fast' state flag but otherwise does not influence aggressiveness (i.e. does not make monsters spam their 'Missile' state sequence like they do with "FastMonsters").
Does this sound reasonable?
EDIT: Instead of "StrifeFastMonsters", it could be called "FastMonsters2".
-
- Lead GZDoom+Raze Developer
- Posts: 48666
- Joined: Sat Jul 19, 2003 10:19 am
- Location: Germany
Re: Strife: Bloodbath is *too* aggressive
I'd call it 'FastStates' and rename 'SlowMonsters' to 'SlowStates' because this has nothing to do with monsters exclusively.
-
-
- Posts: 17782
- Joined: Fri Jul 06, 2007 3:22 pm
Re: Strife: Bloodbath is *too* aggressive
Or something like Heretic/Hexen's nightmarefast?
Thinking about it, having FastStates, FastChase (for nightmarefast), and FastAim (for this thread's effect) as separate skill settings instead of lumping everything under FastMonsters possibly modified by nightmarefast would be better.
Thinking about it, having FastStates, FastChase (for nightmarefast), and FastAim (for this thread's effect) as separate skill settings instead of lumping everything under FastMonsters possibly modified by nightmarefast would be better.
-
- Posts: 774
- Joined: Wed Feb 23, 2011 11:04 am
- Preferred Pronouns: No Preference
Re: Strife: Bloodbath is *too* aggressive
Just to clarify, is "FastAim" supposed to just make monsters spam their 'Missile' state sequence and ignore nightmarefast and the 'Fast' state flag i.e. not modify tic duration?
If so then how about calling it "FastAttack" or "SpamAttacks" since they're not really 'aiming' as much as they are mindlessly standing in place and gunning for you like there's no tomorrow.
If so then how about calling it "FastAttack" or "SpamAttacks" since they're not really 'aiming' as much as they are mindlessly standing in place and gunning for you like there's no tomorrow.
-
-
- Posts: 17782
- Joined: Fri Jul 06, 2007 3:22 pm
Re: Strife: Bloodbath is *too* aggressive
So, effects of isFast:
AActor::StaticSpawn():
A_DoChase():
and
as well as:
AActor::GetTics():
isFast() itself works like this:
and interestingly enough, G_SkillProperty(SKILLP_FastMonsters) doesn't look just for the skill property, but also for the DM flag:
So we have five effects in total. Four of them can be influenced by actor flags; the fifth cannot but can be influenced by A_Chase flags. That last effect comes from Heretic and therefore doesn't apply to Strife. Of the remaining four, one is definitely here (fast states). So which of the three others aren't?
AActor::StaticSpawn():
Code: Select all
if (actor->isFast() && actor->flags3 & MF3_ISMONSTER)
actor->reactiontime = 0;
Code: Select all
// do not attack twice in a row
if (actor->flags & MF_JUSTATTACKED)
{
actor->flags &= ~MF_JUSTATTACKED;
if (!actor->isFast() && !dontmove)
{
P_NewChaseDir (actor);
}
actor->flags &= ~MF_INCHASE;
return;
}
Code: Select all
// check for missile attack
if (missilestate)
{
if (!actor->isFast() && actor->movecount)
{
goto nomissile;
}
if (!P_CheckMissileRange (actor))
goto nomissile;
actor->SetState (missilestate);
actor->flags |= MF_JUSTATTACKED;
actor->flags4 |= MF4_INCOMBAT;
actor->flags &= ~MF_INCHASE;
return;
}
Code: Select all
if (nightmarefast && G_SkillProperty(SKILLP_FastMonsters))
{ // Monsters move faster in nightmare mode
if (actor->tics > 3)
{
actor->tics -= actor->tics / 2;
if (actor->tics < 3)
{
actor->tics = 3;
}
}
}
Code: Select all
if (isFast() && newstate->Fast)
{
return tics - (tics>>1);
}
isFast() itself works like this:
Code: Select all
bool AActor::isFast()
{
if (flags5&MF5_ALWAYSFAST) return true;
if (flags5&MF5_NEVERFAST) return false;
return !!G_SkillProperty(SKILLP_FastMonsters);
}
Code: Select all
case SKILLP_FastMonsters:
return AllSkills[gameskill].FastMonsters || (dmflags & DF_FAST_MONSTERS);
- reactiontime: interestingly, this one in vanilla is purely a skill setting and cannot be obtained just by -fast. Since ZDoom bundles the DM flag with the skill setting, -fast gives it fast reaction time too. It's difficult to guess whether it applies to Strife or not because reactiontime's effect is exceedingly subtle
- do not attack twice in a row: this one seems interesting, if I understand what it does it forces the actor to move when calling A_Chase after having attacked. So it's definitely something missing from Strife.
- shoot even if movecount is non-null: this one is subtle too
-
- Lead GZDoom+Raze Developer
- Posts: 48666
- Joined: Sat Jul 19, 2003 10:19 am
- Location: Germany
Re: Strife: Bloodbath is *too* aggressive
Correct. But FastMonsters needs to stay for compatibility with existing mods.Gez wrote:Or something like Heretic/Hexen's nightmarefast?
Thinking about it, having FastStates, FastChase (for nightmarefast), and FastAim (for this thread's effect) as separate skill settings instead of lumping everything under FastMonsters possibly modified by nightmarefast would be better.
-
- Lead GZDoom+Raze Developer
- Posts: 48666
- Joined: Sat Jul 19, 2003 10:19 am
- Location: Germany
Re: Strife: Bloodbath is *too* aggressive
Lots of code fragments, no solution, though. Can you give some pointers? It's been too long that I thought about this.
-
-
- Posts: 17782
- Joined: Fri Jul 06, 2007 3:22 pm
Re: Strife: Bloodbath is *too* aggressive
Well we're still stuck in "what do we do about this" mode.
Here's what I'd suggest: split the fast effect into its different constituent parts:
-FastReaction (for setting reactiontime to 0)
-RepeatAttacks (for skipping the "do not attack twice in a row") thing
-FastStates (for the effect on actor states with the fast flag)
-FastChase (for the nightmarefast effect)
The existing FastMonsters property would be a combo deal for backward compatibility.
If that's okay I can prepare a PR for that, unless you'd rather do it yourself.
Here's what I'd suggest: split the fast effect into its different constituent parts:
-FastReaction (for setting reactiontime to 0)
-RepeatAttacks (for skipping the "do not attack twice in a row") thing
-FastStates (for the effect on actor states with the fast flag)
-FastChase (for the nightmarefast effect)
The existing FastMonsters property would be a combo deal for backward compatibility.
If that's okay I can prepare a PR for that, unless you'd rather do it yourself.
-
- Lead GZDoom+Raze Developer
- Posts: 48666
- Joined: Sat Jul 19, 2003 10:19 am
- Location: Germany
Re: Strife: Bloodbath is *too* aggressive
If you got time do do it I'd appreciate it so I can look at other bugs in parallel.