-using System;
+#if RELEASE
+using System;
 using System.IO;
 using System.IO.Compression;
 
         }
     }
 }
+#endif
 
           },
           "TerritoryId": 961,
           "InteractionType": "Interact",
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            64
+          ],
           "$.0": "[1]",
           "$.1": "QuestVariables if done first: 17 0 0 0 0 64"
         },
           },
           "TerritoryId": 961,
           "InteractionType": "Interact",
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            32
+          ],
           "$.0": "[2]",
           "$.2": "QuestVariables if done after [1]: 33 16 0 0 0 96",
           "$.3": "QuestVariables if done after [3]: 32 17 0 0 0 160"
           },
           "TerritoryId": 961,
           "InteractionType": "Interact",
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            128
+          ],
           "$.0": 3,
           "$.1": "QuestVariables if done first: 16 1 0 0 0 128"
         }
 
     {
       "Sequence": 1,
       "Steps": [
+        {
+          "Position": {
+            "X": -588.7367,
+            "Y": 158.76302,
+            "Z": -195.30913
+          },
+          "TerritoryId": 961,
+          "InteractionType": "WalkTo"
+        },
         {
           "Position": {
             "X": -318.20203,
 
           "StopDistance": 3,
           "TerritoryId": 959,
           "InteractionType": "Say",
-          "ChatMessage": "carrot of happiness"
+          "ChatMessage": {
+            "Key": "TEXT_AKTKZE002_04241_SYSTEM_000_010"
+          }
         },
         {
           "DataId": 1041790,
           "StopDistance": 3,
           "TerritoryId": 959,
           "InteractionType": "Say",
-          "ChatMessage": "carrot of happiness",
+          "ChatMessage": {
+            "Key": "TEXT_AKTKZE002_04241_SYSTEM_000_010"
+          },
           "$.1": "QuestVariables if done after [1]: 2 0 0 0 0 192"
         },
         {
           "StopDistance": 3,
           "TerritoryId": 959,
           "InteractionType": "Say",
-          "ChatMessage": "carrot of happiness"
+          "ChatMessage": {
+            "Key": "TEXT_AKTKZE002_04241_SYSTEM_000_010"
+          }
         }
       ]
     },
 
             "Z": 4.5318604
           },
           "TerritoryId": 962,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "TargetTerritoryId": 987
         },
         {
           "DataId": 1038586,
 
             "Z": 14.81335
           },
           "TerritoryId": 987,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "TargetTerritoryId": 962
         },
         {
           "DataId": 185,
 
           "AethernetShortcut": [
             "[Old Sharlayan] The Leveilleur Estate",
             "[Old Sharlayan] The Baldesion Annex"
-          ]
+          ],
+          "TargetTerritoryId": 987
         },
         {
           "DataId": 1040291,
 
             "Z": 14.785889
           },
           "TerritoryId": 987,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "TargetTerritoryId": 962
         },
         {
           "DataId": 1038592,
 
           "InteractionType": "CutsceneSelectString",
           "DialogueChoices": [
             {
-              "ExcelSheet": "quest/043/AktKma114_04370",
               "Answer": "TEXT_AKTKMA114_04370_A2_000_088"
             },
             {
-              "ExcelSheet": "quest/043/AktKma114_04370",
               "Answer": "TEXT_AKTKMA114_04370_A3_000_098"
             },
             {
-              "ExcelSheet": "quest/043/AktKma114_04370",
               "Answer": "TEXT_AKTKMA114_04370_A5_000_107"
             }
           ]
           "InteractionType": "CutsceneSelectString",
           "DialogueChoices": [
             {
-              "ExcelSheet": "quest/043/AktKma114_04370",
               "Answer": "TEXT_AKTKMA114_04370_A6_000_149"
             },
             {
-              "ExcelSheet": "quest/043/AktKma114_04370",
               "Answer": "TEXT_AKTKMA114_04370_A7_000_158"
             },
             {
-              "ExcelSheet": "quest/043/AktKma114_04370",
               "Answer": "TEXT_AKTKMA114_04370_A8_000_164"
             }
           ]
           "InteractionType": "CutsceneSelectString",
           "DialogueChoices": [
             {
-              "ExcelSheet": "quest/043/AktKma114_04370",
               "Answer": "TEXT_AKTKMA114_04370_A9_000_200"
             },
             {
-              "ExcelSheet": "quest/043/AktKma114_04370",
               "Answer": "TEXT_AKTKMA114_04370_A10_000_209"
             },
             {
-              "ExcelSheet": "quest/043/AktKma114_04370",
               "Answer": "TEXT_AKTKMA114_04370_A11_000_218"
             }
           ]
 
           "AethernetShortcut": [
             "[Old Sharlayan] Aetheryte Plaza",
             "[Old Sharlayan] The Baldesion Annex"
-          ]
+          ],
+          "TargetTerritoryId": 987
         },
         {
           "DataId": 1038589,
 
           "AethernetShortcut": [
             "[Old Sharlayan] The Studium",
             "[Old Sharlayan] The Baldesion Annex"
-          ]
+          ],
+          "TargetTerritoryId": 987
         },
         {
           "DataId": 1038784,
 
             "Z": 4.5318604
           },
           "TerritoryId": 962,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "TargetTerritoryId": 987
         },
         {
           "DataId": 2012188,
 
             "Z": 4.55803
           },
           "TerritoryId": 962,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "TargetTerritoryId": 987
         }
       ]
     },
       "Sequence": 2,
       "Steps": [
         {
+          "Position": {
+            "X": 0,
+            "Y": 0,
+            "Z": 0
+          },
           "TerritoryId": 957,
           "AetheryteShortcut": "Thavnair - Yedlihmad",
           "InteractionType": "WalkTo",
 
           },
           "TerritoryId": 961,
           "InteractionType": "Say",
-          "ChatMessage": "I have a favor to ask"
+          "ChatMessage": {
+            "Key": "TEXT_AKTKME107_04425_SAYTODO_000_190"
+          }
         }
       ]
     },
           },
           "TerritoryId": 961,
           "InteractionType": "Say",
-          "ChatMessage": "Please, Emet-Selch"
+          "ChatMessage": {
+            "Key": "TEXT_AKTKME107_04425_SAYTODO_000_210"
+          }
         }
       ]
     },
 
           "AethernetShortcut": [
             "[Old Sharlayan] Aetheryte Plaza",
             "[Old Sharlayan] The Baldesion Annex"
-          ]
+          ],
+          "TargetTerritoryId": 987
         },
         {
           "DataId": 1040161,
 
           "AethernetShortcut": [
             "[Old Sharlayan] Aetheryte Plaza",
             "[Old Sharlayan] The Baldesion Annex"
-          ]
+          ],
+          "TargetTerritoryId": 987
         }
       ]
     },
             "Z": 14.785889
           },
           "TerritoryId": 987,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "TargetTerritoryId": 962
         },
         {
           "DataId": 1039683,
 
           },
           "TerritoryId": 156,
           "InteractionType": "Interact",
-          "DisableNavmesh": true
+          "DisableNavmesh": true,
+          "TargetTerritoryId": 351
         },
         {
           "DataId": 1041232,
             "Z": 27.5
           },
           "TerritoryId": 351,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "TargetTerritoryId": 156
         },
         {
           "DataId": 1039570,
 
           },
           "StopDistance": 5,
           "TerritoryId": 957,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            128
+          ]
         },
         {
           "DataId": 1039606,
 
             "Y": 1.2090492,
             "Z": 118.133255
           },
+          "StopDistance": 4,
           "TerritoryId": 957,
           "InteractionType": "WalkTo",
           "AetheryteShortcut": "Thavnair - Palaka's Stand",
-          "Fly": true
+          "Fly": true,
+          "SkipIf": [
+            "FlyingLocked"
+          ],
+          "Comment": "TODO Verify; there's some weird shenanigans happening with navmesh not moving to coords 'below' it"
         },
         {
           "DataId": 2012847,
             "Z": 119.43237
           },
           "TerritoryId": 957,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "Mount": false
         }
       ]
     },
 
           },
           "TerritoryId": 1089,
           "InteractionType": "Interact",
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            128
+          ],
           "$.0": "[1]",
           "$.1": "QuestVariables if done first: 1 0 0 0 0 128"
         },
           },
           "TerritoryId": 1089,
           "InteractionType": "Interact",
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            64
+          ],
           "$.0": "[2]",
           "$.1": "QuestVariables if done after [1]: 2 0 0 0 0 192"
         },
           },
           "TerritoryId": 1089,
           "InteractionType": "Interact",
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            32
+          ],
           "$.0": "[3]",
           "$.1": "QuestVariables if done after [1, 2]: 3 0 0 0 0 224"
         },
             "Z": -49.45453
           },
           "TerritoryId": 1089,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            16
+          ]
         }
       ]
     },
             "Z": 206.78001
           },
           "TerritoryId": 1089,
-          "InteractionType": "Interact"
+          "InteractionType": "WalkTo"
         }
       ]
     },
             "Y": -718.4441,
             "Z": 206.77502
           },
+          "StopDistance": 5,
           "TerritoryId": 1089,
           "InteractionType": "Interact"
         }
 
             "Y": -718.33905,
             "Z": 207.87354
           },
-          "StopDistance": 5,
+          "StopDistance": 7,
           "TerritoryId": 1089,
           "InteractionType": "Interact"
         }
 
           },
           "TerritoryId": 1089,
           "InteractionType": "Interact",
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            32
+          ],
           "$.0": "[1]",
           "$.1": "QuestVariables if done first: 1 0 0 0 0 32"
         },
           },
           "TerritoryId": 1089,
           "InteractionType": "Interact",
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            64
+          ],
           "$.0": "[2]",
           "$.1": "QuestVariables if done after [1]: 2 0 0 0 0 96"
         },
           },
           "TerritoryId": 1089,
           "InteractionType": "Interact",
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            128
+          ],
           "$.0": "[3]"
         }
       ]
 
             "Y": 1.7999947,
             "Z": -180.07172
           },
+          "StopDistance": 5,
           "TerritoryId": 963,
           "InteractionType": "Interact",
           "AethernetShortcut": [
 
             16028,
             16029
           ],
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            64
+          ],
           "$.0": "[1]",
           "$.1": "QuestVariables if done first: 16 5(enemy kill count) 0 0 0 64"
         },
           },
           "TerritoryId": 958,
           "InteractionType": "Interact",
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            32
+          ],
           "$.0": "[2]",
           "$.1": "QuestVariables if done after [1]: 33 5 0 0 0 96"
         },
           },
           "TerritoryId": 958,
           "InteractionType": "Interact",
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            16
+          ],
           "$.0": "[3]",
           "$.1": "QuestVariables if done after [1, 2]: 49 21 0 0 0 112"
         },
           "EnemySpawnType": "AfterInteraction",
           "KillEnemyDataIds": [
             16030
-          ]
+          ],
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            128
+          ],
+          "$.2": "QuestVariables if done first: 16 0 16 0 0 128"
         }
       ]
     },
 
             "Y": -173,
             "Z": 126.35986
           },
+          "StopDistance": 7,
           "TerritoryId": 1119,
           "InteractionType": "Interact"
         }
             "Y": -17.202883,
             "Z": 705.0431
           },
+          "StopDistance": 5,
           "TerritoryId": 958,
           "InteractionType": "Interact"
         }
 
             "Y": -17.44166,
             "Z": 707.3014
           },
+          "StopDistance": 5,
           "TerritoryId": 958,
           "InteractionType": "Interact"
         }
           },
           "TerritoryId": 963,
           "InteractionType": "Interact",
+          "AetheryteShortcut": "Radz-at-Han",
           "AethernetShortcut": [
             "[Radz-at-Han] Aetheryte Plaza",
             "[Radz-at-Han] Meghaduta"
             "Z": -585.1987
           },
           "TerritoryId": 957,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "Fly": true,
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            64
+          ]
         },
         {
           "DataId": 1037647,
 
             "Z": -616.14404
           },
           "TerritoryId": 957,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "Fly": true
         }
       ]
     },
             "Z": -715.44977
           },
           "TerritoryId": 957,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "Fly": true
         }
       ]
     },
     {
-      "Sequence": 3,
+      "Sequence": 4,
       "Steps": [
         {
           "TerritoryId": 1125,
             "Y": 89.42017,
             "Z": -636.86584
           },
+          "StopDistance": 5,
           "TerritoryId": 957,
-          "InteractionType": "Interact",
-          "Comment": "Unsure if this is the right data id"
+          "InteractionType": "Interact"
         }
       ]
     }
 
             "Y": 89.42017,
             "Z": -636.86584
           },
+          "StopDistance": 5,
           "TerritoryId": 957,
           "InteractionType": "Interact"
         }
           },
           "TerritoryId": 963,
           "InteractionType": "Interact",
+          "AetheryteShortcut": "Radz-at-Han",
           "AethernetShortcut": [
             "[Radz-at-Han] Aetheryte Plaza",
             "[Radz-at-Han] Meghaduta"
 
             "Y": 0.59503174,
             "Z": -141.71057
           },
+          "StopDistance": 5,
           "TerritoryId": 963,
           "InteractionType": "Interact"
         }
             "Z": -140.01839
           },
           "TerritoryId": 963,
-          "InteractionType": "UseItem"
+          "InteractionType": "UseItem",
+          "ItemId": 2003461
         }
       ]
     },
 
             "Y": 1.2359009,
             "Z": 5.9662476
           },
+          "StopDistance": 4,
           "TerritoryId": 1161,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "TargetTerritoryId": 963
         },
         {
           "DataId": 1039602,
             "Y": 4.357494,
             "Z": 0.7476196
           },
+          "StopDistance": 5,
           "TerritoryId": 962,
           "InteractionType": "Interact"
         }
     {
       "Sequence": 4,
       "Steps": [
+        {
+          "Position": {
+            "X": 6.0711417,
+            "Y": -28.723347,
+            "Z": -43.467506
+          },
+          "TerritoryId": 956,
+          "InteractionType": "WalkTo",
+          "AetheryteShortcut": "Labyrinthos - Sharlayan Hamlet",
+          "SkipIf": [
+            "FlyingUnlocked"
+          ]
+        },
         {
           "DataId": 1045407,
           "Position": {
             "Z": -125.96332
           },
           "TerritoryId": 956,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "Fly": true
         }
       ]
     },
             "Z": 54.276245
           },
           "TerritoryId": 956,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "Fly": true
         }
       ]
     },
             "Y": -16.146997,
             "Z": 236.22485
           },
+          "StopDistance": 5,
           "TerritoryId": 962,
           "InteractionType": "Interact"
         }
             "Y": -16.147,
             "Z": 235.70605
           },
+          "StopDistance": 7,
           "TerritoryId": 962,
           "InteractionType": "Interact"
         }
 
             "Y": -16.147,
             "Z": 235.70605
           },
+          "StopDistance": 7,
           "TerritoryId": 962,
           "InteractionType": "Interact"
         }
             "Y": 23.803606,
             "Z": 404.9286
           },
+          "StopDistance": 7,
           "TerritoryId": 958,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "AetheryteShortcut": "Garlemald - Camp Broken Glass"
         }
       ]
     },
             "Z": -191.48547
           },
           "TerritoryId": 958,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "AetheryteShortcut": "Garlemald - Tertium"
         }
       ]
     },
             "Z": -156.02356
           },
           "TerritoryId": 958,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            64
+          ]
         },
         {
           "DataId": 1045491,
             "Z": -178.27118
           },
           "TerritoryId": 958,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            32
+          ]
         },
         {
           "DataId": 1037774,
             "Z": -212.14618
           },
           "TerritoryId": 958,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            16
+          ]
         },
         {
           "DataId": 1045489,
             "Z": -213.18384
           },
           "TerritoryId": 958,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            128
+          ]
         },
         {
           "DataId": 1037766,
             "Z": -265.00348
           },
           "TerritoryId": 958,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "Comment": "TODO Check flags",
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            8
+          ]
         }
       ]
     },
             "Z": -637.56775
           },
           "TerritoryId": 958,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "Fly": true
         }
       ]
     }
 
             "Y": 15.5581665,
             "Z": -638.3002
           },
+          "StopDistance": 5,
           "TerritoryId": 958,
           "InteractionType": "Interact"
         }
             "Z": -620.08093
           },
           "TerritoryId": 958,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "Fly": true
         }
       ]
     },
             "Z": 67.063354
           },
           "TerritoryId": 1160,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "Comment": "TODO Check Flags",
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            64
+          ]
         },
         {
           "DataId": 1045493,
             "Z": 42.435303
           },
           "TerritoryId": 1160,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            16
+          ]
         },
         {
           "DataId": 2013350,
             "Z": 26.382812
           },
           "TerritoryId": 1160,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            128
+          ]
         },
         {
           "DataId": 1045492,
             "Z": -9.353821
           },
           "TerritoryId": 1160,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            32
+          ]
         }
       ]
     },
             "Y": 23.803606,
             "Z": 406.05774
           },
+          "StopDistance": 7,
           "TerritoryId": 958,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "AetheryteShortcut": "Garlemald - Camp Broken Glass"
         }
       ]
     },
             "Z": -202.99078
           },
           "TerritoryId": 958,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "AetheryteShortcut": "Garlemald - Tertium"
         }
       ]
     }
 
             "Y": -36.65,
             "Z": -206.74457
           },
+          "StopDistance": 7,
           "TerritoryId": 958,
           "InteractionType": "Interact"
         }
             "Y": 10.8,
             "Z": -663.8825
           },
+          "StopDistance": 1,
           "TerritoryId": 958,
           "InteractionType": "Combat",
+          "EnemySpawnType": "AutoOnEnterArea",
           "KillEnemyDataIds": [
             16332
-          ]
+          ],
+          "Fly": true
         }
       ]
     },
             "Y": 10.8,
             "Z": -659.75433
           },
+          "StopDistance": 7,
           "TerritoryId": 958,
           "InteractionType": "Interact"
         }
 
             "Y": -36.65,
             "Z": -204.97449
           },
+          "StopDistance": 5,
           "TerritoryId": 958,
           "InteractionType": "Interact"
         }
             "Z": 585.1072
           },
           "TerritoryId": 959,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "AetheryteShortcut": "Mare Lamentorum - Sinus Lacrimarum",
+          "Fly": true
         }
       ]
     },
             "Z": 407.27856
           },
           "TerritoryId": 959,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "Fly": true
         }
       ]
     },
     {
       "Sequence": 3,
       "Steps": [
+        {
+          "DataId": 2012664,
+          "Position": {
+            "X": -26.901672,
+            "Y": -130.47992,
+            "Z": -580.4685
+          },
+          "TerritoryId": 959,
+          "InteractionType": "Interact",
+          "AetheryteShortcut": "Mare Lamentorum - Bestways Burrow",
+          "SkipIf": ["FlyingUnlocked"],
+          "Comment": "Check if the flying unlocked check is good enough"
+        },
         {
           "DataId": 1039686,
           "Position": {
             "Z": -494.31604
           },
           "TerritoryId": 959,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "Fly": true
         }
       ]
     },
             "Y": -49.589592,
             "Z": -626.42865
           },
+          "StopDistance": 6,
           "TerritoryId": 959,
           "InteractionType": "Emote",
-          "Emote": "rally"
+          "Emote": "rally",
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            64
+          ]
         },
         {
           "DataId": 1045470,
             "Y": -49.589596,
             "Z": -622.3087
           },
+          "StopDistance": 6,
           "TerritoryId": 959,
           "InteractionType": "Emote",
-          "Emote": "rally"
+          "Emote": "rally",
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            128
+          ]
         },
         {
-          "DataId": 1045473,
+          "DataId": 1045472,
           "Position": {
-            "X": 152.42236,
-            "Y": -49.589592,
-            "Z": -614.8623
+            "X": 148.91272,
+            "Y": -49.589596,
+            "Z": -621.48474
           },
+          "StopDistance": 6,
           "TerritoryId": 959,
           "InteractionType": "Emote",
-          "Emote": "rally"
+          "Emote": "rally",
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            32
+          ],
+          "Comment": "TODO Check Flags"
         },
         {
-          "DataId": 1045472,
+          "DataId": 1045473,
           "Position": {
-            "X": 148.91272,
-            "Y": -49.589596,
-            "Z": -621.48474
+            "X": 152.42236,
+            "Y": -49.589592,
+            "Z": -614.8623
           },
+          "StopDistance": 6,
           "TerritoryId": 959,
           "InteractionType": "Emote",
-          "Emote": "rally"
+          "Emote": "rally",
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            16
+          ]
         }
       ]
     },
             "Y": -49.589592,
             "Z": -619.9894
           },
+          "StopDistance": 6,
           "TerritoryId": 959,
           "InteractionType": "Interact"
         }
 
   "QuestSequence": [
     {
       "Sequence": 0,
-      "DataId": 1045611,
-      "Position": {
-        "X": 160.87585,
-        "Y": -49.589592,
-        "Z": -618.46344
-      },
-      "TerritoryId": 959,
-      "InteractionType": "Interact",
-      "Comment": "Unsure if correct id"
+      "Steps": [
+        {
+          "DataId": 1045611,
+          "Position": {
+            "X": 160.87585,
+            "Y": -49.589592,
+            "Z": -618.46344
+          },
+          "TerritoryId": 959,
+          "InteractionType": "Interact"
+        }
+      ]
     },
     {
       "Sequence": 1,
             "Z": 418.69226
           },
           "TerritoryId": 959,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "AetheryteShortcut": "Mare Lamentorum - Sinus Lacrimarum",
+          "Fly": true
         }
       ]
     },
             "Z": 638.0254
           },
           "TerritoryId": 1162,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            128
+          ],
+          "Comment": "TODO Check Flags"
         },
         {
           "DataId": 2013355,
             "Z": 547.6615
           },
           "TerritoryId": 1162,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            64
+          ]
         },
         {
           "DataId": 2013356,
             "Z": 472.19043
           },
           "TerritoryId": 1162,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            32
+          ]
         }
       ]
     },
 
             "Y": 56.573345,
             "Z": 436.0265
           },
+          "StopDistance": 5,
           "TerritoryId": 1162,
           "InteractionType": "Interact"
         }
 
             "Y": 54.977272,
             "Z": 432.02856
           },
+          "StopDistance": 7,
           "TerritoryId": 959,
           "InteractionType": "Interact"
         }
     {
       "Sequence": 1,
       "Steps": [
+        {
+          "DataId": 2012664,
+          "Position": {
+            "X": -26.901672,
+            "Y": -130.47992,
+            "Z": -580.4685
+          },
+          "TerritoryId": 959,
+          "InteractionType": "Interact",
+          "AetheryteShortcut": "Mare Lamentorum - Bestways Burrow",
+          "SkipIf": ["FlyingUnlocked"]
+        },
         {
           "DataId": 1045466,
           "Position": {
             "Z": -491.99664
           },
           "TerritoryId": 959,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "Fly": true
         }
       ]
     },
           },
           "TerritoryId": 963,
           "InteractionType": "Interact",
+          "AetheryteShortcut": "Radz-at-Han",
           "AethernetShortcut": [
             "[Radz-at-Han] Aetheryte Plaza",
             "[Radz-at-Han] Meghaduta"
 
             "Y": 55,
             "Z": -68.61987
           },
+          "StopDistance": 5,
           "TerritoryId": 963,
           "InteractionType": "Interact"
         }
           },
           "TerritoryId": 819,
           "InteractionType": "Interact",
+          "AetheryteShortcut": "Crystarium",
           "AethernetShortcut": [
             "[Crystarium] Aetheryte Plaza",
             "[Crystarium] The Cabinet of Curiosity"
 
             "Z": -8.255188
           },
           "TerritoryId": 820,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "AetheryteShortcut": "Eulmore"
         }
       ]
     },
             "Z": -61.387024
           },
           "TerritoryId": 820,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            32
+          ]
         },
         {
           "DataId": 1045633,
           "AethernetShortcut": [
             "[Eulmore] Aetheryte Plaza",
             "[Eulmore] The Mainstay"
+          ],
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            64
           ]
         },
         {
           "AethernetShortcut": [
             "[Eulmore] The Mainstay",
             "[Eulmore] Nightsoil Pots"
+          ],
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            128
           ]
         }
       ]
 
             "Z": 298.20703
           },
           "TerritoryId": 817,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "AetheryteShortcut": "Rak'tika - Slitherbough"
         }
       ]
     },
           },
           "TerritoryId": 817,
           "InteractionType": "Say",
-          "ChatMessage": "allin tuta"
+          "ChatMessage": {
+            "Key": "TEXT_AKTKML103_04746_SAYTODO_000_140"
+          }
         }
       ]
     },
             "Z": -224.5976
           },
           "TerritoryId": 815,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "AetheryteShortcut": "Amh Araeng - Twine"
         }
       ]
     },
 
             "[Crystarium] Aetheryte Plaza",
             "[Crystarium] The Dossal Gate"
           ]
-        }
-      ]
-    },
-    {
-      "Sequence": 2,
-      "Steps": [
+        },
         {
           "DataId": 1033888,
           "Position": {
           },
           "TerritoryId": 844,
           "InteractionType": "Interact"
-        },
+        }
+      ]
+    },
+    {
+      "Sequence": 2,
+      "Steps": [
         {
           "DataId": 1039645,
           "Position": {
           },
           "TerritoryId": 963,
           "InteractionType": "Interact",
+          "AetheryteShortcut": "Radz-at-Han",
           "AethernetShortcut": [
             "[Radz-at-Han] Aetheryte Plaza",
             "[Radz-at-Han] Meghaduta"
             "Z": 401.26636
           },
           "TerritoryId": 959,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "AetheryteShortcut": "Mare Lamentorum - Sinus Lacrimarum",
+          "Fly": true
         }
       ]
     },
 
             "Y": 56.682667,
             "Z": 468.162
           },
+          "StopDistance": 6,
           "TerritoryId": 1162,
           "InteractionType": "Interact"
         }
 
             "Z": 4.55803
           },
           "TerritoryId": 962,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "TargetTerritoryId": 987
         },
         {
           "DataId": 2013420,
 
         <PathMap Condition="$(SolutionDir) != ''">$(SolutionDir)=X:\</PathMap>
     </PropertyGroup>
 
-    <Target Name="ZipShadowbringers" BeforeTargets="BeforeResGen">
+    <Target Name="ZipShadowbringers" BeforeTargets="BeforeResGen" Condition="'$(Configuration)' == 'Release'">
         <ZipDirectory SourceDirectory="$(ProjectDir)\Shadowbringers"
                       DestinationFile="$(TargetDir)\Shadowbringers.zip"
                       Overwrite="true"/>
     </Target>
 
-    <Target Name="ZipEndwalker" BeforeTargets="BeforeResGen">
+    <Target Name="ZipEndwalker" BeforeTargets="BeforeResGen" Condition="'$(Configuration)' == 'Release'">
         <ZipDirectory SourceDirectory="$(ProjectDir)\Endwalker"
                       DestinationFile="$(TargetDir)\Endwalker.zip"
                       Overwrite="true"/>
     </Target>
 
-    <ItemGroup>
+    <ItemGroup Condition="'$(Configuration)' == 'Release'">
         <EmbeddedResource Include="$(TargetDir)\Shadowbringers.zip"/>
         <EmbeddedResource Include="$(TargetDir)\Endwalker.zip"/>
     </ItemGroup>
 
           },
           "TerritoryId": 156,
           "InteractionType": "Interact",
-          "AetheryteShortcut": "Mor Dhona"
+          "AetheryteShortcut": "Mor Dhona",
+          "TargetTerritoryId": 351
         },
         {
           "DataId": 1031257,
 
             "Z": 27.5
           },
           "TerritoryId": 351,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "TargetTerritoryId": 156
         },
         {
           "Position": {
             "Z": -631.281
           },
           "TerritoryId": 156,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "TargetTerritoryId": 351
         },
         {
           "DataId": 1032081,
 
           },
           "TerritoryId": 156,
           "InteractionType": "Interact",
-          "AetheryteShortcut": "Mor Dhona"
+          "AetheryteShortcut": "Mor Dhona",
+          "TargetTerritoryId": 351
         },
         {
           "DataId": 1032081,
 
           },
           "TerritoryId": 156,
           "InteractionType": "Interact",
-          "AetheryteShortcut": "Mor Dhona"
+          "AetheryteShortcut": "Mor Dhona",
+          "TargetTerritoryId": 351
         },
         {
           "DataId": 1032081,
 
             "Z": 27.5
           },
           "TerritoryId": 351,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "TargetTerritoryId": 156
         },
         {
           "Position": {
 
           },
           "TerritoryId": 156,
           "InteractionType": "Interact",
-          "AetheryteShortcut": "Mor Dhona"
+          "AetheryteShortcut": "Mor Dhona",
+          "TargetTerritoryId": 351
         },
         {
           "DataId": 1035355,
 
           },
           "TerritoryId": 156,
           "InteractionType": "Interact",
-          "AetheryteShortcut": "Mor Dhona"
+          "AetheryteShortcut": "Mor Dhona",
+          "TargetTerritoryId": 351
         },
         {
           "DataId": 1032694,
 
           },
           "TerritoryId": 156,
           "InteractionType": "Interact",
-          "AetheryteShortcut": "Mor Dhona"
+          "AetheryteShortcut": "Mor Dhona",
+          "TargetTerritoryId": 351
         }
       ]
     },
 
                     "type": "string",
                     "enum": [
                       "Never",
-                      "FlyingUnlocked"
+                      "FlyingLocked",
+                      "FlyingUnlocked",
+                      "DifferentTerritory"
                     ]
                   }
                 },
                   "then": {
                     "properties": {
                       "ChatMessage": {
-                        "type": "string",
-                        "description": "The text to use with /say"
+                        "type": "object",
+                        "description": "The text to use with /say",
+                        "properties": {
+                          "ExcelSheet": {
+                            "type": "string"
+                          },
+                          "Key": {
+                            "type": "string"
+                          }
+                        },
+                        "required": [
+                          "Key"
+                        ]
                       }
                     },
                     "required": [
-                      "Position",
                       "ChatMessage"
                     ]
                   }
                             }
                           },
                           "required": [
-                            "ExcelSheet",
                             "Answer"
                           ]
                         }
 
     public void NavigateTo(EMovementType type, uint? dataId, Vector3 to, bool fly, bool sprint, float? stopDistance = null)
     {
         PrepareNavigation(type, dataId, to, fly, sprint, stopDistance);
+        _pluginLog.Information($"Pathfinding to {Destination}");
+
         _cancellationTokenSource = new();
         _cancellationTokenSource.CancelAfter(TimeSpan.FromSeconds(10));
         _pathfindTask =
     public void NavigateTo(EMovementType type, uint? dataId, List<Vector3> to, bool fly, bool sprint, float? stopDistance)
     {
         PrepareNavigation(type, dataId, to.Last(), fly, sprint, stopDistance);
+
+        _pluginLog.Information($"Moving to {Destination}");
         _navmeshIpc.MoveTo(to);
     }
 
 
 using System;
 using System.Collections.Generic;
-using System.Diagnostics;
 using System.Globalization;
 using System.IO;
-using System.Linq;
 using System.Numerics;
 using System.Text.Json;
 using Dalamud.Game.ClientState.Conditions;
 using FFXIVClientStructs.FFXIV.Client.Game;
 using FFXIVClientStructs.FFXIV.Client.UI;
 using LLib.GameUI;
-using Lumina.Excel.CustomSheets;
 using Questionable.Data;
 using Questionable.External;
 using Questionable.Model;
     public void IncreaseStepCount()
     {
         (QuestSequence? seq, QuestStep? step) = GetNextStep();
-        if (seq == null || step == null)
+        if (CurrentQuest == null || seq == null || step == null)
+        {
+            _pluginLog.Warning("Unable to retrieve next quest step, not increasing step count");
             return;
+        }
 
-        Debug.Assert(CurrentQuest != null, nameof(CurrentQuest) + " != null");
         if (CurrentQuest.Step + 1 < seq.Steps.Count)
         {
             CurrentQuest = CurrentQuest with
     public unsafe void ExecuteNextStep()
     {
         (QuestSequence? seq, QuestStep? step) = GetNextStep();
-        if (seq == null || step == null)
+        if (CurrentQuest == null || seq == null || step == null)
+        {
+            _pluginLog.Warning("Could not retrieve next quest step, not doing anything");
             return;
+        }
 
-        Debug.Assert(CurrentQuest != null, nameof(CurrentQuest) + " != null");
         if (step.Disabled)
         {
             _pluginLog.Information("Skipping step, as it is disabled");
                      (_aetheryteData.CalculateDistance(pos, territoryType, step.AethernetShortcut.From) < 20 ||
                       _aetheryteData.CalculateDistance(pos, territoryType, step.AethernetShortcut.To) < 20)))
                 {
+                    _pluginLog.Information("Skipping aetheryte teleport");
                     skipTeleport = true;
                 }
             }
 
             if (skipTeleport)
             {
+                _pluginLog.Information("Marking aetheryte shortcut as used");
                 CurrentQuest = CurrentQuest with
                 {
                     StepProgress = CurrentQuest.StepProgress with { AetheryteShortcutUsed = true }
             }
             else
             {
-                if (step.AetheryteShortcut != null)
+                if (!_gameFunctions.IsAetheryteUnlocked(step.AetheryteShortcut.Value))
                 {
-                    if (!_gameFunctions.IsAetheryteUnlocked(step.AetheryteShortcut.Value))
-                        _chatGui.Print($"[Questionable] Aetheryte {step.AetheryteShortcut.Value} is not unlocked.");
-                    else if (_gameFunctions.TeleportAetheryte(step.AetheryteShortcut.Value))
-                        CurrentQuest = CurrentQuest with
-                        {
-                            StepProgress = CurrentQuest.StepProgress with { AetheryteShortcutUsed = true }
-                        };
-                    else
-                        _chatGui.Print("[Questionable] Unable to teleport to aetheryte.");
+                    _pluginLog.Error($"Aetheryte {step.AetheryteShortcut.Value} is not unlocked.");
+                    _chatGui.Print($"[Questionable] Aetheryte {step.AetheryteShortcut.Value} is not unlocked.");
+                }
+                else if (_gameFunctions.TeleportAetheryte(step.AetheryteShortcut.Value))
+                {
+                    _pluginLog.Information("Travelling via aetheryte...");
+                    CurrentQuest = CurrentQuest with
+                    {
+                        StepProgress = CurrentQuest.StepProgress with { AetheryteShortcutUsed = true }
+                    };
                 }
                 else
-                    _chatGui.Print("[Questionable] No aetheryte for teleport set.");
+                {
+                    _pluginLog.Warning("Unable to teleport to aetheryte");
+                    _chatGui.Print("[Questionable] Unable to teleport to aetheryte.");
+                }
 
                 return;
             }
                 return;
             }
 
+            if (step.SkipIf.Contains(ESkipCondition.FlyingLocked) &&
+                !_gameFunctions.IsFlyingUnlocked(step.TerritoryId))
+            {
+                _pluginLog.Information("Skipping step, as flying is locked");
+                IncreaseStepCount();
+                return;
+            }
+
             if (step is
                 {
                     DataId: not null,
             }
         }
 
-        if (!CurrentQuest.StepProgress.AethernetShortcutUsed)
+        if (!CurrentQuest.StepProgress.AethernetShortcutUsed && step.AethernetShortcut != null)
         {
-            if (step.AethernetShortcut != null &&
-                _gameFunctions.IsAetheryteUnlocked(step.AethernetShortcut.From) &&
+            if (_gameFunctions.IsAetheryteUnlocked(step.AethernetShortcut.From) &&
                 _gameFunctions.IsAetheryteUnlocked(step.AethernetShortcut.To))
             {
                 EAetheryteLocation from = step.AethernetShortcut.From;
                 {
                     if (_aetheryteData.CalculateDistance(playerPosition, territoryType, from) < 11)
                     {
+                        _pluginLog.Information($"Using lifestream to teleport to {to}");
                         _lifestreamIpc.Teleport(to);
                         CurrentQuest = CurrentQuest with
                         {
                         };
                     }
                     else
+                    {
+                        _pluginLog.Information("Moving to aethernet shortcut");
                         _movementController.NavigateTo(EMovementType.Quest, (uint)from, _aetheryteData.Locations[from],
                             false, true,
                             AetheryteConverter.IsLargeAetheryte(from) ? 10.9f : 6.9f);
+                    }
 
                     return;
                 }
             }
+            else
+                _pluginLog.Warning($"Aethernet shortcut not unlocked (from: {step.AethernetShortcut.From}, to: {step.AethernetShortcut.To}), walking manually");
         }
 
-        if (step.TargetTerritoryId == _clientState.TerritoryType)
+        if (step.TargetTerritoryId == _clientState.TerritoryType && !step.SkipIf.Contains(ESkipCondition.Never))
         {
-            _pluginLog.Information("Zone transition, skipping movement");
+            // we assume whatever e.g. interaction, walkto etc. we have will trigger the zone transition
+            _pluginLog.Information("Zone transition, skipping rest of step");
+            IncreaseStepCount();
+            return;
         }
-        else if (step.InteractionType == EInteractionType.Jump && step.JumpDestination != null &&
-                 (_clientState.LocalPlayer!.Position - step.JumpDestination.Position).Length() <=
-                 (step.JumpDestination.StopDistance ?? 1f))
+
+        if (step.InteractionType == EInteractionType.Jump && step.JumpDestination != null &&
+            (_clientState.LocalPlayer!.Position - step.JumpDestination.Position).Length() <=
+            (step.JumpDestination.StopDistance ?? 1f))
         {
             _pluginLog.Information("We're at the jump destination, skipping movement");
         }
 
             if (step.Mount == true && !_gameFunctions.HasStatusPreventingSprintOrMount())
             {
+                _pluginLog.Information("Step explicitly wants a mount, trying to mount...");
                 if (!_condition[ConditionFlag.Mounted] && !_condition[ConditionFlag.InCombat] &&
                     _territoryData.CanUseMount(_clientState.TerritoryType))
                 {
-                    if (ActionManager.Instance()->GetActionStatus(ActionType.Mount, 71) == 0)
-                        ActionManager.Instance()->UseAction(ActionType.Mount, 71);
+                    _gameFunctions.Mount();
                     return;
                 }
             }
             else if (step.Mount == false)
             {
+                _pluginLog.Information("Step explicitly wants no mount, trying to unmount...");
                 if (_condition[ConditionFlag.Mounted])
                 {
                     _gameFunctions.Unmount();
                     !_condition[ConditionFlag.InCombat] && _territoryData.CanUseMount(_clientState.TerritoryType) &&
                     !_gameFunctions.HasStatusPreventingSprintOrMount())
                 {
-                    if (ActionManager.Instance()->GetActionStatus(ActionType.Mount, 71) == 0)
-                        ActionManager.Instance()->UseAction(ActionType.Mount, 71);
-
+                    _gameFunctions.Mount();
                     return;
                 }
 
             if (gameObject == null ||
                 (gameObject.Position - _clientState.LocalPlayer!.Position).Length() > step.StopDistance)
             {
+                _pluginLog.Warning("Object not found or too far away, no position so we can't move");
                 return;
             }
         }
 
+        _pluginLog.Information($"Running logic for {step.InteractionType}");
         switch (step.InteractionType)
         {
             case EInteractionType.Interact:
                 {
                     GameObject? gameObject = _gameFunctions.FindObjectByDataId(step.DataId.Value);
                     if (gameObject == null)
+                    {
+                        _pluginLog.Warning($"No game object with dataId {step.DataId}");
                         return;
+                    }
 
                     if (!gameObject.IsTargetable && _condition[ConditionFlag.Mounted])
                     {
                     return;
                 }
 
-                if (!string.IsNullOrEmpty(step.ChatMessage))
+                if (step.ChatMessage != null)
                 {
-                    _gameFunctions.ExecuteCommand($"/say {step.ChatMessage}");
+                    string? excelString = _gameFunctions.GetExcelString(CurrentQuest.Quest, step.ChatMessage.ExcelSheet,
+                        step.ChatMessage.Key);
+                    if (excelString == null)
+                        return;
+
+                    _gameFunctions.ExecuteCommand($"/say {excelString}");
                     IncreaseStepCount();
                 }
 
                 {
                     foreach (DialogueChoice dialogueChoice in step.DialogueChoices)
                     {
-                        var excelSheet = _dataManager.Excel.GetSheet<QuestDialogueText>(dialogueChoice.ExcelSheet);
-                        if (excelSheet == null)
-                        {
-                            _pluginLog.Error($"Unknown excel sheet '{dialogueChoice.ExcelSheet}'");
-                            continue;
-                        }
-
-                        string? excelString = excelSheet
-                            .FirstOrDefault(x => x.Key == dialogueChoice.Answer)
-                            ?.Value
-                            ?.ToString();
+                        string? excelString = _gameFunctions.GetExcelString(CurrentQuest.Quest,
+                            dialogueChoice.ExcelSheet, dialogueChoice.Answer);
                         if (excelString == null)
-                        {
-                            _pluginLog.Error(
-                                $"Could not extract '{dialogueChoice.Answer}' from sheet '{dialogueChoice.ExcelSheet}'");
                             return;
-                        }
 
                         _pluginLog.Verbose($"Looking for option '{excelString}'");
                         for (int i = 5; i < addon->AtkUnitBase.AtkValuesCount; ++i)
 
 using Dalamud.Game;
 using Dalamud.Game.ClientState.Conditions;
 using Dalamud.Game.ClientState.Objects;
-using Dalamud.Game.ClientState.Objects.Types;
 using Dalamud.Plugin.Services;
 using FFXIVClientStructs.FFXIV.Application.Network.WorkDefinitions;
 using FFXIVClientStructs.FFXIV.Client.Game;
 using FFXIVClientStructs.FFXIV.Client.System.Memory;
 using FFXIVClientStructs.FFXIV.Client.System.String;
 using FFXIVClientStructs.FFXIV.Client.UI.Agent;
+using Lumina.Excel.CustomSheets;
 using Lumina.Excel.GeneratedSheets;
 using Questionable.Controller;
 using Questionable.Model.V1;
 using BattleChara = FFXIVClientStructs.FFXIV.Client.Game.Character.BattleChara;
 using GameObject = Dalamud.Game.ClientState.Objects.Types.GameObject;
+using Quest = Questionable.Model.Quest;
 
 namespace Questionable;
 
     private readonly ReadOnlyDictionary<EEmote, string> _emoteCommands;
     private readonly ReadOnlyDictionary<uint, ushort> _contentFinderConditionToContentId;
 
+    private readonly IDataManager _dataManager;
     private readonly IObjectTable _objectTable;
     private readonly ITargetManager _targetManager;
     private readonly ICondition _condition;
     public GameFunctions(IDataManager dataManager, IObjectTable objectTable, ISigScanner sigScanner,
         ITargetManager targetManager, ICondition condition, IClientState clientState, IPluginLog pluginLog)
     {
+        _dataManager = dataManager;
         _objectTable = objectTable;
         _targetManager = targetManager;
         _condition = condition;
         if (_condition[ConditionFlag.Swimming] && !IsFlyingUnlocked(_clientState.TerritoryType))
             return true;
 
+        // company chocobo is locked
+        var playerState = PlayerState.Instance();
+        if (playerState != null && !playerState->IsMountUnlocked(1))
+            return true;
+
         var gameObject = GameObjectManager.GetGameObjectByIndex(0);
         if (gameObject != null && gameObject->ObjectKind == 1)
         {
         return false;
     }
 
+    public void Mount()
+    {
+        if (!_condition[ConditionFlag.Mounted])
+        {
+            var playerState = PlayerState.Instance();
+            if (playerState != null && playerState->IsMountUnlocked(71))
+            {
+                if (ActionManager.Instance()->GetActionStatus(ActionType.Mount, 71) == 0)
+                {
+                    _pluginLog.Information("Using SDS Fenrir as mount");
+                    ActionManager.Instance()->UseAction(ActionType.Mount, 71);
+                }
+            }
+            else
+            {
+                if (ActionManager.Instance()->GetActionStatus(ActionType.GeneralAction, 9) == 0)
+                {
+                    _pluginLog.Information("Using mount roulette");
+                    ActionManager.Instance()->UseAction(ActionType.GeneralAction, 9);
+                }
+            }
+        }
+    }
+
     public bool Unmount()
     {
         if (_condition[ConditionFlag.Mounted])
         {
             if (ActionManager.Instance()->GetActionStatus(ActionType.GeneralAction, 23) == 0)
+            {
+                _pluginLog.Information("Unmounting...");
                 ActionManager.Instance()->UseAction(ActionType.GeneralAction, 23);
+            }
+            else
+                _pluginLog.Warning("Can't unmount right now?");
 
             return true;
         }
             if (UIState.IsInstanceContentUnlocked(contentId))
                 AgentContentsFinder.Instance()->OpenRegularDuty(contentFinderConditionId);
             else
-                _pluginLog.Error($"Trying to access a locked duty (cf: {contentFinderConditionId}, content: {contentId})");
+                _pluginLog.Error(
+                    $"Trying to access a locked duty (cf: {contentFinderConditionId}, content: {contentId})");
         }
         else
             _pluginLog.Error($"Could not find content for content finder condition (cf: {contentFinderConditionId})");
     }
+
+    public string? GetExcelString(Quest currentQuestQuest, string? excelSheetName, string key)
+    {
+        if (excelSheetName == null)
+        {
+            string questPrefix = $"quest/{(currentQuestQuest.QuestId / 100):000}/";
+            string questSuffix = $"_{currentQuestQuest.QuestId:00000}";
+            excelSheetName = _dataManager.Excel
+                .GetSheetNames()
+                .SingleOrDefault(x =>
+                    x.StartsWith(questPrefix, StringComparison.Ordinal) &&
+                    x.EndsWith(questSuffix, StringComparison.Ordinal));
+            if (excelSheetName == null)
+            {
+                _pluginLog.Error($"Could not find sheet matching '{questPrefix}*{questSuffix}");
+                return null;
+            }
+        }
+
+        var excelSheet = _dataManager.Excel.GetSheet<QuestDialogueText>(excelSheetName);
+        if (excelSheet == null)
+        {
+            _pluginLog.Error($"Unknown excel sheet '{excelSheetName}'");
+            return null;
+        }
+
+        return excelSheet.FirstOrDefault(x => x.Key == key)?.Value?.ToString();
+    }
 }
 
--- /dev/null
+namespace Questionable.Model.V1;
+
+public sealed class ChatMessage
+{
+    public string? ExcelSheet { get; set; }
+    public string Key { get; set; } = null!;
+}
 
     private static readonly Dictionary<ESkipCondition, string> Values = new()
     {
         { ESkipCondition.Never, "Never" },
+        { ESkipCondition.FlyingLocked, "FlyingLocked" },
         { ESkipCondition.FlyingUnlocked, "FlyingUnlocked" },
     };
 }
 
 
 public sealed class DialogueChoice
 {
-    public string ExcelSheet { get; set; } = null!;
+    public string? ExcelSheet { get; set; }
     public string Answer { get; set; } = null!;
 }
 
 {
     None,
     Never,
+    FlyingLocked,
     FlyingUnlocked,
 }
 
     public bool? GroundTarget { get; set; }
 
     public EEmote? Emote { get; set; }
-    public string? ChatMessage { get; set; }
+    public ChatMessage? ChatMessage { get; set; }
 
     public EEnemySpawnType? EnemySpawnType { get; set; }
 
 
 <Project Sdk="Microsoft.NET.Sdk">
     <PropertyGroup>
         <TargetFramework>net8.0-windows</TargetFramework>
-        <Version>0.1</Version>
+        <Version>0.2</Version>
         <LangVersion>12</LangVersion>
         <Nullable>enable</Nullable>
         <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>