Skip to content

chore: FCS bump b21433ecc + harness [3c.3] enmity tables section#115

Merged
logicallysynced merged 2 commits into
mainfrom
sharlayan-9-rebuild
Jun 6, 2026
Merged

chore: FCS bump b21433ecc + harness [3c.3] enmity tables section#115
logicallysynced merged 2 commits into
mainfrom
sharlayan-9-rebuild

Conversation

@logicallysynced

@logicallysynced logicallysynced commented Jun 6, 2026

Copy link
Copy Markdown
Contributor

Summary

Two commits ahead of main:

  • 3c274c0 — chore: bump FCS submodule 5d3840d68 → b21433ecc (two upstream commits: routine struct refresh + a comments-only addition for EventSystemDefine)
  • 988d9bb — harness: add [3c.3] ENMITY TABLES section — always show both lists

FCS bump (3c274c0)

Latest upstream commits since the previous pin:

b21433ecc Add names from EventSystemDefine as comments
e04ec6b37 Update structs

Nothing that touches public-API names, field layouts, or anything Sharlayan reflects against. Sharlayan.dll size unchanged at 10980 KB; all 189 tests still pass; harness builds clean.

Verified Lumina 7.5.0, Lumina.Excel 7.4.3, NLog 6.1.3, Newtonsoft.Json 13.0.4, and ILRepack.Lib.MSBuild.Task 2.0.45 are all at latest stable via dotnet list package --outdated — nothing else to bump. No open Dependabot PRs.

Harness enmity section (988d9bb)

The harness previously surfaced enmity only via TargetInfo.EnmityItems, which Reader.Target.cs:111 gates behind CurrentTargetID > 0 — so the table was invisible whenever the player had no target. Two distinct enmity-related structures exist on UIState and both deserve visibility for testing:

List Source Surface What it represents
AGGRO UIState.Hater._haters (AGROMAP_KEY / AGRO_COUNT_KEY) PlayerInfo.EnmityItems "Who is aggro'd ON the player"
HATE UIState.Hate._hateInfo (ENMITYMAP_KEY / ENMITY_COUNT_KEY) TargetInfo.EnmityItems (gated) "The player's own hate table"

The new [3c.3] ENMITY TABLES section:

  • Logs CanGetAgroEntities / CanGetEnmityEntities capability flags so a stripped scan (missing signature) is obvious at a glance.
  • AGGRO list — prints PlayerInfo.EnmityItems plus the raw HaterCount for cross-check.
  • HATE list — reads ENMITYMAP_KEY directly using HateItem offsets, bypassing the target gate so the data is always visible. Names are resolved against GetActors() since hate entries store only ID + Enmity in memory.
  • Engaged actors — top 10 actors with IsAgroed || InCombat set, independent of either table, as an eye-check that ActorItem.IsAgroed (CharacterData.Flags bit 1) lights up correctly.

The earlier TargetInfo.EnmityItems print in [3c] is kept and now annotated to point at [3c.3] so it's clear why the same data shows up twice in different forms.

Version

9.0.38 → 9.0.39 (Sharlayan source changed via the FCS submodule bump; harness-only change in 988d9bb does not bump per policy).

Test plan

  • pwsh .\build.ps1 clean — 0 warnings, 0 errors.
  • dotnet test — 189 / 189 pass.
  • dotnet list package --outdated — no available updates.
  • Debug DLLs deployed to Chromatics Build Dependencies/Sharlayan/.
  • Run pwsh .\harness.ps1 against a live client and verify [3c.3] shows the AGGRO and HATE lists with sensible counts when engaged and empty otherwise.

🤖 Generated with Claude Code

logicallysynced and others added 2 commits June 5, 2026 11:13
The harness previously only surfaced enmity via TargetInfo.EnmityItems,
which Reader.Target.cs gates behind CurrentTargetID > 0 — so the table
was invisible when the player had no target. Two distinct enmity-related
structures exist on UIState and both deserve visibility for testing:

  AGRO  list (UIState.Hater._haters, HaterCount)
    AGROMAP_KEY / AGRO_COUNT_KEY — "who is aggro'd on the player"
    Already surfaced on PlayerInfo.EnmityItems; reprinted with the raw
    counter alongside for verification.

  HATE  list (UIState.Hate._hateInfo, HateArrayLength)
    ENMITYMAP_KEY / ENMITY_COUNT_KEY — "the player's own hate table"
    Read directly from memory using HateItem offsets so the data is
    visible regardless of whether GetTargetInfo would populate it.
    Names looked up against GetActors() since hate entries store only
    ID + Enmity.

Also logs CanGetAgroEntities / CanGetEnmityEntities capability flags so
a stripped scan (missing signature) is obvious at a glance, and lists
up to 10 actors with IsAgroed || InCombat set — independent of either
table — as an eye-check that ActorItem.IsAgroed lights up correctly.

The note above the TargetInfo.EnmityItems print is updated to point at
[3c.3] so it's clear why the same data shows up twice in different forms.

Harness-only — no Sharlayan source changes, no version bump.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Upstream rolled two commits since the previous pin:

  b21433ecc Add names from EventSystemDefine as comments
  e04ec6b37 Update structs

Routine struct refresh + a comments-only addition. No public-API,
field-rename, or layout-shape changes that Sharlayan would notice.
Lumina 7.5.0, Lumina.Excel 7.4.3, NLog 6.1.3, Newtonsoft.Json 13.0.4,
and ILRepack.Lib.MSBuild.Task 2.0.45 are already at latest stable
(verified via `dotnet list package --outdated` — no available updates).

Build clean, 189/189 tests pass, merged Sharlayan.dll byte size
unchanged at 10980 KB, debug DLLs deployed to Chromatics.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@logicallysynced logicallysynced self-assigned this Jun 6, 2026
@logicallysynced logicallysynced merged commit dff01c5 into main Jun 6, 2026
3 checks passed
@logicallysynced logicallysynced deleted the sharlayan-9-rebuild branch June 6, 2026 02:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant