diff --git a/Dalamud/Game/Chat/SeStringHandling/Payload.cs b/Dalamud/Game/Chat/SeStringHandling/Payload.cs
index 519cd1e5c..2320a8dfb 100644
--- a/Dalamud/Game/Chat/SeStringHandling/Payload.cs
+++ b/Dalamud/Game/Chat/SeStringHandling/Payload.cs
@@ -8,12 +8,12 @@ using Serilog;
// TODOs:
// - refactor integer handling now that we have multiple packed types
-// - common construction/property design for subclasses
// - wrapper class(es) for handling of composite links in chat (item, map etc) and formatting operations
-// - add italics payload
// Maybes:
// - convert parsing to custom structs for each payload? would make some code prettier and easier to work with
// but also wouldn't work out as well for things that are dynamically-sized
+// - [SeString] some way to add surrounding formatting information as flags/data to text (or other?) payloads?
+// eg, if a text payload is surrounded by italics payloads, strip them out and mark the text payload as italicized
namespace Dalamud.Game.Chat.SeStringHandling
{
@@ -98,6 +98,10 @@ namespace Dalamud.Game.Chat.SeStringHandling
switch (chunkType)
{
+ case SeStringChunkType.EmphasisItalic:
+ payload = new EmphasisItalicPayload();
+ break;
+
case SeStringChunkType.Interactable:
{
var subType = (EmbeddedInfoType)reader.ReadByte();
@@ -176,6 +180,7 @@ namespace Dalamud.Game.Chat.SeStringHandling
protected enum SeStringChunkType
{
+ EmphasisItalic = 0x1A,
Interactable = 0x27,
AutoTranslateKey = 0x2E,
UIForeground = 0x48,
diff --git a/Dalamud/Game/Chat/SeStringHandling/PayloadType.cs b/Dalamud/Game/Chat/SeStringHandling/PayloadType.cs
index 92e8afa44..fe379ffd2 100644
--- a/Dalamud/Game/Chat/SeStringHandling/PayloadType.cs
+++ b/Dalamud/Game/Chat/SeStringHandling/PayloadType.cs
@@ -39,6 +39,10 @@ namespace Dalamud.Game.Chat.SeStringHandling
///
AutoTranslateText,
///
+ /// An SeString payload representing italic emphasis formatting on text.
+ ///
+ EmphasisItalic,
+ ///
/// An SeString payload representing any data we don't handle.
///
Unknown
diff --git a/Dalamud/Game/Chat/SeStringHandling/Payloads/EmphasisItalicPayload.cs b/Dalamud/Game/Chat/SeStringHandling/Payloads/EmphasisItalicPayload.cs
new file mode 100644
index 000000000..359866247
--- /dev/null
+++ b/Dalamud/Game/Chat/SeStringHandling/Payloads/EmphasisItalicPayload.cs
@@ -0,0 +1,47 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+
+namespace Dalamud.Game.Chat.SeStringHandling.Payloads
+{
+ class EmphasisItalicPayload : Payload
+ {
+ public override PayloadType Type => PayloadType.EmphasisItalic;
+
+ public bool IsEnabled { get; private set; }
+
+ internal EmphasisItalicPayload() { }
+
+ public EmphasisItalicPayload(bool enabled)
+ {
+ IsEnabled = enabled;
+ }
+
+ public override string ToString()
+ {
+ return $"{Type} - Enabled: {IsEnabled}";
+ }
+
+ protected override byte[] EncodeImpl()
+ {
+ // realistically this will always be a single byte of value 1 or 2
+ // but we'll treat it normally anyway
+ var enabledBytes = MakeInteger(IsEnabled ? (uint)1 : 0);
+
+ var chunkLen = enabledBytes.Length + 1;
+ var bytes = new List()
+ {
+ START_BYTE, (byte)SeStringChunkType.EmphasisItalic, (byte)chunkLen
+ };
+ bytes.AddRange(enabledBytes);
+ bytes.Add(END_BYTE);
+
+ return bytes.ToArray();
+ }
+
+ protected override void DecodeImpl(BinaryReader reader, long endOfStream)
+ {
+ IsEnabled = (GetInteger(reader) == 1);
+ }
+ }
+}