diff --git a/HellionChat/Branding/HellionForgeAscii.cs b/HellionChat/Branding/HellionForgeAscii.cs
new file mode 100644
index 0000000..da98572
--- /dev/null
+++ b/HellionChat/Branding/HellionForgeAscii.cs
@@ -0,0 +1,36 @@
+namespace HellionChat.Branding;
+
+// Lazy-loaded provenance art that ships embedded with the DLL. Two
+// variants:
+//
+// - FoxBanner: the full-size silhouette with "Hellion Forge" inside
+// the body — rendered in the first-run wizard and the Information
+// tab as a small "about the makers" anchor.
+// - FoxMini: the four-line fox-head + curly-tail that gets stitched
+// into the DI-logger bootstrap line so an xllog reader sees the
+// same signature on every plugin load.
+//
+// Both files live as embedded resources under HellionChat.Branding.* so
+// the plugin DLL is self-contained — no on-disk asset lookup that could
+// silently miss after a partial deploy.
+internal static class HellionForgeAscii
+{
+ private static string? _foxBanner;
+ private static string? _foxMini;
+
+ public static string FoxBanner => _foxBanner ??= Load("HellionChat.Branding.fox-banner.txt");
+
+ public static string FoxMini => _foxMini ??= Load("HellionChat.Branding.fox-mini.txt");
+
+ private static string Load(string resourceName)
+ {
+ using var stream = typeof(HellionForgeAscii).Assembly.GetManifestResourceStream(
+ resourceName
+ );
+ if (stream is null)
+ return string.Empty;
+
+ using var reader = new StreamReader(stream);
+ return reader.ReadToEnd();
+ }
+}
diff --git a/HellionChat/HellionChat.csproj b/HellionChat/HellionChat.csproj
index b8a1cc3..25b514a 100644
--- a/HellionChat/HellionChat.csproj
+++ b/HellionChat/HellionChat.csproj
@@ -58,6 +58,12 @@
HellionFont-OFL.txt
+
+ HellionChat.Branding.fox-banner.txt
+
+
+ HellionChat.Branding.fox-mini.txt
+
HellionChat.Themes.Builtin.example-theme.json
diff --git a/HellionChat/Resources/Branding/fox-banner.txt b/HellionChat/Resources/Branding/fox-banner.txt
new file mode 100644
index 0000000..8351a91
--- /dev/null
+++ b/HellionChat/Resources/Branding/fox-banner.txt
@@ -0,0 +1,68 @@
+ .:;+xXXX$$$$$$$$XXx+;:
+.X$+ .;+X$$$$$$$$$$$$$$$$$$$$$$$$$$$x:
+;$xx$$X+:... .....::+X$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$;.
+X$; .:+xXXX$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$X:
+$$; :++xX$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$X;
+$$x. .+$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$X.
+x$$; ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$X+;::::::;x$$$$$:
+:$$$; .+$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$X+:. .+$$$$$$$$$X+;;:
+ ;$$$+. :X$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$X;: :$$$$$$$$$$$$$$$$X;.
+ .+$$$X: ..;X$$$$$$$$$$$$$$$$$$$$$$$$$$X;.. :$$$$$$$$$$$$$$$$$$$$X:
+ ;$$$$$X+::::+X$$$$$$$$$$$$$$$$$$$$$X;. .$$$$$$$$$$$$$$$$$$$$$$$X;
+ +$$$$$$$$$$$$$$$$$$$$$$$$$$$$X+: Hellion Forge x$$$$$$$$$$$$$$$$$$$$$$$$$X:
+ .;x$$$$$$$$$$$$$$$$$$$$$x;: .X$$$$$$$$$$$$$$$$$$$$$$$$$$$+
+ .;+$$$$$$$$$$X+;:.. .X$$$$$$$$$$$$$$$$$$$$$$$$$$$$+
+ .X$$$$$$$$$$$$$$$$$$$$$$$$$$$$$;
+ .X$$$$$$$$$$$$$$$$$$$$$$$$$$$$$X
+ x$$$$$$$$$$$$$$$$$$$$$$$$$$$$$X
+ ;$$$$$$xx$$$$$$$$$$$$$$$$$$$$$x
+ .$$$$$$x+$$$$$$$$$$$$$$$$$$$$$x
+ :+X$$$$$$X;$$$$$$$$$$$$$$$$$$$$$$:
+ ;$$$$$$$$$$;$$$$$$$$$$$$$$$$$$$$$$X.
+ +$$$$$$$$$$;x$$$$$$$$$$$$$$$$$$$$$$+
+ x$$$$$$$$$$:$$$$$$$$$$$$$$$$$$$$$$X:
+ .X$$$$$$$$$.:$$$$$$$$$$$$$$$$$$$$$$;
+ :X$$X;;;;: .$$$$$$$$$$$$$$$$$$$$$$X.
+ .$$$$X .$$$$$$$$$$$$$$$$$$$$$$$:
+ .$$$$+ .X$$$$$$$$$$$$$$$$$$$$$$;
+ ;$$$$: .X$$$$$$$$$$$$$$$$$$$$$$x
+ :X$$$+ .$$$$$$$$$$$$$$$$$$$$$$$X
+ +$$$x :$$$$$$$$$$$$$$$$$$$$$$$X
+ ;$$X: $$$$$$$$$$$$$$$$$$$$$$$$X
+ x$$$$$$$$$$$$$$$$$$$$$$$$X
+ +$$$$$$$$$$$$$$$$$$$$$$$$$+
+ .+$$$$$$$$$$$$$$$$$$$$$$$$$$;
+ . ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$:
+ :X$x$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
+ .XX$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$+
+ ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$+$;
+ .. ++X$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$:+$:
+ :$$+. ;$$$$$$$$$$$$$$X$$$$$$$$$$$$$$$$$$$$$;:$$+
+ .x+X$X: X$$$$$$$$$$x::;:;$$$$$$$$$$$$$$$$$$X: ;$X.
+ :X.x$$$:.::::::;x+:X$$$$;$$$$$$$$$$$$$$$$$$: :X;
+ :x.x$$$$$$$$$$$$$$$$$;;$:$$$$$$$$$$$$$$$$$: :$+
+ :Xx$$$$$$$$$$$$$$$$$: ;X;$$$$$$$$$$$$$$$$: .+$$;
+ ;$$$$$$$$$$$$$$$$$$; .X+X$$$$$$$$$$$$$$$+ .+$+.
+ +$$$$$$$$$$$$$$$$$$$$$$$;+$$$$$$$$$$$$$$X: .+X:
+ +$$$$$$$$$$$$$$$$$$$$$$$$$+:$$$$$$$$$$$$$+.+$+.
+ ;$$$$$$$$$$$$$$$$$$$$$$$$$$$X;$$$$$$$$$$$$$$X:
+ +X: .:X$$$$$$$$x+++x$$$$$$$$;:X$$$$$$$$$$$X:
+ :x.;$;+$$$$$:. :X$$$$X :$$$$$$$$$$X:
+ ;x :X$$$; .x$$x X$$; .:+.$$$$$$$$$$x
+ xx.X$$X: X$;.:$X:.X$$$$$$$$$:
+ +$$$$X. ;$;::: .$$$$$$$$$:
+ ;$$$; :+X$$$$XX$; X$$$$$$$$:
+ ;$$X: .:x$x$$$$$X. x$$$$$$$$:
+ :X$X: :+x; :$$$$$: +$$$$$$$X:
+ :++$X+xXX;. +$$$$. +$$$$$$$+.
+ ... .X$$$X. +$$$$$$$:
+ ;$$$$; .X$$$$$$x.
+ ;$$X; :X$$$$$$;
+ ;$$$$$$x.
+ .X$$$$$$;
+ ;$$$$$$+
+ +$$$$$;
+ :X$$$$;.
+ ;$$$$+.
+ .x$$$X:
+ .+$$X;
diff --git a/HellionChat/Resources/Branding/fox-mini.txt b/HellionChat/Resources/Branding/fox-mini.txt
new file mode 100644
index 0000000..eeabd1e
--- /dev/null
+++ b/HellionChat/Resources/Branding/fox-mini.txt
@@ -0,0 +1,4 @@
+|\_/|,,_____,~~`
+(.".)~~ )`~}}
+ \o/\ /---~\\ ~}}
+ _// _// ~}
diff --git a/HellionChat/Ui/FirstRunWizard.cs b/HellionChat/Ui/FirstRunWizard.cs
index d09687d..f54b4af 100644
--- a/HellionChat/Ui/FirstRunWizard.cs
+++ b/HellionChat/Ui/FirstRunWizard.cs
@@ -2,6 +2,7 @@ using System.Numerics;
using Dalamud.Bindings.ImGui;
using Dalamud.Interface.Utility.Raii;
using Dalamud.Interface.Windowing;
+using HellionChat.Branding;
using HellionChat.Code;
using HellionChat.Privacy;
using HellionChat.Resources;
@@ -38,6 +39,11 @@ public sealed class FirstRunWizard : Window
public override void Draw()
{
+ DrawHellionForgeAnchor();
+ ImGui.Spacing();
+ ImGui.Separator();
+ ImGui.Spacing();
+
ImGui.TextWrapped(HellionStrings.Wizard_Intro);
ImGui.Spacing();
ImGui.Separator();
@@ -147,6 +153,19 @@ public sealed class FirstRunWizard : Window
}
}
+ // Collapsible because the full silhouette is taller than the wizard
+ // window — folded by default so the privacy cards stay the primary
+ // focus, expandable for whoever wants the "about the makers" anchor.
+ private void DrawHellionForgeAnchor()
+ {
+ using var tree = ImRaii.TreeNode("Hellion Forge");
+ if (!tree.Success)
+ return;
+
+ using (Plugin.Interface.UiBuilder.MonoFontHandle.Push())
+ ImGui.TextUnformatted(HellionForgeAscii.FoxBanner);
+ }
+
private void ApplyPrivacyFirst()
{
Plugin.Config.PrivacyFilterEnabled = true;
diff --git a/HellionChat/Ui/SettingsTabs/Information.cs b/HellionChat/Ui/SettingsTabs/Information.cs
index 09428d1..9a2ba87 100644
--- a/HellionChat/Ui/SettingsTabs/Information.cs
+++ b/HellionChat/Ui/SettingsTabs/Information.cs
@@ -3,6 +3,7 @@ using Dalamud.Interface;
using Dalamud.Interface.Colors;
using Dalamud.Interface.Utility;
using Dalamud.Interface.Utility.Raii;
+using HellionChat.Branding;
using HellionChat.Resources;
using HellionChat.Util;
@@ -58,6 +59,8 @@ internal sealed class Information : ISettingsTab
{
using var wrap = ImRaii.TextWrapPos(0.0f);
+ DrawHellionForgeSection();
+ ImGui.Spacing();
DrawVersionInfoSection();
ImGui.Spacing();
DrawAboutSection();
@@ -65,6 +68,20 @@ internal sealed class Information : ISettingsTab
DrawChangelogSection();
}
+ // Provenance anchor — folded by default so the tab opens to the
+ // version-info section as before. Expands to show the full Hellion
+ // Forge silhouette in monospace.
+ private void DrawHellionForgeSection()
+ {
+ using var tree = ImRaii.TreeNode("Hellion Forge");
+ if (!tree.Success)
+ return;
+
+ using (ImRaii.PushIndent(ImGui.GetStyle().IndentSpacing, false))
+ using (Plugin.Interface.UiBuilder.MonoFontHandle.Push())
+ ImGui.TextUnformatted(HellionForgeAscii.FoxBanner);
+ }
+
private void DrawVersionInfoSection()
{
using var tree = ImRaii.TreeNode(HellionStrings.Settings_Information_VersionInfo_Heading);