Jump to content

Explanation about FW's ability timers


Recommended Posts

Terms used in the explanation because practically everything is named differently and more shortly in the code:
Ancient Gateway — stargate
Ancient Fuelweaver — FW or stalker
Bone cage — snare
Fossil spikes falling down nearby the ancient gateway — spikes
Mind control — mind control
Unseen hands — channelers
Woven shadows — minions
Feast or eat — eat woven shadows
Shared abilities — the three abilities that impact each other's cooldown, which are bone cage, fossil spikes falling down nearby the ancient gateway and mind control.

FW starts the fight with timers:
Everything except spikes — 5 seconds, spikes — 4 seconds. Only bone cage and spikes are relevant though, because bringing FW to the phase 2 threshold within <5 seconds of spawning him to see the initial mind control, channeler and minion timers still going after FW entered p2 is unrealistic.

FW's priorities for performing abilities are (assuming the timer for the ability ran out and he is able to do it, otherwise it isn't taken into consideration for the list): mind control — snare if doesn't want to do spikes — channelers — eat — update minions list for being able to summon minions — summon minions — spikes.

When out of an animation, if he already chose multiple abilities to perform, priorities are: snare — spikes — attack.

When the timer of an ability runs out, it's cooldown is set to 3 seconds after the animation is finished if current animation can't be interrupted (mostly everything except walking and idling) or instantly otherwise. If the requirement to perform the ability is met, stalker performs the ability and it's cooldown is set to a custom value (10 for snare, 8 for spikes, 15 for mind control). If the ability succeeds, every other shared ability's timer is increased by ((their custom value)*0.5)-(amount of time left in their timer) if the value isn't negative or it doesn't get increased otherwise, and since abilities are considered uninterruptible animations, the timer will also additionally get increased by 3 if it was 0 when ability succeeded.

Bone cage:

Requirement to attempt: at least one valid target (isn't a ghost, isn't flying, isn't a small creature, isn't a boss, isn't shadow, isn't FW, isn't FW minion, isn't a tallbird (no idea why specifically them), can move and can be attacked) within 12 units away from FW.
Requirement to succeed: spawn at least one bone cage by having a target within 15 units away from FW when he slams his hand.

Fossil spikes falling down nearby the ancient gateway:

Requirement to attempt: is within 8 units away from the ancient gateway and there's a valid target (isn't a player ghost, isn't shadow, isn't FW, isn't FW minion and is within 8 units away from stargate) and is in p1 and there are no minions in the arena.
Requirement to succeed: successfully spawn the spikes, always successful unless FW is surrounded by void with no land within 8 units away from him.

Mind control:

Requirement to attempt: at least one valid target (is insane) and is in p2.
Requirement to succeed: the target is still there and is still insane when he finishes the initial animation for the ability (around when he grabs his skull with the hands).

Unseen hands:

Requirement to attempt: is in p2 and isn't invincible and the last unseen hand was killed 20 seconds ago.

Minions:

Requirement to attempt: is in p2 and no minions are left and the last minion was killed 20 seconds ago (minion being eaten doesn't count as minion being killed, though).

If you want to do some further testing on your own, you can use this console command after spawning FW to make him say his current cooldowns every 0.1 of a second:
stalker = c_findnext("stalker_atrium"); function gettime(timer) local time = stalker.components.timer:GetTimeLeft(timer.."_cd") return time and string.sub(time, 1, 5) or 0 end; stalker:DoPeriodicTask(0.1, function(inst) inst.components.talker:Say("Bone cage: "..gettime("snare").."\nSpikes: "..gettime("spikes").."\nMind control: "..gettime("mindcontrol").."\nUnseen hands:"..gettime("channelers").."\nWoven shadows: "..gettime("minions")) end)

If you noticed any error looking at how the abilities and timers work in your experience or by testing through the console command or by looking at the game's code (primarily stategraphs/SGstalker.lua, brains/stalkerbrain.lua, prefabs/stalker.lua), tell about them in response to the thread, would be appreciated.

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

Please be aware that the content of this thread may be outdated and no longer applicable.

×
  • Create New...