Skirmish Interchange Format

By kingargyle, in Imperial Assault Skirmish

One of the nice things that the X-Wing community has developed is a way for the various Squad Builders to import and export the data in a standard format, the XWS Specification. I do streaming for X-Wing and developed a tool to help create Stream Overlays to display the squad lists and keep track of health and damage on the various ships. Unfortunately, currently there is no such specification that I'm aware of that would allow the interchange of armies built for Imperial Assault to be imported or exported from the various army builders. I've started such a project (it is very early in development), but would really like community feedback on the data format, and what needs to be included. If you are a developer of one of these tools it would be great to get some feedback, or if you already have a format that can be used by the community that would be great as well.

A sample data format, can be found here:

https://github.com/kingargyle/iaskirmish-data/wiki/Sample-Data

Canonical Names for Deployment cards (including attachments and upgrades).

https://github.com/kingargyle/iaskirmish-data/wiki/Canonical-Names

All Deployment Cards:

https://github.com/kingargyle/iaskirmish-data/blob/master/deployments.json

All Command Cards:

https://github.com/kingargyle/iaskirmish-data/blob/master/commandcards.json

Java Based Library for Reading and Writing the IASpec files.

https://github.com/kingargyle/iaskirmish-data/tree/master/java

Binary and Schema for Java: https://github.com/kingargyle/iaskirmish-data/releases/tag/v1.0.0-M1

Edited by kingargyle

First glance thoughts:

  1. What about companion card type? (e.g. Junk Droid, Salacious B. Crumb, etc)
  2. And the new Form cards (used by the Clawdite Shapeshifter)
  3. How about a variable for elite vs regular
  4. And a variable for number of units in the group
  5. Maybe a variable for source? (i.e. which pack the card comes in)
  6. And a variable for base size? (small/large AND/OR 1x1, 2x1, etc) If this is just about the card itself and not the figures it represents, maybe this isn't necessary.
  7. A third attack type should be "none"
Edited by Tibbel

Yep, all good ideas. I tossed the sample together just really quickly during lunch. Ideally, we would develop a JSON Schema that contains all the rules for each of the options. I'll continue updating it with sample data.

Is the idea to have multiple deployments (aka lists, multiple full 40-point armies) in the same JSON?

I think having "name" and "description" for each individual list/army would be helpful.

7 minutes ago, cnemmick said:

Is the idea to have multiple deployments (aka lists, multiple full 40-point armies) in the same JSON?

I think having "name" and "description" for each individual list/army would be helpful.

The goal is to be able to represent a particular Army and the command cards that go along with it. This way, if you use say Startactics IA Armies builder, and want to import it into ia-armies.com, you can export it into a JSON format, and then import it into another format. I also plan to use it to help the various Imperial Assault twitch and youtube streamers have a common data format that they could get from the various Army builders to then build overlays for their streams.

It's worked out very well within the X-Wing community, as it lets people switch back and forth between squad builders if they need too.

I typically see this for one army, not necessarily a batch group of armies.

10 minutes ago, kingargyle said:

I typically see this for one army, not necessarily a batch group of armies.

That's cool! Just wanted to clarify.

On 9/28/2017 at 4:38 PM, Tibbel said:

First glance thoughts:

  1. What about companion card type? (e.g. Junk Droid, Salacious B. Crumb, etc)
  2. And the new Form cards (used by the Clawdite Shapeshifter)
  3. How about a variable for elite vs regular
  4. And a variable for number of units in the group
  5. Maybe a variable for source? (i.e. which pack the card comes in)
  6. And a variable for base size? (small/large AND/OR 1x1, 2x1, etc) If this is just about the card itself and not the figures it represents, maybe this isn't necessary.
  7. A third attack type should be "none"

I've updated the Sample Data with your suggestions. I'll try and run this through a tool that can create a JSON schema, and at least start creating a Java library that can be used to read it.

I see options like Source, Image, base size, full description, etc... being in a deployment-card spec... sorta like there is a Pilots.json from the xwing-data project that contains that detail outside of the actual XWS specification. Each Army builder can cross-reference the iaspecname to obtain that information from their own databases.

I can provide a JavaScript & PHP data object as well.

1 minute ago, cnemmick said:

I can provide a JavaScript & PHP data object as well.

Cool I'm working on cleaning up the JSON so it is valid, and will get a Schema Generated based off it so it can be used to validate output. Probably be a few days.

I've updated the top post with a link on the wiki for all the canonical names for the deployment cards. The wiki should be editable by anyone, and I've outlined the naming rules, so should be fairly easy to update with any that I missed.

Also, I updated the sample data to add a canonical name field for the Command Cards as well. Deployment cards JSON has been fixed to correctly allow multiple deployment cards under the army node.

The canonical names for all the command cards that have been released to date and documented on the Imperial Assault Wikia have been added. The only remain items are some sample data, and some libraries to help read and write the format.

Added a json data file that defines the meta data for all the Rebel Deployment cards. This is separate from the iaskirmish-spec itself, but contains a platform neutral representation of all the current deployment cards. Rebels only entered so far, but will work on the others over the weekend. This could be used to help populate a database for other tools. I personally plan to use it as support for html overlays for the streaming software I'm developing.

Thanks @kingargyle for putting this together, I don't have much to add but a few thoughts:

  1. Each JSON array (and .json file) should support 1 army with 1 command deck, if you want to save multiple armies just use multiple JSON files. (I think this is how you'e set it up but wanted to clarify.)
  2. I don't think you need to spec the Form cards for the new Shapeshifter since you don't need to declare them on any army list and they will change from turn to turn.
  3. It might be useful to think about how (if anything) you want to do to handle future errata. So far the errata have mostly changed things you don't track in the master JSON but they could theoretically change deployment point costs, ban certain cards, etc in the future. Perhaps it would be useful to have some sort of version number for example...?
  4. Ideally, VASSAL would have support for this format: @thereisnotry do you know if this is possible? i.e. spawn all of a player's army cards and figures from importing a JSON file? (I'm more interested in importing into VASSAL than out)
Edited by nickv2002

Yeah I'll be changing up the interchange format slightly. To your resume question about the army. Yes each army is represented by one JSON file. I have a seperate file I'm working on that is all the deployments for all factions in one file. I'm going to simply the interchange a bit based off this format but nothing to drastic.

Vassal should be able to support it as the xwing Vassal module supports the XWS spec, so the Imperial Assault Vassal module should be able to as well.

I can add a version number for informational purposes.

Hopefully I'll have more in the near future.

Imperial deployment cards now entered. This contains most of the cards through Heart of the Empire there may be a few missing.

18 hours ago, kingargyle said:

Vassal should be able to support it as the xwing Vassal module supports the XWS spec, so the Imperial Assault Vassal module should be able to as well.

What?!? So you're saying it IS possible?!? YES!!!!!!!

[I'm the guy who does the IA Skirmish vassal mod, btw....]

Wow, I've wanted to do this for almost 2 years now! Several people have approached me about doing this, and I've always been eager to do it, but I just never knew how. Nobody else was ever able to find a way to make it happen either. But if you're saying that there's a way to export a squad file from a builder (such as TableTopAdmiral or something) and then be able to load that directly into the Vassal mod...then I'm all in! This will be the single best update to the mod ever...even better than the dice update a year ago. Awesome!

Thanks. Let's PM to see how this would work and what I need to do on my end....

10 minutes ago, thereisnotry said:

What?!? So you're saying it IS possible?!? YES!!!!!!!

[I'm the guy who does the IA Skirmish vassal mod, btw....]

Wow, I've wanted to do this for almost 2 years now! Several people have approached me about doing this, and I've always been eager to do it, but I just never knew how. Nobody else was ever able to find a way to make it happen either. But if you're saying that there's a way to export a squad file from a builder (such as TableTopAdmiral or something) and then be able to load that directly into the Vassal mod...then I'm all in! This will be the single best update to the mod ever...even better than the dice update a year ago. Awesome!

Thanks. Let's PM to see how this would work and what I need to do on my end....

Yeah, it should be possible.. The XWing Vassal module recently added support for the XWS specification, and they also use a project called xwing-data which contains the card info for pilots, ships, and upgrades. So you might want to start there and check out their code or reach out to their developers to get a starting point.

If vassal modules support java libraries, then my plan is to create a Jackson based library that represents all the data classes for the specification, then it should be a matter of loading in the IA Spec, and then spawning off the appropriate api commands to create the Imperial Assault list.

As for what we need... we need at least one current maintainer of one of the army list builders to support Exporting an army into IA interchange format, so that you could then import the list into Vassal.

@thereisnotry you may be interested in this article with a contact of the person that worked on the xwing module support for xws, https://teamcovenant.com/star-wars-x-wing/x-wing-vassal-module-6-5-0

Edited by kingargyle

All of the faction specific skirmish deployment cards have been entered in the deployment.js file on the project. I'll work on the Neutral deployment cards this week, and also the command cards. Once that is completed, I'll revisit the basic interchange format spec, and get it down to the required fields. With the combination of iaspecname and faction should be able to get the stats. By reducing down to the required information like the XWS spec does, this leaves how the other information is retrieved up to the various army builders or vassal.

Command cards will take a while... there are a ton of them now.

Could you use http://cards.boardwars.eu to get name/pack info for the command cards? Perhaps @jacenat could make a dump of the relevant DB data for you.

43 minutes ago, nickv2002 said:

Could you use http://cards.boardwars.eu to get name/pack info for the command cards? Perhaps @jacenat could make a dump of the relevant DB data for you.

While I applaud the idea, the data in the image DB is very spotty and incosistent. Names are not correctly spelled, there is no info on traits or other card data. You could program a web crawler that constructs stuff from the structure on the image DB, but I fear that is more of a hassle than actually gather the info yourself in a more robust format.

If you need something though, feel free to contact me! I'm not ruling anything out here.

27 minutes ago, jacenat said:

While I applaud the idea, the data in the image DB is very spotty and incosistent. Names are not correctly spelled, there is no info on traits or other card data. You could program a web crawler that constructs stuff from the structure on the image DB, but I fear that is more of a hassle than actually gather the info yourself in a more robust format.

If you need something though, feel free to contact me! I'm not ruling anything out here.

Thanks @jacenat

@kingargyle maybe you could get a DB dump from http://ia-armies.com or http://tabletopadmiral.com/imperialassault/ then? Wouldn't hurt to start working with them now since ideally they should export your format. I think @werdnaegni runs Tabletop Admiral…

I've already reached out to the developer for ia-armies.com and left an issue on his github repository for it. Does anybody know how to get in contact with the tabletopadmiral developers? I've tried reaching out to Startactics IA developer in the past on other things, but never really get a response. All we really need is one of the squad builders to support it.

I've reached out to the creator of TableTopAdmiral to see if he is interested in supporting the export format.

Also, all neutral deployments have been added to deployments.json.

Edited by kingargyle

I'm not sure if you're looking for this type of input at the moment, but I thought I should mention that I noticed a few spelling errors:

UNSHAKABLE is spelled incorrectly (unshakEable)

SCAVENGED WEAPONRY is spelled incorrectly (scavAnged weaponry)

WOOKIEE is spelled with only one E in every instance of the word. Sidenote: I wish that this was actually how it was spelled. Wookiee is so awkward.

I just wanted to mention it since I saw it. Sorry if this is out of place.

(EDIT: noticed and added wookiee note after the original post)

Edited by corydeshane
8 minutes ago, corydeshane said:

WOOKIEE is spelled with only one E in every instance of the word. Sidenote: I wish that this was actually how it was spelled. Wookiee is so awkward.

I remember seeing somewhere on this forum that it was one 'e' in Europe. I don't know if that was meant to be serious or not, but...