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

949 lines
50 KiB
C#

using System;
using System.Collections.Generic;
namespace IdleSpectator;
/// <summary>Authored policy + prose for every live happiness effect.</summary>
public static partial class EventCatalog
{
public static class Happiness
{
private static readonly Dictionary<string, HappinessCatalogEntry> Entries =
new Dictionary<string, HappinessCatalogEntry>(StringComparer.OrdinalIgnoreCase)
{
["death_family_member"] = new HappinessCatalogEntry
{
Id = "death_family_member",
EventStrength = 76f,
Presentation = HappinessPresentationTier.Signal,
Context = HappinessContextRequirement.RequiresRelatedActor,
Life = HappinessLifePolicy.ProjectToLife,
Overlap = HappinessOverlapPolicy.Independent,
RelationRole = HappinessRelationRole.DeceasedFamily,
InterestCategory = "Grief",
VariantsWithRelated = new[] { "mourns the death of family member {related}", "grieves after family member {related} dies" },
VariantsWithoutRelated = new[] { "mourns a family member's death", "grieves a family loss" },
},
["death_lover"] = new HappinessCatalogEntry
{
Id = "death_lover",
EventStrength = 88f,
Presentation = HappinessPresentationTier.Signal,
Context = HappinessContextRequirement.RequiresRelatedActor,
Life = HappinessLifePolicy.ProjectToLife,
Overlap = HappinessOverlapPolicy.Independent,
RelationRole = HappinessRelationRole.DeceasedLover,
InterestCategory = "Grief",
VariantsWithRelated = new[] { "falls into despair after their lover {related}'s death", "mourns their lover {related}" },
VariantsWithoutRelated = new[] { "mourns a lost lover", "grieves a lover's death" },
},
["death_child"] = new HappinessCatalogEntry
{
Id = "death_child",
EventStrength = 95f,
Presentation = HappinessPresentationTier.Signal,
Context = HappinessContextRequirement.RequiresRelatedActor,
Life = HappinessLifePolicy.ProjectToLife,
Overlap = HappinessOverlapPolicy.Independent,
RelationRole = HappinessRelationRole.DeceasedChild,
InterestCategory = "Grief",
VariantsWithRelated = new[] { "falls into despair after their child {related}'s death", "mourns their child {related}" },
VariantsWithoutRelated = new[] { "mourns a child's death", "grieves the loss of a child" },
},
["death_best_friend"] = new HappinessCatalogEntry
{
Id = "death_best_friend",
EventStrength = 78f,
Presentation = HappinessPresentationTier.Signal,
Context = HappinessContextRequirement.RequiresRelatedActor,
Life = HappinessLifePolicy.ProjectToLife,
Overlap = HappinessOverlapPolicy.Independent,
RelationRole = HappinessRelationRole.DeceasedBestFriend,
InterestCategory = "Grief",
VariantsWithRelated = new[] { "mourns their best friend {related}", "grieves after best friend {related} dies" },
VariantsWithoutRelated = new[] { "mourns a best friend's death", "grieves a lost best friend" },
},
["got_robbed"] = new HappinessCatalogEntry
{
Id = "got_robbed",
EventStrength = 50f,
Presentation = HappinessPresentationTier.Signal,
Context = HappinessContextRequirement.RelatedOptional,
Life = HappinessLifePolicy.ActivityOnly,
Overlap = HappinessOverlapPolicy.Independent,
RelationRole = HappinessRelationRole.Robber,
InterestCategory = "Social",
VariantsWithRelated = new[] { "is robbed by {related}", "loses belongings to {related}" },
VariantsWithoutRelated = new[] { "is robbed", "gets robbed" },
},
["got_poked"] = new HappinessCatalogEntry
{
Id = "got_poked",
EventStrength = 30f,
Presentation = HappinessPresentationTier.Ambient,
Context = HappinessContextRequirement.None,
Life = HappinessLifePolicy.ActivityOnly,
Overlap = HappinessOverlapPolicy.Independent,
RelationRole = HappinessRelationRole.None,
InterestCategory = "Emotion",
VariantsWithRelated = new[] { "gets poked by the gods", "is poked" },
VariantsWithoutRelated = new[] { "gets poked by the gods", "is poked" },
},
["lost_fight"] = new HappinessCatalogEntry
{
Id = "lost_fight",
EventStrength = 55f,
Presentation = HappinessPresentationTier.Signal,
Context = HappinessContextRequirement.None,
Life = HappinessLifePolicy.ActivityOnly,
Overlap = HappinessOverlapPolicy.Independent,
RelationRole = HappinessRelationRole.None,
InterestCategory = "Emotion",
VariantsWithRelated = new[] { "loses a fight", "is beaten in a fight" },
VariantsWithoutRelated = new[] { "loses a fight", "is beaten in a fight" },
},
["got_caught"] = new HappinessCatalogEntry
{
Id = "got_caught",
EventStrength = 48f,
Presentation = HappinessPresentationTier.Signal,
Context = HappinessContextRequirement.None,
Life = HappinessLifePolicy.ActivityOnly,
Overlap = HappinessOverlapPolicy.Independent,
RelationRole = HappinessRelationRole.None,
InterestCategory = "Emotion",
VariantsWithRelated = new[] { "is caught doing something shady", "gets caught" },
VariantsWithoutRelated = new[] { "is caught doing something shady", "gets caught" },
},
["paid_tax"] = new HappinessCatalogEntry
{
Id = "paid_tax",
EventStrength = 30f,
Presentation = HappinessPresentationTier.Ambient,
Context = HappinessContextRequirement.None,
Life = HappinessLifePolicy.ActivityOnly,
Overlap = HappinessOverlapPolicy.Independent,
RelationRole = HappinessRelationRole.None,
InterestCategory = "Daily",
VariantsWithRelated = new[] { "pays taxes", "grumbles while paying taxes" },
VariantsWithoutRelated = new[] { "pays taxes", "grumbles while paying taxes" },
},
["just_ate"] = new HappinessCatalogEntry
{
Id = "just_ate",
EventStrength = 30f,
Presentation = HappinessPresentationTier.Ambient,
Context = HappinessContextRequirement.None,
Life = HappinessLifePolicy.ActivityOnly,
Overlap = HappinessOverlapPolicy.Continuation,
RelationRole = HappinessRelationRole.None,
InterestCategory = "Daily",
StatusOverlapId = "just_ate",
VariantsWithRelated = new[] { "finishes a meal", "eats and feels better" },
VariantsWithoutRelated = new[] { "finishes a meal", "eats and feels better" },
},
["just_received_gift"] = new HappinessCatalogEntry
{
Id = "just_received_gift",
EventStrength = 50f,
Presentation = HappinessPresentationTier.Signal,
Context = HappinessContextRequirement.RelatedOptional,
Life = HappinessLifePolicy.ActivityOnly,
Overlap = HappinessOverlapPolicy.Independent,
RelationRole = HappinessRelationRole.GiftPartner,
InterestCategory = "Social",
VariantsWithRelated = new[] { "receives a gift from {related}", "is given a gift by {related}" },
VariantsWithoutRelated = new[] { "receives a gift", "is given a gift" },
},
["just_gave_gift"] = new HappinessCatalogEntry
{
Id = "just_gave_gift",
EventStrength = 50f,
Presentation = HappinessPresentationTier.Signal,
Context = HappinessContextRequirement.RelatedOptional,
Life = HappinessLifePolicy.ActivityOnly,
Overlap = HappinessOverlapPolicy.Independent,
RelationRole = HappinessRelationRole.GiftPartner,
InterestCategory = "Social",
VariantsWithRelated = new[] { "gives {related} a gift", "offers a gift to {related}" },
VariantsWithoutRelated = new[] { "gives a gift", "offers a gift" },
},
["just_pooped"] = new HappinessCatalogEntry
{
Id = "just_pooped",
EventStrength = 30f,
Presentation = HappinessPresentationTier.Ambient,
Context = HappinessContextRequirement.None,
Life = HappinessLifePolicy.ActivityOnly,
Overlap = HappinessOverlapPolicy.Independent,
RelationRole = HappinessRelationRole.None,
InterestCategory = "Daily",
VariantsWithRelated = new[] { "finds relief", "finishes relieving themselves" },
VariantsWithoutRelated = new[] { "finds relief", "finishes relieving themselves" },
},
["just_slept"] = new HappinessCatalogEntry
{
Id = "just_slept",
EventStrength = 30f,
Presentation = HappinessPresentationTier.Ambient,
Context = HappinessContextRequirement.None,
Life = HappinessLifePolicy.ActivityOnly,
Overlap = HappinessOverlapPolicy.Independent,
RelationRole = HappinessRelationRole.None,
InterestCategory = "Daily",
VariantsWithRelated = new[] { "wakes from a restful sleep", "finishes sleeping" },
VariantsWithoutRelated = new[] { "wakes from a restful sleep", "finishes sleeping" },
},
["had_bad_dream"] = new HappinessCatalogEntry
{
Id = "had_bad_dream",
EventStrength = 30f,
Presentation = HappinessPresentationTier.Ambient,
Context = HappinessContextRequirement.None,
Life = HappinessLifePolicy.ActivityOnly,
Overlap = HappinessOverlapPolicy.Continuation,
RelationRole = HappinessRelationRole.None,
InterestCategory = "Daily",
StatusOverlapId = "had_bad_dream",
VariantsWithRelated = new[] { "wakes from a bad dream", "shakes off a bad dream" },
VariantsWithoutRelated = new[] { "wakes from a bad dream", "shakes off a bad dream" },
},
["had_good_dream"] = new HappinessCatalogEntry
{
Id = "had_good_dream",
EventStrength = 30f,
Presentation = HappinessPresentationTier.Ambient,
Context = HappinessContextRequirement.None,
Life = HappinessLifePolicy.ActivityOnly,
Overlap = HappinessOverlapPolicy.Continuation,
RelationRole = HappinessRelationRole.None,
InterestCategory = "Daily",
StatusOverlapId = "had_good_dream",
VariantsWithRelated = new[] { "wakes from a good dream", "smiles about a good dream" },
VariantsWithoutRelated = new[] { "wakes from a good dream", "smiles about a good dream" },
},
["had_nightmare"] = new HappinessCatalogEntry
{
Id = "had_nightmare",
EventStrength = 30f,
Presentation = HappinessPresentationTier.Ambient,
Context = HappinessContextRequirement.None,
Life = HappinessLifePolicy.ActivityOnly,
Overlap = HappinessOverlapPolicy.Continuation,
RelationRole = HappinessRelationRole.None,
InterestCategory = "Daily",
StatusOverlapId = "had_nightmare",
VariantsWithRelated = new[] { "wakes from a nightmare", "shakes off a nightmare" },
VariantsWithoutRelated = new[] { "wakes from a nightmare", "shakes off a nightmare" },
},
["slept_outside"] = new HappinessCatalogEntry
{
Id = "slept_outside",
EventStrength = 30f,
Presentation = HappinessPresentationTier.Ambient,
Context = HappinessContextRequirement.None,
Life = HappinessLifePolicy.ActivityOnly,
Overlap = HappinessOverlapPolicy.Independent,
RelationRole = HappinessRelationRole.None,
InterestCategory = "Daily",
VariantsWithRelated = new[] { "sleeps outside and feels worse for it", "spends a rough night outside" },
VariantsWithoutRelated = new[] { "sleeps outside and feels worse for it", "spends a rough night outside" },
},
["just_kissed"] = new HappinessCatalogEntry
{
Id = "just_kissed",
EventStrength = 50f,
Presentation = HappinessPresentationTier.Signal,
Context = HappinessContextRequirement.RelatedOptional,
Life = HappinessLifePolicy.ActivityOnly,
Overlap = HappinessOverlapPolicy.Independent,
RelationRole = HappinessRelationRole.Lover,
InterestCategory = "Social",
VariantsWithRelated = new[] { "shares a kiss with {related}", "kisses {related}" },
VariantsWithoutRelated = new[] { "shares a kiss", "steals a kiss" },
},
["just_killed"] = new HappinessCatalogEntry
{
Id = "just_killed",
EventStrength = 45f,
Presentation = HappinessPresentationTier.Signal,
Context = HappinessContextRequirement.None,
Life = HappinessLifePolicy.ActivityOnly,
Overlap = HappinessOverlapPolicy.CanonicalMilestone,
RelationRole = HappinessRelationRole.Victim,
InterestCategory = "Emotion",
CanonicalMilestoneKey = "milestone_kill",
VariantsWithRelated = new[] { "kills {related} and feels a rush", "takes a life" },
VariantsWithoutRelated = new[] { "takes a life", "feels a rush after a kill" },
},
["become_king"] = new HappinessCatalogEntry
{
Id = "become_king",
EventStrength = 72f,
Presentation = HappinessPresentationTier.Signal,
Context = HappinessContextRequirement.None,
Life = HappinessLifePolicy.ProjectToLife,
Overlap = HappinessOverlapPolicy.Independent,
RelationRole = HappinessRelationRole.None,
InterestCategory = "LifeChapter",
VariantsWithRelated = new[] { "is crowned king", "takes the throne" },
VariantsWithoutRelated = new[] { "is crowned king", "takes the throne" },
},
["become_leader"] = new HappinessCatalogEntry
{
Id = "become_leader",
EventStrength = 65f,
Presentation = HappinessPresentationTier.Signal,
Context = HappinessContextRequirement.None,
Life = HappinessLifePolicy.ProjectToLife,
Overlap = HappinessOverlapPolicy.Independent,
RelationRole = HappinessRelationRole.None,
InterestCategory = "LifeChapter",
VariantsWithRelated = new[] { "becomes a leader", "rises to leadership" },
VariantsWithoutRelated = new[] { "becomes a leader", "rises to leadership" },
},
["just_won_war"] = new HappinessCatalogEntry
{
Id = "just_won_war",
EventStrength = 35f,
Presentation = HappinessPresentationTier.Aggregate,
Context = HappinessContextRequirement.None,
Life = HappinessLifePolicy.ActivityOnly,
Overlap = HappinessOverlapPolicy.Independent,
RelationRole = HappinessRelationRole.None,
InterestCategory = "Civic",
VariantsWithRelated = new[] { "rejoices at a won war", "celebrates victory in war" },
VariantsWithoutRelated = new[] { "rejoices at a won war", "celebrates victory in war" },
},
["just_made_peace"] = new HappinessCatalogEntry
{
Id = "just_made_peace",
EventStrength = 35f,
Presentation = HappinessPresentationTier.Aggregate,
Context = HappinessContextRequirement.None,
Life = HappinessLifePolicy.ActivityOnly,
Overlap = HappinessOverlapPolicy.Independent,
RelationRole = HappinessRelationRole.None,
InterestCategory = "Civic",
VariantsWithRelated = new[] { "feels relief as peace is made", "welcomes peace" },
VariantsWithoutRelated = new[] { "feels relief as peace is made", "welcomes peace" },
},
["just_lost_war"] = new HappinessCatalogEntry
{
Id = "just_lost_war",
EventStrength = 35f,
Presentation = HappinessPresentationTier.Aggregate,
Context = HappinessContextRequirement.None,
Life = HappinessLifePolicy.ActivityOnly,
Overlap = HappinessOverlapPolicy.Independent,
RelationRole = HappinessRelationRole.None,
InterestCategory = "Civic",
VariantsWithRelated = new[] { "despairs after a lost war", "mourns a lost war" },
VariantsWithoutRelated = new[] { "despairs after a lost war", "mourns a lost war" },
},
["was_conquered"] = new HappinessCatalogEntry
{
Id = "was_conquered",
EventStrength = 35f,
Presentation = HappinessPresentationTier.Aggregate,
Context = HappinessContextRequirement.None,
Life = HappinessLifePolicy.ActivityOnly,
Overlap = HappinessOverlapPolicy.Independent,
RelationRole = HappinessRelationRole.None,
InterestCategory = "Civic",
VariantsWithRelated = new[] { "suffers under conquest", "is crushed by conquest" },
VariantsWithoutRelated = new[] { "suffers under conquest", "is crushed by conquest" },
},
["kingdom_fell_apart"] = new HappinessCatalogEntry
{
Id = "kingdom_fell_apart",
EventStrength = 35f,
Presentation = HappinessPresentationTier.Aggregate,
Context = HappinessContextRequirement.None,
Life = HappinessLifePolicy.ActivityOnly,
Overlap = HappinessOverlapPolicy.Independent,
RelationRole = HappinessRelationRole.None,
InterestCategory = "Civic",
VariantsWithRelated = new[] { "watches the kingdom fall apart", "despairs as the kingdom fractures" },
VariantsWithoutRelated = new[] { "watches the kingdom fall apart", "despairs as the kingdom fractures" },
},
["just_started_war"] = new HappinessCatalogEntry
{
Id = "just_started_war",
EventStrength = 80f,
Presentation = HappinessPresentationTier.Aggregate,
Context = HappinessContextRequirement.None,
Life = HappinessLifePolicy.ActivityOnly,
Overlap = HappinessOverlapPolicy.Independent,
RelationRole = HappinessRelationRole.None,
InterestCategory = "Civic",
VariantsWithRelated = new[] { "cheers as war begins", "is stirred by the start of war" },
VariantsWithoutRelated = new[] { "cheers as war begins", "is stirred by the start of war" },
},
["just_rebelled"] = new HappinessCatalogEntry
{
Id = "just_rebelled",
EventStrength = 35f,
Presentation = HappinessPresentationTier.Aggregate,
Context = HappinessContextRequirement.None,
Life = HappinessLifePolicy.ActivityOnly,
Overlap = HappinessOverlapPolicy.Independent,
RelationRole = HappinessRelationRole.None,
InterestCategory = "Civic",
VariantsWithRelated = new[] { "joins a rebellion", "rises in rebellion" },
VariantsWithoutRelated = new[] { "joins a rebellion", "rises in rebellion" },
},
["fallen_in_love"] = new HappinessCatalogEntry
{
Id = "fallen_in_love",
EventStrength = 50f,
Presentation = HappinessPresentationTier.Signal,
Context = HappinessContextRequirement.RelatedOptional,
Life = HappinessLifePolicy.ActivityOnly,
Overlap = HappinessOverlapPolicy.CanonicalMilestone,
RelationRole = HappinessRelationRole.Lover,
InterestCategory = "Social",
CanonicalMilestoneKey = "milestone_lover",
StatusOverlapId = "fell_in_love",
VariantsWithRelated = new[] { "falls in love with {related}", "is smitten with {related}" },
VariantsWithoutRelated = new[] { "falls in love", "is smitten" },
},
["just_had_child"] = new HappinessCatalogEntry
{
Id = "just_had_child",
EventStrength = 70f,
Presentation = HappinessPresentationTier.Signal,
Context = HappinessContextRequirement.RelatedOptional,
Life = HappinessLifePolicy.ProjectToLife,
Overlap = HappinessOverlapPolicy.Independent,
RelationRole = HappinessRelationRole.Newborn,
InterestCategory = "LifeChapter",
VariantsWithRelated = new[] { "welcomes newborn {related}", "has a child named {related}" },
VariantsWithoutRelated = new[] { "welcomes a newborn child", "has a child" },
},
["just_read_book"] = new HappinessCatalogEntry
{
Id = "just_read_book",
EventStrength = 30f,
Presentation = HappinessPresentationTier.Ambient,
Context = HappinessContextRequirement.None,
Life = HappinessLifePolicy.ActivityOnly,
Overlap = HappinessOverlapPolicy.Independent,
RelationRole = HappinessRelationRole.None,
InterestCategory = "Daily",
VariantsWithRelated = new[] { "finishes reading a book", "puts down a book feeling wiser" },
VariantsWithoutRelated = new[] { "finishes reading a book", "puts down a book feeling wiser" },
},
["just_played"] = new HappinessCatalogEntry
{
Id = "just_played",
EventStrength = 30f,
Presentation = HappinessPresentationTier.Ambient,
Context = HappinessContextRequirement.None,
Life = HappinessLifePolicy.ActivityOnly,
Overlap = HappinessOverlapPolicy.Independent,
RelationRole = HappinessRelationRole.None,
InterestCategory = "Daily",
VariantsWithRelated = new[] { "finishes playing", "has fun playing" },
VariantsWithoutRelated = new[] { "finishes playing", "has fun playing" },
},
["just_talked"] = new HappinessCatalogEntry
{
Id = "just_talked",
EventStrength = 30f,
Presentation = HappinessPresentationTier.Ambient,
Context = HappinessContextRequirement.RelatedOptional,
Life = HappinessLifePolicy.ActivityOnly,
Overlap = HappinessOverlapPolicy.Independent,
RelationRole = HappinessRelationRole.ConversationPartner,
InterestCategory = "Social",
VariantsWithRelated = new[] { "shares a talk with {related}", "finishes a conversation with {related}" },
VariantsWithoutRelated = new[] { "shares a quiet talk", "finishes a conversation" },
},
["just_laughed"] = new HappinessCatalogEntry
{
Id = "just_laughed",
EventStrength = 30f,
Presentation = HappinessPresentationTier.Ambient,
Context = HappinessContextRequirement.None,
Life = HappinessLifePolicy.ActivityOnly,
Overlap = HappinessOverlapPolicy.Continuation,
RelationRole = HappinessRelationRole.None,
InterestCategory = "Daily",
StatusOverlapId = "laughing",
VariantsWithRelated = new[] { "bursts out laughing", "shares a laugh" },
VariantsWithoutRelated = new[] { "bursts out laughing", "shares a laugh" },
},
["just_sang"] = new HappinessCatalogEntry
{
Id = "just_sang",
EventStrength = 30f,
Presentation = HappinessPresentationTier.Ambient,
Context = HappinessContextRequirement.None,
Life = HappinessLifePolicy.ActivityOnly,
Overlap = HappinessOverlapPolicy.Continuation,
RelationRole = HappinessRelationRole.None,
InterestCategory = "Daily",
StatusOverlapId = "singing",
VariantsWithRelated = new[] { "finishes singing", "sings with feeling" },
VariantsWithoutRelated = new[] { "finishes singing", "sings with feeling" },
},
["just_swore"] = new HappinessCatalogEntry
{
Id = "just_swore",
EventStrength = 30f,
Presentation = HappinessPresentationTier.Ambient,
Context = HappinessContextRequirement.None,
Life = HappinessLifePolicy.ActivityOnly,
Overlap = HappinessOverlapPolicy.Continuation,
RelationRole = HappinessRelationRole.None,
InterestCategory = "Daily",
StatusOverlapId = "swearing",
VariantsWithRelated = new[] { "lets out a curse", "swears loudly" },
VariantsWithoutRelated = new[] { "lets out a curse", "swears loudly" },
},
["just_cried"] = new HappinessCatalogEntry
{
Id = "just_cried",
EventStrength = 30f,
Presentation = HappinessPresentationTier.Signal,
Context = HappinessContextRequirement.None,
Life = HappinessLifePolicy.ActivityOnly,
Overlap = HappinessOverlapPolicy.Continuation,
RelationRole = HappinessRelationRole.None,
InterestCategory = "Daily",
StatusOverlapId = "crying",
VariantsWithRelated = new[] { "finishes crying", "cries it out" },
VariantsWithoutRelated = new[] { "finishes crying", "cries it out" },
},
["just_talked_gossip"] = new HappinessCatalogEntry
{
Id = "just_talked_gossip",
EventStrength = 30f,
Presentation = HappinessPresentationTier.Ambient,
Context = HappinessContextRequirement.RelatedOptional,
Life = HappinessLifePolicy.ActivityOnly,
Overlap = HappinessOverlapPolicy.Independent,
RelationRole = HappinessRelationRole.ConversationPartner,
InterestCategory = "Social",
VariantsWithRelated = new[] { "trades gossip with {related}", "shares juicy gossip with {related}" },
VariantsWithoutRelated = new[] { "trades gossip", "shares juicy gossip" },
},
["just_surprised"] = new HappinessCatalogEntry
{
Id = "just_surprised",
EventStrength = 30f,
Presentation = HappinessPresentationTier.Ambient,
Context = HappinessContextRequirement.None,
Life = HappinessLifePolicy.ActivityOnly,
Overlap = HappinessOverlapPolicy.Continuation,
RelationRole = HappinessRelationRole.None,
InterestCategory = "Emotion",
StatusOverlapId = "surprised",
VariantsWithRelated = new[] { "is startled", "jumps in surprise" },
VariantsWithoutRelated = new[] { "is startled", "jumps in surprise" },
},
["just_born"] = new HappinessCatalogEntry
{
Id = "just_born",
EventStrength = 70f,
Presentation = HappinessPresentationTier.Signal,
Context = HappinessContextRequirement.None,
Life = HappinessLifePolicy.ProjectToLife,
Overlap = HappinessOverlapPolicy.Independent,
RelationRole = HappinessRelationRole.None,
InterestCategory = "LifeChapter",
VariantsWithRelated = new[] { "is born into the world", "takes a first breath" },
VariantsWithoutRelated = new[] { "is born into the world", "takes a first breath" },
},
["just_magnetised"] = new HappinessCatalogEntry
{
Id = "just_magnetised",
EventStrength = 45f,
Presentation = HappinessPresentationTier.Signal,
Context = HappinessContextRequirement.None,
Life = HappinessLifePolicy.ActivityOnly,
Overlap = HappinessOverlapPolicy.Continuation,
RelationRole = HappinessRelationRole.None,
InterestCategory = "Emotion",
StatusOverlapId = "magnetized",
VariantsWithRelated = new[] { "is magnetized", "feels a magnetic pull" },
VariantsWithoutRelated = new[] { "is magnetized", "feels a magnetic pull" },
},
["just_forced_power"] = new HappinessCatalogEntry
{
Id = "just_forced_power",
EventStrength = 45f,
Presentation = HappinessPresentationTier.Signal,
Context = HappinessContextRequirement.None,
Life = HappinessLifePolicy.ActivityOnly,
Overlap = HappinessOverlapPolicy.Independent,
RelationRole = HappinessRelationRole.None,
InterestCategory = "Emotion",
VariantsWithRelated = new[] { "is forced by divine power", "suffers a forced power" },
VariantsWithoutRelated = new[] { "is forced by divine power", "suffers a forced power" },
},
["just_possessed"] = new HappinessCatalogEntry
{
Id = "just_possessed",
EventStrength = 45f,
Presentation = HappinessPresentationTier.Signal,
Context = HappinessContextRequirement.None,
Life = HappinessLifePolicy.ActivityOnly,
Overlap = HappinessOverlapPolicy.Continuation,
RelationRole = HappinessRelationRole.None,
InterestCategory = "Emotion",
StatusOverlapId = "possessed",
VariantsWithRelated = new[] { "is possessed", "falls under possession" },
VariantsWithoutRelated = new[] { "is possessed", "falls under possession" },
},
["strange_urge"] = new HappinessCatalogEntry
{
Id = "strange_urge",
EventStrength = 45f,
Presentation = HappinessPresentationTier.Signal,
Context = HappinessContextRequirement.None,
Life = HappinessLifePolicy.ActivityOnly,
Overlap = HappinessOverlapPolicy.Continuation,
RelationRole = HappinessRelationRole.None,
InterestCategory = "Emotion",
StatusOverlapId = "strange_urge",
VariantsWithRelated = new[] { "feels a strange urge", "is gripped by a strange urge" },
VariantsWithoutRelated = new[] { "feels a strange urge", "is gripped by a strange urge" },
},
["just_had_tantrum"] = new HappinessCatalogEntry
{
Id = "just_had_tantrum",
EventStrength = 45f,
Presentation = HappinessPresentationTier.Signal,
Context = HappinessContextRequirement.None,
Life = HappinessLifePolicy.ActivityOnly,
Overlap = HappinessOverlapPolicy.Continuation,
RelationRole = HappinessRelationRole.None,
InterestCategory = "Emotion",
StatusOverlapId = "tantrum",
VariantsWithRelated = new[] { "finishes a tantrum", "calms after a tantrum" },
VariantsWithoutRelated = new[] { "finishes a tantrum", "calms after a tantrum" },
},
["just_felt_the_divine"] = new HappinessCatalogEntry
{
Id = "just_felt_the_divine",
EventStrength = 45f,
Presentation = HappinessPresentationTier.Signal,
Context = HappinessContextRequirement.None,
Life = HappinessLifePolicy.ActivityOnly,
Overlap = HappinessOverlapPolicy.Independent,
RelationRole = HappinessRelationRole.None,
InterestCategory = "Emotion",
VariantsWithRelated = new[] { "feels the divine touch", "is touched by the divine" },
VariantsWithoutRelated = new[] { "feels the divine touch", "is touched by the divine" },
},
["just_enchanted"] = new HappinessCatalogEntry
{
Id = "just_enchanted",
EventStrength = 45f,
Presentation = HappinessPresentationTier.Signal,
Context = HappinessContextRequirement.None,
Life = HappinessLifePolicy.ActivityOnly,
Overlap = HappinessOverlapPolicy.Continuation,
RelationRole = HappinessRelationRole.None,
InterestCategory = "Emotion",
StatusOverlapId = "enchanted",
VariantsWithRelated = new[] { "is enchanted", "feels an enchantment take hold" },
VariantsWithoutRelated = new[] { "is enchanted", "feels an enchantment take hold" },
},
["just_inspired"] = new HappinessCatalogEntry
{
Id = "just_inspired",
EventStrength = 45f,
Presentation = HappinessPresentationTier.Signal,
Context = HappinessContextRequirement.None,
Life = HappinessLifePolicy.ActivityOnly,
Overlap = HappinessOverlapPolicy.Continuation,
RelationRole = HappinessRelationRole.None,
InterestCategory = "Emotion",
StatusOverlapId = "inspired",
VariantsWithRelated = new[] { "feels inspired", "is struck by inspiration" },
VariantsWithoutRelated = new[] { "feels inspired", "is struck by inspiration" },
},
["wrote_book"] = new HappinessCatalogEntry
{
Id = "wrote_book",
EventStrength = 65f,
Presentation = HappinessPresentationTier.Signal,
Context = HappinessContextRequirement.None,
Life = HappinessLifePolicy.ProjectToLife,
Overlap = HappinessOverlapPolicy.Independent,
RelationRole = HappinessRelationRole.None,
InterestCategory = "LifeChapter",
VariantsWithRelated = new[] { "writes a book", "finishes writing a book" },
VariantsWithoutRelated = new[] { "writes a book", "finishes writing a book" },
},
["just_became_adult"] = new HappinessCatalogEntry
{
Id = "just_became_adult",
EventStrength = 65f,
Presentation = HappinessPresentationTier.Signal,
Context = HappinessContextRequirement.None,
Life = HappinessLifePolicy.ProjectToLife,
Overlap = HappinessOverlapPolicy.Independent,
RelationRole = HappinessRelationRole.None,
InterestCategory = "LifeChapter",
VariantsWithRelated = new[] { "comes of age", "becomes an adult" },
VariantsWithoutRelated = new[] { "comes of age", "becomes an adult" },
},
["just_got_out_of_egg"] = new HappinessCatalogEntry
{
Id = "just_got_out_of_egg",
EventStrength = 65f,
Presentation = HappinessPresentationTier.Signal,
Context = HappinessContextRequirement.None,
Life = HappinessLifePolicy.ProjectToLife,
Overlap = HappinessOverlapPolicy.Independent,
RelationRole = HappinessRelationRole.None,
InterestCategory = "LifeChapter",
VariantsWithRelated = new[] { "hatches from an egg", "breaks free of an egg" },
VariantsWithoutRelated = new[] { "hatches from an egg", "breaks free of an egg" },
},
["just_finished_plot"] = new HappinessCatalogEntry
{
Id = "just_finished_plot",
EventStrength = 65f,
Presentation = HappinessPresentationTier.Signal,
Context = HappinessContextRequirement.None,
Life = HappinessLifePolicy.ProjectToLife,
Overlap = HappinessOverlapPolicy.Independent,
RelationRole = HappinessRelationRole.None,
InterestCategory = "LifeChapter",
VariantsWithRelated = new[] { "completes a plot", "finishes a long plot" },
VariantsWithoutRelated = new[] { "completes a plot", "finishes a long plot" },
},
["just_found_house"] = new HappinessCatalogEntry
{
Id = "just_found_house",
EventStrength = 55f,
Presentation = HappinessPresentationTier.Signal,
Context = HappinessContextRequirement.None,
Life = HappinessLifePolicy.ProjectToLife,
Overlap = HappinessOverlapPolicy.Independent,
RelationRole = HappinessRelationRole.None,
InterestCategory = "LifeChapter",
VariantsWithRelated = new[] { "finds a home", "settles into a house" },
VariantsWithoutRelated = new[] { "finds a home", "settles into a house" },
},
["just_lost_house"] = new HappinessCatalogEntry
{
Id = "just_lost_house",
EventStrength = 65f,
Presentation = HappinessPresentationTier.Signal,
Context = HappinessContextRequirement.None,
Life = HappinessLifePolicy.ProjectToLife,
Overlap = HappinessOverlapPolicy.Independent,
RelationRole = HappinessRelationRole.None,
InterestCategory = "LifeChapter",
VariantsWithRelated = new[] { "loses a home", "is left homeless" },
VariantsWithoutRelated = new[] { "loses a home", "is left homeless" },
},
["just_made_friend"] = new HappinessCatalogEntry
{
Id = "just_made_friend",
EventStrength = 50f,
Presentation = HappinessPresentationTier.Signal,
Context = HappinessContextRequirement.RelatedOptional,
Life = HappinessLifePolicy.ActivityOnly,
Overlap = HappinessOverlapPolicy.CanonicalMilestone,
RelationRole = HappinessRelationRole.BestFriend,
InterestCategory = "Social",
CanonicalMilestoneKey = "milestone_friend",
VariantsWithRelated = new[] { "befriends {related}", "makes a best friend of {related}" },
VariantsWithoutRelated = new[] { "makes a best friend", "finds a best friend" },
},
["just_injured"] = new HappinessCatalogEntry
{
Id = "just_injured",
EventStrength = 65f,
Presentation = HappinessPresentationTier.Signal,
Context = HappinessContextRequirement.None,
Life = HappinessLifePolicy.ProjectToLife,
Overlap = HappinessOverlapPolicy.Independent,
RelationRole = HappinessRelationRole.None,
InterestCategory = "LifeChapter",
VariantsWithRelated = new[] { "suffers a lasting injury", "is crippled by injury" },
VariantsWithoutRelated = new[] { "suffers a lasting injury", "is crippled by injury" },
},
["just_cursed"] = new HappinessCatalogEntry
{
Id = "just_cursed",
EventStrength = 45f,
Presentation = HappinessPresentationTier.Signal,
Context = HappinessContextRequirement.None,
Life = HappinessLifePolicy.ActivityOnly,
Overlap = HappinessOverlapPolicy.Continuation,
RelationRole = HappinessRelationRole.None,
InterestCategory = "Emotion",
StatusOverlapId = "cursed",
VariantsWithRelated = new[] { "is cursed", "falls under a curse" },
VariantsWithoutRelated = new[] { "is cursed", "falls under a curse" },
},
["starving"] = new HappinessCatalogEntry
{
Id = "starving",
EventStrength = 30f,
Presentation = HappinessPresentationTier.Ambient,
Context = HappinessContextRequirement.None,
Life = HappinessLifePolicy.ActivityOnly,
Overlap = HappinessOverlapPolicy.Continuation,
RelationRole = HappinessRelationRole.None,
InterestCategory = "Daily",
StatusOverlapId = "starving",
VariantsWithRelated = new[] { "is starving", "goes hungry" },
VariantsWithoutRelated = new[] { "is starving", "goes hungry" },
},
["conquered_city"] = new HappinessCatalogEntry
{
Id = "conquered_city",
EventStrength = 75f,
Presentation = HappinessPresentationTier.Aggregate,
Context = HappinessContextRequirement.None,
Life = HappinessLifePolicy.ActivityOnly,
Overlap = HappinessOverlapPolicy.Independent,
RelationRole = HappinessRelationRole.None,
InterestCategory = "Civic",
VariantsWithRelated = new[] { "celebrates a conquered city", "rejoices at a city conquered" },
VariantsWithoutRelated = new[] { "celebrates a conquered city", "rejoices at a city conquered" },
},
["destroyed_city"] = new HappinessCatalogEntry
{
Id = "destroyed_city",
EventStrength = 35f,
Presentation = HappinessPresentationTier.Aggregate,
Context = HappinessContextRequirement.None,
Life = HappinessLifePolicy.ActivityOnly,
Overlap = HappinessOverlapPolicy.Independent,
RelationRole = HappinessRelationRole.None,
InterestCategory = "Civic",
VariantsWithRelated = new[] { "celebrates a destroyed city", "cheers a city's destruction" },
VariantsWithoutRelated = new[] { "celebrates a destroyed city", "cheers a city's destruction" },
},
["lost_crown"] = new HappinessCatalogEntry
{
Id = "lost_crown",
EventStrength = 65f,
Presentation = HappinessPresentationTier.Signal,
Context = HappinessContextRequirement.None,
Life = HappinessLifePolicy.ProjectToLife,
Overlap = HappinessOverlapPolicy.Independent,
RelationRole = HappinessRelationRole.None,
InterestCategory = "LifeChapter",
VariantsWithRelated = new[] { "loses the crown", "is stripped of the crown" },
VariantsWithoutRelated = new[] { "loses the crown", "is stripped of the crown" },
},
["razed_capital"] = new HappinessCatalogEntry
{
Id = "razed_capital",
EventStrength = 35f,
Presentation = HappinessPresentationTier.Aggregate,
Context = HappinessContextRequirement.None,
Life = HappinessLifePolicy.ActivityOnly,
Overlap = HappinessOverlapPolicy.Independent,
RelationRole = HappinessRelationRole.None,
InterestCategory = "Civic",
VariantsWithRelated = new[] { "despairs as the capital is razed", "mourns a razed capital" },
VariantsWithoutRelated = new[] { "despairs as the capital is razed", "mourns a razed capital" },
},
["lost_capital"] = new HappinessCatalogEntry
{
Id = "lost_capital",
EventStrength = 35f,
Presentation = HappinessPresentationTier.Aggregate,
Context = HappinessContextRequirement.None,
Life = HappinessLifePolicy.ActivityOnly,
Overlap = HappinessOverlapPolicy.Independent,
RelationRole = HappinessRelationRole.None,
InterestCategory = "Civic",
VariantsWithRelated = new[] { "despairs at the lost capital", "mourns the lost capital" },
VariantsWithoutRelated = new[] { "despairs at the lost capital", "mourns the lost capital" },
},
["razed_city"] = new HappinessCatalogEntry
{
Id = "razed_city",
EventStrength = 35f,
Presentation = HappinessPresentationTier.Aggregate,
Context = HappinessContextRequirement.None,
Life = HappinessLifePolicy.ActivityOnly,
Overlap = HappinessOverlapPolicy.Independent,
RelationRole = HappinessRelationRole.None,
InterestCategory = "Civic",
VariantsWithRelated = new[] { "despairs as a city is razed", "mourns a razed city" },
VariantsWithoutRelated = new[] { "despairs as a city is razed", "mourns a razed city" },
},
["lost_city"] = new HappinessCatalogEntry
{
Id = "lost_city",
EventStrength = 72f,
Presentation = HappinessPresentationTier.Aggregate,
Context = HappinessContextRequirement.None,
Life = HappinessLifePolicy.ActivityOnly,
Overlap = HappinessOverlapPolicy.Independent,
RelationRole = HappinessRelationRole.None,
InterestCategory = "Civic",
VariantsWithRelated = new[] { "despairs at a lost city", "mourns a lost city" },
VariantsWithoutRelated = new[] { "despairs at a lost city", "mourns a lost city" },
},
["become_alpha"] = new HappinessCatalogEntry
{
Id = "become_alpha",
EventStrength = 65f,
Presentation = HappinessPresentationTier.Signal,
Context = HappinessContextRequirement.None,
Life = HappinessLifePolicy.ProjectToLife,
Overlap = HappinessOverlapPolicy.Independent,
RelationRole = HappinessRelationRole.None,
InterestCategory = "LifeChapter",
VariantsWithRelated = new[] { "becomes the alpha", "rises as alpha" },
VariantsWithoutRelated = new[] { "becomes the alpha", "rises as alpha" },
},
};
public static IEnumerable<string> AuthoredIds => Entries.Keys;
public static bool HasAuthored(string effectId)
{
return !string.IsNullOrEmpty(effectId) && Entries.ContainsKey(effectId.Trim());
}
public static bool TryGet(string effectId, out HappinessCatalogEntry entry)
{
entry = null;
if (string.IsNullOrEmpty(effectId))
{
return false;
}
return Entries.TryGetValue(effectId.Trim(), out entry);
}
public static HappinessCatalogEntry GetOrFallback(string effectId)
{
if (TryGet(effectId, out HappinessCatalogEntry entry))
{
return entry;
}
string id = string.IsNullOrEmpty(effectId) ? "unknown" : effectId.Trim();
return new HappinessCatalogEntry
{
Id = id,
Presentation = HappinessPresentationTier.Signal,
Context = HappinessContextRequirement.None,
Life = HappinessLifePolicy.ActivityOnly,
Overlap = HappinessOverlapPolicy.Independent,
InterestCategory = "Unknown",
VariantsWithRelated = new[] { "feels a change in happiness" },
VariantsWithoutRelated = new[] { "feels a change in happiness" },
EventStrength = 40f,
IsFallback = true
};
}
}
}