worldbox-observer-mod/IdleSpectator/Events/Catalogs/EventCatalog.Status.cs
2026-07-16 00:40:53 -05:00

151 lines
5.2 KiB
C#

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;
}
/// <summary>
/// Authored interest policy for every live status asset. Prose stays in ActivityStatusProse.
/// </summary>
public static partial class EventCatalog
{
public static class Status
{
private static readonly Dictionary<string, StatusInterestEntry> Entries =
new Dictionary<string, StatusInterestEntry>(StringComparer.OrdinalIgnoreCase);
static Status()
{
// 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", 50f, "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", 40f, "StatusTransformation", false);
Add("magnetized", 55f, "StatusTransformation", true);
Add("invincible", 40f, "StatusTransformation", false);
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", 42f, "Relationship", false);
Add("pregnant", 58f, "LifeChapter", true);
Add("pregnant_parthenogenesis", 58f, "LifeChapter", true);
Add("crying", 50f, "Grief", true, extendsGrief: true);
// Authored Ambient - never owns camera (task chip / enrichment only).
Add("festive_spirit", 28f, "StatusAmbient", false);
Add("laughing", 26f, "StatusAmbient", false);
Add("singing", 26f, "StatusAmbient", false);
Add("sleeping", 22f, "StatusAmbient", false);
Add("handsome_migrant", 30f, "StatusAmbient", false);
// 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)
{
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<string> 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
};
}
}
}