1
Fork 0
mirror of https://github.com/xivdev/EXDSchema.git synced 2025-06-06 16:17:46 +00:00

Merge pull request #33 from WorkingRobot/upstream

Upstream relation docs and sheet patches
This commit is contained in:
Asriel Camora 2024-10-03 08:45:56 -07:00 committed by GitHub
commit 5884cf6a1e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
75 changed files with 463 additions and 70 deletions

View file

@ -31,6 +31,7 @@ The schema includes the following:
- Comment support on any schema object
- Maps out-of-the-box to a very simple object mapping
- JSON schema for the schema itself, providing IDE completion and error-checking
- Relations to group similarly sized arrays together
This repository hosts the schema files for each game version. Each change produces a new release of every known game version's schema and removes the old release.
Due to the structure of this repository, any change to a given game version is meant to supercede all others.

View file

@ -38,7 +38,8 @@ fields:
targets: [ActionTimeline]
- name: Icon
type: icon
- name: Unknown0
- name: RequiredStatus
targets: [Status]
- name: ClassJobCategory
type: link
targets: [ClassJobCategory]

View file

@ -22,3 +22,11 @@ fields:
- name: IsRelative
type: array
count: 3
relations:
Params:
- BaseParam
- IsRelative
- Value
- Max
- ValueHQ
- MaxHQ

View file

@ -1,3 +1,5 @@
name: ItemStainCondition
fields:
- name: Unknown0
- name: UnlockQuest
type: link
targets: [Quest]

View file

@ -26,6 +26,9 @@ fields:
- name: ItemCost
type: array
count: 3
fields:
- type: link
targets: [Item]
- name: Quest
type: link
targets: [Quest]
@ -46,6 +49,16 @@ fields:
- name: ReceiveHq
type: array
count: 2
relations:
ReceiveItems:
- Item
- ReceiveCount
- ReceiveHq
ItemCosts:
- ItemCost
- CurrencyCost
- HqCost
- CollectabilityCost
- name: Quest
type: link
targets: [Quest]

View file

@ -33,8 +33,8 @@ fields:
targets: [Map]
- name: AetherstreamX
- name: AetherstreamY
- name: Unknown2
- name: AethernetGroup
- name: Order
- name: Unknown2
- name: IsAetheryte
- name: Invisible

View file

@ -38,7 +38,8 @@ fields:
targets: [ActionTimeline]
- name: Icon
type: icon
- name: Unknown0
- name: RequiredStatus
targets: [Status]
- name: ClassJobCategory
type: link
targets: [ClassJobCategory]

View file

@ -22,3 +22,11 @@ fields:
- name: IsRelative
type: array
count: 3
relations:
Params:
- BaseParam
- IsRelative
- Value
- Max
- ValueHQ
- MaxHQ

View file

@ -1,3 +1,5 @@
name: ItemStainCondition
fields:
- name: Unknown0
- name: UnlockQuest
type: link
targets: [Quest]

View file

@ -26,6 +26,9 @@ fields:
- name: ItemCost
type: array
count: 3
fields:
- type: link
targets: [Item]
- name: Quest
type: link
targets: [Quest]
@ -49,6 +52,16 @@ fields:
- name: ReceiveHq
type: array
count: 2
relations:
ReceiveItems:
- Item
- ReceiveCount
- ReceiveHq
ItemCosts:
- ItemCost
- CurrencyCost
- HqCost
- CollectabilityCost
- name: Quest
type: link
targets: [Quest]

View file

@ -33,8 +33,8 @@ fields:
targets: [Map]
- name: AetherstreamX
- name: AetherstreamY
- name: Unknown2
- name: AethernetGroup
- name: Order
- name: Unknown2
- name: IsAetheryte
- name: Invisible

View file

@ -38,7 +38,8 @@ fields:
targets: [ActionTimeline]
- name: Icon
type: icon
- name: Unknown0
- name: RequiredStatus
targets: [Status]
- name: ClassJobCategory
type: link
targets: [ClassJobCategory]

View file

@ -22,3 +22,11 @@ fields:
- name: IsRelative
type: array
count: 3
relations:
Params:
- BaseParam
- IsRelative
- Value
- Max
- ValueHQ
- MaxHQ

View file

@ -1,3 +1,5 @@
name: ItemStainCondition
fields:
- name: Unknown0
- name: UnlockQuest
type: link
targets: [Quest]

View file

@ -26,6 +26,9 @@ fields:
- name: ItemCost
type: array
count: 3
fields:
- type: link
targets: [Item]
- name: Quest
type: link
targets: [Quest]
@ -49,6 +52,16 @@ fields:
- name: ReceiveHq
type: array
count: 2
relations:
ReceiveItems:
- Item
- ReceiveCount
- ReceiveHq
ItemCosts:
- ItemCost
- CurrencyCost
- HqCost
- CollectabilityCost
- name: Quest
type: link
targets: [Quest]

View file

@ -33,8 +33,8 @@ fields:
targets: [Map]
- name: AetherstreamX
- name: AetherstreamY
- name: Unknown2
- name: AethernetGroup
- name: Order
- name: Unknown2
- name: IsAetheryte
- name: Invisible

View file

@ -38,7 +38,8 @@ fields:
targets: [ActionTimeline]
- name: Icon
type: icon
- name: Unknown0
- name: RequiredStatus
targets: [Status]
- name: ClassJobCategory
type: link
targets: [ClassJobCategory]

View file

@ -22,3 +22,11 @@ fields:
- name: IsRelative
type: array
count: 3
relations:
Params:
- BaseParam
- IsRelative
- Value
- Max
- ValueHQ
- MaxHQ

View file

@ -1,3 +1,5 @@
name: ItemStainCondition
fields:
- name: Unknown0
- name: UnlockQuest
type: link
targets: [Quest]

View file

@ -26,6 +26,9 @@ fields:
- name: ItemCost
type: array
count: 3
fields:
- type: link
targets: [Item]
- name: Quest
type: link
targets: [Quest]
@ -49,6 +52,16 @@ fields:
- name: ReceiveHq
type: array
count: 2
relations:
ReceiveItems:
- Item
- ReceiveCount
- ReceiveHq
ItemCosts:
- ItemCost
- CurrencyCost
- HqCost
- CollectabilityCost
- name: Quest
type: link
targets: [Quest]

View file

@ -33,8 +33,8 @@ fields:
targets: [Map]
- name: AetherstreamX
- name: AetherstreamY
- name: Unknown2
- name: AethernetGroup
- name: Order
- name: Unknown2
- name: IsAetheryte
- name: Invisible

View file

@ -38,7 +38,8 @@ fields:
targets: [ActionTimeline]
- name: Icon
type: icon
- name: Unknown0
- name: RequiredStatus
targets: [Status]
- name: ClassJobCategory
type: link
targets: [ClassJobCategory]

View file

@ -22,3 +22,11 @@ fields:
- name: IsRelative
type: array
count: 3
relations:
Params:
- BaseParam
- IsRelative
- Value
- Max
- ValueHQ
- MaxHQ

View file

@ -1,3 +1,5 @@
name: ItemStainCondition
fields:
- name: Unknown0
- name: UnlockQuest
type: link
targets: [Quest]

View file

@ -26,6 +26,9 @@ fields:
- name: ItemCost
type: array
count: 3
fields:
- type: link
targets: [Item]
- name: Quest
type: link
targets: [Quest]
@ -49,6 +52,16 @@ fields:
- name: ReceiveHq
type: array
count: 2
relations:
ReceiveItems:
- Item
- ReceiveCount
- ReceiveHq
ItemCosts:
- ItemCost
- CurrencyCost
- HqCost
- CollectabilityCost
- name: Quest
type: link
targets: [Quest]

View file

@ -33,8 +33,8 @@ fields:
targets: [Map]
- name: AetherstreamX
- name: AetherstreamY
- name: Unknown2
- name: AethernetGroup
- name: Order
- name: Unknown2
- name: IsAetheryte
- name: Invisible

View file

@ -38,7 +38,8 @@ fields:
targets: [ActionTimeline]
- name: Icon
type: icon
- name: Unknown0
- name: RequiredStatus
targets: [Status]
- name: ClassJobCategory
type: link
targets: [ClassJobCategory]

View file

@ -22,3 +22,11 @@ fields:
- name: IsRelative
type: array
count: 3
relations:
Params:
- BaseParam
- IsRelative
- Value
- Max
- ValueHQ
- MaxHQ

View file

@ -1,3 +1,5 @@
name: ItemStainCondition
fields:
- name: Unknown0
- name: UnlockQuest
type: link
targets: [Quest]

View file

@ -4,7 +4,9 @@ fields:
type: array
count: 4
fields:
- name: Id
- name: ItemId
type: link
targets: [Item]
- name: XPReward
- name: CollectabilityMid
- name: CollectabilityHigh

View file

@ -26,6 +26,9 @@ fields:
- name: ItemCost
type: array
count: 3
fields:
- type: link
targets: [Item]
- name: Quest
type: link
targets: [Quest]
@ -49,6 +52,16 @@ fields:
- name: ReceiveHq
type: array
count: 2
relations:
ReceiveItems:
- Item
- ReceiveCount
- ReceiveHq
ItemCosts:
- ItemCost
- CurrencyCost
- HqCost
- CollectabilityCost
- name: Quest
type: link
targets: [Quest]

View file

@ -33,8 +33,8 @@ fields:
targets: [Map]
- name: AetherstreamX
- name: AetherstreamY
- name: Unknown2
- name: AethernetGroup
- name: Order
- name: Unknown2
- name: IsAetheryte
- name: Invisible

View file

@ -38,7 +38,8 @@ fields:
targets: [ActionTimeline]
- name: Icon
type: icon
- name: Unknown0
- name: RequiredStatus
targets: [Status]
- name: ClassJobCategory
type: link
targets: [ClassJobCategory]

View file

@ -22,3 +22,11 @@ fields:
- name: IsRelative
type: array
count: 3
relations:
Params:
- BaseParam
- IsRelative
- Value
- Max
- ValueHQ
- MaxHQ

View file

@ -1,3 +1,5 @@
name: ItemStainCondition
fields:
- name: Unknown0
- name: UnlockQuest
type: link
targets: [Quest]

View file

@ -4,7 +4,9 @@ fields:
type: array
count: 4
fields:
- name: Id
- name: ItemId
type: link
targets: [Item]
- name: XPReward
- name: CollectabilityMid
- name: CollectabilityHigh

View file

@ -26,6 +26,9 @@ fields:
- name: ItemCost
type: array
count: 3
fields:
- type: link
targets: [Item]
- name: Quest
type: link
targets: [Quest]
@ -49,6 +52,16 @@ fields:
- name: ReceiveHq
type: array
count: 2
relations:
ReceiveItems:
- Item
- ReceiveCount
- ReceiveHq
ItemCosts:
- ItemCost
- CurrencyCost
- HqCost
- CollectabilityCost
- name: Quest
type: link
targets: [Quest]

View file

@ -33,8 +33,8 @@ fields:
targets: [Map]
- name: AetherstreamX
- name: AetherstreamY
- name: Unknown2
- name: AethernetGroup
- name: Order
- name: Unknown2
- name: IsAetheryte
- name: Invisible

View file

@ -38,7 +38,8 @@ fields:
targets: [ActionTimeline]
- name: Icon
type: icon
- name: Unknown0
- name: RequiredStatus
targets: [Status]
- name: ClassJobCategory
type: link
targets: [ClassJobCategory]

View file

@ -22,3 +22,11 @@ fields:
- name: IsRelative
type: array
count: 3
relations:
Params:
- BaseParam
- IsRelative
- Value
- Max
- ValueHQ
- MaxHQ

View file

@ -1,3 +1,5 @@
name: ItemStainCondition
fields:
- name: Unknown0
- name: UnlockQuest
type: link
targets: [Quest]

View file

@ -4,7 +4,9 @@ fields:
type: array
count: 4
fields:
- name: Id
- name: ItemId
type: link
targets: [Item]
- name: XPReward
- name: CollectabilityMid
- name: CollectabilityHigh

View file

@ -26,6 +26,9 @@ fields:
- name: ItemCost
type: array
count: 3
fields:
- type: link
targets: [Item]
- name: Quest
type: link
targets: [Quest]
@ -49,6 +52,16 @@ fields:
- name: ReceiveHq
type: array
count: 2
relations:
ReceiveItems:
- Item
- ReceiveCount
- ReceiveHq
ItemCosts:
- ItemCost
- CurrencyCost
- HqCost
- CollectabilityCost
- name: Quest
type: link
targets: [Quest]

View file

@ -33,8 +33,8 @@ fields:
targets: [Map]
- name: AetherstreamX
- name: AetherstreamY
- name: Unknown2
- name: AethernetGroup
- name: Order
- name: Unknown2
- name: IsAetheryte
- name: Invisible

View file

@ -38,7 +38,8 @@ fields:
targets: [ActionTimeline]
- name: Icon
type: icon
- name: Unknown0
- name: RequiredStatus
targets: [Status]
- name: ClassJobCategory
type: link
targets: [ClassJobCategory]

View file

@ -22,3 +22,11 @@ fields:
- name: IsRelative
type: array
count: 3
relations:
Params:
- BaseParam
- IsRelative
- Value
- Max
- ValueHQ
- MaxHQ

View file

@ -1,3 +1,5 @@
name: ItemStainCondition
fields:
- name: Unknown0
- name: UnlockQuest
type: link
targets: [Quest]

View file

@ -4,7 +4,9 @@ fields:
type: array
count: 4
fields:
- name: Id
- name: ItemId
type: link
targets: [Item]
- name: XPReward
- name: CollectabilityMid
- name: CollectabilityHigh

View file

@ -26,6 +26,9 @@ fields:
- name: ItemCost
type: array
count: 3
fields:
- type: link
targets: [Item]
- name: Quest
type: link
targets: [Quest]
@ -49,6 +52,16 @@ fields:
- name: ReceiveHq
type: array
count: 2
relations:
ReceiveItems:
- Item
- ReceiveCount
- ReceiveHq
ItemCosts:
- ItemCost
- CurrencyCost
- HqCost
- CollectabilityCost
- name: Quest
type: link
targets: [Quest]

View file

@ -33,8 +33,8 @@ fields:
targets: [Map]
- name: AetherstreamX
- name: AetherstreamY
- name: Unknown2
- name: AethernetGroup
- name: Order
- name: Unknown2
- name: IsAetheryte
- name: Invisible

View file

@ -38,7 +38,8 @@ fields:
targets: [ActionTimeline]
- name: Icon
type: icon
- name: Unknown0
- name: RequiredStatus
targets: [Status]
- name: ClassJobCategory
type: link
targets: [ClassJobCategory]

View file

@ -22,3 +22,11 @@ fields:
- name: IsRelative
type: array
count: 3
relations:
Params:
- BaseParam
- IsRelative
- Value
- Max
- ValueHQ
- MaxHQ

View file

@ -1,3 +1,5 @@
name: ItemStainCondition
fields:
- name: Unknown0
- name: UnlockQuest
type: link
targets: [Quest]

View file

@ -26,6 +26,9 @@ fields:
- name: ItemCost
type: array
count: 3
fields:
- type: link
targets: [Item]
- name: Quest
type: link
targets: [Quest]
@ -49,6 +52,16 @@ fields:
- name: ReceiveHq
type: array
count: 2
relations:
ReceiveItems:
- Item
- ReceiveCount
- ReceiveHq
ItemCosts:
- ItemCost
- CurrencyCost
- HqCost
- CollectabilityCost
- name: Quest
type: link
targets: [Quest]

View file

@ -33,8 +33,8 @@ fields:
targets: [Map]
- name: AetherstreamX
- name: AetherstreamY
- name: Unknown2
- name: AethernetGroup
- name: Order
- name: Unknown2
- name: IsAetheryte
- name: Invisible

View file

@ -38,7 +38,8 @@ fields:
targets: [ActionTimeline]
- name: Icon
type: icon
- name: Unknown0
- name: RequiredStatus
targets: [Status]
- name: ClassJobCategory
type: link
targets: [ClassJobCategory]

View file

@ -22,3 +22,11 @@ fields:
- name: IsRelative
type: array
count: 3
relations:
Params:
- BaseParam
- IsRelative
- Value
- Max
- ValueHQ
- MaxHQ

View file

@ -1,3 +1,5 @@
name: ItemStainCondition
fields:
- name: Unknown0
- name: UnlockQuest
type: link
targets: [Quest]

View file

@ -26,6 +26,9 @@ fields:
- name: ItemCost
type: array
count: 3
fields:
- type: link
targets: [Item]
- name: Quest
type: link
targets: [Quest]
@ -49,6 +52,16 @@ fields:
- name: ReceiveHq
type: array
count: 2
relations:
ReceiveItems:
- Item
- ReceiveCount
- ReceiveHq
ItemCosts:
- ItemCost
- CurrencyCost
- HqCost
- CollectabilityCost
- name: Quest
type: link
targets: [Quest]

View file

@ -33,8 +33,8 @@ fields:
targets: [Map]
- name: AetherstreamX
- name: AetherstreamY
- name: Unknown2
- name: AethernetGroup
- name: Order
- name: Unknown2
- name: IsAetheryte
- name: Invisible

View file

@ -38,7 +38,8 @@ fields:
targets: [ActionTimeline]
- name: Icon
type: icon
- name: Unknown0
- name: RequiredStatus
targets: [Status]
- name: ClassJobCategory
type: link
targets: [ClassJobCategory]

View file

@ -22,3 +22,11 @@ fields:
- name: IsRelative
type: array
count: 3
relations:
Params:
- BaseParam
- IsRelative
- Value
- Max
- ValueHQ
- MaxHQ

View file

@ -1,3 +1,5 @@
name: ItemStainCondition
fields:
- name: Unknown0
- name: UnlockQuest
type: link
targets: [Quest]

View file

@ -26,6 +26,9 @@ fields:
- name: ItemCost
type: array
count: 3
fields:
- type: link
targets: [Item]
- name: Quest
type: link
targets: [Quest]
@ -49,6 +52,16 @@ fields:
- name: ReceiveHq
type: array
count: 2
relations:
ReceiveItems:
- Item
- ReceiveCount
- ReceiveHq
ItemCosts:
- ItemCost
- CurrencyCost
- HqCost
- CollectabilityCost
- name: Quest
type: link
targets: [Quest]

View file

@ -33,8 +33,8 @@ fields:
targets: [Map]
- name: AetherstreamX
- name: AetherstreamY
- name: Unknown2
- name: AethernetGroup
- name: Order
- name: Unknown2
- name: IsAetheryte
- name: Invisible

View file

@ -38,7 +38,8 @@ fields:
targets: [ActionTimeline]
- name: Icon
type: icon
- name: Unknown0
- name: RequiredStatus
targets: [Status]
- name: ClassJobCategory
type: link
targets: [ClassJobCategory]

View file

@ -22,3 +22,11 @@ fields:
- name: IsRelative
type: array
count: 3
relations:
Params:
- BaseParam
- IsRelative
- Value
- Max
- ValueHQ
- MaxHQ

View file

@ -1,3 +1,5 @@
name: ItemStainCondition
fields:
- name: Unknown0
- name: UnlockQuest
type: link
targets: [Quest]

View file

@ -26,6 +26,9 @@ fields:
- name: ItemCost
type: array
count: 3
fields:
- type: link
targets: [Item]
- name: Quest
type: link
targets: [Quest]
@ -49,6 +52,16 @@ fields:
- name: ReceiveHq
type: array
count: 2
relations:
ReceiveItems:
- Item
- ReceiveCount
- ReceiveHq
ItemCosts:
- ItemCost
- CurrencyCost
- HqCost
- CollectabilityCost
- name: Quest
type: link
targets: [Quest]

View file

@ -33,8 +33,8 @@ fields:
targets: [Map]
- name: AetherstreamX
- name: AetherstreamY
- name: Unknown2
- name: AethernetGroup
- name: Order
- name: Unknown2
- name: IsAetheryte
- name: Invisible

View file

@ -38,7 +38,8 @@ fields:
targets: [ActionTimeline]
- name: Icon
type: icon
- name: Unknown0
- name: RequiredStatus
targets: [Status]
- name: ClassJobCategory
type: link
targets: [ClassJobCategory]

View file

@ -22,3 +22,11 @@ fields:
- name: IsRelative
type: array
count: 3
relations:
Params:
- BaseParam
- IsRelative
- Value
- Max
- ValueHQ
- MaxHQ

View file

@ -1,3 +1,5 @@
name: ItemStainCondition
fields:
- name: Unknown0
- name: UnlockQuest
type: link
targets: [Quest]

View file

@ -26,6 +26,9 @@ fields:
- name: ItemCost
type: array
count: 3
fields:
- type: link
targets: [Item]
- name: Quest
type: link
targets: [Quest]
@ -49,6 +52,16 @@ fields:
- name: ReceiveHq
type: array
count: 2
relations:
ReceiveItems:
- Item
- ReceiveCount
- ReceiveHq
ItemCosts:
- ItemCost
- CurrencyCost
- HqCost
- CollectabilityCost
- name: Quest
type: link
targets: [Quest]

View file

@ -286,3 +286,51 @@ The `AdditionalData` column in `Item` does a lot of heavy lifting. We can assume
but for research and data exploration, having the ability to define the exact sheet is useful. Here, we can see that when `FilterGroup` is `14`,
we can link to any of `HousingExterior`, `HousingInterior`, `HousingYardObject`, `HousingFurniture`, `HousingPreset`, or finally `HousingUnitedExterior`.
This works because the value for `AdditionalData` are distinct ranges, even when `FilterGroup` is `14`, thus allowing the definition here to behave like a multi link.
## Relations
Relations are used to group different arrays together of the same size. They are supported on every sheet and in every array declaration with more than one field.
To best explain relations, here's an example with `ItemFood`:
```yml
name: ItemFood
fields:
- name: Max
type: array
count: 3
- name: MaxHQ
type: array
count: 3
- name: EXPBonusPercent
- name: BaseParam
type: array
count: 3
fields:
- type: link
targets: [BaseParam]
- name: Value
type: array
count: 3
- name: ValueHQ
type: array
count: 3
- name: IsRelative
type: array
count: 3
```
Here, `ItemFood` contains several arrays of size 3. Each index has one `BaseParam` and its accompanying `Max`, `MaxHQ`, `Value`, `ValueHQ`, and `IsRelative` values.
These should all be related to one another, but they're instead spread out across 6 different arrays. This is a perfect example of the downsides of
[Structs of Arrays](https://en.wikipedia.org/wiki/AoS_and_SoA), since our data is best formatted using Arrays of Structs.
Using relations, we can circumvent this issue by explicitly grouping these 6 arrays together into one array with 3 structs.
To do so, we can add the following to the end of the schema file:
```yml
relations:
Params:
- BaseParam
- IsRelative
- Value
- Max
- ValueHQ
- MaxHQ
```
Now, instead of accessing each array individually, `Params` is the only available field, where every element of `Params` contains all the related columns.