Skip to content

raidboss: r12s initial p2 triggers and timeline#1007

Open
Legends0 wants to merge 239 commits intomainfrom
r12sp2-initial-triggers-timeline
Open

raidboss: r12s initial p2 triggers and timeline#1007
Legends0 wants to merge 239 commits intomainfrom
r12sp2-initial-triggers-timeline

Conversation

@Legends0
Copy link
Collaborator

@Legends0 Legends0 commented Feb 14, 2026

These I have been working on.

  • Includes strategy Replication 2 support for DN, Banana Codex, and Nukemaru.
  • Includes Portent strategy support for DN and Zenith.

Timeline is based on network log.

Some of ideas of things TODO:

  • Replication 1 has an edge case which in theory should never be hit, I also never really paid attention to its output cause I just never modified it to my position needed so my calls were always both intercard locations which seemed correct. It kind of feels late to call, but I don't see how else it can be called sooner other than possibly a heading-based prediction, for which the data may not arrive in a timely manner as well.
  • Double Sobat in P2 can have some weird output when checking heading of boss if the targetted player quickly changes or quickly moves to a new direction prior to the snapshot but most cases it is accurate. Not sure if this is fixed with using the target's location compared to boss center in the match instead of boss heading. EDIT: Switched to target vs source instead of heading, unsure if this is still an issue.
  • Replication 2 Nukemaru (JP Strat) config/detection. While I can probably code up something basic for it, I likely won't be able to test this but it has been added.
  • Tower locations in P2 (I couldn't see a way to collect their location until after the fact when players have debuffs). It would also be helpful to know where that pesky earth tower is, which maybe is in its startsUsing cast that I just never bothered to check. The call outs in general here could be kind of spammy with the Doom (for cleansers), Pyretic, and avoid earth. EDIT: The Combatant Memory lines for them being added prior to casts has unique BNpcID for each tower type.
  • Replication 4 breakout outputs based on dn strategy (call the group 1-4/intercard quadrant and to grab stack or defamation?) . EDIT: NA/EU/JP all do this differently, so probably going to end up with multiple config options here to eventually.
  • Final AoE set could probably be adjusted as right now they are both alert bigAoes. I haven't actually looked into the damage it does, I think the damage goes up with each cast as there are more actors casting, but I never noticed an issue here.
  • Fix replication 2 reenactment 1 in timeline, currently it is coded for DN strategy.

Note: Didn't realize renaming branch would close previous PR #964 and didn't have permissions to re-open the PR.

@Legends0
Copy link
Collaborator Author

Legends0 commented Mar 9, 2026

Still testing and evaluating, so only extremely early feedback, based purely on time into the pull:

There's technically an earlier line to sync to for P2 which happens the exact same server tick that P2 starts, but it doesn't seem to want to sync in test_timeline for P2 pulls (works fine for syncing from P1 to P2 transition though), maybe because it's technically before the InCombat line? I didn't bother debugging much here.

# ActorControl director update corresponds to "Alas, the battle isn't over yet... But don't despair, Champion!"
0.0 "--sync--" ActorControl { command: '80000027', data0: '15', data1: '02', data2: '330A' } window 0,1 jump "r12s-p2-start"

I can see this matching at +0.382s, whereas the AddedCombatant happens at +0.721s.

Replication 1 triggers for the initial fire/dark res down debuffs sometimes both call out two conflicting outputs, maybe due to debuff propagation delay.

For example, I got dark debuff in this pull (targeted on my partner), and both VOD and raidemulator show double output: image

It might be better for this to be a single collector trigger that collects all debuffs, stores them in an array, and then determines mechanic resolution once 6 debuffs are seen.

The trigger also doesn't account for dark targets not being close enough together to both get hit with the dark spread (or tanks eating the fire stack solo), but that's a mechanical failure on the players so I don't know if it makes sense to cover that case. If we wanted to cover it, we could use a 3 second delayed followup trigger saying some sort of equivalent of "debuffs messed up, check your partner" or something.

Yea, I suspect it's debuff propagation delay, but that is odd. I wasn't able to see issues after adding delay early on in the development, but I guess a different design is needed if this is still happening.

Finally for Rep 1, the N/S cleaves called out by R12S Winged Scourge, it would be nice to adjust to something like N/S Cleaving N/S, N/S Cleaving E/W, etc, for the initial trigger output.

This should be possible to add.

For Rep 2, the initial tether you spawn with isn't really needed (at least for Banana Codex, haven't studied any other strats) and makes the trigger output text excessively long.

I agree that it can make for excessive output. It's additional information that can be removed. I'm not aware of a reason why someone would want this other than to maybe the 1 in 8 chance they get the tether they need at the start, but even then the details in the current output do not include CW or CCW.

The Stack Groups => Get Behind output for R12S Heavy Slam is misleading, because the player cones are after the stacks and it caused a number of people to run into the cones during prog. Maybe adjust to Stack Groups => Cones => Get Behind or something?

That sounds fair. The get behind call was already delayed until after cones go off, but if players forget to wait for cones that is a concern.

ActorControl appears to miss sometimes
@Legends0
Copy link
Collaborator Author

Legends0 commented Mar 9, 2026

I'm not quite sure how reliable the ActorControl sync will be. Even on a transition, either you aren't combat anymore once the cut scene starts or once it ends... you don't have to pull the boss immediately. I think it likely depend if the player is in combat by the time the ActorControl line triggers.

Now just calls tether to grab or no tether
@Legends0
Copy link
Collaborator Author

Legends0 commented Mar 9, 2026

Hmm... possibly could add back some detection for the direction of the tether to fix the saying of get tether if the player already has the tether they need.

@Legends0
Copy link
Collaborator Author

Legends0 commented Mar 9, 2026

Replication 1 triggers for the initial fire/dark res down debuffs sometimes both call out two conflicting outputs, maybe due to debuff propagation delay.

For example, I got dark debuff in this pull (targeted on my partner), and both VOD and raidemulator show double output: image

Do you know how far apart the first debuff of CFB or B79 was in the party to when you received it?

This could mean 'R12S Fake Fire Resistance Down II' needs more delay since the first gainsEffect of CFB or B79 was seen > 1.2s before you got hit.

I can check more of my logs to see if I have something to that affect.

Legends0 added 5 commits March 9, 2026 03:23
Checking that we have 2 fire debuffs and 4 darks in order to output no debuff, otherwise output check partner. This doesn't account for players getting more than one buff.
Providing the location for Dark add as that may still be needed for two players and saying Check Partner text instead of bait dark.
@valarnin
Copy link
Collaborator

valarnin commented Mar 9, 2026

I'm not quite sure how reliable the ActorControl sync will be. Even on a transition, either you aren't combat anymore once the cut scene starts or once it ends... you don't have to pull the boss immediately. I think it likely depend if the player is in combat by the time the ActorControl line triggers.

Both the InCombat and AddedCombatant line are memory-generated and therefore the InCombat line will almost always come after the ActorControl line because it's sent on the first server tick of P2 combat.

First server tick of combat.

  • (network) ActionEffect1 line started combat via GNB's Keen Edge
  • (network) SetActorLetter causes boss to be assigned letter 0x19 = 25 = Y by server
  • (network) ActorControlSelf DirectorUpdate line is what generates the matched 33 line
  • (memory) 260 InCombat line has an earlier timestamp, but comes later, because it's memory-generated
4096|2026-03-08T22:25:08.4880000-04:00|ActionEffect1|762|10000001|40004665|00000000|00003F09|00005296|0.6|E0000000|5678|3.06374167528352|3F09|
4096|2026-03-08T22:25:08.4880000-04:00|ActorControl|276|10000002|SetActorLetter|00000019|40004665|00000000|00000000|00000000|e6c93802366e3976
4096|2026-03-08T22:25:08.4880000-04:00|FirstAttack|346|40004665|00000002|00000000|000005F3|00CD0000|7e3a0c8a55b7e2ba
4096|2026-03-08T22:25:08.4880000-04:00|ActorControl|276|10000002|ToggleAggro|00000001|00000000|00000000|00000000|00000000|35462cd1a5ac506d
4096|2026-03-08T22:25:08.4880000-04:00|ActorControl|276|40004665|ToggleWeapon|00000001|00000001|00000000|00000000|00000000|be3eab26ec57e17e
... trim like 40 lines of enemy actors having aggro and weapon toggled, there's so many it rolls over into next server tick
4096|2026-03-08T22:25:08.5330000-04:00|ActorControl|276|4000467E|ToggleAggro|00000001|00000000|00000000|00000000|00000000|1dbeee60e6149dfa
4096|2026-03-08T22:25:08.5330000-04:00|ActorControl|276|4000467E|ToggleWeapon|00000001|00000001|00000000|00000000|00000000|6c56d6d0788e7213
4096|2026-03-08T22:25:08.5330000-04:00|ActorControlSelf|334|10000002|DirectorUpdate|800375D1|80000027|00000015|00000002|0000330A|E0000000|00000000|55fd339b3afaca2f
260|2026-03-08T22:25:08.1470000-04:00|1|1|0|1|d858895d5d61326e

Extra actors spawn that timeline is using to sync, in the order they appear in the log file.

  • (network) SpawnNPC packet creates actor
  • (memory) 261 CombatantMemory line from OverlayPlugin detecting the added actor
  • (memory) 03 AddedCombatant line from ACT detecting the added actor
4096|2026-03-08T22:25:08.7100000-04:00|SpawnNPC|772|40004690|
261|2026-03-08T22:25:08.3280000-04:00|Add|40004690|BNpcID|4B29|BNpcNameID|382C|
03|2026-03-08T22:25:08.3280000-04:00|40004690|Lindschrat|00|64|0000|00||14380|19241|18830000|18830000|10000|10000|||100.00|100.00|0.00|0.00|0c5d0496add3e70d

Hmm... possibly could add back some detection for the direction of the tether to fix the saying of get tether if the player already has the tether they need.

I've only looked at one set of strats for P2 (Rep1 DN, Rep2 BC, Idyllic DN/Uptime), but with BC Rep2, even if you start with the correct type of tether, that might not be the correct tether for the strat, for example relative southwest wants defamation, defamations are at relative southwest and relative west, so despite SW already having SW defam tether, they should be taking W defam tether.


Do you know how far apart the first debuff of CFB or B79 was in the party to when you received it?

26|2026-03-08T22:05:46.6190000-04:00|B79|Fire Resistance Down II|24.96|400042F3|Lindschrat|10000001|Warrior ENE|00|322796|18830000|1b4392b6678722ae
26|2026-03-08T22:05:46.6190000-04:00|B79|Fire Resistance Down II|24.96|400042F3|Lindschrat|10000002|Ninja NNE|00|225464|18830000|e81edfd1c2290154

26|2026-03-08T22:05:47.7330000-04:00|CFB|Dark Resistance Down II|23.96|400042DE|Lindwurm|10000003|WhiteMage NNW|00|202950|44|82005c423c40f178
26|2026-03-08T22:05:47.7330000-04:00|CFB|Dark Resistance Down II|23.96|400042DE|Lindwurm|10000004|Dancer WNW|00|226518|44|65bebb3d3f9e42db

26|2026-03-08T22:05:47.7330000-04:00|CFB|Dark Resistance Down II|23.96|400042DD|Lindwurm|10000005|Monk SSW|00|226658|44|65ef21d0a0c6440e
26|2026-03-08T22:05:47.7330000-04:00|CFB|Dark Resistance Down II|23.96|400042DD|Lindwurm|10000006|Gunbreaker WSW|00|320360|44|a9ae5a1551a64103

@Legends0
Copy link
Collaborator Author

Legends0 commented Mar 9, 2026

Both the InCombat and AddedCombatant line are memory-generated and therefore the InCombat line will almost always come after the ActorControl line because it's sent on the first server tick of P2 combat.

First server tick of combat.

  • (network) ActionEffect1 line started combat via GNB's Keen Edge
  • (network) SetActorLetter causes boss to be assigned letter 0x19 = 25 = Y by server
  • (network) ActorControlSelf DirectorUpdate line is what generates the matched 33 line
  • (memory) 260 InCombat line has an earlier timestamp, but comes later, because it's memory-generated
4096|2026-03-08T22:25:08.4880000-04:00|ActionEffect1|762|10000001|40004665|00000000|00003F09|00005296|0.6|E0000000|5678|3.06374167528352|3F09|
4096|2026-03-08T22:25:08.4880000-04:00|ActorControl|276|10000002|SetActorLetter|00000019|40004665|00000000|00000000|00000000|e6c93802366e3976
4096|2026-03-08T22:25:08.4880000-04:00|FirstAttack|346|40004665|00000002|00000000|000005F3|00CD0000|7e3a0c8a55b7e2ba

Maybe it's just my log lines from OverlayPlugin logs coming out of order that results in the ActorControl line sometimes being after InCombat. I have logs of P2 where this syncs without transition, and in same log AddedCombatant synced instead.

Do you know how far apart the first debuff of CFB or B79 was in the party to when you received it?

26|2026-03-08T22:05:46.6190000-04:00|B79|Fire Resistance Down II|24.96|400042F3|Lindschrat|10000001|Warrior ENE|00|322796|18830000|1b4392b6678722ae
26|2026-03-08T22:05:46.6190000-04:00|B79|Fire Resistance Down II|24.96|400042F3|Lindschrat|10000002|Ninja NNE|00|225464|18830000|e81edfd1c2290154

26|2026-03-08T22:05:47.7330000-04:00|CFB|Dark Resistance Down II|23.96|400042DE|Lindwurm|10000003|WhiteMage NNW|00|202950|44|82005c423c40f178
26|2026-03-08T22:05:47.7330000-04:00|CFB|Dark Resistance Down II|23.96|400042DE|Lindwurm|10000004|Dancer WNW|00|226518|44|65bebb3d3f9e42db

26|2026-03-08T22:05:47.7330000-04:00|CFB|Dark Resistance Down II|23.96|400042DD|Lindwurm|10000005|Monk SSW|00|226658|44|65ef21d0a0c6440e
26|2026-03-08T22:05:47.7330000-04:00|CFB|Dark Resistance Down II|23.96|400042DD|Lindwurm|10000006|Gunbreaker WSW|00|320360|44|a9ae5a1551a64103

Thanks for those lines.
Hmm, that appears to be 1.114s, which would mean that with a 1.2s delay before the Fake Fire Resistance II trigger fires, the data.replication1Debuff should have been defined. Either the collector trigger didn't run, took longer than 0.086 to set the value, or delaySeconds on the Fake Fire Resistance II trigger was not 1.2?

@valarnin
Copy link
Collaborator

valarnin commented Mar 9, 2026

Hmm, that appears to be 1.114s, which would mean that with a 1.2s delay before the Fake Fire Resistance II trigger fires, the data.replication1Debuff should have been defined. Either the collector trigger didn't run, took longer than 0.086 to set the value, or delaySeconds on the Fake Fire Resistance II trigger was not 1.2?

Just because the line timestamps are within 1.2 seconds of each other, doesn't mean that by the time they have been written to file, read back out, parsed, dispatched to OverlayPlugin, dispatched to cactbot, and then parsed again, they're still less than 1.2s apart.

@Legends0
Copy link
Collaborator Author

Legends0 commented Mar 10, 2026

Oh one thing I noticed about replication 2 as I am seeing certain strategies being designed for the worst replication 2 strategy is that during reenactment the defamation from the boss is going to go on the furthest clone and not necessarily the clone of the player that baited this defamation?

The current design of the triggers could therefore be incorrect about when this defamation occurs.

EDIT: For some clarity, from the balance:

  • Clones can do nothing and disappear.
  • If player doesn't get hit, their clone doesn't get hit.
  • If a player was the furthest player and was a tethered to something, then it's random if their clone gets the far mana burst or their tethered ability.

This seems to have a few implications:

  • A 50% chance to prevent a mana burst, stack, or cone during reenactment
  • Weird things when a player dies before the damage in replication 2 such as In some way or shape you could trade a sustained damage dot for skipping stack in reenactment? Might be misunderstanding the comment about player doesn't get hit, as it might be just referring to player(s) without a tether from a boss clone.
  • The clones do not get more than 1 ability happening to them

Faraway Portent does not apply to Dark Tower soaks and Nearby Portent does not apply to Wind Tower soaks.
Not needed for nearby/faraway.
hasDoom no longer used
At 10s duration, there is ~1s more until the next call.
@Legends0
Copy link
Collaborator Author

I suppose I could just eliminate several of the initial replication 2 triggers since the trigger is no longer calling the tether start with.

It is made redundant when we don't care for outputting the initial state and just want the tether or no tether to grab.
More accurately say that player is baiting far defamation rather than explicitly getting a defamation.

Potentially it could also say farthest from boss in some way, but this might be good enough.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

needs-review Awaiting review raidboss /ui/raidboss module

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants