From 7e02356b0166154aa01f16659c48097ec2d94468 Mon Sep 17 00:00:00 2001 From: DazedAnon Date: Tue, 21 Jul 2026 13:38:04 -0500 Subject: [PATCH] Audit Tips --- IdleSpectator/AgentHarness.cs | 23 +++++- .../Events/Catalogs/EventCatalog.Decision.cs | 51 +++++++++--- .../Events/Catalogs/EventCatalog.Libraries.cs | 79 ++++++++++--------- IdleSpectator/mod.json | 2 +- docs/event-catalog-discovery.md | 22 +++--- docs/event-catalog-discovery.tsv | 14 ++-- docs/world-event-inventory.md | 8 +- 7 files changed, 129 insertions(+), 70 deletions(-) diff --git a/IdleSpectator/AgentHarness.cs b/IdleSpectator/AgentHarness.cs index a5a9e9c..9fdcc52 100644 --- a/IdleSpectator/AgentHarness.cs +++ b/IdleSpectator/AgentHarness.cs @@ -7619,7 +7619,7 @@ public static class AgentHarness } } - // Genes are all B (gain/remove tips never own the camera). + // Genes / clan / language are all B (never own the camera). int geneCamera = 0; foreach (string id in EventCatalog.Gene.AuthoredIds) { @@ -7629,6 +7629,24 @@ public static class AgentHarness } } + int clanCamera = 0; + foreach (string id in EventCatalog.ClanTrait.AuthoredIds) + { + if (EventCatalog.ClanTrait.GetOrFallback(id).CreatesInterest) + { + clanCamera++; + } + } + + int languageCamera = 0; + foreach (string id in EventCatalog.LanguageTrait.AuthoredIds) + { + if (EventCatalog.LanguageTrait.GetOrFallback(id).CreatesInterest) + { + languageCamera++; + } + } + // Spot-check other Signal classes still have camera rows after demote. int lawSignal = 0; foreach (string id in EventCatalog.WorldLaw.AuthoredIds) @@ -7662,6 +7680,8 @@ public static class AgentHarness pass = dialBad == 0 && phenotypeCamera == 0 && geneCamera == 0 + && clanCamera == 0 + && languageCamera == 0 && spellFxCamera == 0 && spellSpectacleMissing == 0 && lawSignal > 0 @@ -7669,6 +7689,7 @@ public static class AgentHarness && signalCamera == spectacleSpells.Length; detail = $"dialBad={dialBad} phenotypeCamera={phenotypeCamera} geneCamera={geneCamera} " + + $"clanCamera={clanCamera} languageCamera={languageCamera} " + $"spellFxCamera={spellFxCamera} spellSpectacleMissing={spellSpectacleMissing} " + $"lawSignal={lawSignal} itemSignal={itemSignal} spectacleOk={signalCamera}"; break; diff --git a/IdleSpectator/Events/Catalogs/EventCatalog.Decision.cs b/IdleSpectator/Events/Catalogs/EventCatalog.Decision.cs index 143ff63..54f5110 100644 --- a/IdleSpectator/Events/Catalogs/EventCatalog.Decision.cs +++ b/IdleSpectator/Events/Catalogs/EventCatalog.Decision.cs @@ -113,6 +113,12 @@ public static partial class EventCatalog return false; } + // Soft intent chatter - outcomes already covered by other feeds, or not story-worthy. + if (IsSoftDecisionNoise(s)) + { + return false; + } + return HasToken(s, "war") || HasToken(s, "king") || HasToken(s, "leader") @@ -129,7 +135,6 @@ public static partial class EventCatalog || s.Contains("plot") || s.Contains("marry") || s.Contains("banish") - || s.Contains("steal") || s.Contains("kill_unruly") || s.Contains("clan") || s.Contains("religion") @@ -137,18 +142,46 @@ public static partial class EventCatalog || s.Contains("baby_make") || s.Contains("have_child") || s.Contains("birth") - || s.Contains("reproduction") + || s.Contains("sexual_reproduction") || s.Contains("golden_brain") || s.Contains("make_skeleton") || s.Contains("soul_harvest") || s.Contains("possessed") - || s.Contains("create_hive") - || s.Contains("fireworks") - || s.Contains("affect_dreams") - || s.Contains("family_group") - || s.Contains("take_city_item") - || s.Contains("put_out_fire") - || s.Contains("burn_tumors"); + || s.Contains("create_hive"); + } + + /// + /// Soft AI chatter that distracts the story camera. Outcomes (hatch, pack sticky, fires) + /// already have better feeds when they matter. + /// + private static bool IsSoftDecisionNoise(string s) + { + if (string.IsNullOrEmpty(s)) + { + return true; + } + + if (s.Contains("family_group") + || s.Contains("affect_dreams") + || s.Contains("fireworks") + || s.Contains("put_out_fire") + || s.Contains("burn_tumors") + || s.Contains("asexual_reproduction") + || s.Contains("take_city_item") + || s.Contains("try_to_steal") + || s.Contains("steal_money")) + { + return true; + } + + // Army follow/join intent - keep only lead-to-attack. + if (s == "warrior_army_follow_leader" + || s == "warrior_try_join_army_group") + { + return true; + } + + return false; } /// diff --git a/IdleSpectator/Events/Catalogs/EventCatalog.Libraries.cs b/IdleSpectator/Events/Catalogs/EventCatalog.Libraries.cs index 307c055..7c4633b 100644 --- a/IdleSpectator/Events/Catalogs/EventCatalog.Libraries.cs +++ b/IdleSpectator/Events/Catalogs/EventCatalog.Libraries.cs @@ -245,25 +245,8 @@ public static partial class EventCatalog } string s = id.ToLowerInvariant(); - // High / mid-spectacle materials from live items library plus named relics. - // Leather/wood/copper/iron stay ambient B. - return s.Contains("legendary") - || s.Contains("mythic") - || s.Contains("mythril") - || s.Contains("adamantine") - || s.Contains("artifact") - || s.Contains("relic") - || s.Contains("divine") - || s.Contains("demon") - || s.Contains("dragon") - || s.Contains("nuke") - || s.Contains("excalibur") - || s.Contains("wonder") - || s.Contains("silver") - || s.Contains("steel") - || s.Contains("_bone") - || s.StartsWith("bone_", StringComparison.Ordinal) - || s.EndsWith("_bone", StringComparison.Ordinal); + // Only top-tier materials own the camera. Steel/silver/bone gear is soak noise. + return s.Contains("mythril") || s.Contains("adamantine"); } private static void Ensure() @@ -533,23 +516,11 @@ public static partial class EventCatalog } string s = id.ToLowerInvariant(); - return s.Contains("war") - || s.Contains("death") - || s.Contains("plague") - || s.Contains("hunger") - || s.Contains("rebell") - || s.Contains("disaster") - || s.Contains("angry") - || s.Contains("cursed") + // God-law toggles are mostly UI spam. Keep era-defining / crisis switches only. + return s.Contains("cursed") || s.Contains("forever_") - || s.Contains("tumor") - || s.Contains("mutant") - || s.Contains("evolution") - || s.Contains("old_age") - || s.Contains("kingdom_expansion") - || s.Contains("border_steal") - || s.Contains("civ_army") - || s.Contains("exploding"); + || s.Contains("disaster") + || s.Contains("rebell"); } public static IEnumerable AuthoredIds @@ -658,6 +629,38 @@ public static partial class EventCatalog || s.Contains("blaster"); } + /// + /// Culture camera: hard politics only. Lovers / layouts / craft skins are soak noise. + /// + private static bool IsDramaticCultureTrait(string id) + { + if (string.IsNullOrEmpty(id)) + { + return false; + } + + string s = id.ToLowerInvariant(); + if (s.Contains("lover") + || s.Contains("city_layout") + || s.StartsWith("craft_", StringComparison.Ordinal) + || s.Contains("ethno") + || s.Contains("reading") + || s.Contains("statue") + || s.Contains("tower") + || s.Contains("gossip")) + { + return false; + } + + return s.Contains("conscript") + || s.Contains("xenophob") + || s.Contains("expans") + || s.Contains("join_or_die") + || s.Contains("happiness_from_war") + || s.Contains("warriors_ascension") + || s.Contains("shattered_crown"); + } + public static class CultureTrait { private static readonly Dictionary Entries = @@ -689,7 +692,7 @@ public static partial class EventCatalog d.AmbientStrength, signalIds: null, d.SignalStrength, - signalPredicate: IsDramaticMetaTrait, + signalPredicate: IsDramaticCultureTrait, ambientCreatesInterest: d.AmbientCreatesInterest); } @@ -784,6 +787,7 @@ public static partial class EventCatalog Entries.Clear(); _appliedGeneration = EventCatalogConfig.Generation; + // Clan blood / vein traits are gene-like soak noise - all B. LibraryCatalogDefaults d = LibOr("clanTrait", 32f, 72f, "Clan", "{a} clan gains {id}", false); LiveLibraryInterest.EnsureSeeded( Entries, @@ -793,7 +797,6 @@ public static partial class EventCatalog d.AmbientStrength, signalIds: null, d.SignalStrength, - signalPredicate: IsDramaticMetaTrait, ambientCreatesInterest: d.AmbientCreatesInterest); } @@ -836,6 +839,7 @@ public static partial class EventCatalog Entries.Clear(); _appliedGeneration = EventCatalogConfig.Generation; + // Language flavor traits never own the camera. LibraryCatalogDefaults d = LibOr("languageTrait", 30f, 68f, "Language", "{a} tongue gains {id}", false); LiveLibraryInterest.EnsureSeeded( Entries, @@ -845,7 +849,6 @@ public static partial class EventCatalog d.AmbientStrength, signalIds: null, d.SignalStrength, - signalPredicate: IsDramaticMetaTrait, ambientCreatesInterest: d.AmbientCreatesInterest); } diff --git a/IdleSpectator/mod.json b/IdleSpectator/mod.json index 071ef64..8d71a2b 100644 --- a/IdleSpectator/mod.json +++ b/IdleSpectator/mod.json @@ -1,7 +1,7 @@ { "name": "IdleSpectator", "author": "dazed", - "version": "0.28.40", + "version": "0.28.41", "description": "AFK Idle Spectator (I) + Lore (L). Killer button retargets dossier to the killer.", "GUID": "com.dazed.idlespectator" } diff --git a/docs/event-catalog-discovery.md b/docs/event-catalog-discovery.md index 4efeea9..9d5f71a 100644 --- a/docs/event-catalog-discovery.md +++ b/docs/event-catalog-discovery.md @@ -62,28 +62,30 @@ Seeded via `LiveLibraryInterest.EnsureSeeded` + JSON `libraries.*` dials. | Domain | Live | Camera A | Dial label template | Notes | Priority | |--------|-----:|---------:|---------------------|-------|----------| -| decisions | 127 | **33** | `{a} decides to {action}` | Signal tokens + authored phrases; fluff + intent-only genesis (`try_new_plot`, founding/claim) B; dump `.harness/camera-a-inventory.tsv` | P3 variety 0.28.32 | +| decisions | 127 | **16** politics/spectacle | `{a} decides to {action}` | Soft pack/fireworks/asexual/steal demoted B; fluff + intent-genesis B | noise pass 0.28.41 | | spells | 12 | 6 | `{a} casts {id}` | Signal spectacle only; FX spells B | P3 | | powers | 339 | **41** | `God power: {id}` | ambient CI=false; widened spectacle + creature powers; UI `_edit` B | P3 expanded 0.28.27 | -| items | 111 | **42** | `{a} gains {id}` | Signal mythril/adamantine + silver/steel/bone; leather/iron B | P3 expanded 0.28.27 | +| items | 111 | **20** mythril/adamantine | `{a} gains {id}` | steel/silver/bone demoted B | noise pass 0.28.41 | | genes | 47 | **0** | `{a} gains gene {id}` | all B (gain/remove tips not camera-worthy) | demoted | | phenotypes | 52 | 0 | `{a} shows {id}` | all B | P3 | -| world_laws | 49 | **17** | `Law changed: {id}` | dramatic + forever_/cursed/army/expansion… | P3 expanded 0.28.27 | +| world_laws | 49 | **7** crisis | `Law changed: {id}` | hunger/army/expansion/UI toggles B | noise pass 0.28.41 | | subspecies_traits | 204 | **21** | `{a} evolves {id}` | dramatic + mutation/death/blood/horror | P3 expanded 0.28.27 | | biomes | 29 | 0 | `Biome shifts: {id}` | ambient CI=false | P3 stay B | -| culture_traits | 78 | **27** | `{a} culture gains {id}` | dramatic + conscript/necro/craft weapons… | P3 expanded 0.28.27 | +| culture_traits | 78 | **8** politics | `{a} culture gains {id}` | lovers/layout/craft B; conscript/xenophobe/expansion A | noise pass 0.28.41 | | religion_traits | 40 | 6 | `{a} faith gains {id}` | dramatic heuristic | P3 | -| clan_traits | 29 | 13 | `{a} clan gains {id}` | dramatic heuristic | P3 | -| language_traits | 26 | 2 | `{a} tongue gains {id}` | dramatic heuristic | P3 | +| clan_traits | 29 | **0** | `{a} clan gains {id}` | all B (blood/vein soak) | noise pass 0.28.41 | +| language_traits | 26 | **0** | `{a} tongue gains {id}` | all B | noise pass 0.28.41 | -**Library+decision Layer A inventory (0.28.32):** live dump total **215 A / 928 B** across 13 domains (`camera_a_inventory_ok`). Decisions **33 A**. +**Library+decision Layer A inventory (0.28.41):** live dump total **125 A / 1018 B** across 13 domains (`camera_a_inventory_ok`). Decisions **16 A**. -### Decision camera classes (0.28.32) +### Decision camera classes (0.28.41) -Allow-token Signal after fluff + intent-genesis filter (not 127 ambient). +Allow-token Signal after fluff + intent-genesis + soft-noise filter (not 127 ambient). Authored action phrases required for every A id (`domain_event_audit` decision_prose). -Classes: reproduction/pack (`reproduction`, `family_group`), army/war/politics (existing), spectacle/dark (`golden_brain`, `make_skeleton`, `soul_harvest`, `possessed`), civic soft (`put_out_fire`, `burn_tumors`, `fireworks`, `affect_dreams`), hive (`create_hive`). +Classes: sexual reproduction / lover / child, army/war/politics, spectacle/dark (`golden_brain`, `make_skeleton`, `soul_harvest`, `possessed`), hive (`create_hive`). + +Stay B (soft noise 0.28.41): `family_group`, `fireworks`, `affect_dreams`, `put_out_fire`, `burn_tumors`, `asexual_reproduction`, steal/take city item, `warrior_army_follow_leader`, `warrior_try_join_army_group`. Stay B (intent-only; camera on outcome feeds): `try_new_plot*`, `try_to_start_new_civilization*`, `build_civ_city*`, `*city_foundation*`, `claim_land*` → real tips from `PlotInterestFeed` / `MetaEventPatches` (`new_city` 86, `new_kingdom` 92). diff --git a/docs/event-catalog-discovery.tsv b/docs/event-catalog-discovery.tsv index 786ee08..7dff6a1 100644 --- a/docs/event-catalog-discovery.tsv +++ b/docs/event-catalog-discovery.tsv @@ -9,21 +9,21 @@ traits 116 authored 0 116 wired authored_labels P3 disasters 17 authored 0 via_worldlog wired authored_labels P3 disaster_war_audit PASS war_types_library 5 authored 0 dials wired authored_labels P3 relationship 11 authored_discrete 0 11 wired authored_labels P3 no AssetManager lib -decisions_library 127 live+dial 0 33 wired action_phrases P3 intent genesis demoted 0.28.32; camera-a-inventory.tsv +decisions_library 127 live+dial 0 16 wired action_phrases P3 soft noise demoted 0.28.41; camera-a-inventory.tsv spells 12 live+dial 0 6 wired display_names P3 Signal spectacle; 6 FX B powers 339 live+dial 0 41 wired display_names P3 Signal widened 0.28.27; ambient CI=false -items 111 live+dial 0 42 wired gains_verb P3 Signal mythril/adamantine/silver/steel/bone +items 111 live+dial 0 20 wired gains_verb P3 Signal mythril/adamantine gear only genes 47 live+dial 0 0 wired display_names P3 all B; gain/remove not camera phenotypes 52 live+dial 0 0 wired display_names P3 all B -world_laws_library 49 live+dial 0 17 wired display_names P3 dramatic + forever_/cursed/army… +world_laws_library 49 live+dial 0 7 wired display_names P3 cursed/forever_/disaster/rebell only subspecies_traits 204 live+dial 0 21 wired display_names P3 dramatic + mutation/death/blood biome_library 29 live+dial 0 0 wired display_names P3 ambient CI=false -culture_traits 78 live+dial 0 27 wired display_names P3 dramatic widened 0.28.27 +culture_traits 78 live+dial 0 8 wired display_names P3 politics-only 0.28.41 religion_traits 40 live+dial 0 6 wired display_names P3 -clan_traits 29 live+dial 0 13 wired display_names P3 -language_traits 26 live+dial 0 2 wired display_names P3 +clan_traits 29 live+dial 0 0 wired display_names P3 all B 0.28.41 +language_traits 26 live+dial 0 0 wired display_names P3 all B 0.28.41 buildings 618 patch_only n/a consume_and_civ_complete partial EventReason.BuildingEat_BuildingComplete P3 civ complete/wonder A; destroy demoted B boats n/a patch_only n/a trade_unload wired EventReason.Boat P3 load skipped combat n/a csharp_policy n/a pair_keys wired EventReason.Fight P3 soft Duel sticky 0.28.28; hard sticky Skirmish+/notable-pair -camera_a_inventory 1143 harness 0 215 wired camera-a-inventory.tsv P3 A=215 B=928 domains=13; gate camera_a_inventory_ok +camera_a_inventory 1143 harness 0 125 wired camera-a-inventory.tsv P3 A=125 B=1018 domains=13; gate camera_a_inventory_ok mutation_gaps 0 harness 0 n/a gaps_empty n/a P3 managers=57 libraryAssets=2893 diff --git a/docs/world-event-inventory.md b/docs/world-event-inventory.md index 1933b6e..4364944 100644 --- a/docs/world-event-inventory.md +++ b/docs/world-event-inventory.md @@ -52,11 +52,11 @@ Only true brief FX, cooldowns, civic Aggregates, and god-tool / biome spam stay | Relationship | 11 | all interesting discrete | | Plot / Era / War / Book | 28 / 11 / 5 / 12 | all A | | Trait | 116 | all CI | -| Decision | 127 live / 37 prose overlays | **37** camera-interesting (0.28.27) | -| Spell / Item / Gene / Phenotype / WorldLaw / SubspeciesTrait | live | Signal-only A: spell 6 / item 42 / gene 0 / phenotype 0 / law 17 / subsp 21 | -| Culture / Religion / Clan / LanguageTrait | live dials | Signal dramatic: 27 / 6 / 13 / 2 | +| Decision | 127 live / prose overlays | **16** camera-interesting (0.28.41 soft demote) | +| Spell / Item / Gene / Phenotype / WorldLaw / SubspeciesTrait | live | Signal-only A: spell 6 / item mythril+adamantine 20 / gene 0 / phenotype 0 / law crisis 7 / subsp 21 | +| Culture / Religion / Clan / LanguageTrait | live dials | Culture politics 8; religion 6; clan 0; language 0 | | Power / Biome | live | Power Signal **41**; biome 0 (ambient CI=false) | -| Library+decision inventory dump | 1143 rows | **219 A / 924 B** (`.harness/camera-a-inventory.tsv`) | +| Library+decision inventory dump | 1143 rows | **125 A / 1018 B** (`.harness/camera-a-inventory.tsv`) | | Building / Boat | none | destroy/consume/trade/unload; damage/load skipped | ## Wired hooks (major)