X-Wing Data 2
May 1, 2023 ยท View on GitHub
An easy-to-use collection of all data from X-Wing: The Miniatures Game (Second Edition) by Atomic Mass Games.
If you're looking for data and images of X-Wing First Edition, you can find that here: xwing-data.
XWS ids
Every ship, pilot, upgrade, etc. has a xws field that contains a unique id. These ids are used in the X-Wing Squadron Specification (or XWS). Note that ids are only unique per card type (as explained below): a pilot can safely have the same id as an upgrade, for example.
New XWS ids are generated using the following steps:
- Take the English-language name as printed on the card
- Lowercase the name
- Convert non-ASCII characters to closest ASCII equivalent (to remove umlauts, etc.)
- Remove non-alphanumeric characters
- If the pilot has a standardized loadout, add the expansion name as a suffix (eg wampa-battleofyavin)
- Check for collisions with other ids of the same type, and add expansion suffixes until there is no more collision
Expansion suffixes per type:
Pilots: pilotname-shipname-factionname-expansionname-productsku
Upgrades: upgradename-slotname-expansionname-productsku
Conditions: conditionname-expansionname-productsku
XWS ids have to be unique per type (pilot/upgrade/condition/etc) and do not collide with ids of other types. So there can be a hansolo pilot and a hansolo upgrade, but there cannot be two upgrades with the hansolo xws id (regardless of the slot of those upgrades). One of those cards would get the -slotname suffix (for example: hansolo-gunner).
Scripts
There are a few scripts that make it easier to work on the data.
You can run these scripts using npm or yarn.
Scripts to update data
| Script | Description |
|---|---|
yarn ts-node ./scripts/amg/parser.ts | Scrape ship_points.xlsx and upgrade_points.xlsx for points and format legality (Excel sheets creaed from AMG PDFs using https://www.ilovepdf.com/pdf_to_excel |
Scripts to work with the repository
| Script | Description |
|---|---|
yarn run format | Format all .json files in the data folder using Prettier |
yarn run changelog A...B | Generate a changelog between commits A and B, to be used in the release description on GitHub.Example usage: yarn run changelog 1.24.0...1.25.0 |
yarn run validate:json | Validate that all .json files contain valid JSON |
yarn run validate:tests | Run all unit tests |
yarn run validate:tests:watch | Run all unit tests in watch mode |
Creating a pull request
Before opening a pull request, see the following checklist:
- Use sensible commit messages. Good:
add rebel fangs. Bad:create fang-fighter.json - Ensure there are no merge conflicts with
master(rebase on top ofmasteror merge it into your branch) - Ensure tests pass:
yarn run validate:tests - Use a sensible PR message, eg
add pride of mandalore rebel content. PR messages can be the same as commit messages for single-commit PRs.
Creating a release
Go through these steps to create a new release:
- Bump the version number in
package.jsonanddata/manifest.jsonaccording to the Versioning rules listed below - Push the
package.jsonanddata/manifest.jsonchanges to GitHub and/or merge them to themasterbranch - Create a new release on GitHub and use the following:
Tag version: The tag you just createdTarget:masterbranchRelease title: The version numberDescribe this release: The output of theyarn run changelog PREVIOUS_VERSION...HEADcommand (replacePREVIOUS_VERSIONwith the latest available tag)
- All done! :tada:
Versioning
This project uses SemVer. Given a MAJOR.MINOR.PATCH version number, we will increment the:
MAJORversion when existing content is changed in such a way that it can break consumers of the dataMINORversion when new content is added in a backwards-compatible manner, or existing content is changed in a backwards-compatible mannerPATCHversion when fixing mistakes in existing content
History
See the Releases tab in Github.
License
Star Wars: X-Wing and all related properties, images and text are owned by Atomic Mass Games, Lucasfilm Ltd., and/or Disney.