using System; using System.Collections.Generic; namespace Archipelago.HollowKnight { public static class DeathLinkMessages { public static readonly List DefaultMessages = new() { "@ died.", "@ has perished.", "@ made poor life choices.", "@ didn't listen to Hornet's advice.", "@ took damage equal to or more than their current HP.", "@ made a fatal mistake.", "@ threw some shade at @.", "@ decided to set up a Shade Skip.", // A System of Vibrant Colors (edited) "Hopefully @ didn't have a fragile charm equipped.", // Koatlus "A true servant gives all for the Kingdom. Let @ relieve you of your life.", // Koatlus "Through @'s sacrifice, you are now dead.", // Koatlus "The truce remains. Our vigil holds. @ must respawn.", // Koatlus "Hopefully @ didn't have a fragile charm equipped.", // Koatlus }; public static readonly List UnknownMessages = new() { "@ has died in a manner most unusual.", "@ found a way to break the game, and the game broke @ back.", "@ has lost The Game", }; public static readonly Dictionary> MessagesByType = new() { { 1, // Deaths from enemy damage new List { "@ has discovered that there are bugs in Hallownest.", "@ should have dodged.", "@ should have jumped.", "@ significantly mistimed their parry attempt.", "@ should have considered equipping Dreamshield.", "@ must have never fought that enemy before.", "@ did not make it to phase 2.", "@ dashed in the wrong direction.", // Murphmario "@ tried to talk it out.", // SnowOfAllTrades "@ made masterful use of their vulnerability frames.", } }, { 2, // Deaths from spikes new List { "@ was in the wrong place.", "@ mistimed their jump.", "@ didn't see the sharp things.", "@ didn't see that saw.", "@ fought the spikes and the spikes won.", "@ sought roses but found only thorns.", "@ was pricked to death.", // A System of Vibrant Colors "@ dashed in the wrong direction.", // Murphmario "@ found their own Path of Pain.", // Fatman "@ has strayed from the White King's roads.", // Koatlus } }, { 3, // Deaths from acid new List { "@ was in the wrong place.", "@ mistimed their jump.", "@ forgot their floaties.", "What @ thought was H2O was H2SO4.", "@ wishes they could swim.", "@ used the wrong kind of dive.", "@ got into a fight with a pool of liquid and lost.", "@ forgot how to swim", // squidy } }, { 999, // Deaths in the dream realm new List { "@ dozed off for good.", "@ was caught sleeping on the job.", "@ sought dreams but found only nightmares.", "@ got lost in Limbo.", "Good night, @.", "@ is resting in pieces.", "@ exploded into a thousand pieces of essence.", "Hey, @, you're finally awake.", } }, }; private static readonly Random random = new(); // This is only messaging, so does not need to be seeded. public static string GetDeathMessage(int cause, string player) { // Build candidate death messages. List messages; bool knownCauseOfDeath = MessagesByType.TryGetValue(cause, out messages); if (knownCauseOfDeath) { messages = new(messages); messages.AddRange(DefaultMessages); } else { messages = UnknownMessages; } // Choose one at random string message = messages[random.Next(0, messages.Count)].Replace("@", player); // If it's an unknown death, tag in some debugging info if (!knownCauseOfDeath) { ArchipelagoMod.Instance.LogWarn($"UNKNOWN cause of death {cause}"); message += $" (Type: {cause})"; } return message; } }; }