{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://carvel.li/questionable/quest-1.0",
  "title": "Questionable V1",
  "description": "A series of quest sequences",
  "type": "object",
  "properties": {
    "$schema": {
      "type": "string",
      "const": "https://carvel.li/questionable/quest-1.0"
    },
    "Author": {
      "description": "Author of the quest sequence",
      "type": [
        "string",
        "array"
      ],
      "items": {
        "type": "string"
      }
    },
    "Disabled": {
      "type": "boolean"
    },
    "Comment": {
      "type": "string"
    },
    "$": {
      "type": "string",
      "description": "Dev Comment (not visible in-game)"
    },
    "TerritoryBlacklist": {
      "type": "array",
      "items": {
        "type": "integer"
      }
    },
    "QuestSequence": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "Sequence": {
            "type": "integer",
            "minimum": 0,
            "maximum": 255
          },
          "Steps": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "DataId": {
                  "type": "integer",
                  "description": "The data id of the NPC/Object/Aetheryte/Aether Current",
                  "exclusiveMinimum": 0
                },
                "Position": {
                  "type": "object",
                  "description": "Position to (typically) walk to",
                  "properties": {
                    "X": {
                      "type": "number"
                    },
                    "Y": {
                      "type": "number"
                    },
                    "Z": {
                      "type": "number"
                    }
                  },
                  "required": [
                    "X",
                    "Y",
                    "Z"
                  ]
                },
                "StopDistance": {
                  "type": [
                    "number",
                    "null"
                  ],
                  "description": "Set if pathfinding should stop closer or further away from the default stop distance",
                  "exclusiveMinimum": 0
                },
                "IgnoreDistanceToObject": {
                  "type": "boolean",
                  "description": "Most interactions with objects are checked for a Y (height) difference of 2 in-game units. If set to true, the game won't attempt to get any closer if the height difference is larger than this."
                },
                "TerritoryId": {
                  "type": "integer",
                  "description": "The territory id associated with the location",
                  "exclusiveMinimum": 0
                },
                "TargetTerritoryId": {
                  "type": "integer",
                  "description": "If set, this step is complete (movement-wise) if this territory id is reached",
                  "exclusiveMinimum": 0
                },
                "InteractionType": {
                  "type": "string",
                  "description": "What to do at the position",
                  "enum": [
                    "Interact",
                    "WalkTo",
                    "AttuneAethernetShard",
                    "AttuneAetheryte",
                    "AttuneAetherCurrent",
                    "Combat",
                    "UseItem",
                    "EquipItem",
                    "Say",
                    "Emote",
                    "Action",
                    "WaitForNpcAtPosition",
                    "WaitForManualProgress",
                    "Duty",
                    "SinglePlayerDuty",
                    "Jump",
                    "Instruction",
                    "AcceptQuest",
                    "CompleteQuest"
                  ]
                },
                "Disabled": {
                  "description": "Whether this step is disabled (see SkipIf for more control)",
                  "type": "boolean"
                },
                "DisableNavmesh": {
                  "description": "If true, will go to the position in a straight line instead of using pathfinding",
                  "type": "boolean"
                },
                "Mount": {
                  "type": [
                    "boolean",
                    "null"
                  ],
                  "description": "If true, will mount regardless of distance to position. If false, will unmount."
                },
                "Fly": {
                  "type": "boolean",
                  "description": "If true and flying is unlocked in a zone, will use a flight path"
                },
                "Land": {
                  "type": "boolean",
                  "description": "If true and flying, will attempt to land on the ground"
                },
                "Sprint": {
                  "type": [
                    "boolean",
                    "null"
                  ]
                },
                "AetheryteShortcut": {
                  "description": "The Aetheryte to teleport to (before moving)",
                  "$ref": "#/$defs/Aetheryte"
                },
                "AethernetShortcut": {
                  "type": "array",
                  "description": "A pair of aethernet locations (from + to) to use as a shortcut",
                  "minItems": 2,
                  "maxItems": 2,
                  "items": {
                    "$ref": "#/$defs/AethernetShard"
                  }
                },
                "ItemId": {
                  "type": [
                    "number",
                    "null"
                  ],
                  "description": "The Item to use",
                  "exclusiveMinimum": 0
                },
                "SkipIf": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "enum": [
                      "Never",
                      "FlyingLocked",
                      "FlyingUnlocked",
                      "DifferentTerritory",
                      "ChocoboUnlocked",
                      "AetheryteShortcutIfInSameTerritory",
                      "NotTargetable",
                      "ItemNotInInventory",
                      "WakingSandsMainArea"
                    ]
                  }
                },
                "CompletionQuestVariablesFlags": {
                  "$ref": "#/$defs/CompletionFlags"
                },
                "RequiredQuestVariables": {
                  "type": "array",
                  "description": "Certain quests (primarily beast tribes/allied societies) have a RNG element to spawning targets, and the step should be skipped in its entirety if none of the sets below match",
                  "minItems": 6,
                  "maxItems": 6,
                  "items": {
                    "type": [
                      "array",
                      "null"
                    ],
                    "items": {
                      "type": [
                        "number",
                        "object"
                      ],
                      "properties": {
                        "High": {
                          "type": [
                            "number",
                            "null"
                          ],
                          "minimum": 0,
                          "maximum": 15
                        },
                        "Low": {
                          "type": [
                            "number",
                            "null"
                          ],
                          "minimum": 0,
                          "maximum": 15
                        }
                      },
                      "minimum": 0,
                      "maximum": 255
                    }
                  }
                },
                "DelaySecondsAtStart": {
                  "description": "Time to wait before starting",
                  "type": [
                    "number",
                    "null"
                  ]
                },
                "Comment": {
                  "type": "string"
                }
              },
              "required": [
                "TerritoryId",
                "InteractionType"
              ],
              "allOf": [
                {
                  "if": {
                    "properties": {
                      "InteractionType": {
                        "anyOf": [
                          {
                            "const": "Interact"
                          },
                          {
                            "const": "SinglePlayerDuty"
                          }
                        ]
                      }
                    }
                  },
                  "then": {
                    "required": [
                      "DataId"
                    ]
                  }
                },
                {
                  "if": {
                    "properties": {
                      "InteractionType": {
                        "const": "WalkTo"
                      }
                    }
                  },
                  "then": {
                    "required": [
                      "Position"
                    ]
                  }
                },
                {
                  "if": {
                    "properties": {
                      "InteractionType": {
                        "const": "AttuneAetheryte"
                      }
                    }
                  },
                  "then": {
                    "properties": {
                      "Aetheryte": {
                        "$ref": "#/$defs/Aetheryte"
                      },
                      "DataId": {
                        "type": "null"
                      },
                      "Position": {
                        "type": "null"
                      }
                    },
                    "required": [
                      "Aetheryte"
                    ]
                  },
                  "else": {
                    "properties": {
                      "Aetheryte": {
                        "type": "null"
                      }
                    }
                  }
                },
                {
                  "if": {
                    "properties": {
                      "InteractionType": {
                        "const": "AttuneAethernetShard"
                      }
                    }
                  },
                  "then": {
                    "properties": {
                      "AethernetShard": {
                        "$ref": "#/$defs/AethernetShard"
                      },
                      "DataId": {
                        "type": "null"
                      },
                      "Position": {
                        "type": "null"
                      }
                    },
                    "required": [
                      "AethernetShard"
                    ]
                  },
                  "else": {
                    "properties": {
                      "AethernetShard": {
                        "type": "null"
                      }
                    }
                  }
                },
                {
                  "if": {
                    "properties": {
                      "InteractionType": {
                        "const": "AttuneAetherCurrent"
                      }
                    }
                  },
                  "then": {
                    "properties": {
                      "AetherCurrentId": {
                        "type": "integer",
                        "description": "The aether current id, used to check if a given aetheryte is unlocked",
                        "exclusiveMinimum": 0
                      }
                    },
                    "required": [
                      "DataId",
                      "Position",
                      "AetherCurrentId"
                    ]
                  }
                },
                {
                  "if": {
                    "properties": {
                      "InteractionType": {
                        "const": "Combat"
                      }
                    }
                  },
                  "then": {
                    "properties": {
                      "EnemySpawnType": {
                        "type": "string",
                        "description": "Determines how enemy spawning is handled in combat locations",
                        "enum": [
                          "AutoOnEnterArea",
                          "AfterInteraction",
                          "AfterItemUse",
                          "OverworldEnemies"
                        ]
                      },
                      "KillEnemyDataIds": {
                        "description": "The enemy data ids which are supposed to be killed",
                        "type": "array",
                        "items": {
                          "type": "integer"
                        }
                      },
                      "ComplexCombatData": {
                        "description": "If multiple different enemies are supposed to be killed in a single quest step, this typically is handled via items",
                        "type": "array",
                        "items": {
                          "type": "object",
                          "properties": {
                            "DataId": {
                              "description": "The enemy data id which is supposed to be killed",
                              "type": "integer"
                            },
                            "MinimumKillCount": {
                              "description": "Overworld mobs: If this number of mobs has been killed, will wait a bit before attempting to pull another mob to see if the quest progresses",
                              "type": "integer"
                            },
                            "RewardItemId": {
                              "type": "integer"
                            },
                            "RewardItemCount": {
                              "type": "integer"
                            },
                            "CompletionQuestVariablesFlags": {
                              "$ref": "#/$defs/CompletionFlags"
                            },
                            "IgnoreQuestMarker": {
                              "type": "boolean"
                            }
                          },
                          "required": [
                            "DataId"
                          ]
                        }
                      },
                      "CombatDelaySecondsAtStart": {
                        "type": "number"
                      }
                    },
                    "required": [
                      "Position",
                      "EnemySpawnType"
                    ],
                    "oneOf": [
                      {
                        "required": [
                          "KillEnemyDataIds"
                        ]
                      },
                      {
                        "required": [
                          "ComplexCombatData"
                        ]
                      }
                    ]
                  }
                },
                {
                  "if": {
                    "properties": {
                      "InteractionType": {
                        "const": "UseItem"
                      },
                      "ItemId": {
                        "not": {
                          "const": 30362
                        }
                      }
                    }
                  },
                  "then": {
                    "required": [
                      "Position"
                    ]
                  }
                },
                {
                  "if": {
                    "anyOf": [
                      {
                        "properties": {
                          "InteractionType": {
                            "const": "UseItem"
                          }
                        }
                      },
                      {
                        "properties": {
                          "InteractionType": {
                            "const": "Combat"
                          },
                          "EnemySpawnType": {
                            "const": "AfterItemUse"
                          }
                        }
                      }
                    ]
                  },
                  "then": {
                    "properties": {
                      "GroundTarget": {
                        "type": [
                          "boolean",
                          "null"
                        ],
                        "default": false
                      }
                    },
                    "required": [
                      "ItemId"
                    ]
                  }
                },
                {
                  "if": {
                    "properties": {
                      "InteractionType": {
                        "const": "EquipItem"
                      }
                    }
                  },
                  "then": {
                    "required": [
                      "ItemId"
                    ]
                  }
                },
                {
                  "if": {
                    "properties": {
                      "InteractionType": {
                        "anyOf": [
                          {
                            "const": "Emote"
                          },
                          {
                            "const": "AcceptQuest"
                          },
                          {
                            "const": "CompleteQuest"
                          }
                        ]
                      }
                    }
                  },
                  "then": {
                    "properties": {
                      "Emote": {
                        "type": "string",
                        "description": "The emote to use",
                        "enum": [
                          "stretch",
                          "wave",
                          "rally",
                          "deny",
                          "pray",
                          "slap",
                          "doubt",
                          "psych",
                          "cheer",
                          "happy",
                          "poke",
                          "flex",
                          "soothe",
                          "me",
                          "welcome",
                          "imperialsalute",
                          "pet",
                          "dance",
                          "respect",
                          "lookout"
                        ]
                      }
                    }
                  }
                },
                {
                  "if": {
                    "properties": {
                      "InteractionType": {
                        "const": "Emote"
                      }
                    }
                  },
                  "then": {
                    "required": [
                      "Position",
                      "Emote"
                    ]
                  }
                },
                {
                  "if": {
                    "properties": {
                      "InteractionType": {
                        "const": "Say"
                      }
                    }
                  },
                  "then": {
                    "properties": {
                      "ChatMessage": {
                        "type": "object",
                        "description": "The text to use with /say",
                        "properties": {
                          "ExcelSheet": {
                            "type": "string"
                          },
                          "Key": {
                            "type": "string"
                          }
                        },
                        "required": [
                          "Key"
                        ]
                      }
                    },
                    "required": [
                      "ChatMessage"
                    ]
                  }
                },
                {
                  "if": {
                    "properties": {
                      "InteractionType": {
                        "const": "Action"
                      }
                    }
                  },
                  "then": {
                    "properties": {
                      "Action": {
                        "type": "string",
                        "description": "The action to use",
                        "enum": [
                          "Esuna",
                          "Siphon Snout",
                          "Red Gulal",
                          "Yellow Gulal",
                          "Blue Gulal"
                        ]
                      }
                    },
                    "required": [
                      "Action"
                    ]
                  }
                },
                {
                  "if": {
                    "properties": {
                      "InteractionType": {
                        "const": "Jump"
                      }
                    }
                  },
                  "then": {
                    "properties": {
                      "JumpDestination": {
                        "type": "object",
                        "properties": {
                          "Position": {
                            "type": "object",
                            "description": "Position to try reaching after the jump",
                            "properties": {
                              "X": {
                                "type": "number"
                              },
                              "Y": {
                                "type": "number"
                              },
                              "Z": {
                                "type": "number"
                              }
                            },
                            "required": [
                              "X",
                              "Y",
                              "Z"
                            ]
                          },
                          "StopDistance": {
                            "type": [
                              "number",
                              "null"
                            ],
                            "description": "Set if pathfinding should stop closer or further away from the default stop distance",
                            "exclusiveMinimum": 0
                          },
                          "DelaySeconds": {
                            "type": [
                              "number",
                              "null"
                            ]
                          }
                        },
                        "required": [
                          "Position"
                        ]
                      }
                    },
                    "required": [
                      "Position",
                      "JumpDestination"
                    ]
                  }
                },
                {
                  "if": {
                    "properties": {
                      "InteractionType": {
                        "anyOf": [
                          {
                            "const": "Interact"
                          },
                          {
                            "const": "SinglePlayerDuty"
                          },
                          {
                            "const": "WaitForManualProgress"
                          },
                          {
                            "const": "AcceptQuest"
                          },
                          {
                            "const": "CompleteQuest"
                          },
                          {
                            "const": "Instruction"
                          }
                        ]
                      }
                    }
                  },
                  "then": {
                    "properties": {
                      "DialogueChoices": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "properties": {
                            "Type": {
                              "type": "string",
                              "enum": [
                                "YesNo",
                                "List"
                              ]
                            },
                            "ExcelSheet": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "Type"
                          ],
                          "allOf": [
                            {
                              "if": {
                                "properties": {
                                  "Type": {
                                    "const": "YesNo"
                                  }
                                }
                              },
                              "then": {
                                "properties": {
                                  "Prompt": {
                                    "type": [
                                      "string",
                                      "integer"
                                    ]
                                  },
                                  "Yes": {
                                    "type": "boolean",
                                    "default": true
                                  }
                                },
                                "required": [
                                  "Prompt",
                                  "Yes"
                                ]
                              }
                            },
                            {
                              "if": {
                                "properties": {
                                  "Type": {
                                    "const": "List"
                                  }
                                }
                              },
                              "then": {
                                "properties": {
                                  "Prompt": {
                                    "type": [
                                      "string",
                                      "integer",
                                      "null"
                                    ]
                                  },
                                  "Answer": {
                                    "type": [
                                      "string",
                                      "integer"
                                    ]
                                  }
                                },
                                "required": [
                                  "Prompt",
                                  "Answer"
                                ]
                              }
                            }
                          ]
                        }
                      },
                      "PointMenuChoices": {
                        "type": "array",
                        "items": {
                          "type": "integer",
                          "minimum": 0
                        }
                      }
                    }
                  }
                },
                {
                  "if": {
                    "properties": {
                      "InteractionType": {
                        "const": "Duty"
                      }
                    }
                  },
                  "then": {
                    "properties": {
                      "ContentFinderConditionId": {
                        "type": "integer",
                        "exclusiveMinimum": 0,
                        "exclusiveMaximum": 3000
                      },
                      "DataId": {
                        "type": "null"
                      },
                      "Position": {
                        "type": "null"
                      }
                    },
                    "required": [
                      "ContentFinderConditionId"
                    ]
                  }
                },
                {
                  "if": {
                    "properties": {
                      "InteractionType": {
                        "const": "WaitForNpcAtPosition"
                      }
                    }
                  },
                  "then": {
                    "properties": {
                      "NpcWaitDistance": {
                        "type": "number",
                        "exclusiveMinimum": 0
                      }
                    }
                  }
                },
                {
                  "if": {
                    "properties": {
                      "InteractionType": {
                        "const": "AcceptQuest"
                      }
                    }
                  },
                  "then": {
                    "properties": {
                      "PickUpQuestId": {
                        "type": [
                          "null",
                          "number"
                        ],
                        "description": "Determines the quest which should be accepted. If empty/null, accepts the quest corresponding to the file name."
                      }
                    }
                  }
                },
                {
                  "if": {
                    "properties": {
                      "InteractionType": {
                        "const": "CompleteQuest"
                      }
                    }
                  },
                  "then": {
                    "properties": {
                      "TurnInQuestId": {
                        "type": [
                          "null",
                          "number"
                        ],
                        "description": "Determines the quest which should be turned in. If empty/null, turns in the quest corresponding to the file name."
                      },
                      "NextQuestId": {
                        "type": [
                          "null",
                          "number"
                        ],
                        "description": "For quest chains (e.g. DT healer role quests) Which quest to do next, given that you meet the required level."
                      }
                    }
                  }
                }
              ]
            }
          },
          "Comment": {
            "type": "string"
          }
        },
        "required": [
          "Sequence"
        ],
        "additionalProperties": false
      }
    }
  },
  "required": [
    "$schema",
    "QuestSequence",
    "Author"
  ],
  "additionalProperties": false,
  "$defs": {
    "Aetheryte": {
      "type": "string",
      "enum": [
        "Gridania",
        "Central Shroud - Bentbranch Meadows",
        "East Shroud - Hawthorne Hut",
        "South Shroud - Quarrymill",
        "South Shroud - Camp Tranquil",
        "North Shroud - Fallgourd Float",
        "Ul'dah",
        "Western Thanalan - Horizon",
        "Central Thanalan - Black Brush Station",
        "Eastern Thanalan - Camp Drybone",
        "Southern Thanalan - Little Ala Mhigo",
        "Southern Thanalan - Forgotten Springs",
        "Northern Thanalan - Camp Bluefog",
        "Northern Thanalan - Ceruleum Processing Plant",
        "Limsa Lominsa",
        "Middle La Noscea - Summerford Farms",
        "Lower La Noscea - Moraby Drydocks",
        "Eastern La Noscea - Costa Del Sol",
        "Eastern La Noscea - Wineport",
        "Western La Noscea - Swiftperch",
        "Western La Noscea - Aleport",
        "Upper La Noscea - Camp Bronze Lake",
        "Outer La Noscea - Camp Overlook",
        "Coerthas Central Highlands - Camp Dragonhead",
        "Mor Dhona",
        "Gold Saucer",
        "Wolves' Den Pier",
        "Ishgard",
        "Idyllshire",
        "Coerthas Western Highlands - Falcon's Nest",
        "The Sea of Clouds - Camp Cloudtop",
        "The Sea of Clouds - Ok' Zundu",
        "Azys Lla - Helix",
        "The Dravanian Forelands - Tailfeather",
        "The Dravanian Forelands - Anyx Trine",
        "The Churning Mists - Moghome",
        "The Churning Mists - Zenith",
        "Rhalgr's Reach",
        "Fringes - Castrum Oriens",
        "Fringes - Peering Stones",
        "Peaks - Ala Gannha",
        "Peaks - Ala Ghiri",
        "Lochs - Porta Praetoria",
        "Lochs - Ala Mhigan Quarter",
        "Kugane",
        "Ruby Sea - Tamamizu",
        "Ruby Sea - Onokoro",
        "Yanxia - Namai",
        "Yanxia - House of the Fierce",
        "Azim Steppe - Reunion",
        "Azim Steppe - Dawn Throne",
        "Azim Steppe - Dhoro Iloh",
        "Doman Enclave",
        "Crystarium",
        "Eulmore",
        "Lakeland - Fort Jobb",
        "Lakeland - Ostall Imperative",
        "Kholusia - Stilltide",
        "Kholusia - Wright",
        "Kholusia - Tomra",
        "Amh Araeng - Mord Souq",
        "Amh Araeng - Inn at Journey's Head",
        "Amh Araeng - Twine",
        "Rak'tika - Slitherbough",
        "Rak'tika - Fanow",
        "Il Mheg - Lydha Lran",
        "Il Mheg - Pia Enni",
        "Il Mheg - Wolekdorf",
        "Tempest - Ondo Cups",
        "Tempest - Macarenses Angle",
        "Old Sharlayan",
        "Radz-at-Han",
        "Labyrinthos - Archeion",
        "Labyrinthos - Sharlayan Hamlet",
        "Labyrinthos - Aporia",
        "Thavnair - Yedlihmad",
        "Thavnair - Great Work",
        "Thavnair - Palaka's Stand",
        "Garlemald - Camp Broken Glass",
        "Garlemald - Tertium",
        "Mare Lamentorum - Sinus Lacrimarum",
        "Mare Lamentorum - Bestways Burrow",
        "Elpis - Anagnorisis",
        "Elpis - Twelve Wonders",
        "Elpis - Poieten Oikos",
        "Ultima Thule - Reah Tahra",
        "Ultima Thule - Abode of the Ea",
        "Ultima Thule - Base Omicron",
        "Tuliyollal",
        "Solution Nine",
        "Urqopacha - Wachunpelo",
        "Urqopacha - Worlar's Echo",
        "Kozama'uka - Ok'hanu",
        "Kozama'uka - Many Fires",
        "Kozama'uka - Earthenshire",
        "Yak T'el - Iq Br'aax",
        "Yak T'el - Mamook",
        "Shaaloani - Hhusatahwi",
        "Shaaloani - Sheshenewezi Springs",
        "Shaaloani - Mehwahhetsoan",
        "Heritage Found - Yyasulani Station",
        "Heritage Found - The Outskirts",
        "Heritage Found - Electrope Strike",
        "Living Memory - Leynode Mnemo",
        "Living Memory - Leynode Pyro",
        "Living Memory - Leynode Aero"
      ]
    },
    "AethernetShard": {
      "type": "string",
      "enum": [
        "[Gridania] Aetheryte Plaza",
        "[Gridania] Archers' Guild",
        "[Gridania] Leatherworkers' Guild & Shaded Bower",
        "[Gridania] Lancers' Guild",
        "[Gridania] Conjurers' Guild",
        "[Gridania] Botanists' Guild",
        "[Gridania] Mih Khetto's Amphitheatre",
        "[Gridania] Blue Badger Gate (Central Shroud)",
        "[Gridania] Yellow Serpent Gate (North Shroud)",
        "[Gridania] White Wolf Gate (Central Shroud)",
        "[Gridania] Airship Landing",
        "[Ul'dah] Aetheryte Plaza",
        "[Ul'dah] Adventurers' Guild",
        "[Ul'dah] Thaumaturges' Guild",
        "[Ul'dah] Gladiators' Guild",
        "[Ul'dah] Miners' Guild",
        "[Ul'dah] Weavers' Guild",
        "[Ul'dah] Goldsmiths' Guild",
        "[Ul'dah] Sapphire Avenue Exchange",
        "[Ul'dah] Alchemists' Guild",
        "[Ul'dah] Gate of the Sultana (Western Thanalan)",
        "[Ul'dah] Gate of Nald (Central Thanalan)",
        "[Ul'dah] Gate of Thal (Central Thanalan)",
        "[Ul'dah] The Chamber of Rule",
        "[Ul'dah] Airship Landing",
        "[Limsa Lominsa] Aetheryte Plaza",
        "[Limsa Lominsa] Arcanists' Guild",
        "[Limsa Lominsa] Fishermens' Guild",
        "[Limsa Lominsa] Hawkers' Alley",
        "[Limsa Lominsa] The Aftcastle",
        "[Limsa Lominsa] Culinarians' Guild",
        "[Limsa Lominsa] Marauders' Guild",
        "[Limsa Lominsa] Zephyr Gate (Middle La Noscea)",
        "[Limsa Lominsa] Tempest Gate (Lower La Noscea)",
        "[Limsa Lominsa] Airship Landing",
        "[Ishgard] Aetheryte Plaza",
        "[Ishgard] The Forgotten Knight",
        "[Ishgard] Skysteel Manufactory",
        "[Ishgard] The Brume",
        "[Ishgard] Athenaeum Astrologicum",
        "[Ishgard] The Jeweled Crozier",
        "[Ishgard] Saint Reymanaud's Cathedral",
        "[Ishgard] The Tribunal",
        "[Ishgard] The Last Vigil",
        "[Ishgard] The Gates of Judgement (Coerthas Central Highlands)",
        "[Idyllshire] Aetheryte Plaza",
        "[Idyllshire] West Idyllshire",
        "[Idyllshire] Prologue Gate (Western Hinterlands)",
        "[Idyllshire] Epilogue Gate (Eastern Hinterlands)",
        "[Rhalgr's Reach] Aetheryte Plaza",
        "[Rhalgr's Reach] Western Rhalgr's Reach",
        "[Rhalgr's Reach] Northeastern Rhalgr's Reach",
        "[Rhalgr's Reach] Fringes Gate",
        "[Rhalgr's Reach] Peaks Gate",
        "[Kugane] Aetheryte Plaza",
        "[Kugane] Shiokaze Hostelry",
        "[Kugane] Pier #1",
        "[Kugane] Thavnairian Consulate",
        "[Kugane] Kogane Dori Markets",
        "[Kugane] Bokairo Inn",
        "[Kugane] The Ruby Bazaar",
        "[Kugane] Sekiseigumi Barracks",
        "[Kugane] Rakuza District",
        "[Kugane] The Ruby Price",
        "[Kugane] Airship Landing",
        "[Crystarium] Aetheryte Plaza",
        "[Crystarium] Musica Universalis Markets",
        "[Crystarium] Temenos Rookery",
        "[Crystarium] The Dossal Gate",
        "[Crystarium] The Pendants",
        "[Crystarium] The Amaro Launch",
        "[Crystarium] The Crystalline Mean",
        "[Crystarium] The Cabinet of Curiosity",
        "[Crystarium] Tessellation (Lakeland)",
        "[Eulmore] Aetheryte Plaza",
        "[Eulmore] Southeast Derelicts",
        "[Eulmore] Nightsoil Pots",
        "[Eulmore] The Glory Gate",
        "[Eulmore] The Mainstay",
        "[Eulmore] The Path to Glory (Kholusia)",
        "[Old Sharlayan] Aetheryte Plaza",
        "[Old Sharlayan] The Studium",
        "[Old Sharlayan] The Baldesion Annex",
        "[Old Sharlayan] The Rostra",
        "[Old Sharlayan] The Leveilleur Estate",
        "[Old Sharlayan] Journey's End",
        "[Old Sharlayan] Scholar's Harbor",
        "[Old Sharlayan] The Hall of Artifice (Labyrinthos)",
        "[Radz-at-Han] Aetheryte Plaza",
        "[Radz-at-Han] Meghaduta",
        "[Radz-at-Han] Ruveydah Fibers",
        "[Radz-at-Han] Airship Landing",
        "[Radz-at-Han] Alzadaal's Peace",
        "[Radz-at-Han] Hall of the Radiant Host",
        "[Radz-at-Han] Mehryde's Meyhane",
        "[Radz-at-Han] Kama",
        "[Radz-at-Han] The High Crucible of Al-Kimiya",
        "[Radz-at-Han] The Gate of First Sight (Thavnair)",
        "[Tuliyollal] Aetheryte Plaza",
        "[Tuliyollal] Dirigible Landing",
        "[Tuliyollal] The Resplendent Quarter",
        "[Tuliyollal] The For'ard Cabins",
        "[Tuliyollal] Bayside Bevy Marketplace",
        "[Tuliyollal] Vollok Shoonsa",
        "[Tuliyollal] Wachumeqimeqi",
        "[Tuliyollal] Brightploom Post",
        "[Tuliyollal] Arch of the Dawn (Urqopacha)",
        "[Tuliyollal] Arch of the Dawn (Kozama'uka)",
        "[Tuliyollal] Ihuykatumu (Kozama'uka)",
        "[Tuliyollal] Dirigible Landing (Yak T'el)",
        "[Tuliyollal] Xak Tural Skygate (Shaaloani)",
        "[Solution Nine] Aetheryte Plaza",
        "[Solution Nine] Information Center",
        "[Solution Nine] True Vue",
        "[Solution Nine] Neon Stein",
        "[Solution Nine] The Arcadion",
        "[Solution Nine] Resolution",
        "[Solution Nine] Nexus Arcade",
        "[Solution Nine] Residential Sector",
        "[Solution Nine] Scanning Port Nine (Heritage Found)"
      ]
    },
    "CompletionFlags": {
      "type": "array",
      "description": "Quest Variables that dictate whether or not this step is skipped: null is don't check, positive values need to be set, negative values need to be unset",
      "items": {
        "type": [
          "integer",
          "null"
        ],
        "enum": [
          null,
          1,
          2,
          4,
          8,
          16,
          32,
          64,
          128,
          -1,
          -2,
          -4,
          -8,
          -16,
          -32,
          -64,
          -128
        ]
      },
      "minItems": 6,
      "maxItems": 6
    }
  }
}