adminandClaude Opus 4.7 d12c81bc3b Generate ally-aware Shardok views for non-participant watchers
When a faction watched an ally's battle, the Eagle layer fell back to
Shardok's generic observer (factionId == -1) view because Shardok only
emitted filtered views for battle participants. The observer view
treats every unit as an enemy, so visibility was knowledge-gated:
battalion stats (threshold 50) usually crept above the floor while
hero stats (threshold 75) lagged behind, leaving watchers with
battalion data but no hero stats for their own allies' heroes.

Eagle now sends the set of watcher faction IDs in NewGameRequest, and
Shardok emits one filtered view per watcher in GetUpdates. Each
watcher's view treats their allied participants' units as fully
visible (hero stats, hidden actions like meteor casts, hidden-target
coords) while non-allied units fall back to observer-style knowledge
gating.

The watcher path is implemented via new
GameStateFilteredForPlayerWithAllies and
ActionResultFilteredForPlayerWithAllies overloads that take
alliedPids explicitly, plus a new ShardokEngine::FilterNewResultsForWatcher
that drives them. The IsHiddenFromOpponents predicate now treats the
actor's allies as self for visibility purposes.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-08 20:17:31 -07:00
2025-03-30 11:19:46 -07:00
2025-09-24 08:13:22 -07:00
S
Description
No description provided
Readme
9.4 GiB
Languages
Scala 44.5%
C++ 19.9%
C# 16.6%
Starlark 10.1%
Go 3.5%
Other 5.3%