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 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, extendsGrief: true); // 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("festive_spirit"); AddNoInterest("flicked"); AddNoInterest("had_bad_dream"); AddNoInterest("had_good_dream"); AddNoInterest("had_nightmare"); AddNoInterest("handsome_migrant"); AddNoInterest("just_ate"); AddNoInterest("laughing"); AddNoInterest("on_guard"); AddNoInterest("recovery_combat_action"); AddNoInterest("recovery_plot"); AddNoInterest("recovery_social"); AddNoInterest("recovery_spell"); AddNoInterest("shield"); AddNoInterest("singing"); AddNoInterest("sleeping"); 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) { Entries[id] = new StatusInterestEntry { Id = id, EventStrength = strength, Category = category, CreatesInterest = createsInterest, ExtendsGrief = extendsGrief }; } private static void AddNoInterest(string id) { Add(id, 20f, "StatusAmbient", false); } 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 }; } }