using System; using System.Collections.Generic; namespace IdleSpectator; public sealed class StatusInterestEntry { public string Id = ""; public float EventStrength = 40f; public string Category = "Status"; public bool CreatesInterest; public InterestOwnership OwnsCamera = InterestOwnership.Signal; public bool ExtendsGrief; public bool IsFallback; } /// /// Authored interest policy for every live status asset. Prose stays in ActivityStatusProse. /// public static class StatusInterestCatalog { private static readonly Dictionary Entries = new Dictionary(StringComparer.OrdinalIgnoreCase); static StatusInterestCatalog() { // Spectacle / camera-worthy transformations Add("burning", 70f, "StatusTransformation", true); Add("possessed", 72f, "StatusTransformation", true); Add("possessed_follower", 60f, "StatusTransformation", true); Add("frozen", 65f, "StatusTransformation", true); Add("poisoned", 58f, "StatusTransformation", true); Add("drowning", 68f, "StatusTransformation", true); Add("stunned", 50f, "StatusTransformation", true); Add("rage", 62f, "StatusTransformation", true); Add("angry", 48f, "StatusTransformation", true); Add("cursed", 60f, "StatusTransformation", true); Add("soul_harvested", 75f, "StatusTransformation", true); Add("voices_in_my_head", 55f, "StatusTransformation", true); Add("tantrum", 52f, "StatusTransformation", true); Add("egg", 58f, "StatusTransformation", true); Add("magnetized", 55f, "StatusTransformation", true); Add("invincible", 56f, "StatusTransformation", true); Add("powerup", 54f, "StatusTransformation", true); Add("enchanted", 52f, "StatusTransformation", true); Add("ash_fever", 50f, "StatusTransformation", true); Add("starving", 48f, "StatusTransformation", true); Add("surprised", 42f, "StatusTransformation", true); Add("confused", 40f, "StatusTransformation", true); Add("strange_urge", 45f, "StatusTransformation", true); Add("inspired", 42f, "Emotion", true); Add("motivated", 40f, "Emotion", true); Add("fell_in_love", 55f, "Relationship", true); Add("pregnant", 58f, "LifeChapter", true); Add("pregnant_parthenogenesis", 58f, "LifeChapter", true); Add("crying", 50f, "Grief", true, InterestOwnership.Signal, extendsGrief: true); // Authored Ambient interest (tracked, fill-only) Add("festive_spirit", 28f, "StatusAmbient", true, InterestOwnership.Ambient); Add("laughing", 26f, "StatusAmbient", true, InterestOwnership.Ambient); Add("singing", 26f, "StatusAmbient", true, InterestOwnership.Ambient); Add("sleeping", 22f, "StatusAmbient", true, InterestOwnership.Ambient); Add("handsome_migrant", 30f, "StatusAmbient", true, InterestOwnership.Ambient); // Authored but do not create interest candidates (cooldowns / ambient / brief FX) AddNoInterest("afterglow"); AddNoInterest("being_suspicious"); AddNoInterest("budding"); AddNoInterest("caffeinated"); AddNoInterest("cough"); AddNoInterest("dash"); AddNoInterest("dodge"); AddNoInterest("flicked"); AddNoInterest("had_bad_dream"); AddNoInterest("had_good_dream"); AddNoInterest("had_nightmare"); AddNoInterest("just_ate"); AddNoInterest("on_guard"); AddNoInterest("recovery_combat_action"); AddNoInterest("recovery_plot"); AddNoInterest("recovery_social"); AddNoInterest("recovery_spell"); AddNoInterest("shield"); AddNoInterest("slowness"); AddNoInterest("spell_boost"); AddNoInterest("spell_silence"); AddNoInterest("swearing"); AddNoInterest("taking_roots"); AddNoInterest("uprooting"); } private static void Add( string id, float strength, string category, bool createsInterest, bool extendsGrief = false) { Add(id, strength, category, createsInterest, InterestOwnership.Signal, extendsGrief); } private static void Add( string id, float strength, string category, bool createsInterest, InterestOwnership ownsCamera, bool extendsGrief = false) { Entries[id] = new StatusInterestEntry { Id = id, EventStrength = strength, Category = category, CreatesInterest = createsInterest, OwnsCamera = ownsCamera, ExtendsGrief = extendsGrief }; } private static void AddNoInterest(string id) { Add(id, 20f, "StatusAmbient", false, InterestOwnership.Ambient); } public static IEnumerable AuthoredIds => Entries.Keys; public static bool HasAuthored(string statusId) { return !string.IsNullOrEmpty(statusId) && Entries.ContainsKey(statusId.Trim()); } public static bool TryGet(string statusId, out StatusInterestEntry entry) { entry = null; if (string.IsNullOrEmpty(statusId)) { return false; } return Entries.TryGetValue(statusId.Trim(), out entry); } public static StatusInterestEntry GetOrFallback(string statusId) { if (TryGet(statusId, out StatusInterestEntry entry)) { return entry; } string id = string.IsNullOrEmpty(statusId) ? "unknown" : statusId.Trim(); return new StatusInterestEntry { Id = id, EventStrength = 40f, Category = "Status", CreatesInterest = false, IsFallback = true }; } }